文章

YOLO系列技术概览

YOLO系列技术概览

YOLO系列技术概览

梳理 YOLO(You Only Look Once) 系列名称含义、演进脉络、detect / segment / classify / pose 等任务差异,以及训练与推理流程、数据格式、指标与常见踩坑。工程实践以 Ultralyticspip install ultralytics)为主线。

参考与延伸阅读


目录


1. 名字全称与含义

YOLO = You Only Look Once(「只看一次」)。

直观含义:相对早期「先找候选区域、再分类」的 两阶段 检测器,YOLO 把 整幅图 送进网络,在 一次(或少数几次)前向 中同时给出 目标在哪里、是什么(检测),后来家族又扩展到 分割、分类、姿态 等任务。

「只看一次」强调的是 计算路径更直接、利于实时推理,并不是说所有变体都完全没有多尺度或后处理;不同版本在 网络结构、损失、解码与 NMS 上差异很大。


2. 系列演进简史

下列为 常见公开脉络

时期代表简述
2015–2018YOLOv1–v3Joseph Redmon、Ali Farhadi 等;单阶段检测普及化。
2020 前后YOLOv4、YOLOv5v4 侧重论文与 Darknet 生态;Ultralytics YOLOv5 在工程化、部署上影响大。
2022–2023YOLOv6(美团)、YOLOv7、YOLOv8YOLOv8(Ultralytics) 统一了 detect / segment / classify / pose 等 任务入口
2024 起YOLOv9、YOLOv10、YOLO11YOLO26多尺度、端到端(部分版本弱化或改造 NMS)、边缘与 CPU 优化等方向;Ultralytics 持续发布新骨干与预训练权重。

工程上常用的一条线pip install ultralytics 后使用 yolo ...YOLO(...),属于 Ultralytics 发行线(如 YOLOv8、YOLO11、YOLO26 等)。许可多为 AGPL-3.0,商用需自行评估或联系企业授权,详见官方说明。


3. YOLO 任务类型

同一品牌下,常见 任务(task) 如下(名称以 Ultralytics 为例):

任务模型在学什么输入 / 输出直觉典型应用举例
检测(detect)框的位置与尺度(通常矩形框)+ 框内类别输入整图;输出若干 框 + 类 + 置信度行人/车辆检测、缺陷定位、先框出 ROI 再下游处理
分割(segment)实例或区域的轮廓(mask) + 类别输入整图;输出 mask(或 polygon) 与类实例抠图、轮廓与面积分析
分类(classify)整图的全局语义(整张图属于哪一类)输入整图(常 resize);输出 Top-K 类别与概率整图品类识别、质检 OK/NG
姿态(pose)等关键点坐标 + 类输出关键点人体姿态、关键点检测

检测 vs 实例分割(segment)对照(便于选型;实现细节随 YOLO 版本略有差异):

对比维度YOLO 目标检测(detect)YOLO 图像分割(实例分割,segment)
输出结果边界框(Bbox) + 类别 + 置信度像素级掩码(Mask) + 类别 + 置信度(常伴随框或隐式实例)
任务本质识别并定位目标,用矩形近似范围;不直接建模逐像素轮廓在「实例级」意义上 区分前景与背景像素轮廓更贴物体形状;Ultralytics 系多为 单阶段联合 预测框与 mask
模型结构相对轻:Backbone + Neck + Detect Head更重:在检测分支基础上增加 Mask 分支(如与 原型 / Proto 特征结合生成稠密 mask)
数据标注矩形框,成本低、速度快多边形 / 逐像素 mask 等,沿边缘标注,成本更高
计算资源一般 更快显存更低一般 更慢显存更高

辨析

  • 检测:监督信号主要是 框与类,输出是图像坐标系下的 矩形范围
  • 分类:监督信号是 整图类别不提供 目标框;若目标只占画面一小部分,常与 先裁剪 ROI 联用。
  • 分割的 mask:监督 哪些像素属于目标实例,用于 边缘、面积、形状 等分析。详见 §4

4. Mask 掩码详解

在目标检测、实例分割相关文档里,mask 出现频率很高。本节单独说明其含义、与检测框的区别,以及训练与推理中各自扮演什么角色。

4.1 Mask 是什么

Mask(掩码) 不是日常说的「口罩」,而是一张与图像 同尺寸(或成比例缩小) 的二维图,用来回答:

这张图里,每一个像素点,算不算某个目标?

