PP-YOLO: 基于YOLOv3改进,超过YOLOv4,速度与精度齐飞的目标检测器

论文地址:https://arxiv.org/pdf/2007.12099.pdf

GitHub: https://github.com/PaddlePaddle/PaddleDetection

 1、动机

一直以来,目标检测器都难以兼顾速度和精度,常常为了在有限的硬件设备上运行而将模型阉割,虽然换来了速度的提升,但精度或多或少都会受到影响。基于这种动机,百度提出了PP-YOLO——一种基于YOLOv3+各种先进tricks改造而来的检测器,达到了不错的速度-精度trade off。这种做法与YOLOv4很像,虽没有什么明显的创新,但通过各种trick加身,得到一个更优的模型。与YOLOv4不同的是,PP-YOLO没有尝试各种backbone以及数据增强方法,仅仅使用一些几乎不增加推理代价的tricks,且其重点在于如何将这些tricks缝合到YOLOv3。PP-YOLO与各流行检测器的对比见上面的图1。

2、方法

网络由backbone+neck+head组成,整体结构如图2所示:

2.1、整体架构

Backbone:PP-YOLO使用改进后的ResNet50-vd替换了原YOLOv3中的DarkNet-53,并在最后一个stage将3*3卷积替换为DCN,从而形成 ResNet50-vd-dcn这个backbone。

Detection Neck:使用FPN构建特征金字塔。

Detection Head:head仍沿用YOLOv3的形式,一个3*3卷积+一个1*1卷积。输出的通道长度为3(K+5),K为类别数;预测map中每个位置预测三个anchor尺寸的目标,每个anchor前K个通道为K个类别的概率,接着4个通道为预测边框坐标,最后一个通道为前景-背景目标得分;交叉熵和L1损失分别用作分类和回归的loss函数;一个前景-背景损失来监督是否为前景。

2.2、所用到的tricks

PP-YOLO所用到的tricks都是已存在的,由于直接用于YOLOv3并不合适,所以这里做了一些适应性调整。

(1)Larger Batch Size

使用了更大的batch size,因为可以提高训练稳定性且得到的结果更好。同时,也对训练策略和学习率调度进行了相应的调整。

(2)EMA(指数移动平均)

在训练时,对参数进行了移动平均,这使得最终的评估效果好上很多。EMA使用指数衰减的速率对参数W进行移动平均(衰减率\lambda设为0.9998):

W_{E M A}=\lambda W_{E M A}+(1-\lambda) W       (1)

(3)DropBlock

这是dropout的一种形式,其将一块连续神经元一起drop掉。这里没有将DropBlock放在backbone,而是放在了FPN,因为作者发现放在backbone会导致性能下降。具体放的位置间图2 FPN中的三角形所标示的地方。

(4)IoULoss

在YOLOv3中,进行边框回归时使用的是L1 loss,而mAP的计算严重依赖IoU,所以这里使用IOU Loss来进行边框回归。与YOLOv4不同的是,没有直接替换掉原来的L1 Loss,而是增加了一个额外的分支,也即边框回归用的loss是L1+IOU。

(5)IoU Aware

在原YOLOv3中,分类概率和前景-背景得分通过相乘得到最终检测置信度,这没有考虑到定位是否准确,于是这里加了一个IOU预测分支,来对定位精度进行改进。训练时,IOU aware用在IOU预测分支上,在推理时,将预测的IoU乘到分类概率及前景-背景得分上。IoU Aware会稍微增加计算代价:参数量增加0.01%,FLOPs增加0.0001%,这代价小到可以忽略不计。

(6)Grid Sensitive

Grid Sensitive是YOLOv4中使用的一个trick。在原YOLOv3中,中心点坐标分解后的形式为:

\begin{array}{l} x=s \cdot\left(g_{x}+\sigma\left(p_{x}\right)\right) \\ y=s \cdot\left(g_{y}+\sigma\left(p_{y}\right)\right), \end{array}  

可以看出,所得的坐标不等于 s · g 或s · (g + 1),这将使得模型很难准确预测位于网格边界上的点。这里将其该为如下形式:

\begin{array}{l} x=s \cdot\left(g_{x}+\alpha \cdot \sigma\left(p_{x}\right)-(\alpha-1) / 2\right), \\ y=s \cdot\left(g_{y}+\alpha \cdot \sigma\left(p_{y}\right)-(\alpha-1) / 2\right), \end{array}

这使得模型更容易预测精确位于网格边界上的边界框中心。该操作增加的FLOPS同样很小,可以忽略。

(7)Matrix NMS

Matrix NMS是受到Soft-NMS启发而开发的。Soft-NMS将其他检测得分衰减为重叠区域的单吊牌降低函数,但这种方法和传统贪婪的NMS一样是顺序执行的,不能并行处理。而Matrix NMS则可以并行处理,因此这加快了推理速度。

(8)CoordConv

其原理在于增加一个额外的坐标通道,使得卷积可以学习其位置坐标。这将允许网络可以全部学习平移不变性也可以学习不同程度的平移依赖。由于CoordConv会增加两个通道,这会增大FLOPS,所以作者没有改变backbone中的卷积,而只是改变了FPN中的1*1卷积和head中的第一个卷积层,如图2中的方块所标示的地方。

(9)SPP

使用SPP可以增加感受野,作者将其用于FPN的最上层,见图2五角星所标示的地方。SPP本身不增加参数量,但其后续卷积层的输入通道会增加,约增加了2%的参数量和1%的FLOPS。

(10)Better Pretrain Model

这里用的是百度改进后的分类准确率更高的ResNet50-vd,且不影响检测器的效率。

3、实验结果

MSFT-YOLO是基于Transformer模型改进Yolov5用于检测SE(电子元器件)缺陷的方法。 Transformer是一种先进的神经网络架构,主要用于自然语言处理任务,但在计算机视觉领域也得到了广泛应用。Yolov5则是一种经典的目标检测算法,通过将图像分成多个网格单元并预测每个单元中的物体,实现了实时目标检测。 在MSFT-YOLO中,我们将Transformer应用于Yolov5的特征提取阶段,以提高对SE缺陷的检测能力。传统的Yolov5使用的是卷积神经网络作为特征提取器,但这种方法在处理复杂的缺陷图像时可能会存在一定的局限性。 通过引入Transformer,我们可以将图像中的每个像素看作是一组序列数据,并利用Transformer的自注意力机制来捕捉不同位置之间的依赖关系。这种方式可以提取出更具语义信息的特征表示,从而有效地检测SE缺陷。 在训练过程中,我们使用大量带有标注的SE缺陷图像来优化网络参数。通过进行端到端的训练,我们可以不断调整网络权重以提高检测精度。此外,我们还可以使用数据增强技术来扩增数据集,从而提升模型的鲁棒性和泛化能力。 实验结果表明,MSFT-YOLO相较于传统的Yolov5在SE缺陷检测方面取得了更好的性能。它能够识别出更多的缺陷类型,同时还具备较低的误检率。这使得它在工业制造等领域中有着广泛的应用前景,能够提高产品质量和生产效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AICVHub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值