0. 写在前面
YOLO系列博客,紧接上一篇Yolo系列算法-理论部分-YOLOv3-CSDN博客
1. YOLOv4-实战破局
2020年,YOLO系列的作者发表声明,出于道德方面的考虑,退出CV界,Alexey Bochkovskiy团队接手,正式推出YOLOv4项目。
YOLOv4使用深度学习中一些常用Tricks进行了大量的测试,最终选择:WRC、CSP、CmBN、SAT、 Mish activation、Mosaic data augmentation、DropBlock regularization 和 CIoU loss。
YOLOv4将实用的训练技巧应用在传统的YOLO基础上,让其生机勃勃,重新焕发出生命,实现了检测速度和精度的最佳权衡。
- 使用 GTX 1080Ti 或 2080Ti 的GPU就能训练出高效而强大的目标检测网络,降低了使用GPU的门槛;
- 在论文中也验证了大量先进的训练技巧对目标检测性能的影响;
- 改进当前先进的目标检测方法,使其适合在单GPU上训练,改进包括CBN、PAN、SAM等。
2. 网络结构
最简洁的表示:
YOLOv4 = CSPDarknet53(主干) + SPP附加模块(颈) + PANet路径聚合(颈) + YOLOv3(头部)
2.1 CSPDarknet53
CSPNet(Cross Stage Partial Network),用来解决以往网络结构需要大量推理计算的问题,网络优化中有很多重复梯度信息,该网络能随意将梯度进行组合,同时减少计算量;通过将基本层的特征图分为两个部分,最后通过一个跨阶段的层次结构合并来实现。
- 将原来的Darknet53与CSPNet进行结合,Darknet53的结构是由一系列的残差结构组成,CSPNet主要工作就是将原来的残差块堆叠拆分成两部分:主干部分继续堆叠原来的残差块,支路部分相当于一个残差边,经过少量的处理直接连接到最后。
2. 使用Mish激活函数代替原来的Leaky ReLU。
2.2 SPP
SPP最初的设计目的是使卷积神经网络不受固定输入尺寸的限制,在YOLOv4中,引入SPP是为了显著地增加感受野,分离出最重要的上下文特征,同时不降低运行速度,经典空间金字塔池化层,如下图所示。
在YOLOv4中,分别利用四个不同尺度的最大池化对上层输出的feature map进行处理,最大池化的池化核大小分别是13×13、9×9、5×5、1×1。
2.3 PANet
PANet是COCO2017年实例分割比赛冠军,目标检测比赛第二名,核心思路是充分利用特征融合。
- FPN:主要通过融合高低层特征提升目标检测的效果,尤其可以提高小尺寸的检测效果;
- Bottom-up Path Augmentation:主要考虑网络浅层特征信息,主要是边缘形状等特征;
- Adaptive Feature Pooling:用来特征融合,用每一个ROI提取不同层的特征来做融合,对于提升模型效果有很大好处;
- Fully-connected Fusion:针对原有的支路FCN,引入一个前背景二分类全连接支路,通过融合这两条支路的输出得到更加精确的结果。
2.4 Head
继承了YOLOv3的Head进行多尺度预测,提高了对不同size目标的检测性能,输出的张量shape分别是(19,19,255)、(38,38,255)、(76,76,255),因为COCO有80个类别,每个网格对应有3个Anchor boxes,所以每一个要预测的bounding box对应5个值,3×(80 + 5)=255。
3. Tricks 改进方法
3.1 Mosaic
新的数据增强方法,将四张图片拼接在一起;拥有丰富检测目标背景的同时,在BN计算的时候一次性就能处理四张图片。
3.2 SAT
一种自对抗训练数据增强方法,第一阶段,神经网络改变原始图像而不改变网络权值,以这种方式,神经网络对自身进行对抗性攻击,改变原始图像,以制造图像上没有所需对象的欺骗;在第二阶段用正常的方法训练神经网络去检测目标。
3.4 CmBN
Cross mini-Batch Normalization,跨小批量标准化,收集一个batch内多个mini-batch内的统计数据。
3.5 SAM
原始的算法是最大池化层和平均池化层分别作用于feature map,得到的feature map,再输入一个卷积层中,接着使用Sigmoid函数来创建空间注意力;
YOLOv4将SAM进行了修改,直接使用一个卷积层作用于输入特征,再使用Sigmoid函数创建注意力,将空间注意力变成点注意力。
3.6 PANet
将PAN网络进行了小修改,使用张量连接concat代替原来的连接。
4. 性能表现
在COCO数据集上,与YOLOv3相比,在AP和FPS上分别提升10%和12%。