0前言
在YOLOv4论文中,作者其实就是把当年所有的常用技术罗列了一遍,然后做了一堆消融实验。
1.YOLOV4的网络改进部分
1、主干特征提取网络:DarkNet53 => CSPDarkNet53、使用Mish激活函数
2、特征金字塔:SPP结构,PAN结构
1.1 主干特征提取网络CSPDarkNet53
1.1.1 CSP结构
在YOLOv3中使用的是Darknet53,而在YOLOv4中引入了CSP结构
CSP结构的作用:能够增强CNN的学习能力、移除计算瓶颈、降低显存的使用、加快网络的推理速度
CSPnet结构将原来的残差块的堆叠进行了一个拆分,拆成左右两部分:
主干部分继续进行原来的残差块的堆叠;
另一部分则像一个残差边一样,经过少量处理直接连接到最后。
残差网络的特点是容易优化,并且能够通过增加相当的深度来提高准确率。其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题。
在YOLOv4中的CSP模块之前对进行下采样,然后将其输出以此通过两个1x1的卷积层进行降维,在Part1分支上再接上一系列的ResBlock、再通过一个1x1卷积层(即Transition),然后通过concat拼接,最后通过1x1卷积层进行升维
1.1.2 Mish激活函数
YOLOv4将DarknetConv2D的激活函数由LeakyReLU修改成了Mish,卷积块由DarknetConv2D_BN_Leaky变成了DarknetConv2D_BN_Mish。
Mish是光滑的非单调激活函数,可定义为:
f(x) = x・tanh(ς(x))其中, ς(x) = ln(1+e^x),是一个softmax激活函数和。
在YOLOv4中使用Mish函数的原因是它的低成本和它的平滑、非单调、上无界、有下界等特点,与其他常用函数如ReLU和Swish相比,提高了它的性能。
1.1.3 CSPDarknet53网络结构
1.2 特征金字塔结构
1.2.1 SPP结构
对于输入的特征层,依次通过5x5、9x9、13x13的最大池化下采样层,将这三个分支的输出和原输入的分支进行concat拼接,组成SPP结构
SPP结构能够极大地增加感受野,分离出最显著的上下文特征。
1.2.1 PAN结构
PANet一种实例分割算法,能够进行特征的反复提取:
最左则部分为网络的backbone,进行提取特征;
中间部分则在提取的特征层上构建特征金字塔结构(FPN模块),将高层的语义信息融合到底层特征层;
最右侧部分则于FPN相反,将底层的语义信息融合到高层。
中间与右侧共同构成了PANet。
在PANet原论文中,特征层与特征层融合部分采用的是add方法;
在YOLOv4中采样的是concat方法,将特征层在深度方向进行拼接,主要是在三个有效特征层上使用了PANet结构。
2.YOLOv4的训练技巧
2.1 Mosaic数据增强
mosaic利用四张图片,分别对四张图片进行翻转、缩放、色域变化等,并且按照四个方向位置摆好,进行图片的组合和框的组合。
Mosaic数据增强能够扩充样本多样性,且在BN计算的时候能够同时计算四张图片的数据。
2.2 CIoU
IoU是比值的概念,对目标物体的scale是不敏感的。然而常用的BBox的回归损失优化和IoU优化不是完全等价的,寻常的IoU无法直接优化没有重叠的部分。
CIOU将目标与anchor之间的距离,重叠率、尺度以及惩罚项都考虑进去,使得目标框回归变得更加稳定,不会像IoU和GIoU一样出现训练过程中发散等问题。而惩罚因子把预测框长宽比拟合目标框的长宽比考虑进去。
2.3 学习率余弦退火衰减
余弦退火衰减法,学习率会先上升再下降,这是退火优化法的思想。
上升的时候使用线性上升,下降的时候模拟cos函数下降。执行多次。
3.YOLOv4的网络结构
YOLOv4网络结构可以分为三部分:CSPDarkNet53特征提取网络、SPP和PANet组成的加强特征提取网络、将提取到的特征转化为预测结果的Yolo Head
主干网络对图片进行特征提取:假设特征提取网络的输入为416x416x3,首先进行Darknet卷积,然后进行四个Resblock_body(本质上是由一系列残差网络构成的大卷积块),特征层的高和宽被不断的被压缩、通道数被扩张,最终只使用最后三个shape的特征层进行下一步的操作,因为其具有更高的语义信息;
SPP和PANet组成的加强特征提取网络:对13x13x1024的特征层进行三次卷积操作,然后接SPP结构(SPP有四个分支,利用不同大小的最大池化核对输入进来的特征层进行最大池化,池化后的结果进行堆叠),再进行三次卷积;
PANet:对三次卷积后的特征层进行上采样(2倍上采样),将上采样后的26x26特征层与在主干网络获取的26x26x512的特征层进行堆叠,然后再进行上采样与52x52x256的特征层进行堆叠,即完成特征金字塔的结构;后面操作与前同理;完成PANet结构后就提取到了很多有效的特征信息。
Yolo Head利用提取到的特征进行结果预测(与yolov3相同)。