YOLOv3 -> YOLOv4 -> YOLOv5的改进(tricks)

发布时间:2023-09-10 13:30

YOLO系列内容

  • 简介
    • YOLOv4的原创部分
      • CSPDarknet-53
      • Mosaic数据增强
      • SAT自对抗训练
      • PAN结构
      • ★★★个人理解(add和concat)
    • YOLOv4一些tricks的应用
      • 遗传算法
      • SPP模块
      • Mish激活函数
      • Dropblock
  • 补充trick
    • SE module
  • YOLOv5主要应用的tricks
    • 自适应图片缩放
    • CSP
      • ★★★个人理解(残差模块和CSP的区别)
    • CIOU
  • 参考资料

简介

  • YOLOv3 -> YOLOv4 有原创的部分,也有应用其他论文里的优秀tricks,到了YOLOv5主要事应用其他论文中的优秀tricks,但效果也很显著。

YOLOv4的原创部分

CSPDarknet-53

  • backbone 方面,YOLOv3使用的是Darknet-53,而YOLOv4则采用CSPDarknet-53 (CSP主要就是下图的过程)将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。

\"YOLOv3

Mosaic数据增强

  • 输入端主要是 Mosaic数据增强SAT自对抗训练
    • Mosaic数据增强主要是将4张图片,随机缩放、随机裁剪、随机排布后进行拼接,这个操作相当于变相的 增加 batchsize。因此增加了网络的 泛化性

SAT自对抗训练

  • SAT自对抗训练增加 了网络的 鲁棒性。以 y=wx+b为例, 在第一次反向传播时,正常是固定x,对w求偏导;而这里是固定w,对x求偏导,直接更新原图(对原图增加了噪声)。第二次再恢复正常,对w求偏导,更新参数。

PAN结构

  • YOLOv4Neck部分 是采用了 FPN+PAN结构 。为了让各个不同大小的特征图都参与到最后的分类任务中,采用了FPN的操作;PAN是在FPN的基础上增加了一个自底向上的过程。如下图所示:
  • 这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,这样就从不同的主干层对不同的检测层进行特征聚合。
    \"YOLOv3
  • 而YOLOv4中采用的PAN区别在于最后的加和方式不同,原本的PANet网络的PAN结构中,两个特征图结合是采用add操作,而Yolov4中则采用concat操作,如下图所示:
    \"YOLOv3

★★★个人理解(add和concat)

  • add是按行列相加,add前后通道数不发生改变;而concat则是对维度的加和,w,h不变,concat之后的通道数为concat之前通道数之和

YOLOv4一些tricks的应用

遗传算法

  • 使用遗传算法优化超参数

SPP模块

  • SPP模块,采用下图所示的方式进行这里最大池化采用padding操作,移动的步长为1,比如13×13的输入特征图,使用5×5大小的池化核池化,padding=2,因此池化后的特征图仍然是13×13大小。
    \"YOLOv3

Mish激活函数

  • 部分激活函数采用Mish激活函数

Dropblock

  • 采用Dropblock代替 Dropout

补充trick

SE module

  • 特征重标定 SE module ,对每个特征通道设置权重激励,抑制对当前任务无用的特征。
  • 首先是(squeeze)将空间维度进行特征压缩,将CxHxW压缩为Cx1x1,获取1x1全局的感受野;
  • 随后(excitation),生成每个特征通道的权重;
  • 最后使用Scale做权重与原先的每个特征加权(通道权重相乘–>各通道权重值分别和原特征图对应通道的二维矩阵相乘),具体过程如下图:
    \"YOLOv3

YOLOv5主要应用的tricks

自适应图片缩放

  • 个人认为这个trick对于计算量的减少还是非常实用的。
  • 常见的检测算法都是将图片缩放到一个统一的标准。而YOLOv5的自适应锚框是通过计算目标缩放尺寸416×416和当前图片尺寸w,h的比值得到缩放系数,使用小的缩放系数,获取最小填充的缩放后尺寸。(这里大白老师讲的比较详细,可以参考:传送门)

CSP

  • YOLOv4只是backbone使用了CSP的思想,而YOLOv5的作者在backbone阶段使用了加残差模块的CSP结构;在Neck阶段使用了不加残差模块的CSP结构。加强了网络特征融合的能力
  • 这里借用大白老师的图
    \"YOLOv3

★★★个人理解(残差模块和CSP的区别)

  • 实际上两者的核心思想都是shortcut(短接)残差模块一般用于backbone网络可以做深而不容易出现梯度消失或爆炸的情况,另外通过跨阶段层次结构将不同层特征合并减少了计算量的同时(共享),又保证了准确率
  • CSP相较于残差模块是一个更大的block,一般用在Neck
  • 两者还有一个最主要的区别在于:残差模块最后是add操作;而CSP最后是concat操作

CIOU

  • 最后是预测阶段用CIOU替代了传统的IOU(YOLOv4也是这样的)

参考资料

  • 传送门,传送门
  • 主要是参考大白老师的文章(第一个传送门)

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号