最近正好读完Yolov4论文并且复现了Yolov5,谈一谈对这个问题的看法。
Yolov4基本上用了2020年所有较好的tricks,很佩服开发团队的实验量。
Yolov5其实完全可以看作是Yolov4的工程版。因此我认为才没有V5的论文。
Yolov4所使用的优化算法总体可以分为2大类,分别是Bag of freebies(BOF)数据层面和Bag of special(BOS)结构层面
Bag of freebies(BOF)数据层面
- 使用了Mosaic data augmentation(马赛克方法),将4张图像拼接在一起,使得训练的泛化性更好。
- Self-adversarial-training(SAT),通过引入噪声点来增加难度。
- DropBlock, 随机舍弃掉一个区域(泛化能力比Dropout更好)。
- 使用了Label Smoothing(标签平滑), 使得簇内更紧密,簇间更分离。缓解了过拟合,让网络别太自信。
- 损失函数对比了GIOU、DIOU最后使用了CIOU。
- DIOU-NMS,非极大值抑制的一种,不仅考虑了IOU还考虑了2个BOX中心点的距离,来决定是否删除一个框。没有选用传统的NMS,因为太绝对了,DIOU-NMS给BOX降分,而不是直接剔除。重合度越高的BOX降分越多
Bag of special(BOS)结构层面
- SPPNet,增大感受野,用最大池化满足族中输入特征一致。
- CSPNet,论文里叫做CSP Darknet,减少了计算量,每一个block按照特征图的channel维度拆分成两个部分,一部分正常走网络,另一部分直接concat到这个block的输出。
- CBAM,加入了注意力机制,V4版本中用的是SAM,也就是空间的注意力机制(没channel的attention)
- Path Aggregation Network(PAN), 理解成双向FPN就行,引入了自底向上的路径,使得底层信息更容易传到顶部,使用的是concat而不是add。
- 激活函数使用的Mish。
,也许是未来之星,解决了ReLu的一些缺点,但是跟Leakly ReLu一样增大运算量,但是效果不一定有明显提升
- eliminate frid sensitivity。在激活函数前面加了个大于1的系数,目的是解决 “坐标回归预测都在0-1之间,如果在grid边界的话就需要非常大的数值才能达到边界”这个问题。