YOLOv4 学习笔记
一、YOLOv4 整体定位与核心特点
YOLOv4 虽更换了作者,但延续了 YOLO 系列 “平衡检测速度与精度” 的核心精髓,同时以 “工程实用性” 为核心设计目标,是一款兼顾性能与落地成本的目标检测算法。其最显著的标签的是 “亲民” 与 “细致”:
- 亲民性:支持单 GPU 训练,无需多卡集群,降低了设备门槛,便于个人或中小企业使用;
- 细致性:从数据层面到网络设计层面,整合了大量前沿优化方法,且通过全面的消融实验验证每个模块的有效性,工作量极大;
- 核心定位:文档中用 “CV 界劳模” 形容其设计密度 —— 读透 YOLOv4 相关内容,相当于梳理了近年目标检测领域的诸多关键改进思路。
二、YOLOv4 性能表现(速度与精度平衡)
在 COCO 数据集的对比实验中,YOLOv4 展现出远超同期算法的 “速度 - 精度性价比”,尤其在实时检测场景(FPS 较高时)优势显著。
关键性能对比(基于 V100 显卡测试)
算法 | mAP(精度指标) | FPS(速度指标,帧 / 秒) | 核心优势 |
---|---|---|---|
YOLOv4(主力版本) | ~46-48 | 30-70 | 速度与精度均衡,无明显短板 |
YOLOv3 | ~32-36 | 22-51 | 速度有优势,但精度差距大 |
EfficientDet(D0-D4) | ~34-48 | 10-50 | 高精度版本(D4)速度慢,低精度版本(D0)精度低 |
ASFF、ATSS 等改进算法 | ~34-42 | 20-60 | 精度或速度单维度优,但综合性价比低于 YOLOv4 |
从性能曲线图可见:当 FPS 处于 “实时区间”(30-70 FPS)时,YOLOv4 的 mAP 显著高于 YOLOv3、ASFF 等算法;即使与高精度的 EfficientDet 相比,相同精度下 YOLOv4 的速度更快,相同速度下精度更高。
三、YOLOv4 核心贡献
YOLOv4 的价值不仅是 “提升性能”,更在于 “系统化整合优化思路”,其核心贡献可归纳为三点:
- 降低落地成本:单 GPU 训练方案打破 “高性能 = 高设备成本” 的固有认知,让优质算法更易落地;
- 两大核心优化框架:提出 “Bag of Freebies(BOF)” 和 “Bag of Specials(BOS)” 两大模块分类,分别对应 “无推理成本的精度提升方法” 和 “低推理成本的精度提升方法”,为后续算法设计提供了清晰的优化思路(至 PPT 第 15 页,重点展开 BOF);
- 全面的消融实验:对每个引入的改进模块(如数据增强、损失函数、正则化方法)单独测试,验证其有效性,避免 “盲目堆砌模块”,让算法设计更具科学性。
四、Bag of Freebies(BOF):无推理成本的精度提升
“Bag of Freebies(BOF)” 是 YOLOv4 的核心优化模块之一,定义为 “仅增加训练阶段的计算成本,不影响推理速度” 的改进方法 —— 训练时通过更复杂的数据处理或正则化策略提升模型泛化能力,推理时仍保持原有的计算流程,完美兼顾 “精度提升” 与 “推理效率”。至 PPT 第 15 页,重点涵盖 “数据增强”“网络正则化”“类别不平衡与损失函数初步优化” 三类方法。
1. 数据增强:扩大训练数据多样性
数据增强的核心目标是 “让模型见更多样的场景”,从而减少过拟合,提升对真实环境中干扰(如光照变化、物体遮挡)的鲁棒性。YOLOv4 整合了多种高效数据增强手段,且优先选择 “不破坏目标完整性、但能丰富场景多样性” 的方法:
(1)Mosaic 数据增强(核心创新)
- 原理:参考 CutMix 思路,将4 张不同的训练图像拼接成 1 张图像(通过随机缩放、裁剪、翻转后拼接),同时调整对应的标注框坐标;
- 优势:
- 扩大训练数据量:1 张拼接图相当于 4 张原始图的场景信息,且无需额外采集数据;
- 提升小目标检测能力:拼接后图像中会包含更多小尺寸物体,迫使模型学习小目标特征;
- 降低 batch 依赖:单张图像包含多种场景,即使小 batch 训练也能保证数据多样性。
(2)Random Erase(随机擦除)
- 原理:在训练图像中随机选择一个矩形区域,用 “随机像素值” 或 “训练集所有图像的平均像素值” 替换该区域,模拟 “物体局部遮挡” 场景;
- 作用:避免模型过度依赖物体的局部特征(如检测 “猫” 时只看耳朵),迫使模型学习物体的全局特征,提升抗遮挡能力。
(3)Hide and Seek(隐藏与寻找)
- 原理:按一定概率在图像中随机隐藏多个 “小补丁区域”(而非单个大区域),每个补丁的位置和大小随机;
- 与 Random Erase 的区别:Random Erase 是 “局部大区域遮挡”,Hide and Seek 是 “分散小区域遮挡”,更贴近真实场景中 “物体被多个小物体遮挡” 的情况(如行人被树叶、广告牌碎片遮挡)。
(4)Self-adversarial-training(SAT,自对抗训练)
- 原理:训练过程中,先让模型对当前图像 “预测错误”(通过引入微小噪音,让模型误判物体类别或位置),再以 “修正后的错误图像” 作为新的训练数据,相当于 “给模型增加游戏难度”;
- 作用:提升模型对 “噪声干扰” 的鲁棒性 —— 真实场景中图像可能存在模糊、压缩噪声等问题,SAT 能让模型在这类干扰下仍保持检测稳定性。
2. 网络正则化:缓解过拟合
正则化的核心目标是 “限制模型的学习能力,避免其记忆训练数据的噪声”。YOLOv4 放弃了传统的 Dropout(随机失活单个神经元),转而采用更适合目标检测的 “区域级正则化” 方法:
DropBlock(区域失活)
- 原理:不同于 Dropout“随机删除单个神经元(点级失活)”,DropBlock 是 “随机删除一个连续的矩形区域”(该区域内的所有神经元均失活);
- 为什么优于 Dropout:
- 目标检测依赖 “空间连续特征”(如物体的轮廓、纹理是连续的),Dropout 破坏了特征的空间连续性,可能导致模型学习碎片化特征;
- DropBlock 模拟 “物体局部缺失” 的场景,既限制了模型对局部特征的过度依赖,又保留了大部分空间连续特征,更符合检测任务的需求。
3. Label Smoothing(标签平滑):缓解模型 “过度自信”
- 背景:传统目标检测中,类别标签采用 “one-hot 编码”(如 “猫” 标注为 [0,1],“狗” 标注为 [1,0]),这种硬标签会让模型 “过度自信”—— 训练后期模型预测概率接近 0 或 1,导致泛化能力下降(遇到新场景时易误判);
- 原理:将硬标签转换为 “软标签”,公式为:
软标签 = 硬标签 × (1 - ε) + ε / 类别数
(其中 ε 为平滑系数,通常取 0.1);示例:原 “猫” 的硬标签 [0,1],经 Label Smoothing 后变为 [0.05, 0.95](ε=0.1,类别数 = 2); - 作用:
- 降低模型对 “正确类别” 的过度自信,迫使模型学习更鲁棒的特征;
- 从特征分布上看,能让 “同类特征簇更紧密、不同类特征簇更分离”,提升分类边界的稳定性。
4. 类别不平衡与 IOU 损失的初步问题
YOLOv4 还关注到目标检测中的 “类别不平衡” 问题(如训练集中 “行人” 样本多、“交通标志” 样本少),但至 PPT 第 15 页,重点先聚焦 “IOU 损失的缺陷”—— 这是后续损失函数优化(GIoU、DIoU 等)的基础:
- IOU 损失的定义:通常用
1 - IOU
作为损失(IOU 是预测框与真实框的交并比,范围 [0,1]),IOU 越大,损失越小; - 核心缺陷:
- 无重叠时梯度失效:当预测框与真实框完全无交集(IOU=0)时,损失值固定为 1,梯度为 0,模型无法通过梯度下降调整预测框位置(即 “不知道往哪动才能靠近真实框”);
- 相同 IOU 无法区分位置差异:当两个预测框与真实框的 IOU 相同时,无法通过 IOU 判断 “哪个预测框更接近真实框的位置或大小”,导致模型优化方向不精准。