目录
论文相关信息
1.论文题目:YOLOv4: Optimal Speed and Accuracy of Object Detection
2.发表时间:202004
3.文献地址:https://arxiv.org/abs/2004.10934
4.论文源码:https://github.com/AlexeyAB/darknet
介绍
YOLOv4是继YOLOv3之后YOLO家族的又一力作,通过一些通用的技巧是的YOLOv4的精度大幅提升到43.5%
AP (65.7% AP50),同时保持65 FPS的实时性,此外YOLOv4还旨实现只需一个GPU(1080Ti,2080Ti等)就能训练一个准确、快速的模型。
按照作者的总结有三大贡献:
- 网络高效强大,仅需单卡就能训练出快且准的模型。
- 验证了目标检测中Bag-of Freebies 和Bag-of-Specials的方法。
- 修改CBN , PAN , SAM等使其适合单卡训练。
相关工作
目标检测器模型
大致分两部分,backbone和head,二者中间插入的用于提取不同stage特征图的为neck,可参考上图。
近年的发展方式:1.backbone和head间插入一些层,即neck层的改动(FPN,PAN);2.构建新的backbone架构(DetNet,DetNAS);3.全新的目标检测架构(SpineNet , HitDetector)。
目标检测器可以按以下划分:
• Input: Image, Patches, Image Pyramid
• Backbones : VGG16, ResNet-50 SpineNet, EfficientNet-B0/B7 , CSPResNeXt50 ,CSPDarknet53
• Neck:
• Additional blocks: SPP, ASPP , RFB, SAM .
• Path-aggregation blocks: FPN , PAN ,NAS-FPN, Fully-connected FPN, BiFPN, ASFF ,SFAM
• Heads :
• Dense Prediction (one-stage):
◦ RPN , SSD , YOLO , RetinaNet (anchor based)
◦ CornerNet , CenterNet , MatrixNet, FCOS (anchor free)
• Sparse Prediction (two-stage):
◦ Faster R-CNN R-FCN , Mask RCNN (anchor based)
◦ RepPoints (anchor free)
Bag of freebies(BoF)
Bag of freebies概念:只改变训练策略或只增加训练成本的方法。
目标检测中与这一定义相符合的常见操作如下
数据增强
数据增强的目的是增加图片可变性,从而增强模型的泛化能力/鲁棒性。其增强操作大致可分为两类,photometric distortion(光学变形)和geometric distortion(几何变形)。
photometric distortion : brightness, contrast,hue, saturation, and noise of an image。
geometric distortion :random scaling, cropping, flipping, and rotating。
以上为pixel-wise的增强,下面的则可以称作region-wise增强。
还有模拟图像遮挡问题的增强:random erase , CutOut, hide-and-seek,grid mask。大体思想都是随机选择一个矩形区域,然后以随机值替代或直接设置为0。(适用于classification ,object detection),这些方法若作用到特征图上就变成了:DropOut , DropConnect , and DropBlock。
近年来数据增强更是出现了使用多张图片来增强的方法:MixUp,CutMix。
用于消除CNN学习的纹理偏差:transfer GAN。
样本平衡
为了解决数据集的语义差异,即类别间的不平衡。
two-stage的方法中引入了hard negative example mining和 online hard example mining ,one-stage则由于是密集检测,所以适用。
one-stage的方法则引入了focal loss。
类别关系表示
很难通过one-hot hard representation来表达不同类别之间的关联度关系,于是引入了 label smoothing,硬标签转为软标签,更具鲁棒性,为了进一步软化标签,提出了knowledge distillation 来设计标签精炼网络。
边界框(BBox)回归的目标函数
传统目标检测器直接用MSE来回归中心坐标或对角坐标。对于anchor-based的检测器来说,是在估计相对的偏移,回归的是每个点的偏移;对于直接预测边框每个点的(anchor-free)检测器来说,则是把这些点当作独立变量来回归。
后面为了考虑到尺度不变性、物体形状、尺寸、比例,中心位置等,这个损失函数经过了多次演变,演变过程如下:
IoU loss->GIoU loss->DIoU loss->CIoU loss
Bag of specials(BoS)
Bag of specials概念:只增加一点推断成本但是却能大大提升检测准确度的plugin modules(插件模块)和post-processing methods(后处理方法)。
plugin modules
plugin modules通常用于增强模型的特定属性,例如扩大感受野,引入注意力机制或是增加特征融合能力。
增加感受野:SPP,ASPP,RFB
attention mechanism(注意力机制)在目标检测中可分两种:
channel-wise attention :Squeeze-and-Excitation (SE)
pointwise attention:Spatial Attention Module (SAM)
特征融合:早期的有直接通过skip connection或hyper-column来将低层次的物理特征融合到高层次的。随后的FPN 这样的多尺度预测的方法出现,引出了很多轻权重融合不同特征层的模块出现,有SFAM , ASFF ,以及BiFPN。
SFAM 通过SE模块实现channel-wise来给用于特征融合的多个特征层的不同通达重新设置权重然后再相加。
ASFF通过softmax来实现point-wise的特征融合。
BiFPN通过残差连接实现scale-wise的特征融合。
激活函数:好的梯度函数有利于梯度高效传播并且减少计算。典型的有tanh,sigmoid,ReLU,ReLU, leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish, or Mish。其中ReLU6和hard-Swish解决了ReLU在输出为负数时梯度为0的情况。
post-processing methods
post-processing methods 则是用于处理模型预测结果。
常见的后处理有NMS,soft-NMS ,随后还出现了DIoU NMS。但是由于这样的后处理并没有考虑特征,所以在anchor-free的方法中并不需要后处理。
Methodology
Selection of architecture
骨干网选择,要从网络的输出分辨率、网络卷积层数量、参数数量、输出的结果的通道数 中找到一个最佳的平衡 。
然后要找合适的 additional blocks 增加感受野如SPP,ASPP等,以及Path-aggregation blocks的最好方法,如FPN,ASFF,PAN等。
分类器的最优模型往往不是检测器的最优模型,检测器要求:
- 高分辨率。来检测小物体。
- 更多层。更大的感受野来覆盖逐渐增加的输入网络。
- 更多的参数 。从而有更大的容量来检测一张图片中不同尺寸的物体。
最终, YOLOv4的架构组成为CSPDarknet53 backbone ,SPP additional module , PANet path-aggregation neck, and YOLOv3(anchor based) head 。
Additional improvements
为了使得模型可以更适用于在单GPU上训练,作者对模型进行如下改善:
- 提出新的数据增强方法,包括Mosaic和自对抗训练Self Adversarial Training(SAT);
- 使用遗传算法的同时使用最佳超参数;
- 对SAM、PAN和BN改进。
其中Mosaic是将训练数据中的4中图片做一个融合,使得一张图片中包含4种不同的上下文信息,从而一个batch不需要很大也能很好的训练模型。
Self-Adversarial Training (SAT)是一种新的数据集增强方式,共有两个阶段,一阶段模型改变输入图像而非权重来造成图片中不含目标的假象,使得网络进行自抗性攻击;二阶段采用正常的方式检测目标。
CmBN是对BN的改进,它仅收集单个批次中小批数据间的信息,如下图:
论文将SAM中的空间( spatial-wise)注意力替换为点(pixel-wise)注意力;将PAN中的特征融合方式由相加改为拼接(concatenate),如下图:
YOLOv4
有关YOLOv4的细节描述:
YOLOv4 组成:
- Backbone: CSPDarknet53
- Neck: SPP , PAN
- Head: YOLOv3
YOLO v4 使用的tricks:
-
Bag of Freebies (BoF) for backbone: CutMix 和 Mosaic 数据增强, DropBlock 正则化, Class label smoothing
-
Bag of Specials (BoS) for backbone: Mish 激活函数, Cross-stage partial connections (CSP), Multi input weighted residual connections (MiWRC)
-
Bag of Freebies (BoF) for detector: CIoU-loss,CmBN, DropBlock 正则化, Mosaic 数据增强, Self-Adversarial Training, 消除网络敏感性, 多个anchor匹配一个标注框, 余弦退火策略, 最佳超参数, 训练时随机尺寸
-
Bag of Specials (BoS) for detector: Mish激活函数,SPP-block, SAM-block, PAN path-aggregation block, DIoU-NMS
Experiments
为了测试不同训练提高技术对分类器精度的提高,在 ImageNet (ILSVRC 2012 val) 数据集上测试分类器,为了测试对检测器的精度的提高,在MS COCO (test-dev 2017) 数据集上测试检测器,这里只展示在检测器上的实验结果。
由于其他模型的测试结果使用的GPU的架构不同,为此实验在不同的GPU架构上分别做了实验以和其他模型做对比。实验中使用的GPUs的架构有Maxwell(GTX Titan X 或Tesla M40 GPU), Pascal(Titan X ,Titan Xp, GTX 1080 Ti, or Tesla P100 GPU), and Volta(Titan Volta or Tesla V100 GPU)。
在数据集MS COCO (test-dev 2017),每个的batchsize为1,不使用tensorRT,FPS大于等于30的高亮标记的情况下,这三种架构上的测试结果如下:
Maxwell:
Pascal
Volta
Conclusion
论文主要聚焦于模型的优化方法,相当于优化方法tricks的集大成者,此外能够在GTX1080Ti或则RTX 2080Ti这样的单GPU上训练和测试,使得模型能够容易普及,文字还提出了一些新的数据增强方法和改进等,但是相较于YOLOv3来说太过复杂,应该推崇的是简单、高效、方便训练的模型。但是文章中对检测器各个部分的分析很好,可以当作一篇检测器的tricks的论文综述来看了。