1 引言
之前有将介绍过YOLOv1,YOLOv2,YOLOv3,本文要来介绍很火的目标检测算法YOLOv4,该算法是在原有YOLO目标检测架构的基础上,采用了近些年CNN领域中最优秀的优化策略,从数据处理、主干网络、网络训练、激活函数、损失函数等各个方面都有着不同程度的优化.
YOLOv4的论文链接: 戳我
接下来我们重点分析YOLOv4相关的改进点.由于YOLO4是集大成者,使用了很多近年来的各种技巧实验.
涉及内容较多,由于篇幅原因, YOLOv4的讲解分为上下两篇进行:
上篇进行整体介绍,聚焦在网络整体结构上,下篇重点介绍各种优化策略.
闲话少述,我们直接开始 😃
2 主要贡献
YOLOv4在YOLO3上各个部分做改进,在保证速度的同时,大幅提高了模型的检测精度,并降低硬件使用的要求.
由上图可以看出YOLOv4在MS COCO数据集上获得了43.5%的AP值(65.7% AP50). YOLOv4在与EfficientDet同等性能的情况下,速度是EfficientDet的两倍;与YOLOv3相比,YOLOv4的AP和FPS分别提高了10%和12%.
该研究的主要贡献如下:
- 建立了一个强大高效的目标检测模型,并且使用1080TI或2080TI的GPU就可以进行训练
- 验证了SOTA的Bag-of-Freebies和Bag-of-Specials目标检测方法在检测器训练过程中的影响
- 改进了一些tricks,SOTA的方法,包括CBN,PAN,SAM等,使之更加高效,并你能够在单个GPU上训练
3 Tricks
Tricks一般指在网络训练和测试时所采用的技巧,在作者论文里将tricks分为两大类:Bag-of-Freebies 和 Bag-of-Specials.
Bag-of-Freebies是指在网络训练时所用到的技巧,不影响推理预测的时间,主要包括以下几个方面:
- 数据增强: Random erase, CutOut,Hide-and-seek,Grid mask,GAN,MixUp,CutMix
- 正则化方法: DropOut,DropConnect
- 处理数据不平衡问题: focal loss, Online hard example mining, hard negative example mining
- 处理预测框回归问题: MSE,IOU,GIOU,DIOU/CIOU
Bag-of-specials是指在网络设计或处理时所用到的技巧,轻微增加推理预测时间,但可以提升较大的精度,主要包括:
- 感受野: SPP,ASPP,RFB
- 特征融合: FPN,PAN
- 注意力机制: attention module
- 激活函数: Swish, Mish
- NMS: Soft-NMS,DIou NMS
4 网络结构
目标检测一般由以下几个部分组成:
- Input: 指图片的输入
- BackBone: 在ImageNet预训练的主干
- Neck:通常用来提取不同层级的特征图
- Head: 预测对象类别以及预测框的检测器,通常分为两类Dense Prediction(one stage)以及Sparse Prediction (two stage)
YOLOv4的模型架构由三部分组成:
- BackBone: CSPDarknet53
- Neck: SPP + PAN
- HEAD: YOLO HEAD
以下分别针对三个部分进行详细展开阐述.
4.1 BackBone–CSPDarknet53
为了使网络能够快速操作并并行化优化,作者提供了两种神经网络主干
- 对于GPU,在卷积层中使用少量组(1-8group)的卷积,并将ResNeXt50,Darknet53分别与Cross Stage Partial Network(CSPNet)结合,组成了CSPResNeXt50和CSPDarknet53
由下表的实验证明CSPResNeXt50适合用于分类网络,而CSPDarknet53更适合用于检测网络,因此作者最后选择使用CSPDarknet53作为特征提取的主干
- 对于VPU,则使用了分组卷积(grouped-convolution),但不再使用Squeeze-and-excitement(SE)块,主要包括以下模型: EfficientNet-lite/MixNet/GhostNet/MobileNetV3
接下来我们来讲解 Cross Stage Partial Network (CSPNet)
论文链接: 戳我
在目标检测任务中通常是运行在小型设备上,因此需要计算量较低的模型,以缩短推理预测时间.CSPNet论文的作者认为预测计算量高的问题是由于网络优化中梯度信息重复导致,因此提出了跨阶段局部网络(CSPNet).
CSPNet的主要目的是使网络架构能够实现获取更丰富的梯度融合信息并降低计算量,作法是先将Base Layer的特征图划分为两个部分,然后在经过transition->concatenation->transition将两个部分融合起来.
上图中的Transition layer代表过度层,主要包含1X1卷积层以及pooling层.
上述作法使得CSPNet解决了三个问题:
- 增加CNN的学习能力,即便将模型轻量化,也能够保持准确性
- 去掉计算量较高的计算瓶颈结构
- 降低内存占用
下图为CSPNet结合不同的backbone后的结果,由下图中可以看出在ImageNet分类的准确率保持不变或是稍微提升一些,但是计算量却大幅下降.而在MS COCO检测的结果,CSPNet的AP50明显高于其他方法,并且在相同精度时,FPS要快很多.
4.2 Neck-- SPP+PAN
Neck部分的主要作用在于能够扩大感受野以及融合不同尺度特征图的信息(更好的进行特征融合)
- SPP(Spatial Pyramid Pooling): 在网络的最后一层concat所有特征图,后面能够继续接CNN模块
下图a为YOLOv2的网络结构,将最后一层摊平后接上全链接层;图b则为使用SPP架构,将最后一层的特征图concat起来.
- PANet(Path Aggregation Network): 以FPN为基础进行改进,将串起来的层数再多加一层
另外还有将原本相加的部分修改为合并(concat),效果会比相加来的好,但是缺点就是通道数变多,计算量会变大.
4.3 Head–沿用YOLOV3的head
YOLOv4的Head和YOLOv3的head部分一样,这里不再累述.
5 总结
本文介绍了YOLO V4的网络架构和各个部分的实现细节,重点介绍了主干和Neck部分的选择,并给出了相关图解示例.
您学废了吗?
关注公众号《AI算法之道》,获取更多AI算法资讯。