V4贡献:
单GPU就能训练的非常好,适合大多数人,不用担心设备
从数据层面和网络设计层面来进行改善,做了很多消融实验,
数据层面
Bag of freebies(BOF):
只增加训练成本,但能显著提高精度,并且不影响推理速度
Mosaic data augmentation(数据增强)
方法很简单,参考CutMix然后四张图像拼接成一张进行训练
四个图像先自己做自己的增强,然后再拼成一张,这样做间接的增加了Batch_size,
Random Erase:用随机值或训练集的平均像素值替换图像的区域
Hide and Seek:根据概率设置随机隐藏一些补丁
Self-adversarial-training(SAT):通过引入噪音点来增加输入难度
DropBlock:
之前的dropout是随机选择点(b),现在吃掉一个区域(c)
Label Smoothing:(标签平滑)
神经网络最大的缺点:容易过拟合,所以为了克服这个问题,标签别太绝对,有一定的容错性
例如原来标签为(0,1) : [0,1] × (1 -0.1)+0.1/2 =[0.05,0.95]
使用之后效果分析(右图)︰簇内更紧密,簇间更分离
损失函数:
IOU损失:(也经常1-IOU)
遇到的问题
没有相交则IOU=0无法梯度计算,相同的IOU却反映不出实际情况到底咋样
公式:
GIOU损失:
公式:
引入了最小封闭形状C(C可以把A,B包含在内,在不重叠情况下能让预测框尽可能朝着真实框前进),下图
缺点:重叠的时候结果相似
DIOU损失:(用距离进行度量)
公式:
其中分子计算预测框与真实框的中心点欧式距离d
分母是能覆盖预测框与真实框的最小BOX的对角线长度c
直接优化距离,速度更快,并解决GIOU问题
CIOU损失:
公式:
∝v 是长宽比
其中α可以当做权重参数
DIOU-NMS:
之前使用NMS来决定是否删除一个框,现在改用DIOU-NMS
不仅考虑了loU的值,还考虑了两个Box中心点之间的距离
其中M表示高置信度候选框,Bi就是遍历各个框跟置信度高的重合情况
SOFT-NMS:
(DIOU-NMS高度相似,直接剔除)
柔和一点的NMS,更改分数不会直接剔除,更改分数后,看是否达到要求,再考虑是否剔除
网络结构层:
Bag of specials(BOS)
增加稍许推断代价,但可以提高模型精度的方法
SPPNet(Spatial Pyramid Pooling):
增大感受野
V3中为了更好满足不同输入大小,训练的时候要改变输入数据的大小
SPP其实就是用最大池化来满足最终输入特征一致即可
CSPNet (Cross Stage Partial Network):
每一个block按照特征图的channel维度拆分成两部分
一份正常走网络,另一份直接concat到这个block的输出(好处:维度减少,计算量就减少,速度更快,精度并没有下降)
V4中用的是SAM,也就是空间的注意力机制,如下图
针对SAM也进行了一点改进
上图可以看出,以前是2层池化再卷积
现在直接进行了卷积
好处:速度相对能快一点
PAN(Path Aggregation Network):
引入了自底向上的路径,使得底层信息更容易传到顶部(以前是自顶向下)
并且还是一个捷径,红色走个100层(Resnet)到,绿色的几层就到了(下图)
YOLOV4中PAN特征融合时并不是加法,而是拼接
Mish:
公式:
主要作用:给前期学的不好的数据给机会,后期说不定会训练好
Relu有点太绝对了,Mish更符合实际
但是计算量确实增加了,效果会提升一点
YOLO-V4整体网络结构:
YOLO-v5:
Backbone: New CSP-Darknet53
Neck: SPPF, New CSP-PAN
Head: YOLOv3 Head
网络结构:
将Focus模块替换成了6x6的普通卷积层。两者功能相同,但后者效率更高。
Spp->到sppf 并行输入改串行输入,效率更高,速度更快
数据增强- Mosaic:
将四张图片拼成一张,扩充数据多样性
数据增强- Copy paste:
将不同图像目标检测到的目标,复制粘贴合成(要求:有每个目标实例分割的标签)
数据增强-Random affine:
旋转,缩放,平移,错切
数据增强-MixUp:
将两张图片按一定的透明程度合成一张
数据增强- Albumentations
滤波、直方图均衡化以及改变图片质量等等
数据增强- Augment HSV(Hue, Saturation,Value)
色度,饱和度,明度
数据增强-Random horizontal flip:
随机水平翻转
主要训练策略:
- Multi-scale training(0.5~1.5x) 多尺度训练
- AutoAnchor(For training custom data) 对于训练自己的数据集(长宽大小和常见目标差异大时,启动它可以生成新的)
3.Warmup and Cosine LR scheduler:将学习率有小到大,以Cosine的形式慢慢降低学习率
4.EMA(Exponential Moving Average):给学习变量增加了一个动量,这样在更新参数时会更加平滑
5.Mixed precision:
减少对GPU显存占用,对于训练大模型很有用,并且加快网络训练,
6.Evolve hyper-parameters:
YOLOv5的损失主要由三个部分组成:
Classes loss,分类损失,采用的是BCE loss,注意只计算正样本的分类损失。
Objectness loss,obj损失,采用的依然是BCE loss,注意这里的obj指的是网络预测的
目标边界框与GT Box的CIoU。这里计算的是所有样本的obj损失。
Location loss,定位损失,采用的是CIoU loss,注意只计算正样本的定位损失。
针对三个预测特征层(P3,P4, P5)上的obj损失采用不同的权重。
消除Grid敏感度