常见记法:

像素取值含义
1(或可视化时的 255 / 彩色)属于该目标(前景)
0不属于该目标(背景)

因此,mask 描述的是 物体轮廓以内的真实形状,比矩形框 更贴边。§3 中的 实例分割(segment) 任务,核心输出之一就是 mask(或等价的多边形轮廓)。

4.2 与「检测框」差在哪

 目标检测(detect)实例分割(segment,带 mask)
主要输出矩形框 + 类别 + 置信度逐像素 mask + 类别(常还带框)
形状表达用框包住物体,框的四个角常含背景沿物体真实边缘
典型用途大致位置、尺度、先框 ROI抠图、算面积、看轮廓与形状

记忆:检测回答「大概在哪一块矩形里」;mask 回答「哪些像素才算这个物体」。

4.3 具体例子:街景里的猫和杯子

假设有一张 800×600 的照片:一只 坐在沙发上,旁边有一个 杯子

(1)只做目标检测

模型可能输出:

  • 猫:框 (100, 80, 350, 420),类别 cat,置信度 0.92
  • 杯子:框 (500, 300, 580, 450),类别 cup,置信度 0.88

框是 矩形。猫耳朵、尾巴在框内,但框的四个角里还会包含 沙发、地板 等背景像素——它们在框内,却不是猫。

(2)做实例分割(带 mask)

除类别外,每个物体各有一张逻辑上的 800×600 mask(实现中可能先低分辨率预测再放大):

  • 猫的 mask:猫身上像素为 1,沙发、地板、杯子为 0
  • 杯子的 mask:杯子轮廓内为 1,其余为 0

可视化时,常把 mask 涂成半透明色块叠在原图上——你看到的 贴边色块 就是 mask。

(3)Mask 在业务里能做什么

  1. 抠图:用猫的 mask 作模板,只保留猫、背景透明 → 换背景、做素材。
  2. 算面积:统计 mask 中为 1 的像素数 → 「猫占画面百分之几」。
  3. 比形状:比较两只猫谁更大、轮廓是否完整(单靠框很难做到这么细)。
  4. 训练监督:标注员勾多边形(如 LabelMe),转成 mask 或多边形标签,告诉网络「这些像素才是猫」。

4.4 训练时 vs 推理时的 mask

阶段mask 的角色
训练(真值 mask)人工或工具标好的「标准答案」:每个像素是否属于某实例。损失函数比较 预测 mask真值 mask,分割任务常用 Mask IoU(两块区域重叠有多好)。
推理(预测 mask)模型 猜出来 的 mask,用于抠图、统计、叠图显示或接下游规则。

