尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

零基础学YOLO:目标检测到模型部署的完整实践路线

零基础学YOLO:目标检测到模型部署的完整实践路线 零基础学YOLO最核心的问题不是找教程而是先判断你打算用它完成什么任务。YOLO 是目标检测领域里普及度很高的算法系列网上教程不少但很多人失败不是因为看不懂原理而是顺序不对有人一上来啃网络结构有人直接下载权重跑预测也有人连目标检测、分类、分割的区别都没搞清楚就开始标数据。这篇内容会按一条更适合项目落地的学习路线拆开先判断任务类型再搭环境跑通一个最小 Demo训练自己的数据集最后落到模型评估、导出和部署。如果你正准备用 YOLO 做实际项目或者刚学完 Python 基础想进入计算机视觉这篇文章可以帮你把“我要学什么”和“我要避哪些坑”一次理清。1. 学YOLO之前先把任务类型和数据集边界想清楚1.1 先分清目标检测、实例分割和分类你打算识别图片里的鱼只需要知道鱼在哪里画个框就行这是目标检测。如果你想同时把每条鱼的轮廓边缘抠出来这是实例分割。如果你只想知道图片里有没有鱼不需要位置那其实是图像分类问题。很多零基础教程会直接从检测讲起但实际项目里很多人没想清楚需求。比如你想检测桥梁裂纹最终交付时要的是“裂纹位置”那就必须用目标检测甚至要用分割模型来获取更精细的轮廓。再比如道路积雪检测如果只要知道某个路段是否积雪分类可能更简单但如果你要统计积雪面积就需要分割。需求决定模型选择而不是反过来。YOLO 这个系列既能做检测也有支持实例分割的版本。以 Ultralytics YOLO 为例yolov8n.pt是检测模型yolov8n-seg.pt是分割模型。入门阶段建议先只做检测因为检测的输出结构更简单标注格式更好理解后处理也比较直观。等检测项目跑通了再学分割会顺畅很多。1.2 先定技术路线再决定学哪些内容零基础最容易犯的错误是把“选择模型版本”当成第一步。实际上无论你最终用 YOLOv5、YOLOv8 还是更新的 YOLO11训练和部署的整体流程是相似的准备数据、标注、配置 yaml、开始训练、看指标、导出模型、部署。版本之间的差异主要体现在网络结构、安装方式和部分参数上但这些差异不会影响你建立整体认知。所以我更建议先确认三件事你的图片是什么类型普通照片、无人机航拍、监控视频截图还是红外热成像你的目标物体是大目标还是小目标比如道路积雪是大块区域鱼类在水下可能是小目标。你后续要部署到哪里Windows 电脑、Linux 服务器还是 RK3588 这类边缘设备这三件事会直接影响你学什么重点、预算多少显存、最终怎么导出模型。比如目标很小就要重点学习小目标优化要部署到边缘设备就要提前了解 ONNX、TensorRT、RKNN 这些格式而不能只看训练精度。把这几个问题想明白再去看“YOLO 原理”“网络结构图”才有意义。2. 环境搭建和第一个YOLO Demo推荐按“先预测、再训练、再部署”的顺序2.1 不要求显卡先把CPU推理跑通零基础学 YOLO如果手边没有 NVIDIA 显卡不用先去买硬件。YOLO 的预测阶段对资源要求不高很多版本在 CPU 上也能跑单张图片只是速度慢一些。先跑通推理再考虑训练这个顺序能让你验证环境是否正常也能帮助你理解“模型输入、输出”这个基本闭环。如果你用的是 Ultralytics 官方工具库安装是最简单的pip install ultralytics这里要注意一点Python 环境建议用 Anaconda 分开管理不要直接装在系统 Python 里。Windows 用户推荐使用 Python 3.8 到 3.11 之间的版本避免某些依赖库编译出错。装完以后可以先用命令行测试yolo predict modelyolov8n.pt sourcebus.jpg如果你的目录下没有bus.jpg程序会报找不到文件。可以用任意一张本地图片替代或者先在目录下放一张自己拍摄的照片。第一次运行会自动下载权重文件yolov8n.pt如果网络不稳可以手动下载后放在当前目录模型会自动读取同目录权重。跑通后你会看到终端输出检测到的物体类别、置信度和边界框坐标并在当前目录生成一张带框的结果图片。能走到这一步说明环境基本没大问题。2.2 用命令行和Python脚本两种方式命令行适合快速验证但做项目时更适合用 Python 脚本因为要处理多张图片、生成结构化结果、记录日志。下面这段代码是最小可运行的预测示例from ultralytics import YOLO model YOLO(yolov8n.pt) results model(bus.jpg) # 显示结果图片 results[0].show() # 保存结果图片 results[0].save(filenameresult.jpg)这段代码如果能在你的环境里跑通并且生成的图片里正确画出了检测框就算过了第一关。之后可以试着把输入换成视频文件results model(test.mp4)视频推理需要注意 OpenCV 的编码问题。如果输出视频无法播放先检查编码器是否缺失也可以把保存格式从 MP4 换成 AVI或者调整保存路径的权限。这里最麻烦的往往不是模型而是 OpenCV 和系统编码不兼容。2.3 模型版本选择建议YOLO 的版本很多以 Ultralytics 下的 YOLOv8 和 YOLO11 为例每个版本按模型大小分为n/s/m/l/x几档。n最小速度最快精度也最低x最大精度更高但推理和训练都更慢对显存要求也更高。零基础建议先用yolov8n.pt这样的轻量模型跑完整流程因为训练快、跑得动、容易定位问题。等你把数据准备、训练、评估这些流程都熟悉了再对比更大模型。不要一上来就用x级模型跑训练那样很可能会把大量时间浪费在等待训练和排查显存溢出上。另外不要盲目追新。YOLOv5 仍然在很多工业项目里被大量使用YOLOv8 和 YOLO11 的生态也比较成熟。选择哪个版本要看你的部署平台和同事/社区的熟悉程度。如果只是学习选官方文档支持最全的版本即可。3. 看原理和调参数重点不是背结构而是搞清楚“输入-输出-训练目标”3.1 输入图片到输出框中间到底发生了什么很多教程讲 YOLO 原理时会先丢出网络结构图然后在上面标一堆卷积、C2f、SPPF。零基础看这些容易劝退。我更建议先把一个核心逻辑搞清楚YOLO 把输入图片划分成网格每个网格负责预测若干个候选框并给出每个候选框包含各类别物体的置信度。推理时再用置信度阈值过滤置信度低的框用非极大值抑制NMS去除重叠严重的框。理解到这个程度你就能解释很多常见现象为什么小目标容易漏检因为网格划分和特征图分辨率有限小目标占的网格比例太小时特征可能不足。为什么多个物体重叠时容易出现漏检或误检因为 NMS 会把置信度低但位置重叠的框合并掉。为什么调低置信度阈值后结果变多但也可能出现更多误检因为阈值越低保留的低质量框越多。你不需要手动实现这些但要知道这些机制存在。后面调参、排查问题时这些概念会反复出现。3.2 主干网络、检测头和数据增强的影响“YOLO 更改主干网络”“换检测头有风险吗”这类问题热词里经常出现。它们确实是进阶方向但不适合零基础一开始就碰。主干网络Backbone负责提取图像特征。把主干换成更复杂的网络比如加入一些注意力结构通常会提高精度但计算量也会变大。更重要的是换掉主干之后原本官方提供的预训练权重大概率不能直接使用你可能需要从头训练训练时间会明显变长最终效果也不一定超过原始结构。检测头负责预测边界框和类别。修改检测头也同样有风险网络输出格式可能变化后处理代码也要跟着改。如果只是自己实验还可以接受如果要部署到边缘设备自定义结构很可能遇到算子不支持的问题。所以零基础阶段不要急着改网络结构。先把标准流程跑熟记录好精度和速度的基线再去尝试改进。改进时要固定数据集和评价指标做消融实验否则你根本不知道改动到底产生了正向还是负向效果。数据增强是另一个影响训练结果的因素。Ultralytics 默认开启一些增强策略比如随机翻转、颜色扰动、Mosaic 拼接等。增强策略好处是能提升泛化但如果增强过于激进训练损失下降会变得不稳定。遇到这种情况先不要急着调增强参数先看训练曲线是否正常。3.3 训练参数先记住一组默认值训练 YOLO 涉及的参数很多你不用每个都了解。需要先掌握的参数其实就这么几个参数含义零基础建议epochs训练轮数小数据集可以先设 50-100batch每批图片数显存小就调小常用 8/16/32imgsz输入图片尺寸默认 640显存不足可降到 416lr学习率默认值即可不收敛再研究workers数据加载线程数默认值或 4CPU 训练时不要开太高这几个参数的优先级最高因为它们直接影响训练时间、显存占用和最终效果。比如batch设太大显存不够会报 OOMimgsz设太大即使是 CPU 训练也会变得非常痛苦。参数不是越大越好要根据你的硬件条件逐步调整。4. 用自己的数据集训练YOLO先做一份小样本再考虑完整数据4.1 标注工具和YOLO格式理解 YOLO 的数据格式是新手最容易忽略但又必须认真对待的部分。YOLO 训练数据中每张图片对应一个.txt标签文件标签文件的文件名和图片文件名保持一致放在同名的labels目录下。每一行表示一个目标对象格式是class_id x_center y_center width height其中class_id从 0 开始编号x_center y_center width height都是归一化到 0-1 之间的相对坐标。举个例子如果一张图片宽 1000、高 800一个目标框左上角在 (100, 200)右下角在 (300, 400)那么归一化后的中心 x 是 (100300)/2/1000 0.2中心 y 是 (200400)/2/800 0.375框宽是 (300-100)/1000 0.2框高是 (400-200)/800 0.25。标注工具推荐用 LabelImg 或者 Label Studio。LabelImg 更适合做纯检测标注Label Studio 功能更多也适合做分割和多模态标注。标注完成后一定要抽查几个标签文件看看坐标范围是否正常有没有出现越界或空文件。很多训练报错的根本原因就是标签文件不规范。4.2 数据集目录和yaml配置官方训练入口通常要求你准备一个数据集配置文件一般以.yaml结尾。目录结构建议这样组织datasets/ your_project/ images/ train/ val/ labels/ train/ val/图片和标签文件名一一对应训练集和验证集按 8:2 或 9:1 划分。不要把验证集和训练集放同一个小文件里这样验证结果没有参考意义。对应的 yaml 配置可以写成path: datasets/your_project train: images/train val: images/val nc: 2 names: [fish, plant]这个配置里最容易踩坑的是path。不同版本的 Ultralytics 对路径处理方式有差异有些版本会以 yaml 文件所在目录为基准有些则会用当前运行目录。我建议在项目根目录下运行训练命令路径尽量写绝对路径或者使用相对稳定的相对路径。如果训练一开始就报“AssertionError”或者找不到图片优先检查这里。4.3 开始训练并判断训练是否正常目录结构准备好之后就可以执行训练命令yolo detect train datayour_data.yaml modelyolov8n.pt epochs100 batch16 imgsz640用小数据集训练时建议先用 10-20 张图片跑一个最简版本比如只训练 5 个 epoch验证整个流程能跑通。很多新手一上来就训练 300 轮结果跑了两个小时后才发现数据路径错了纯属浪费时间。训练过程中需要关注几个输出训练损失loss 整体应该是波动下降的不需要追求每一步都下降。验证集精度常见指标有 mAP50、mAP50-95、Precision、Recall。运行日志是否出现大量“WARNING”、漏标、空标签的提示。如果训练指标一直是 0最常见的原因是标签读取不到。优先检查标签文件是否为空、类别编号是否越界、names数量和nc是否一致。还有一点需要知道训练一开始统计的参数量和训练完之后的参数量偶尔不一致不一定是故障可能只是统计口径不同。但如果差距非常夸张比如几倍几十倍就要检查代码或者模型定义是否被中途改过。5. 模型评估、导出和部署项目能不能用要看这一步5.1 mAP和P/R的含义以及验收标准训练完成后模型会在测试图片上输出很多预测框。怎么判断这些框预测得准不准要看三个核心概念Precision精确率预测出来的正样本里真正正确的那部分比例。Recall召回率所有真实目标里被成功预测出来的比例。mAP平均精度均值在不同置信度阈值下 Recall-Precision 曲线围成的面积综合衡量模型精度。你可以这样理解Precision 高说明误检少Recall 高说明漏检少。但两者常常矛盾阈值调高时误检变少但漏检变多调低时反过来。零基础阶段先用 mAP50 作为主要参考。如果 mAP50 能到 0.8 以上模型在常见场景下通常已经可用。但要注意验证集上的 mAP 不代表实际场景一定好用。最好预留一些没参与训练和验证的现场图片单独测试一次。很多项目最终出问题不是因为指标不够而是训练数据和现场数据差异太大比如光线、角度、镜头型号不同。5.2 导出ONNX并解决QT调用和部署格式问题训练完成后需要把 PyTorch 权重导出为部署格式。常见导出命令是yolo export modelbest.pt formatonnx导出 ONNX 的好处是跨平台、语言支持多、可以在 CPU、GPU、边缘设备上运行。热词里有人问“训练模型后如何导出便于 Qt 调用”这个需求很常见。你可以把 ONNX 模型交给 QT 程序配合 ONNXRuntime 加载但前处理、后处理比如 NMS需要自己用 C 或 Python 实现官方导出流程不负责给你写完整业务逻辑。如果你部署在 NVIDIA GPU 上可以用 TensorRT 进一步加速先导出 engine 文件。如果你的目标平台是 RK3588 这类瑞芯微边缘设备则需要转换成 RKNN 格式。不同部署格式的适配程度不同最稳妥的做法是先在 PC 上跑通 ONNX确认推理结果和 PyTorch 基本一致再考虑更复杂的部署格式。部署环境常见格式说明PC CPUONNX ONNXRuntime配置简单适合快速原型NVIDIA GPUTensorRT engine推理速度快但转换配置复杂RK3588 等边缘设备RKNN需要根据平台的算子支持情况调整模型5.3 CPU多进程和速度问题怎么定位瓶颈热词里提到“YOLO CPU 多进程慢 1.4 秒”这背后其实有一个常见误区不是开了多进程就一定更快。CPU 多进程推理时如果每个进程都独立加载一份模型内存占用会成倍增加多个进程争夺 CPU 资源最终速度反而可能变慢。遇到这种情况先不要急着调进程数。按下面顺序排查单进程、单线程推理一张图记录耗时。增加进程数对比总吞吐量。观察 CPU 占用率和内存占用是否出现频繁换页。用一个小模型和更小的imgsz再做对比。如果单帧处理需要 1.4 秒可以考虑从模型体积、输入尺寸、推理后端几个方向优化。比如把模型从m换成n把imgsz从 640 降到 416或者测试 ONNX Runtime 是否比原生 PyTorch 更快。这些优化一定要以实测算出的耗时为标准不要凭感觉判断。5.4 边缘设备部署要注意什么边缘设备的算力和内存通常比 PC 紧张很多。以 RK3588 为例它支持 RKNN 加速但并不是所有 YOLO 网络结构都能顺利转换。如果你修改过检测头或者加了自定义算子转换时很容易报错。零基础阶段建议先用官方标准模型跑通部署流程验证精度和速度后再考虑结构改进。在边缘设备上还要注意图片预处理和后处理不能和训练时不一致。很多人在 PC 上测试效果很好部署到开发板上后检测结果完全不对原因往往是缩放方式、归一化参数或者颜色通道顺序不一致。建议把预处理和后处理代码单独抽出来写成同一个函数确保训练、验证、部署三个环节完全一致。6. 常见问题排查清单和进阶路线6.1 训练报错、不收敛、输出异常从哪个顺序查我在实际项目里遇到问题一般不会马上修改模型结构而是按下面的顺序排查先看数据路径和 yaml 配置。这是最高频错误路径不对会导致空训练、读不到标签或者报 AssertionError。再看标签格式。检查 txt 文件是否为空、坐标是否在 0-1 范围内、类别 id 是否越界。然后检查环境依赖。Python 版本、PyTorch 版本、Ultralytics 版本不匹配可能会产生奇怪错误。检查资源占用。显存不足会 OOMCPU 训练过慢时先调小imgsz和workers。最后再动参数。不要同时改学习率、batch、epochs一次只改一个变量才能判断哪个改动产生了影响。如果输出全为空也不要先怀疑模型坏了。先看输入图片格式是不是正常原图和训练数据是否同分布。很多“模型不能用”的案例最后查出来都是前处理差异导致的。6.2 从单任务到批量任务的工程化思路训练完模型只是第一步项目落地往往要处理成千上万张图片或视频。如果你只是用命令行一张一张跑图片很快就会遇到输出文件覆盖、失败没有记录、不知道哪些图片处理失败等问题。批量处理我建议这样做输入目录和输出目录分开保持原始文件不被修改。输出文件名基于原始文件名追加后缀避免覆盖。每处理完一批记录日志包含成功、失败、耗时、单张图片检测数量。先小批量测试 5-10 张确认输出目录结构正常再全量跑。如果使用多进程先测试不同进程数下的吞吐量和稳定性不要一上来就开最大并发。这些经验不是模型算法本身但对项目落地很重要。很多人学完模型训练却在这类工程问题上卡住。6.3 下一步进阶方向当你已经能独立训练一个模型并能在 PC 或边缘设备上运行后下一步可以根据自己的项目方向选择进阶路线实例分割用 YOLO11-seg 或者 YOLOv8-seg适合需要抠出目标轮廓的场景比如积雪区域面积统计、裂纹形态分析。目标跟踪把 YOLO 检测和 ByteTrack、DeepSORT 等跟踪算法结合起来适合视频监控场景。多模态或者大语言模型结合如果要处理更复杂的语义信息可以了解多模态检测但不建议零基础直接跳过去。模型压缩和加速量化、剪枝、蒸馏目的是在低算力设备上获得更快的速度但需要扎实的工程经验。结构改进比如更换主干网络、修改检测头但一定要先建立基线再做对比实验。进阶方向很多但共同原则是一样的先有固定数据集再有可复现的实验记录最后才是网络改动。没有数据支撑的结构改动很难说明是改进还是偶然波动。如果你准备开始自己的第一个 YOLO 项目我建议不要追求“把原理全部背下来”而是按单条推理、小样本训练、评估、导出、真实现场数据验证的顺序做一遍。这样踩过的坑比看十篇教程都有用。很多问题看起来像模型能力不够最后仔细一查往往是路径、格式、资源和输入数据的问题。先把这些基础打稳再考虑换网络结构、做模型压缩项目会顺利很多。
返回列表