初识YOLOv4
首先从论文中的效果图可以看出,在平均精度(mAP)和速度上,YOLOv4远超YOLOv3版本(mAP提升了大约10个点,速度提升了大约12%),在精度差不多的情况下YOLOv4比EfficientDet快两倍。在MS COCO 数据集实现 43.5% AP (65.7% AP50 ), 速度也更快了,在Tesla V100 GPU上 ∼65 FPS。
目前工业界比较常用的目标检测算法有SSD、RetinaNet、Mask R-CNN、Cascade R-CNN、YOLOv3等等,而YOLOv4的提出可以说是继往开来。
而且论文中多次强调,这是一个平衡精度和速度的算法。大的模型,例如Mask R-CNN和Cascade R-CNN在比赛中可以霸榜,但速度太慢。小的模型速度快,但精度又不高。另外,当今的不少模型因为太大,需要很多GPU进行并行训练,而YOLOv4可以在一块普通的GPU(1080Ti)上完成训练,同时能够达到实时性,从而能够在生产环境中部署。
YOLOv4没有理论创新,而是在原有YOLO目标检测架构的基础上增加了近年CNN改进的众多技术,从数据处理到网络训练再到损失函数,遵行“拿来主义”,加上漂亮的工程实践,打造实现最佳速度与精度平衡的目标检测新基准!
YOLOv4的主要贡献
- 设计了强大而高效的检测模型,任何人都可以用1080Ti和2080Ti训练这个超快而精准的模型。
- 验证了很多近几年SOTA的深度学习目标检测训练技巧。
- 修改了很多SOTA的方法,让它们对但GPU训练更加高效,例如CBN,PAN,SAM等。
论文中用一张图总结了近几年的单阶段和双阶段的目标检测算法及技巧。
作者对现有目标检测方法进行了总结,无论是one-stage 、two-stage 还是 anchor free 、anchor based,均包含 Input、Backbone 、Neck、Heads(Dense Prediction或者Sparse Prediction)四部分。
目前各部分的主流技术包括:
双阶段的检测网络,相当于在一阶段的密集检测上增加了一个稀疏的预测器,或者说一阶段网络是二阶段网络的RPN部分。
论文中将那些增加模型性能,只在训练阶段耗时增多,但不影响推理耗时的技巧称为赠品(bag of freebies)。比如数据增广的方法图像几何变换、CutOut、grid mask等,网络正则化的方法DropOut、DropBlock等,类别不平衡的处理方法、难例挖掘方法、损失函数的设计等。
而那些微微提高了推理耗时,却显著提升性能的技巧叫做特价(bag of specials)。比如增大模型感受野的SPP、ASPP、RFB等,引入注意力机制Squeeze-and-Excitation (SE) 、Spatial Attention Module (SAM)等 ,特征集成方法SFAM , ASFF , BiFPN等,改进的激活函数Swish、Mish等,或者是后处理方法如soft NMS、DIoU NMS等。
bag of freebies
数据增强方法
数据增强方法虽然增加了训练时间,但可以让模型泛化性能和鲁棒性更好。
下面是常见的增强方法:
- 图像扰动
- 改变亮度、对比度、饱和度、色调
- 加噪声
- 随即缩放
- 随机裁剪(random crop)
- 翻转
- 旋转
- 随机擦除(random erase)
- Cutout
- MixUp
- CutMix
正则化方法
- Dropout
- DropConnect
- DropBlock
平衡正负样本的方法
- Focal loss
- OHEM(在线难分样本挖掘)
回归loss的改进
- GIOU
- DIOU
- CIOU
bag of specials
增大感受野的技巧
- SPP
- ASPP
- RFB
注意力机制
- Squeeze-and-Excitation(SE),增加2%计算量(但推理时有10%的速度),可以提升1%的ImageNet top-1精度。
- Spatial Attention Module(SAM),增加0.1%计算量,提升0.5%的top-1准确率。
特征融合集成
- FPN
- SFAM
- ASFF
- BiFPN(EfficientDet)
激活函数
- ReLU
- LReLU
- PReLU
- ReLU6
- SELU
- Swish
- hard-Swish
后处理非最大值抑制算法
- soft-NMS
- DIoU NMS
YOLOv4的模型详解
架构选择
经过综合考虑计算量和精度,作者最终选择的架构是:CSPDarknet53 作为 backbone, SPP 模块用于增大感受野, PANet 用作 neck, 并仍沿袭 YOLOv3(anchor based) head。
最终YOLOv4使用的技术:
YOLOv4的实验结果
作者在MS COCO数据集上进行了实验,结果如下:
每一行分别代表不同的GPU计算结果:
- 在主流的SOTA目标检测算法中,YOLOv4实现了最佳的速度和精度的平衡。
- 在精度差不多的情况下,YOLOv4的速度往往是最快的。
- 在FPS超过30的实时算法中,YOLOv4是精度最高的。
因为不同的算法公布时可能在不同的GPU上进行测试,作者根据不同的GPU(Maxwell/Pascal/Volta)分别列出了YOLOv4与其他算法的更详细的比较,即Table 8、9、10,帧率大于等于30的用蓝底标出。
可见YOLOv4在实时目标检测算法中精度最高,实现了精度和速度的最佳平衡。