从YoLov3到Scaled-YoLov4

从YoLov3到Scaled-YoLov4

参考视频:
Pytorch 搭建自己的YoloV4目标检测平台
yolo系列理论合集
YOLOv4-理论
YoLov4和Scaled-YoLov4代码github:
Pytorch YoLoV4 and Scaled-YoLoV4

YOLOv3:
在这里插入图片描述

  1. Backbone:DarkNet53
    在这里插入图片描述
    取消了pooling层,改用卷积核步长进行降采样(可解释深度没有ResNet深,但效果却更好)

  2. 利用多尺度特征进行目标检测(采用SSD中anchor的思想)
    在这里插入图片描述
    在这里插入图片描述

  3. 类别损失采用logistic代替softmax

即采用二值交叉熵损失,每张图预测的类别概率是独立的,而softmax得到的类别概率和为1

  1. 训练时用multi-scale方法做数据增强
    在这里插入图片描述

YOLOv4:
在这里插入图片描述

  • Backbone:CSP-DarkNet53

    ·CSP:CSPNet可以减少计算量,同时提高推理速度和准确性。
    在这里插入图片描述
    上图红色框与YoLov3对应,以第二个残差块为例,可以看到卷积核参数量减少了:
    在这里插入图片描述

  • SPP:实现不同尺度的特征融合(YoloV3-SPP版本因为这个结构,比yolov3精度mAP提升了3个点,经实验,这个结构使用一次就够了)。
    在这里插入图片描述

  • PANet:coco2017挑战赛中实例分割任务第一名,物体检测第二名。
    ·思想:一般来说高层的特征语义信息丰富,低层的定位信息丰富,PANet在FPN的基础上,再添加一个自底向上的金字塔结构,将低层的强定位特征传递上去。YOLOV3只有(a)的结构,YOLOV4添加了(b),融合了低层的定位信息,对于grid尺寸较小(13x13)情况,也可以得到比较精确的定位信息。
    在这里插入图片描述

  • 激活函数采用Mish:Mish=x × tanh(ln(1+e^x))
    在这里插入图片描述

  • Loss:损失采用CIOU损失
    YOLOv3的定位损失是L2损失,即求边界框真实值与预测值差的平方和,这里的值指的是预测得到的每个框的中心坐标x和y的偏移量,以及宽高。
    YOLOv4采用的是CIOU损失:
    IOU:交并比,可以用来评价输出框(predict box)和ground-truth的距离。
    在这里插入图片描述
    缺点是如果两个框没有相交,根据定义,IoU=0,不能反映两者的距离大小(重合度)。同时因为loss=0,没有梯度回传,无法进行学习训练。此外IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IoU都相等。
    在这里插入图片描述
    CIOU将目标与anchor之间的中心点距离(d2/c2),重叠率(IOU)、长宽比(av)都考虑了进去
    在这里插入图片描述

  • Tricks

  • 训练时可采用Mosaic或MixCut数据增强方法。Mosaic将4张图片拼接,根据论文所说其拥有一个巨大的优点是丰富检测物体的背景!且在BN计算的时候一下子会计算四张图片的数据!MixCut将图像的一部分剪切下来再粘贴到另一张图像上。

  • 采用dropblock代替dropout。在dropblock论文中提到dropout(在训练时每一层随机按概率失活神经元以防止过拟合)被广泛地用作全连接层的正则化技术,但是对于卷积层,通常不太有效。因为卷积层的特征在空间上是相关的。当这些特性相互关联时,即使有dropout,有关输入的信息仍然可以发送到下一层,因此,针对卷积网络,需要一种结构形式的dropout来正则化,即按块来丢弃。
    在这里插入图片描述
    通过dropblock掉整片的区域(比如头和脚),网络就会去注重学习狗的别的部位的特征,来实现正确的分类,从而表现出更好的泛化。

  • label smoothing:也是一种正则化策略。对于分类问题,我们通常认为训练数据中标签向量的目标类别概率应为1,非目标类别概率应为0。Label smoothing将目标概率根据均匀分布做一更新[0,0,1]–>[0.01,0.01,0.98] 标签平滑后的分布就相当于往真实分布中加入了噪声,避免模型对于正确标签过于自信,使得预测正负样本的输出值差别不那么大,从而避免过拟合,提高模型的泛化能力。

  • Cosine annealing LR(余弦退火调整学习率,学习率呈余弦函数型衰减)

  • 使用遗传算法进行超参数的选择。举个例子,如果我们随机选择 100 组超参数。然后使用它们训练 100 个模型。之后,我们从中选出表现最好的 10个模型。对于每个被选中的模型,都根据原始版本创建 10个超参数略有不同的变体版本。再使用这些新的超参数重新训练模型,再次选出其中表现最好的。随着我们不断迭代,我们应该可以找到超参数的最佳集合。

  • ······
    在这里插入图片描述

