YOLO(You Only Look Once)是深度学习领域最经典、应用最广的目标检测框架之一。这份笔记回顾了 YOLO 从 V1 到 V3 的核心原理,并延伸到 V4、V5 在数据增强、损失函数、网络结构和训练实践上的改进。
一、YOLO 是什么
- 目标检测框架:YOLO 基于深度学习,任务是"在一张图里找出物体在哪、是什么"------既输出定位框(Bounding Box),也输出类别。它也能扩展到图像分割等任务。
- 一步到位的思想:传统方法分多步,YOLO 把整张图一次喂进网络,直接预测出所有框和类别,所以叫"You Only Look Once"。
- 主干网络的演进:YOLO V1 使用 GoogLeNet 作为主干;从 V2 及后续版本开始,统一采用 Darknet 网络结构。
二、核心机制:网格、先验框与多尺度
1. 网格划分
算法把输入图像划分成 S×S 的网格,每个网格负责预测"落在该格子里的物体"。这是 YOLO 把检测转成"逐格回归"的基础。
2. 先验框(Bounding Box)
每个网格会预测多个先验框来定位物体。先验框是预设好的一批"候选框",网络只需学习"怎么微调这些框去贴合真实物体",比从零预测框坐标更稳更快。
3. K-means 提取最优先验框
YOLO V2 引入 K-means 聚类:从训练集的真实框里聚出 5 个最匹配数据分布的先验框尺寸。这里正是把"无监督聚类"用到了"给框定尺寸"上------你之前学的 k-means,在 YOLO 里是真有落点的。
4. 位置偏移机制
YOLO V1 的先验框中心可能跑到网格外。为此引入位置偏移:用特定公式对输出做约束,把中心"拉回"网格内部,定位更准。
5. 感受野与多尺度特征融合
特征图上的每个像素点,对应原始图像的一个区域,这个区域就叫感受野。为了提升小目标检测能力,YOLO 融合不同层级的特征图(如 13×13、26×26、52×52)------小特征图感受野大、看全局,大特征图感受野小、看细节,合起来兼顾大中小目标。
三、YOLO V3 的创新
- 残差网络(ResNet):V3 引入残差结构,缓解深层网络梯度问题,提升模型性能。
- 三个并行检测头:分别负责预测大、中、小目标,通过融合从大到小的不同层级特征图,实现对各类目标的有效检测。
- 多标签分类:用一个物体可能同时有多个属性的场景举例------V3 采用多个独立的逻辑回归分类器,而不是单一的交叉熵损失,避免模型只追求"最大概率"而忽略其他正确标签。
四、YOLO V4 的数据增强
数据增强是在"不增加真实数据"的前提下,让模型见更多样的样本,提升鲁棒性。V4 重点讲了四招:
|-----------------------|-------------------------------|------------------------|
| 增强手段 | 做法 | 作用 |
| 马赛克(Mosaic) | 把多张图片拼接在一起训练 | 提供更多上下文参考,提升复杂场景识别力 |
| 随机遮挡 | 随机遮挡图片部分区域(补丁/噪声) | 模拟遮挡,让模型学会从局部特征识别 |
| DropBlock | 对特征图做区域屏蔽的正则化 | 提升模型泛化能力与鲁棒性 |
| 标签平滑(Label Smoothing) | 标签从绝对的 0/1 改为 0.95/0.05 这类平滑值 | 缓解概率难精确达 0/1 的问题,训练更稳定 |
五、损失函数的演进:IoU → GIoU → DIoU → CIoU
目标检测要用"框和框差多少"来衡量损失。这个度量本身也在不断进化:
IoU 的不足
IoU(交并比)只算预测框和真实框的重合度。三个 IoU 相同的框,形状和位置可能差很多------IoU 无法区分这种质量差异。
GIoU(Generalized IoU)
在 IoU 基础上加一项惩罚:计算预测框与真实框的"最小包围框"之外的额外区域面积。能更好惩罚框体严重偏移或扭曲的情况。
DIoU(Distance IoU)
进一步加入"预测框中心点与真实框中心点的欧氏距离 D"与"最小包围框对角线长度 C"的比值,专门惩罚中心点偏移大的情况。
CIoU(Complete IoU)------最终采用
在 DIoU 基础上,再增加一项惩罚(衡量预测框与真实框的长宽比差异),避免模型预测出长宽比严重不符的框。CIoU 是 V4 实际使用的损失函数。
NMS 的改进:Soft NMS
原 NMS(非极大值抑制)会直接丢弃置信度较低的冗余框。Soft NMS 更"柔和":根据冗余框与最高置信度框的中心距离,动态降低其置信度,从而保留那些置信度不高但位置正确的弱相关目标。
六、网络结构改进:SPPNet / CSPNet / PANet
- SPPNet(空间金字塔池化):在多个尺度上做池化,让网络能接受任意尺寸的输入图像,同时保留全连接层做分类的能力。
- CSPNet(跨阶段局部网络):把输入特征图在通道维度上拆成两部分------一部分进主干做深度特征提取,另一部分直接跳跃连接;最后再融合。这显著减少了主干计算量,实现轻量化又保住准确率。
- PANet(路径聚合网络):通过上采样和下采样层做双向信息传递,让高层语义信息与低层细节信息结合,提升多尺度检测性能。
补充:CSPNet 和 CBAM 都属于"让网络更聪明、更省力"的设计思路------前者靠拆分特征图降本,后者靠注意力机制聚焦重点。
七、注意力机制与 CBAM 模块
注意力机制是近年 AI 的热点,核心思想是"让模型把有限的计算力放在重要的地方"。
- 空间注意力:对特征图的不同区域分配不同权重,让模型更聚焦于重要区域,提升速度与准确率。
- 通道注意力:对特征图的每个通道赋予不同权重,突出重要的特征通道。
- CBAM(卷积块注意力模块):把空间与通道注意力结合起来的注意力模块,能提升分类、检测、分割等任务性能。YOLO V5 的改进模型就借鉴了 CBAM 结构。
- 背景延伸:自注意力(Self-Attention)在 2017 年的 Transformer 模型中大获成功,被认为是大模型时代的基础------你学的 CBAM 是它在一个具体方向上的落地。
八、YOLO V4 的网络细节
- Mish 激活函数:相比 ReLU 和 Leaky ReLU,Mish 能更好地处理负值,避免梯度消失导致的特征丢失,使模型表现更稳定。
- 网格中心点预测优化:V2 用 sigmoid 把输出限制在 0--1,导致预测框中心无法精确落在网格边界。V4 引入一个可调的 λ(lambda)系数,扩大中心点坐标的预测范围,使其能覆盖网格边界,从而提升检测精度。
九、YOLO V5 训练实战(保留用法,去安装)
下面是 V5 训练流程里"怎么准备数据、怎么配参数、怎么看效果"的部分。原文提到的"按 requirement.txt 安装依赖库"属于环境配置,已剔除;其余上手内容保留。
1. 数据准备与格式转换
- 标注:用 LabelMe 等工具为图片中的物体画矩形框,生成 JSON 格式的标签文件。
- 格式转换:用 json_to_yolo 脚本,把 JSON 标签转换成 YOLO 训练所需的 TXT 格式(每行一个目标:类别序号 + 归一化坐标)。
- 数据集结构:按 train/、valid/、test/ 三个文件夹组织,每个文件夹内分别放图片和同名的 label 文件,文件名必须一一对应,数据才能正确读取。
2. train.py 关键参数详解
训练的核心脚本是 train.py,它的参数决定了模型的各个面:
|--------------------|------------------|-----------------------------------|
| 参数 | 含义 | 常见默认值 / 说明 |
| cfg | 指定模型配置文件 | models/yolov5s.yaml,s/m/l/x 选不同大小 |
| data | 指定数据集配置文件(.yaml) | 含训练/验证路径、类别数 nc、类别名 name |
| nc | 数据集中目标类别的数量 | 如 2(mask / unmask) |
| name | 各类别名称 | 如 "mask" 和 "unmask" |
| epochs | 训练轮数 | 默认 300 |
| batch_size | 每次送入 GPU 的图片数量 | 受显存限制 |
| image_size | 输入图片尺寸 | 默认 640×640 |
| resume | 中断后恢复训练 | 可指定从 last.pt 或 best.pt 继续 |
| pretrained_weights | 加载预训练模型 | 从对应链接下载 .pt 文件以提升效果与速度 |
| device | 指定使用的 GPU 设备 | 如 0 表示第 0 号 GPU |
3. 上手示例:配置文件与启动命令
下面是一段"用法示意"(不涉及安装)。先写数据集配置,再启动训练------注意权重文件需自行准备,这里只演示参数怎么填。
---------- 1) 数据集配置 custom.yaml(用法示例) ----------
path: ../datasets/mask
train: images/train
val: images/valid
nc: 2
names: 'mask', 'unmask'
---------- 2) 启动训练(用法示例,非安装步骤) ----------
python train.py \
--img 640 \
--batch 16 \
--epochs 300 \
--data custom.yaml \
--cfg models/yolov5s.yaml \
--weights yolov5s.pt \
--device 0 \
--name my_mask_exp
4. 训练结果评估
- 评估指标:训练完成后会在 runs/ 目录生成评估报告,最重要的指标是 mAP(平均精度均值),尤其看 mAP@50-95------它综合了不同 IoU 阈值下的精度,是衡量模型准不准的核心指标。
- 结果图:result.png 直观展示 mAP 随训练轮数的变化趋势,用来判断模型是否已收敛、达到理想效果。

十一、一句话记住 YOLO
YOLO 把"看一次图就给出所有框和类别"作为核心思想:从 V1 的网格先验框、V2 的 K-means 定尺寸,到 V3 的多尺度检测头、V4 的马赛克增强与 CIoU 损失、再到 V5 的标准化训练流程,整条演进主线就是------让框更准、让特征更全、让训练更稳。记住"网格出框、多尺度融合、CIoU 量误差、注意力提重点"这四句,就抓住了 YOLO 系列的技术脉搏。