1.输入端:
(1)Mosica数据增强
采用了和Yolov4一样的Mosaic数据增强的方式
(2)自适应锚框计算
在Yolov3、Yolov4中,训练不同的数据集时,计算初始anchor的值是通过单独的程序运行的。
但Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。
当然,如果觉得计算的锚框效果不是很好,也可以在代码中将自动计算锚框功能
关闭
。
控制的代码即
train.py
中上面一行代码,设置成
False
,每次训练时,不会自动计算。
(3)自适应图片缩放
注意:训练时使用传统的缩放方式,测试时才使用自适应图片缩放。
第一步:计算缩放比例,选取最小的比例
第二步:计算缩放后的尺寸
第三步:计算黑边填充数值,最后的高度要能被32整除
2.Backbone
(1)Focus结构
(2)
CSP结构
Yolov4和Yolov5都使用了CSP结构。而yolov4只在backbone中使用了CSP结构,yolov5有两种CSP结构,以
Yolov5s网络
为例,
CSP1_X结构
应用于
Backbone主干网络
,另一种
CSP2_X
结构则应用于
Neck
中。
yolov4
yolov5
3. Neck
和Yolov4中一样,都采用FPN+PAN的结构。但两者有差别:Yolov4的Neck结构中,采用的都是普通的卷积操作。而Yolov5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。
4.输出端
(1)Bounding box损失函数
和yolov4一样,Yolov5中采用其中的CIOU_Loss做Bounding box的损失函数。
(2)
nms非极大值抑制
Yolov4在DIOU_Loss的基础上采用DIOU_nms的方式,而Yolov5中采用加权nms的方式。