前期利用yolov3去做飞机和油桶的检测,之后做了Faster RCNN和SSD的同级比对,确实是Faster RCNN好一些,yolo v5也要出来比较一番。下面的是yolov4与yolo v3的区别(部分),最后用yolov5对飞机和油桶进行检测。

yolo v4与yolo v3有很多trick改进,包括两种:bag of freebies和bag of specials。bag of freebies(赠品):指的是在增加模型性能,训练中会降低训练速度,但不影响推理耗时的技巧;bag of specials(特价),就是提高精度、提升性能,会提高模型的推理耗时。下面会列出来,之后有遇到,使用到便会更新。

bag of freebies:

图像增强方式包括旋转、改变物体的颜色、光亮度、对比度、色调、噪声、cutmix、cutout、mixup、mosaic等等。
正则化方式:dropblock
loss损失:DIOU、CIOU
类标签平滑
bag of specials:

增大感受野:SPP
注意力机制:SE
特征融合集成:FPN
更好的激活函数:MISH
后处理最大值抑制:soft-NMS,DIoU NMS

CSP Darknet53:在原来的基础上添加CSP结构和将darkne53中的激活函数替换为Mish激活函数。

CSP结构类似shortcut,不同的是:

CSP采用的是输入会经过2次卷积,其中的卷积会按照shortcut方向输出结果,另一个卷积会单独输出结果
两次卷积输出的结果并不是直接像shortcut直接相加,而是采用cat拼接的方式拼接,作为CSP结构的输出
具体代码可以看我的blog:https://blog.csdn.net/kui9702/article/details/124286267

图像增强方式:

Mixup:操作是将两张图片混合叠加在一起,同时调整两张图片的透明度,比如opencv中的addWeighted()函数。当透明度选择不恰当的时候会导致有错误的特征影响模型训练

Cutout:操作是将图片中的一部分剪切出来置换成所设定的一种颜色或者一些颜色或者马赛克颜色(噪声)。这种会出现标注框中的物体被替换成其他不相干的图片,导致被使用为正样本

CutMix:操作是将图片中的一部分用另外一张图片的一部分或者全部代替。这种会出现标注框中的物体被替换成其他不相干的图片,导致被使用为正样本

Mosaic:操作是将4张图片简单的增强(裁剪、缩放、色彩等),再将图片(左上,右上,左下,右下)拼接在一起。

Label Smoothing(类标签平滑)

原理:将真实标签从非0即1置为0∈[0, 0.1], 1∈[0.9, 1]。

解决:解决训练集小的情况下,由于训练次数过多造成过拟合现象,采用label smoothing可以将确定性减弱。使用类标签平滑使得同类间更平滑,非同类间更分离

Dropblock

  1. 对网络局部区域进行删减丢弃

  2. 训练时以线性比率增加dropblock

SPP

看链接:https://blog.csdn.net/kui9702/article/details/124414692

SE Module

看链接:https://blog.csdn.net/kui9702/article/details/124415863

Mish函数

image-20220425222008248

目前没有对他的函数补充,后续专研激活函数会补充

代码实现

class Mish(nn.Module):
    def __init__(self):
        super(Mish, self).__init__()

    def forward(self, x):
        return x * torch.tanh(F.softplus(x))

检测结果(左边yolov3 右边yolov5)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

yolov5:训练速度更快、过拟合减小、map更高(差不多98)、部署很方便,单张图片速度未测,之后部署再测试,
从结果看,比简单的yolov3效果好的不要太多,对小目标检测更好,泛化性更强,很多检测不出来的目标yolov5都能检测出来