YoloV3改进和优化

YoloV3 的改进和优化

本文主要是参考YoloV4 和 pp-Yolo 来谈一下自己的感受,如有不正确地方欢迎各位指正。
PP- YOLO:https://blog.csdn.net/weixin_44936889/article/details/107560168

1.数据增强

可以采用Mosaic的方法,Mosaic是将四张图片按照一定比例拼接成一张图片,这样可以使模型可以在更小的范围内识别对象,并且,大的Batch Size会使模型的训练效果更好,Mosaic增加了模型的Batch Size的大小,理论上是原来的4倍。

采用GridMask,在原图中生成一些黑色的网格,将图像区域隐藏在网格中,可以让模型学习对象的整个组成部分。
2. 正则化

可以采用DropBlock的方法,DropBlock是Dropout的一种形式,Dropout仅仅只能用在全连接层中,在卷积层中,由于步长一般为1或2,会用重叠部分所以无法使用,因此提出DropBlock结构,直接将feature map相邻区域中的单元格一起删除,从而达到正则化的效果。注意:在PP-Yolo中DropBlock在检测头中使用,没有在主干网络中使用,在主干网络中使用会导致模型的检测效果降低。

3.Loss

Yolo使用的是最简单的L1 loss,但是L1 loss对于大物体和小物体产生的loss值并没有明显的区分,虽然使用了开根号来缓解这种趋势,但是总的来说,大小物体区分不好,因此引入的Iou loss,Iou loss 一共包括有Iou loss, Giou loss, Diou loss, Ciou loss。看了一些前辈的经验,原理上Ciou loss 会产生更好的效果,但是在实际训练过程中,往往采用Iou loss 或者 Giou loss,训练出的最后结果差距不大,但是后两张loss会产生更大的计算量。

在PP-yolo中,作者并没有直接对L1 loss进行替换,而是对Iou loss 产生了一个新的分支,并使用了IOU Aware将分类概率和前景得分乘作为最终检测置信度,而不考虑定位精度。作者引入了IoU预测分支来衡量定位精度。在训练过程中,采用IoU感知损失来训练IoU预测分支。在推理时,将预测的IoU乘以分类概率和客观评分来计算最终的检测置信度,置信度与定位精度关系更大。然后使用最终的检测置信度作为后续NMS的输入。

4.Warm up训练策略

因为如果一开始就使用大的LR,会使模型不稳定(震荡),因此刚开始先采用小的LR进行训练,慢慢增大,等模型适应后,在从大的学习率变小,这样会使模型训练的效果更好。

5.Matrix NMS

Matrix NMS是由Soft NMS演化而来,并以并行的方式实现NMS。因此,Matrix NMS比传统NMS速度快,不会带来任何效率损失。

6.CoordConv

CoordConv是通过使用额外的坐标通道对自己的输入坐标进行卷积访问。CoordConv允许网络学习完全的平移不变性或不同程度的平移依赖。考虑到CoordConv会在卷积层增加两个输入通道,因此会增加一些参数和FLOPs。为了尽可能减少效率的损失,作者不改变骨干网中的卷积层,只使用CoordConv替换FPN中的1x1卷积层和检测头中的第一卷积层。

7.SPP

可以在FPN中引入SSP,并采用max-pooling 操作将k x k最大池化输出连接起来应用SPP模块,其中k = 1,5,9,13, stride = 1。从而使模型来适应不同尺度的物体。

你可能感兴趣的:(YoloV3,目标检测,深度学习)