一文读懂 YOLOv4:兼顾速度与精度的目标检测王者
·
一、YOLOv4 整体亮点:亲民且强大
YOLOv4 在目标检测领域有着鲜明的优势,最突出的就是 “亲民政策”—— 仅用单 GPU 就能完成训练,且训练效果出色,大大降低了设备门槛,让更多开发者能参与到模型应用中。
从性能来看,在精度与速度的平衡上,YOLOv4 表现亮眼。从 PPT 中的对比图能看到,它在 FPS(帧率)和精度指标上,全面超越 YOLOv3,同时优于 ASFF、Center Mask 等模型,甚至在部分场景下可与 EfficientDet 媲美,真正实现了 “Optimal Speed and Accuracy”。
此外,YOLOv4 的工作量极大,做了全面的消融实验,几乎涵盖了当时能尝试的改进方向,从数据到网络设计,细节打磨十分到位,延续了 YOLO 系列 “细致” 的特点。
二、核心优化思路:两大核心方法
YOLOv4 主要从两个层面进行改进,双管齐下提升模型性能。
- 数据层面:通过各类数据增强手段,扩充训练数据的多样性,让模型在更复杂的场景下也能准确检测,比如 Mosaic 拼接、Random Erase 等。
- 网络设计层面:优化网络结构和损失函数,增强特征提取能力和定位精度,例如引入 SPPNet、CSPNet,以及改进的 IOU 损失系列。
三、关键技术细节:Bag of Freebies(BOF)
BOF 是指只增加训练成本,不影响推理速度,却能显著提升精度的方法,是 YOLOv4 精度提升的重要助力。
1. 数据增强:让训练数据 “更丰富”
- Mosaic 数据 augmentation:参考 CutMix,将四张图像拼接成一张进行训练,能让模型同时学习多个场景的特征,提升泛化能力。
- Random Erase:用随机值或训练集的平均像素值替换图像的部分区域,模拟图像局部缺失的情况,增强模型对局部遮挡的鲁棒性。
- Hide and Seek:根据概率随机隐藏图像中的一些补丁,迫使模型关注图像更广泛的区域,而非依赖局部特征。
- Self-adversarial-training(SAT):通过给图像引入噪音点,增加训练难度,让模型在复杂干扰下仍能准确检测目标。
2. 网络正则化:避免模型 “过度自信”
- DropBlock:区别于传统 Dropout 随机丢弃单个点,DropBlock 会丢弃图像中的一个区域,能更有效地防止模型过拟合,让模型学习更全局的特征。
- Label Smoothing:缓解神经网络过拟合问题。例如原本标签为(0,1),经过处理后变为(0.05, 0.95),降低模型对标签的 “绝对信任”,使簇内特征更紧密、簇间特征更分离。
3. 损失函数:解决 IOU 痛点
- 传统 IOU 损失缺陷:当预测框与真实框无交集时,IOU 值为 0,无法计算梯度;且相同 IOU 值无法反映预测框与真实框的实际位置差异。
- GIOU 损失:引入能包裹预测框与真实框的最小封闭形状 C,通过计算 C 与预测框、真实框交集的占比,解决无交集时梯度为 0 的问题。
- DIOU 损失:在 IOU 基础上,加入预测框与真实框中心点欧式距离的计算,直接优化两者距离,提升定位速度,同时解决 GIOU 的部分缺陷。
- CIOU 损失:进一步考虑目标框的长宽比,综合重叠面积、中心点距离、长宽比三个几何因素,让损失计算更贴合目标检测的实际需求。
四、关键技术细节:Bag of Specials(BOS)
BOS 会增加少许推断代价,但能大幅提升模型精度,主要通过优化网络细节实现。
1. 特征提取优化
- SPPNet:通过多尺度最大池化,让不同输入大小的特征图最终能输出一致的特征,无需在训练时频繁改变输入数据大小,提升特征提取的灵活性。
- CSPNet:将每个 block 的特征图按 channel 维度拆分为两部分,一部分正常经过网络层,另一部分直接拼接至 block 输出,减少计算量的同时,增强特征传递。
2. 注意力机制
- SAM(空间注意力机制):聚焦图像中对检测有用的空间区域,忽略无关背景,提升特征的有效性。
- CBAM(卷积块注意力模块):结合通道注意力和空间注意力,先筛选重要通道特征,再聚焦关键空间区域,进一步优化特征提取效果。YOLOv4 中的空间注意力模块在 CBAM 基础上简化,平衡精度与速度。
3. 特征融合优化
- PAN(路径聚合网络):在 FPN 自顶向下特征传递的基础上,增加自底向上的路径,让底层细节特征更容易传递到顶层,同时通过拼接而非加法融合特征,提升特征利用率。
4. 激活函数与坐标回归
- Mish 激活函数:公式为\(f(α)=α·tanh(ln(1+e^α))\),相比 ReLU 更贴合实际数据分布,虽增加少许计算量,但能提升模型效果。
- 消除网格敏感性:在坐标回归预测值激活函数前加入大于 1 的系数,解决目标在网格边界时,预测值难以表示边界位置的问题。
更多推荐



所有评论(0)