YOLOv4结构以及用到的tricks与创新总结( 二 )


2.通过在原有的模型训练过程中注入对抗样本,从而提升模型对于微小扰动的鲁棒性 。
Mish激活函数(主干网络部分):
Mish:x * tanh(ln(1+e^x))
ReLU和Mish的对比,Mish的梯度更平滑 。相比之下,Mish能更好地保持准确性,这可能是因为它能更好地传播信息 。平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化 。(具体的可以看mish论文)
作者只在中采用了Mish激活函数,网络后面仍然采用激活函数 。
(主干网络部分):
我们先来看看CSP论文里的图,它是对比了和 。
【YOLOv4结构以及用到的tricks与创新总结】在部分的一个主要改进点就是在部分采用了CSP,相比较于原始的,CSP将输入的特征图按照进行了切割,只使用原特征图的一半输入到残差网络中进行前向传播,另一半在最后与残差网络的输出结果直接进行按拼接(),这样做的好处在于:
1、输入只有一半参与了计算,可以大大减少计算量和内存消耗;
2、反向传播过程中,增加了一条完全独立的梯度传播路径,梯度信息不存在重复利用,如下图所示:
下图为中的CSP块:
下图是我用可视化的的第一个CSP块,然而他并没有将特征图按平分送入两支路,而是直接将原特征图分别送入两支路,最后再 。(所以作者知识借鉴了的思路,也许这样不平分可以保证特征的复用性,这里不太懂为啥没平分,不过作者这样做确实提高了模型的性能,说明有效)
下面对比一下(中采用),(中采用):
说明一下:关于图中各模块的解释看最上面的总结构图 。
注意:YOLO V4使用时删去了最后的池化层、全连接层以及层
优点:
1.增强CNN的学习能力,使得在轻量化的同时保持准确性 。
2.优点二:降低计算瓶颈
3.优点三:降低内存成本
(主干网络部分):
的主要问题就是随机drop特征,这一点在FC层是有效的,但在卷积层是无效的效果并不好,因为卷积层的特征是空间相关的 。当特征相关时,即使有,信息仍能传送到下一层,导致过拟合 。
是的一种结构化形式 。在中,特征在一个block中,例如一个 map中的连续区域会一起被drop掉(因为连续的区域它们之间的信息密切相关,删除连续的区域可以删除某些语义信息) 。当抛弃掉相关区域的特征时,为了拟合数据网络就不得不往别处寻找新的特征 。(具体实现可以看论文)
SPP模块(Neck部分):
中的SPP是在和之间的neck部分 。neck部分是为了更好地提取融合特征,提升模型性能 。
作者在SPP模块中,使用k={11,55,99,1313}的最大池化的方式,再将不同尺度的特征图进行操作(即堆叠) 。
注意:这里最大池化采用操作,移动的步长为1,比如13×13的输入特征图,使用5×5大小的池化核池化,=2,因此池化后的特征图仍然是13×13大小 。
采用SPP模块的方式,比单纯的使用k*k最大池化的方式,更有效的增加主干特征的接收范围,显著的分离了最重要的上下文特征 。
FPN+PAN模块(Neck部分):
FPN其实就是不同尺度特征融合预测,PAN是借鉴图像分割领域的PANet的创新点 。将其拆分应用到中,进一步提高特征提取的能力 。。
FPN结构我在我的另一篇博客有讲:FPN ()特征金字塔网络,
这里直接根据中的FPN分析 。再来看看的图:
可以看到经过几次下采样(中讲到,每个CSP模块前面的卷积核都是33大小,步长为2,相当于下采样操作),三个紫色箭头指向的地方,输出分别是7676、3838、1919 。
以及最后的中用于预测的三个特征图①、②、③ 。[注:255表示80类别(1+4+80)×3=255]