引言:
标题YOLO 之父 Joseph Redmon退出cv界,而是来自俄罗斯的 Alexey Bochkovskiy和两位台湾开发者Chien-Yao Wang、Hong-Yuan Mark Liao联手大推出YOLOv4,并且得到YOLOv3作者Joseph Redmon的承认。43.5%mAP+65FPS 精度速度最优平衡,非常惊艳!
论文链接:https://arxiv.org/pdf/2004.10934.pdf
代码链接:https://github.com/AlexeyAB/darknet(论文给出的代码链接)
目前Github上已经有了一些代码:
YOLOv4的TensorFlow2.0实现:https://github.com/xiao9616/yolo4_tensorflow2
YOLOv4的TensorFlow实现:https://github.com/klauspa/Yolov4-tensorflow
YOLOv4的PyTorch 实现:https://github.com/GZQ0723/YoloV4
YOLOv4的Keras 实现:https://github.com/Ma-Dan/keras-yolo4
yolov4的性能效果图如下:
一、贡献:
- 开发了一个高效、强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 TiGPU来训练一个超级快速和准确的目标探测器。
- 验证了在检测器训练过程中,最先进的Bag-of-Freebies和Bag-of-Specials 的目标检测方法的影响。
- 修改了最先进的方法,使其更有效,更适合于单GPU训练,包括CBN、PAN、SAM等
二、相关工作
论文对现有目标检测做了一个总结,并将所有的调优手段分为了两大类:
1.Bag of freebies(免费礼包)
2.Bag of specials(特价包)
2.1、目标检测模型
论文对现有目标检测做了一个总结,不管是one-stage还是two-stage,都分为四个部分:
Input, backbone, neck, head
每个部分都有很多选择,不同的组合,构造出各种目标检测框架。
- Input: Image, Patches, Image Pyramid(图像金字塔)
- Backbones: VGG16 [68], ResNet-50 [26], SpineNet [12], EfficientNet-B0/B7 [75], CSPResNeXt50 [81], CSPDarknet53 [81]
- Neck:
(1)、Additional blocks: SPP [25], ASPP [5], RFB [47], SAM [85]
(2)、Path-aggregation blocks: FPN [44](特征金字塔网络), PAN [49], NAS-FPN [17], Fully-connected FPN, BiFPN [77], ASFF [48], SFAM [98] - Heads:
(1)、Dense Prediction (one-stage):
◦ RPN [64], SSD [50], YOLO [61], RetinaNet [45] (anchor based)
◦ CornerNet [37], CenterNet [13], MatrixNet [60], FCOS [78] (anchor free)
(2)、Sparse Prediction (two-stage):
◦ Faster R-CNN [64], R-FCN [9], Mask RCNN [23] (anchor based)
◦ RepPoints [87] (anchor free)
2.2、Bag of freebies(免费礼包)
为提高精度,在训练的时候改变训练策略 或 只会增加训练成本的方法, 这些方法不在推理中使用,不增加推理成本。包含的方法有:
1. 数据扩充(pixel-wise调整):
(1)几何畸变:随机缩放、剪切、翻转和反旋转
(2)光度畸变:亮度、对比度、饱和度和色调改变,添加噪声。
2. 模拟对象遮挡:
- random erase,CutOut:可以随机选择图像中的矩形区域,并填充一个随机的或互补的零值。
- hide-and-seek、grid mask:随机或均匀地选择图像中的多个矩形区 域,并将其全部替换为0。
- feature map上做正则处理:
- DropOut:整体随机扔
- DropConnect:只在连接处扔,神经元不扔
- Spatial Dropout:按通道随机扔
- DropBlock:每个特征图上按spatial块随机扔
3. 结合多张图来进行增强:
- Mixup、CutMix(这两个是打比赛常会用到的方法)
4. GAN、Style Transfer GAN
5. 解决类别不平衡:
- 用于two-stage:
- Hard Negative Example Mining(难负样本挖掘)
- Online Hard Example Mining(在线难例挖掘)
- 用于one-stage:
- Focal Loss(目标是解决样本类别不平衡以及样本分类难度不平衡等问题)
6. one-hot类别之间没有联系:
- Label Smoothing(标签平滑)
- 知识蒸馏
7. BBox回归:
IoU—>GIoU—>DIoU—>CIoU,从最开始引用IoU损失函数,到改进如何更好优化,一系列方法。
2.2、Bag of specials(特价包)
那些仅增加少量推理成本但可以显着提高对象检测准确性的插件模块和后处理方法,比如SE模块等注意力机制模块,还有特征融合FPN等模块。
可分为插件模块和后处理方法。
1.插件模块
- (1)提高模型感受野(enhance receptive field):
- SPP:空间金字塔结构
- ASPP:带空洞卷积的空间金字塔结构
- RFB:RFB(Receptive Field Block)借鉴了Inception的思想,主要是在Inception的基础上加入了dilated卷积层(膨胀卷积),从而有效增大了感受野。
- (2)注意力机制(attention module):
- Channel Attention:
channel attention就是对每个C(C x H x W的特征图),在channel维度上,学习到不同的权重,平面维度上权重相同。
简单的说就是在channel维度上权重不一样,在HxW平面上权重一样。
SE(Squeeze-and-Excitation)是channel attention的典型代表,可以改善resnet50在分类任务上提高1%精度,但是会增加GPU推理时间10%。 - SAM(Spatial Attention Module)
spatial attention就是对于所有的通道,在二维平面上,对H x W尺寸的图学习到一个权重,对每个像素(你可以想象成一个像素是C维的一个向量)都会学习到一个权重。
简单的说就是在channel维度上权重一样,在HxW平面上权重不一样。
- Channel Attention:
- (3)特性融合模块(feature integration):
- Skip connection:早期使用
- hyper-column:早期使用
- FPN(Feature Pyramid Networks):
- SFAN():
利用SE模块对多尺度拼接的特征图进行信道级配重权。 - ASFF(Adaptive Spatial Feature Fusion):
自适应空间特征融合,使用softmax作为点向水平重加 权,然后添加不同尺度的特征映射。 - BiFPN:
提出了多输入加权剩余连接来执行按比例加权的水平重加权,然后加入不同比例的特征映射。
- SFAN():
- (4)激活函数(activation function):
- ReLU:
- LReLU:
- PReLU:
- ReLU6:
- SELU:
2. 后处理方法
- NMS: 非极大值抑制
- soft-NMS: 解决对象的遮挡问题
- DIou-NMS: 将中心点分布信息添加到BBox筛选过程中
三、YOLOv4核心
3.1、yolov4最终方案
YOLOv4模型 = CSPDarkNet53 + SPP + PANet(path-aggregation neck) + YOLOv3-head
backbone:CSPDarknet53[81]
neck:SPP[25],PAN[49]
head:YOLOv3[63]
•主干线免费包(BoF):CutMix和Mosaic数据增强、DropBlock正则化、类标签平滑
•主干网专用包(BO):
误激活、跨阶段部分连接(CSP(Cross-Stage-Partial-connection))、多输入加权剩余连接(MiWRC)
•检测的免费包(BoF):CIoU丢失,CmBN,DropBlock正则化,马赛克数据增强,自我对抗训练,消除网格敏感度,使用多个锚实现单一地面真理,cosineanAlingScheduler[52],最佳超参数,随机训练形状
•检测专用包(BoS):Mish激活、SPP块、SAM块、泛路径聚合块、DIoU NMS Experiments
3.2.创新点
1、提出新型数据增强方法 Mosaic 和自对抗训练(SAT(Self adversarial training));
2、修改现有方法,使新方法实现高效训练和检测:modified SAM、modified PAN 和 CmBN
(1)、modified SAM:
改进了SAM,将pooling层改为了卷积层,并去掉一个卷积层,如下图所示:
(2)、modified PAN :
改进PAN, 在连接处将addition改为concatenation
(3)、CmBN(Cross mini-Batch Normalization):
改进了CBN, CmBN-使用跨小批量规范化来收集整个批次内的统计信息,而不是在单个小批量内收集统计信息.