yolo几代的区别
YOLO V1
head检测头s=7
backbone
是googleNet
YOLO V2
开始预测偏移量
检测头s=13
bounding box设置为五个,为了速度和准确度同时满足
Backbone
卷积尺寸变小,vgg net论文得到一个结论, 7* 7卷积可以用更小的卷积代替,且 33卷积更加节约参数,使模型更小
网络可以做得更深,更好地提取到特征。为什么?因为每做一次卷积,后面都会接一个非线性的激活函数,更深意味着非线性的能力更强了。所以,你可能以后再也见不到 77卷积了
3* 3卷积负责扩大感受野, 1* 1卷积负责减少参数量
使用了GAP(Global Average Pooling)层替代FC层 。提高检测的精度
提升4%mAP。
YOLO V3
检测头3个分支分别为32倍下采样,16倍下采样,8倍下(感受野最小)采样,分别取预测大,中,小目标
每个分支的bounding box设置为3个:每个分支的输出size为:
- [13,13,3*(4+1+80)]
- [26,26,3*(4+1+80)]
- [52,52,3*(4+1+80)]
损失函数的区别,
class_loss,和YOLO v2的区别是改成了交叉熵。
Backbone
darknet 53。ResNet(带gap的imagenet的残差网络)
用的是conv(stride = 2)进行下采样替代 Pooling layer。
因为Pooling layer,不管是MaxPooling还是Average Pooling,本质上都是下采样减少计算量,本质上就是不更新参数的conv,但是他们会损失信息,所以用的是conv(stride = 2)进行下采样。
YOLO V4
一个GT多个anchor,用threshold来控制是否使用该anchor
之前预测偏移量时:
但在v4中,因为考虑到sigmoid函数的值域是:(0,1) ,它不是 [0,1]
geo_loss 从MSE变成用IoU计算
(
- 收敛快(需要的epochs少)。
- 缓解了Bounding box全包含GT问题。
)
CIoU loss的梯度类似于DIoU loss,但还要考虑 的梯度。在长宽在 的情况下, 的值通常很小,会导致梯度爆炸,因此在 实现时将替换成1。
Backbone
输入端,数据增强Mosaic、cmBN、SAT自对抗训练
Mosaic数据增强的方式。
主要有几个优点:
- 丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好。
- 减少GPU:可能会有人说,随机缩放,普通的数据增强也可以做,但作者考虑到很多人可能只有一个GPU,因此Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。
YOLO V5
Backbone
输入端的改进:
1.Mosaic数据增强,和YOLO v4一样。
2.自适应锚框计算:
自适应anchor,而且这个功能还可以手动打开/关掉
3.自适应图片缩放
代码中datasets.py的letterbox函数中进行了修改,对原始图像自适应的添加最少的黑边
推理速度得到了37%的提升(训练时没有采用缩减黑边的方式,还是采用传统填充的方式,即缩放到416*416大小。只是在测试,使用模型推理时,才采用缩减黑边的方式,提高目标检测,推理的速度。)
YOLO v5和前YOLO系列相比,特点应该是:
- (1) 增加了正样本:方法是邻域的正样本anchor匹配策略。
- (2) 通过灵活的配置参数,可以得到不同复杂度的模型
- (3) 通过一些内置的超参优化策略,提升整体性能
- (4) 和yolov4一样,都用了mosaic增强,提升小物体检测性能