简介
- YOLOv3 -> YOLOv4 有原创的部分,也有应用其他论文里的优秀tricks,到了YOLOv5主要事应用其他论文中的优秀tricks,但效果也很显著。
YOLOv4的原创部分
CSPDarknet-53
- 在 backbone 方面,YOLOv3使用的是Darknet-53,而YOLOv4则采用CSPDarknet-53 (CSP主要就是下图的过程)将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。
Mosaic数据增强
- 输入端主要是 Mosaic数据增强 和 SAT自对抗训练
- Mosaic数据增强主要是将4张图片,随机缩放、随机裁剪、随机排布后进行拼接,这个操作相当于变相的 增加 batchsize。因此增加了网络的 泛化性
SAT自对抗训练
- SAT自对抗训练 ,增加 了网络的 鲁棒性。以 y=wx+b为例, 在第一次反向传播时,正常是固定x,对w求偏导;而这里是固定w,对x求偏导,直接更新原图(对原图增加了噪声)。第二次再恢复正常,对w求偏导,更新参数。
PAN结构
- YOLOv4 的 Neck部分 是采用了 FPN+PAN结构 。为了让各个不同大小的特征图都参与到最后的分类任务中,采用了FPN的操作;PAN是在FPN的基础上增加了一个自底向上的过程。如下图所示:
- 这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,这样就从不同的主干层对不同的检测层进行特征聚合。
- 而YOLOv4中采用的PAN区别在于最后的加和方式不同,原本的PANet网络的PAN结构中,两个特征图结合是采用add操作,而Yolov4中则采用concat操作,如下图所示:
★★★个人理解(add和concat)
- add是按行列相加,add前后通道数不发生改变;而concat则是对维度的加和,w,h不变,concat之后的通道数为concat之前通道数之和
YOLOv4一些tricks的应用
遗传算法
SPP模块
- SPP模块,采用下图所示的方式进行这里最大池化采用padding操作,移动的步长为1,比如13×13的输入特征图,使用5×5大小的池化核池化,padding=2,因此池化后的特征图仍然是13×13大小。
Mish激活函数
Dropblock
补充trick
SE module
- 特征重标定 SE module ,对每个特征通道设置权重激励,抑制对当前任务无用的特征。
- 首先是(squeeze)将空间维度进行特征压缩,将CxHxW压缩为Cx1x1,获取1x1全局的感受野;
- 随后(excitation),生成每个特征通道的权重;
- 最后使用Scale做权重与原先的每个特征加权(通道权重相乘–>各通道权重值分别和原特征图对应通道的二维矩阵相乘),具体过程如下图:
YOLOv5主要应用的tricks
自适应图片缩放
- 个人认为这个trick对于计算量的减少还是非常实用的。
- 常见的检测算法都是将图片缩放到一个统一的标准。而YOLOv5的自适应锚框是通过计算目标缩放尺寸416×416和当前图片尺寸w,h的比值得到缩放系数,使用小的缩放系数,获取最小填充的缩放后尺寸。(这里大白老师讲的比较详细,可以参考:传送门)
CSP
- YOLOv4只是backbone使用了CSP的思想,而YOLOv5的作者在backbone阶段使用了加残差模块的CSP结构;在Neck阶段使用了不加残差模块的CSP结构。加强了网络特征融合的能力
- 这里借用大白老师的图
★★★个人理解(残差模块和CSP的区别)
- 实际上两者的核心思想都是shortcut(短接),残差模块一般用于backbone,网络可以做深而不容易出现梯度消失或爆炸的情况,另外通过跨阶段层次结构将不同层特征合并,减少了计算量的同时(共享),又保证了准确率。
- 而CSP相较于残差模块是一个更大的block,一般用在Neck。
- 两者还有一个最主要的区别在于:残差模块最后是add操作;而CSP最后是concat操作
CIOU
- 最后是预测阶段用CIOU替代了传统的IOU(YOLOv4也是这样的)
参考资料
|