• 640*640输入的还是下采样32倍,有3个输出层
  • 1280*1280的输入是下采样64倍,有4个输出层
YOLOv5网络学习笔记-萤火

0x00 网络结构

YOLOv5网络学习笔记-萤火

1. Backbone

New CSP-Darknet53

  • C3模块相比CSP模块的区别:使用SiLU替换Mish
  • SiLU激活函数,也就是Swish

$$SiLU(x) = x*sigmoid(x)$$

YOLOv5网络学习笔记-萤火

2. Neck

SPPF、New CSP-PAN

  • New CSP-PAN在Concat之后也会经过一个C3模块
  • SPPF:不是并行,是串行,最后在拼接然后经过一个Conv,而且没有原输入那一路,而是要经过一个Conv模块,且池化层都是k=5
    • 两个5×5大小的maxpooling串起来,相当于通过一个9x9maxpooling的结果(完全一样)
    • 三个5×5大小的maxpooling串起来,相当于通过一个13x13maxpooling的结果
    • 使用SPPF的计算效率更高
YOLOv5网络学习笔记-萤火

3. Head

YOLOv3 Head

4. v6.0之后的改动

把网络的第一层(原来是Focus模块)换成了一个6x6大小的卷积层。两者在理论上其实等价的,但是对于现有的一些GPU设备(以及相应的优化算法)使用6x6大小的卷积层比使用Focus模块更加高效

YOLOv5网络学习笔记-萤火

Focus:将每个2x2的相邻像素划分为一个patch,然后将每个patch中相同位置(同一颜色)像素给拼在一起就得到了4个feature map,然后在接上一个3x3大小的卷积层。这和直接使用一个6x6大小的卷积层等效。

0x01 数据增强

  • Mosaic
  • Copy paste
    • 需要实例分割标签数据
YOLOv5网络学习笔记-萤火
  • Random affine随机仿射变换
    • 旋转、缩放、平移,错切
    • data/hyps下面的yaml文件可以看到有没有启用
YOLOv5网络学习笔记-萤火
  • MixUp

随机两张图片按一定透明度混合成一张(源码中大概10%概率使用)

YOLOv5网络学习笔记-萤火
  • Albumentations滤波、直方图均衡化以及改变图片质量等。需要安装这个第三方包才会使用
  • 随机改变HSV
  • 随机水平翻转

0x02 训练策略

  • Multi-scale training(0.5-1.5x)多尺度训练,假设设置输入图片的大小为640 × 640,训练时采用尺寸是在0.5 × 640 ∼ 1.5 × 640之间随机取值,注意取值时取得都是32的整数倍(因为网络会最大下采样32倍)
  • AutoAnchor(For training custom data)训练自己数据集时可以根据自己数据集里的目标进行重新聚类生成Anchors模板
  • Warmup and Cosine LR scheduler训练前先进行Warmup热身,然后在采用Cosine学习率下降策略
  • EMA(Exponential Moving Average)可以理解为给训练的参数加了一个动量,让它更新过程更加平滑。
  • Mixed precision混合精度训练,能够减少显存的占用并且加快训练速度,前提是GPU硬件支持
  • Evolve hyper-parameters超参数优化,没有炼丹经验的人勿碰,保持默认就好

0x03 损失计算

1. 损失计算

YOLOv5网络学习笔记-萤火

2. 平衡不同尺度损失

YOLOv5网络学习笔记-萤火

3. 消除Grid敏感度

YOLOv5网络学习笔记-萤火

V5对预测框的宽高偏移量也做了修改。原来的计算公式并没有对预测目标宽高做限制,这样可能出现梯度爆炸,训练不稳定等问题,调整后倍率因子被限制在( 0 , 4 ) 之间。也就是宽高最多就是anchor的4倍

YOLOv5网络学习笔记-萤火

4. 匹配正样本

YOLOv5网络学习笔记-萤火
  • 先去计算每个GT Box与对应的Anchor Templates模板的高宽比例

$$r_w = w_{gt} / w{at}$$

$$r_h = h_{gt} / h{at}$$

  • 然后统计这些比例和它们倒数之间的最大值,这里可以理解成计算GT BoxAnchor Templates分别在宽度以及高度方向的最大差异(当相等的时候比例为1,差异最小):

$$r_w^{max} = max(r_w, \frac{1}{r_w})$$

$$r_h^{max} = max(r_h, \frac{1}{r_h})$$

  • 接着统计宽度和高度方向差异最大的值:

$$r^{max}=max(r_w^{max}, r_h^{max})$$

  • 如果r_max小于设置阈值(默认4.0),即gt box和对应的anchor template的高、宽比例相差不算太大,则将gt box 分配给anchor template。
  • 其实就是扩充正样本,让高宽比例和gt box相差不超过4的AT也作为正样本
  • 剩下的就和YOLOv4一样
YOLOv5网络学习笔记-萤火