4.5 为什么检测文档里也会出现 mask

  • 实例分割(yolo segment 里,mask 是核心输出之一;网络中的 Mask 分支 专门负责像素级结果(见 §3 对照表)。
  • 部分流程是 先检测框、再在框内分割(两阶段);Ultralytics YOLO 的 segment 多为 一次前向 同时出框 + mask。
  • 纯检测(detect)labels/*.txt 只有框,没有 mask;mask 出现在 分割标注分割模型输出 中(见 §7.2)。

4.6 语义分割 vs 实例分割

类型每张图举例
语义分割每个像素一个 类别(不区分「两只猫」)像素标成「猫 / 狗 / 路」,两只猫同属「猫」
实例分割每个 物体实例 一张 mask猫 A 一张 mask,猫 B 另一张 mask

YOLO 的 segment 任务一般指 实例分割;与 §3 中「每个目标一个 mask」的表述一致。

4.7 一句话总结

Mask = 一张「像素级属于 / 不属于」的图。 检测用框说「大概在哪」;分割用 mask 说「形状边界在哪」。上文街景例子里,框只能框住「猫所在的矩形区域」,mask 才能标出「猫毛覆盖的每一个像素」。


5. YOLO 训练过程

下面描述 典型监督学习训练循环(检测/分割/分类在 数据与损失 上不同,骨架相似):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
读取配置与数据描述(如 data.yaml 或 classify 目录结构)
    ↓
构建数据集:读图、读标签(框 / 多边形 / 类文件夹名)
    ↓
数据增强(随机翻转、色彩、缩放、mosaic 等,依任务与配置)
    ↓
按 batch 组 batch,送入网络前向
    ↓
网络输出与标签对齐,计算损失(检测:框+类;分割:mask+类;分类:交叉熵等)
    ↓
反向传播,更新权重(优化器 + 学习率策略)
    ↓
按 epoch 在验证集上评估(mAP、mask IoU、accuracy 等)
    ↓
保存 checkpoint(best / last),可选早停(patience)
    ↓
结束或继续下一 epoch

需要留意的环节:数据是否对齐、增强是否过强、验证集是否 泄漏(同图重复出现在 train/val)、imgsz 与标注几何是否一致、以及 任务类型标签格式 是否匹配。


6. YOLO 推理过程

1
2
3
4
5
6
7
8
9
10
11
12
13
输入(单图 / 目录 / 视频 / 流)
    ↓
预处理:resize、letterbox(保持比例 pad)、归一化等(须与训练/导出约定一致)
    ↓
模型前向,得到原始预测(检测:多尺度特征图上的候选;分割:再加 mask 分支;分类:logits)
    ↓
解码:将网络输出还原为 图像坐标系 下的框、mask 或类别概率
    ↓
检测常见:置信度过滤、NMS(非极大值抑制) 去重框(部分新模型弱化或省略 NMS,依版本而定)
    ↓
后处理:缩放回原始图像尺寸、裁剪可视化、业务阈值与回退策略
    ↓
输出:标签、置信度、可选可视化图

工程要点:推理时的 letterbox / imgsz 若与训练不一致,且未正确 反变换坐标,框会 跑偏;分类则可能出现 分布偏移、精度下降


7. 训练数据格式与字段

不同任务 格式不同。下面用 Ultralytics 常见约定说明 直觉(细节以官方为准)。

7.1 目标检测(YOLO txt,每图一个 *.txt

  • 每行class_id x_center y_center width height(均为相对图像宽高的 0~1 归一化)。
  • 为何归一化:同一套标注可配合不同 resize / letterbox,训练代码里会再映射到当前张量网格。
  • class_id:非负整数,与 data.yamlnames 列表下标一致。
  • 多目标:多行即多个实例。

不需要 在检测 txt 里写 mask;那是分割任务的事。

7.2 实例分割(YOLO 分割标签)

  • 常见在 txt 中除 class_id 外,带 归一化多边形顶点(一串 x y)。
  • 用途:监督网络预测 实例轮廓,而不仅是矩形框;评价常用 mask IoU 等。

7.3 图像分类(ImageFolder 式)

  • 目录结构:train/类名A/xxx.jpgval/类名A/...
  • 类别信息 就是 文件夹名(或工具生成的等价结构)。
  • 为何不需要框:假设 整图 对应单一类别标签(或主类别)。

7.4 与 COCO、LabelMe 等的关系

  • COCO JSON:大图清单 + 每张图多个 annotation(框、分割 polygon、类别 id)。
  • LabelMe JSONshapes 多边形、label 字符串等,多用于 标注工具落盘
  • 工程上:常 用 LabelMe/COCO 存真值 脚本转换为 YOLO txt 或分类文件夹,供 yolo train 读取。

7.5 与 §4 的关系

实例分割标签中的多边形顶点,用于构造 §4 所述的 mask(或等价监督信号)。检测 任务的 txt 不包含 mask;需要轮廓或抠图时选 segment 并阅读 §4。


8. 官方中文文档与社区入口

链接以撰写时可访问的 官方与常见社区 为主;若改版请从官网导航重新进入。

类型链接说明
Ultralytics 中文文档首页https://docs.ultralytics.com/zh/YOLOv8 / YOLO11 / YOLO26 等 安装、训练、预测、导出 的主文档。
快速入门(中文)https://docs.ultralytics.com/zh/quickstart/环境、首次运行。
YOLO 许可说明(中文页内章节)https://docs.ultralytics.com/zh/#yolo-licenses-how-is-ultralytics-yolo-licensedAGPL / 企业许可概览。
Ultralytics GitHubhttps://github.com/ultralytics/ultralytics源码、Issue、Release。
Ultralytics 讨论区 / 论坛见中文文档页脚 Discord、论坛 等入口排错、版本问题。
历史论文与原始 YOLO检索 You Only Look Once Redmon 等理解「单阶段检测」思想;与当今 Ultralytics 实现已 非同一套代码

中文社区:除官方 Discord/论坛外,可在 知乎、CSDN、Bilibili 等检索「Ultralytics YOLOv8 训练」「YOLO 分割 数据格式」等;注意甄别 版本号许可证,以官方为准。

文档左侧导航常见主题(名称以站点为准):

主题说明
Modestrain / val / predict / export
Tasksdetect、segment、classify、pose、obb
Models各代 YOLO 与预训练权重说明
DatasetsCOCO 等格式与自定义数据说明

9. 损失与评价指标

任务损失在管什么(白话)验证时常看的指标
检测框是否对准真值、类别是否对、背景是否误检mAP(多阈值 IoU 下平均精度,再对类/尺度综合);单类可看 Precision / Recall
分割像素级是否贴边、实例是否分对mask mAPMask IoU;可与框指标并列
分类整图类别是否对Top-1 / Top-5 Accuracy、混淆矩阵、宏平均 F1(类不平衡时)

IoU(交并比):预测框(或 mask)与真值 重叠程度,0~1,越大越准。mAP 把「多类、多阈值」压成 一个数 便于比模型,但 业务上 仍建议按类看报表。


10. 检测任务的 dataset.yaml 常见字段

Ultralytics 检测/分割 常用一个 yaml 指向数据根(字段名以当前版本文档为准):

字段含义为何需要
train / val训练、验证 图像目录(常含 images/train告诉 DataLoader 去哪读图
nc类别数网络最后一层维度与 loss 对齐
names类名列表,下标即 class_id可视化、导出、与 txt 标签一致

建议train/val 使用 绝对路径,避免换工作目录后找不到文件。分割任务通常 同一份 yaml,权重换为 *-seg.pt


11. 几个高频名词

名词白话
Backbone从图像抽 多尺度特征 的主干网络(如 CSP 类结构)。
Neck(FPN / PAN 等)把不同尺度特征 融合,让小目标和大目标都有好特征。
Head在特征图上 预测 框/类/mask/关键点。
Anchor / anchor-free老 YOLO 常用先验框;新 Ultralytics 多为 anchor-free 解码,细节随版本变。
多尺度训练 / 推理不同 imgsz 或随机尺度,提高 尺度泛化
NMS同一目标附近多个框,只保留置信度最高的代表框,抑制重复框。

12. 常用训练超参与早停

超参作用注意
epochs最大训练轮数patience 配合;过小欠拟合,过大可能过拟合
patience早停:验证指标若干轮不提升则停止patience ≥ epochs,早停几乎不会在跑满前触发
imgsz输入边长(常为正方形)与速度、显存、小目标精度权衡;推理宜与训练策略对齐
batch批大小显存不够就减小;过小可能影响 BN 稳定性
workers数据加载进程数Windows 上过大偶发卡住,可试 0
amp混合精度省显存、加速;个别环境可关 amp=False 排错

13. 导出与部署

训练得到 best.pt 后,常见需求:

1
2
3
4
5
PyTorch .pt(训练/同环境推理)
    ↓  export
ONNX / TensorRT / OpenVINO / CoreML 等
    ↓
端侧、服务器、移动端推理框架加载

要点:导出时的 输入尺寸、归一化、NMS 是否在图内 与部署代码要一致;详见 Ultralytics 文档 Export 章节(中文站同路径)。


14. 常见踩坑

  1. 标签与图不同名 / 路径错:检查 imageslabelsbasename 一一对应;yaml 用绝对路径。
  2. 类 id 与 names 错位:训练前打印或抽样核对 第 0 类到底是谁
  3. 整图分类却喂了检测数据:classify 要 文件夹类名,不是 labels/*.txt
  4. 训练与推理场景不一致:例如训练用近景、推理用远景或不同分辨率 → 域差;可补目标场景数据微调,或检测裁 ROI 后再分类。
  5. 验证集泄漏:同一张图或同一主体同时出现在 train 与 val → 指标 虚高
  6. 坐标系搞混:letterbox 后预测框要 映射回原图 再用于裁切或叠加显示。

15. 小结

YOLO单阶段、一次前向 见长,Ultralytics 线把 detect / segment / classify / pose 统一到 yolo 命令。选型:要框用 detect,要轮廓用 segment 并理解 mask(§4),要整图类用 classify。落地链路通常是 标注(如 LabelMe)→ 转 YOLO 格式 → dataset.yaml + yolo trainpredict / export;注意 许可(AGPL)train/val 划分letterbox 坐标反变换版本对应的官方中文文档

本文由作者按照 CC BY 4.0 进行授权