YOLO系列技术概览
YOLO系列技术概览
梳理 YOLO(You Only Look Once) 系列名称含义、演进脉络、detect / segment / classify / pose 等任务差异,以及训练与推理流程、数据格式、指标与常见踩坑。工程实践以 Ultralytics(
pip install ultralytics)为主线。
参考与延伸阅读:
- Ultralytics 中文文档:https://docs.ultralytics.com/zh/
- 快速入门:https://docs.ultralytics.com/zh/quickstart/
- 许可说明:https://docs.ultralytics.com/zh/#yolo-licenses-how-is-ultralytics-yolo-licensed
- Ultralytics GitHub:https://github.com/ultralytics/ultralytics
目录
- 1. 名字全称与含义
- 2. 系列演进简史
- 3. YOLO 任务类型
- 4. Mask 掩码详解
- 5. YOLO 训练过程
- 6. YOLO 推理过程
- 7. 训练数据格式与字段
- 8. 官方中文文档与社区入口
- 9. 损失与评价指标
- 10. 检测任务的 dataset.yaml
- 11. 几个高频名词
- 12. 常用训练超参与早停
- 13. 导出与部署
- 14. 常见踩坑
- 15. 小结
1. 名字全称与含义
YOLO = You Only Look Once(「只看一次」)。
直观含义:相对早期「先找候选区域、再分类」的 两阶段 检测器,YOLO 把 整幅图 送进网络,在 一次(或少数几次)前向 中同时给出 目标在哪里、是什么(检测),后来家族又扩展到 分割、分类、姿态 等任务。
「只看一次」强调的是 计算路径更直接、利于实时推理,并不是说所有变体都完全没有多尺度或后处理;不同版本在 网络结构、损失、解码与 NMS 上差异很大。
2. 系列演进简史
下列为 常见公开脉络:
| 时期 | 代表 | 简述 |
|---|---|---|
| 2015–2018 | YOLOv1–v3 | Joseph Redmon、Ali Farhadi 等;单阶段检测普及化。 |
| 2020 前后 | YOLOv4、YOLOv5 | v4 侧重论文与 Darknet 生态;Ultralytics YOLOv5 在工程化、部署上影响大。 |
| 2022–2023 | YOLOv6(美团)、YOLOv7、YOLOv8 | YOLOv8(Ultralytics) 统一了 detect / segment / classify / pose 等 任务入口。 |
| 2024 起 | YOLOv9、YOLOv10、YOLO11、YOLO26 等 | 多尺度、端到端(部分版本弱化或改造 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 在业务里能做什么
- 抠图:用猫的 mask 作模板,只保留猫、背景透明 → 换背景、做素材。
- 算面积:统计 mask 中为 1 的像素数 → 「猫占画面百分之几」。
- 比形状:比较两只猫谁更大、轮廓是否完整(单靠框很难做到这么细)。
- 训练监督:标注员勾多边形(如 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.yaml里names列表下标一致。 - 多目标:多行即多个实例。
不需要 在检测 txt 里写 mask;那是分割任务的事。
7.2 实例分割(YOLO 分割标签)
- 常见在 txt 中除 class_id 外,带 归一化多边形顶点(一串
x y)。 - 用途:监督网络预测 实例轮廓,而不仅是矩形框;评价常用 mask IoU 等。
7.3 图像分类(ImageFolder 式)
- 目录结构:
train/类名A/xxx.jpg、val/类名A/...。 - 类别信息 就是 文件夹名(或工具生成的等价结构)。
- 为何不需要框:假设 整图 对应单一类别标签(或主类别)。
7.4 与 COCO、LabelMe 等的关系
- COCO JSON:大图清单 + 每张图多个 annotation(框、分割 polygon、类别 id)。
- LabelMe JSON:
shapes多边形、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-licensed | AGPL / 企业许可概览。 |
| Ultralytics GitHub | https://github.com/ultralytics/ultralytics | 源码、Issue、Release。 |
| Ultralytics 讨论区 / 论坛 | 见中文文档页脚 Discord、论坛 等入口 | 排错、版本问题。 |
| 历史论文与原始 YOLO | 检索 You Only Look Once Redmon 等 | 理解「单阶段检测」思想;与当今 Ultralytics 实现已 非同一套代码。 |
中文社区:除官方 Discord/论坛外,可在 知乎、CSDN、Bilibili 等检索「Ultralytics YOLOv8 训练」「YOLO 分割 数据格式」等;注意甄别 版本号 与 许可证,以官方为准。
文档左侧导航常见主题(名称以站点为准):
| 主题 | 说明 |
|---|---|
| Modes | train / val / predict / export |
| Tasks | detect、segment、classify、pose、obb |
| Models | 各代 YOLO 与预训练权重说明 |
| Datasets | COCO 等格式与自定义数据说明 |
9. 损失与评价指标
| 任务 | 损失在管什么(白话) | 验证时常看的指标 |
|---|---|---|
| 检测 | 框是否对准真值、类别是否对、背景是否误检 | mAP(多阈值 IoU 下平均精度,再对类/尺度综合);单类可看 Precision / Recall |
| 分割 | 像素级是否贴边、实例是否分对 | mask mAP、Mask 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. 常见踩坑
- 标签与图不同名 / 路径错:检查
images与labels的 basename 一一对应;yaml 用绝对路径。 - 类 id 与
names错位:训练前打印或抽样核对 第 0 类到底是谁。 - 整图分类却喂了检测数据:classify 要 文件夹类名,不是
labels/*.txt。 - 训练与推理场景不一致:例如训练用近景、推理用远景或不同分辨率 → 域差;可补目标场景数据微调,或检测裁 ROI 后再分类。
- 验证集泄漏:同一张图或同一主体同时出现在 train 与 val → 指标 虚高。
- 坐标系搞混:letterbox 后预测框要 映射回原图 再用于裁切或叠加显示。
15. 小结
YOLO 以 单阶段、一次前向 见长,Ultralytics 线把 detect / segment / classify / pose 统一到 yolo 命令。选型:要框用 detect,要轮廓用 segment 并理解 mask(§4),要整图类用 classify。落地链路通常是 标注(如 LabelMe)→ 转 YOLO 格式 → dataset.yaml + yolo train → predict / export;注意 许可(AGPL)、train/val 划分、letterbox 坐标反变换 与 版本对应的官方中文文档。