Scaled-YOLOv4

  1. Backbone(yolov4-csp):根据文章分析,当k大于1时,CSPNet才会比DarkNet计算量更少,因此,对于YoLov4的第一个CSPDarkNet层,将其改回为原来的DarkNet层。
    在这里插入图片描述

  2. PAN & SPP:将原来的PAN也CSP化。仍然将SPP插入到第一组CSPPAN中,这一步可减少40%的计算量。
    在这里插入图片描述
    其中scpize-conv(自己起的名字) 相比于YoLov4中的convx5结构比较如下:
    在这里插入图片描述

  3. YoLoV4-tiny:

  • 对于低端设备,设计模型的推理速度不仅受到计算量和模型大小的影响,更重要的是必须考虑外围硬件资源的限制。作者借鉴的是VovNet(摘自摘要:ResNet是目标检测模型最常用的backbone,DenseNet其实比ResNet提取特征能力更强,而且其参数更少,计算量FLOPs也更少,用于目标检测虽然效果好,但是速度较慢,这主要是因为DenseNet中密集连接所导致的高内存访问成本和能耗。VoVNet就是为了解决DenseNet这一问题,基于VoVNet的目标检测模型性能超越基于DenseNet的模型,速度也更快,相比ResNet也是性能更好) OSA只在最后一次性聚合前面所有的layer。这一改动将会解决DenseNet的问题,因为每个layer的输入channel数是固定的,这里可以让输出channel数和输入一致而取得最小的MAC。

在这里插入图片描述

  • 提出一种梯度截断的思想应用在CSPOSANet中,以得到最佳的计算速度。

  • 在评估低端设备的计算成本时,还必须考虑功耗,影响功耗的最大因素是内存访问成本(MAC)。通常一个卷积运算的MAC计算方法如下:
    在这里插入图片描述
    通过计算几何不等式,可以推导出Cin = Cout时的最小MAC。

  • 最小化卷积输入输出通道数(CIO),经计算当kg > b/2, CSPOSANet可以获得最佳CIO。

  • YoLoV4-tiny结构(融合了CSP与OSA,输出借用了YoLoV3-tiny,激活采用leakyRelu):

在这里插入图片描述

在这里插入图片描述

  1. YoLoV4-large:
  • YOLOv4-large is designed for cloud GPU, the main purpose is to achieve high accuracy for object detection. We designed a fully CSP-ized model YOLOv4-P5 and scaling it up to YOLOv4-P6 and YOLOv4-P7.
  • 更好地预测物体大小的能力基本上取决于特征向量的感受野。在CNN的架构中,与感受野最直接相关的是stage,feature pyramid network(FPN)的架构告诉我们,更高的stage更适合预测大的物体。这里的stage感觉应该和深度的意思差不多。
  • Our experiments show that YOLOv4-P6 can reach real-time performance at 30fps video when the width scaling factor is equal to 1. For YOLOv4-P7, it can reach real-time performance at 15 fps video when the width scaling factor is equal to 1.25.
    在这里插入图片描述
  • 在yolov4-P5的代码中可以看到它是从yolov4-csp继承而来:
    在backbone部分,将原来的[1,2,8,8,4]CSPDarkNet53的尺寸改为[1,3,15,15,7]

在这里插入图片描述
在PAN部分基本不变,只不过在原来的cspize-convs中也加入了残差结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • Result

  • YoLov4-tiny:
    在这里插入图片描述
    此外,在不同GPU上,YoLov4-tiny的速度都很快,另外,如果在GPU RTX2080Ti上使用TensorRT FP16来跑的话,batch size为1或4的情况下,FPS可达到773或1774.
    在这里插入图片描述

  • YoLov4-large:

在这里插入图片描述
此外,作者还验证了这种FPN-Like的架构是一个简单的once-for-all模型。
在这里插入图片描述
蓝色曲线表示在训练好的P7模型中移除P7阶段,黄色代表在训练好的P7模型中移除P7和P6阶段。可以看到,可以发现YOLOv4-P7在高分辨率下的AP最好,而YOLOv4-P7\P7和YOLOv4-P7\P7\P6在中、低分辨率下的AP最好。这意味着我们可以使用FPN-like模型的子网络来很好地执行目标检测任务。
最后再附一张结果图
在这里插入图片描述

目前研一小白,第一次发博,紧紧张张,如有问题,欢迎交流。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值