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

结构以及用到的与创新总结
本文参考了几位大佬的文章,然后作了下总结 。(文中用到的图大部分来源于他们的文章,还有各算法对应的论文)文末参考链接附有这几位大佬的博客地址 。
这里顺便附上我在B站录的一个视频链接(结合了库可视化了的结构讲解):
结构快速讲解(包会,不会我也没法哈哈)
可在看完这篇博客后看,看完后的结构你就掌握了 。
先放上和的结构图,好有个大致的思路:
:
:
图中的说明:
1. :张量拼接,会扩充两个张量的维度,例如和两个张量拼接,结果是 。和cfg文件中的route功能一样 。
2. add:张量相加,张量直接相加,不会扩充维度,例如和相加,结果还是 。add和cfg文件中的功能一样 。
讲之前先来简单说下: 改进之处:
1. 多尺度预测:引入FPN,结合了3个尺度进行特征融合 。
2. 更好的基础分类网络-53,类似引入了残差结构 。
3. 层被替换成一个1x1的卷积层+激活函数的结构 。
分类损失采用 cross- loss(二分类交叉损失熵)
4. Tiny-主要区别就是:只结合2个尺度进行特征融合 。
改进之处:
的特点是集大成者,用到了相当多的 。
文章将目前主流的目标检测器框架进行拆分:input、、neck 和 head.
总结一下框架:

Neck:SPP,FPN+PAN
Head:
=+ SPP + (FPN+PAN) +
本文主要从以上4个部分对的创新之处进行讲解,让大家一目了然 。
(各部分有超链接直接点击即可跳到文中相应位置)
输入端:这里指的创新主要是训练时对输入端的改进,主要包括数据增强、cmBN、SAT自对抗训练主干网络:将各种新的方式结合起来,包括:、Mish激活函数、:目标检测网络在和最后的输出层之间往往会插入一些层,比如中的SPP模块、FPN+PAN结构预测端:输出层的锚框机制和相同,主要改进的是训练时的损失函数,以及预测框筛选的nms变为 数据增强(输入端部分):
中使用的是参考2019年底提出的数据增强的方式,但只使用了两张图片进行拼接,而数据增强则采用了4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接 。
使用原因:
在平时项目训练时,小目标的AP一般比中目标和大目标低很多 。而Coco数据集中也包含大量的小目标,但比较麻烦的是小目标的分布并不均匀 。所以为了平衡小、中、大目标的占比数量 。
优点:
1.扩充了数据集:随机使用4张图片随机拼接,且通过随机缩放可以获得很多小目标,让网络的鲁棒性更好 。
2.减少GPU:因为使用增强进行训练时,4张图片被整合成一张图片,这样一来可以使mini-batch大小并不用很大,这样一个GPU就能达到比较好的效果 。
CmBN交叉小批量标准化(输入端部分):
上图为BN的处理过程,BN是对当前mini-batch进行归一化 。
CBN则是对当前及其前3个batch的结果进行归一化 。且利用了泰勒多项式对前3次统计数据进行了补偿(因为每个batch都更新了一次参数,所以这4个batch的使用的是不同网络参数,所以这里才做补偿) 。
CmBN是CBN的改进,其区别在于其区别在于权重更新时间点不同 。CBN是针对batch来说的,因为同一个batch内权重参数一样,因此计算不需要进行补偿 。而CmBN是针对mini-batch来说的,其仅仅收集单个batch中的mini-batch之间的统计数据 。(这里不太确定,应该是这样吧?)
SAT,Self--自对抗训练(输入端部分):
自对抗训练(SAT)也是一种新的数据增强方法,它包括两步 。
1.利用原始图像生成对抗样本 。