论文笔记:YOLOv4: Optimal Speed and Accuracy of Object Detection
中心思想:
- 在提出YOLOv4之前,作者先对现有的主流改进思路,进行了分类&综述
- 基于上述的改进思路进行尝试,整合,最终提出了YOLOv4。主要的贡献在于:
- 能够实现低成本的训练(只用1张卡)
- 验证了训练&预测过程中的一些trick
Bag of Freebies
Bag of Freebies指的是通过更好的训练方式来得到性能的提升,而这种训练方式不会对模型的预测(inference)带来比较大的负担
- 最常见的Freebie是数据增广,主要目的是提升训练数据的差异性,常用的数据增广有两方面:
- 光度偏差:随机对图像的亮度,对比度,色调,饱和度等元素进行随机扰动
- 几何偏差:对图像进行crop, scale, flip, rotate等操作
- 近年来,提出了一些新的数据增广方式,包括:
- 对遮挡进行模拟:选定图中的若干ROI,将ROI中的值置为0
- 通过多张图像的整合来实现数据增广:mixup, cutmix, mosiac等
此外,为了解决数据分布不均衡的问题(包括正负样本的不均衡,各类别间的不均衡),目前主流的方法包括:
- Focal Loss
- hard Negative Mining
- Softlabel:解决0-1 one-hot编码无法对类别间的依赖/相似性关系进行度量的问题(在0-1中每个类别都是相互独立的,没有关联性)
对于目前目标检测中,对回归分支最常用的L2 Loss:
- L2 Loss对每个维度看成相互独立的,而没有将这4个维度看成一个整体
- 为了解决这种问题,IOU Loss应运而生,一方面融合了各个维度,另一方面起到了各个尺度下均衡的作用(L2 Loss下越远的目标,产生的Loss越小,但其实加入了acnhor之后会得到解决)
- CIoU Loss在IOU Loss的基础上,考虑了GT与预测值之间的中点距离,同时考虑了宽高比
除此之外,本文还提出了新的BOF,包括Mosaic(马赛克数据增广)&self-adversarial training(自对抗训练)
- 在self-adversarial training中,将一次迭代分成两部:
- 不修改网络权重,只修改输入
- 修改后的输入常规进行forward & backward propagation
- Mosaic与CutMix类似,只不过CutMix将2张图片混合,而Mosaic一次性将4张图片硬剪到一起:
Bag of specials
这里的special指的是一些通过牺牲infer时间来提升性能的方法,主要包括:
- 提升感受野,包括ASPP,RFB操作
- 引入attention,总括来说有2种attention,结合实验作者任务point wise的性价比更高
- point-wise: SAM(sptial attention module)
- channel-wise: SE Block
- 增强特征的整合能力(这里主要是形如UNet的将高层特征与底层特征进行融合的方式)
- SFAM:通过SE Block的方式对上采样后的feature map和低层的feature map进行加权相加
- ASFF:利用softmax进行每个点的reweight(加权)
- BiFPN: 不仅是从高层->底层,外加底层->高层,实现更全面的特征融合
- **函数的改进,主要包括RELU系列,swish系列,mish系列
- 检测后处理的改进:
- 普通的nms,分数从大到小进行排序,保证保留的框具有较大的分数(置信度)
- softnms: 考虑遮挡对NMS中,IOU计算的影响
- DIOU NMS:在soft的基础上增加中心距离(度量方式改为DIoU)
- 对于BN层的改进:
- 在CBN(Cross Batch Normalization)的基础上做了修改:每4个mini batch之后再更新scale shift的值(这么做的具体原因这里没有说)
- 在CBN(Cross Batch Normalization)的基础上做了修改:每4个mini batch之后再更新scale shift的值(这么做的具体原因这里没有说)
- 对于现有的BOS的改进:modified SAM & modified PAN,整体来看是为了增大特征融合,以及attention部分的容量:
整体改进总结
-
总的来说,YOLOv4更像是对现有的目标检测改进方法的一系列尝试及整合,主要包括3部分:
• Backbone: CSPDarknet53 (这里作者认为与ResNext&efficientnet相比,有更多的参数、帧率更快、也有足够的感受野)
• Neck: SPP, PAN
• Head: YOLOv3 -
并且使用了一下的改进方法:
• Bag of Freebies (BoF) for backbone: CutMix and Mosaic data augmentation, DropBlock regularization, Class label smoothing
• Bag of Specials (BoS) for backbone: Mish activa- tion, Cross-stage partial connections (CSP), Multi- input weighted residual connections (MiWRC)
• Bag of Freebies (BoF) for detector: CIoU-loss, CmBN, DropBlock regularization, Mosaic data aug- mentation, Self-Adversarial Training, Eliminate grid sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler [52], Optimal hyper- parameters, Random training shapes
• Bag of Specials (BoS) for detector: Mish activation, SPP-block, SAM-block, PAN path-aggregation block, DIoU-NMS