yolo v5目标检测算法(你的目标检测器又该升级了)
yolo v5目标检测算法(你的目标检测器又该升级了)尽管近年来提出了大量的目标检测算法,但是YOLOv3仍是工业界应用最广泛的算法。这是因为:在实际应用场景中,不仅计算资源有限,软件支持同样不够充分。然而,YOLOv3的性能与两阶段目标检测器的性能仍存在差异,因此,如何提升YOLOv3的有效性同时保持推理速度就成为了其实际应用时的关键问题。本文对现有改进措施进行了分析并通过增强消融研究评估了其对最终模型的影响,此外,那些不起作用的也进行了讨论。通过组合多种有效改进,我们将PP-YOLO在COCO2017 test-dev数据上的性能从45.9%mAP提升到了49.5%mAP,并将所得到的模型称之为PP-YOLOv2。在推理速度方面,PP-YOLOv2可以达到68.9FPS@输入尺寸;采用Paddle推理引擎 TensorRT FP16 bs1,可以进一步将PP-YOLOv2的推理速度提升到106.5FPS。这样优秀的性能碾压了同等参数量的Y
作者丨happy
审稿丨邓富城
编辑丨极市平台
paper: https://arxiv.org/abs/2104.10419
code: https://github.com/PaddlePaddle/PaddleDetection
本文是百度的研究员对PP-YOLO的一次升级,取得更佳的性能(49.5%mAP)-速度(69FPS)均衡,并优于YOLOv4与YOLOv5。从PP-YOLO出发,通过增量消融方式逐步添加有助于性能提升且不增加推理耗时的模块达到提升PP-YOLO模型性能的目的。本文不仅对起正向作用的改进措施进行了分析,同时还对起负面作用的方案进行了说明。总而言之,一句话:你的目标检测器又该升级了。
Abstract在实际应用场景中,有效性与高效性对于目标检测器非常重要。为满足这两个问题,我们全面评估了现有提高PP-YOLO性能的改进措施同时保持推理耗时不变。
本文对现有改进措施进行了分析并通过增强消融研究评估了其对最终模型的影响,此外,那些不起作用的也进行了讨论。通过组合多种有效改进,我们将PP-YOLO在COCO2017 test-dev数据上的性能从45.9%mAP提升到了49.5%mAP,并将所得到的模型称之为PP-YOLOv2。在推理速度方面,PP-YOLOv2可以达到68.9FPS@输入尺寸;采用Paddle推理引擎 TensorRT FP16 bs1,可以进一步将PP-YOLOv2的推理速度提升到106.5FPS。这样优秀的性能碾压了同等参数量的YOLOv4-CSP YOLOv5l等模型。除此之外,采用ResNet101骨干的PP-YOLOv2可以在COCO2017 test-dev数据集上取得50.3%mAP指标。
Introduction尽管近年来提出了大量的目标检测算法,但是YOLOv3仍是工业界应用最广泛的算法。这是因为:在实际应用场景中,不仅计算资源有限,软件支持同样不够充分。然而,YOLOv3的性能与两阶段目标检测器的性能仍存在差异,因此,如何提升YOLOv3的有效性同时保持推理速度就成为了其实际应用时的关键问题。
为同时满足有效性与高效性,我们对PP-YOLO添加了大量基于不提升推理耗时的改进措施以升其整体性能。需要注意的是,尽管有不少方法自称可以独立地改进目标检测器的性能,但实际上某些方法组合后反而失效。因此,这些改进措施的实际组合测试就变的非常有必要。我们基于PaddlePaddle框架采用增强方式逐个评估其有效性。
通过增量方式调整不同的改进措施,我们得到了本文的PP-YOLOv2,它达到了更好的性能(49.5%mAP)-效率(69FPS)均衡。超过了现有同参数量的检测器YOLOv4-CSP与YOLOv5.
Revisit PP-YOLO我们先对基线模型的实现进行简单说明。
Pre-Processing 首先采用Mixup(服从分布)训练;然后以0.5概率逐个执行如下增广方案RandomColorDistortion、RandomExpand、RandCrop、RandomFlip;接下来进行归一化;最后输出尺寸从中随机抽取进行多尺度训练。
Baseline Model 本文的基线模型为YOLOv3的改进版PP-YOLO,具体来说,它的骨干网络为ResNet50-vd,通过总计10个改进措施(包含Deformable Conv、SSLD、CoordConv、DropBlock、SPP等)改进YOLOv3的性能且几乎不影响推理效率。可参见如下示意图。
Training Schedule 在COCO train2017数据集,采用SGD训练500k迭代,bs=96,在前4k迭代中将学习率线性的从0提升到0.005,然后再400k与450k除10,weight_decay=0.0005,momentum=0.9,同时采用了梯度裁剪稳定训练。
Selection of Refinements接下来,我们将介绍本文所用到的改进措施,包含结构、算子、输入尺寸以及损失等。
Path Aggregation Network 对不同尺度的目标进行检测是目标检测的一个基本挑战。实际上,检测Neck需要为所有尺度构建高级语义特征。PP-YOLO采用FPN构建bottom-up通路;近年来也有不少关于FPN的改进,比如BiFPN、PAN、RFP等。本文参考PAN的设计集成了top-down信息。可参见上面图示部分。
Mish Activation Function 已有研究YOLOv4与YOLOv5表明:Mish对于改进目标检测器的性能非常有效。由于我们已经有了一个非常强有力的预训练骨干模型(82.4%top1精度),为保持骨干结构不变,我们仅将Mish用到了Neck部分。
Larger Input Size 提升输入尺寸可以增强目标面积,因此小尺度的目标信息可以更好的保持,进而可以提升模型性能。然而更大尺寸输入会占用更多内存,为使用这个技巧,我们需要减少batch。具体来说,我们将每个GPU的batch从24下降到12,并将输入尺寸从608提升到768。输入尺寸均匀的从中挑选。
IoU Aware Branch 在PP-YOLO中,IoU损失采用了软加权方式;在这里我们采用软标签形式,IoU损失定义如下:
其中t表示锚点与其匹配真实框之间的IoU,p表示原始IoU分支的输出。注:仅仅正样本的IoU损失进行了计算。通过替换损失函数,IoU损失分支表现更佳。
ExperimentsCOCO是目标检测领域广泛使用的基准数据,我们采用COCO train2017(包含80类、118k图像)进行训练;我们在COCO minival(包含5k图像)上进行评估,评估准则采用了标准COCO准则mAP。
Ablation Studies在这部分中,我们主要说明所尝试的哪些有效改进,结果见下表。注:这里的推理速度仅仅考虑Fp32模型的影响,并不包含decoder与NMS。
A 首先,我们参考原始的PP-YOLO构建本文的基线模型,由于CPU端的重度预处理会减慢训练,我们将每个GPU的图像数从24下调到了12,降低bs会导致0.2%mAP指标下降。
PP-YOLO上添加的第一个正向改进为PAN,为稳定训练,我们为PAN模块添加了几个跳过连接,具体可以参见前面的图示部分。可以看到:PAN Mish的添加可以将模型的性能从45.4%mAP提升到47.1%mAP。尽管B模型要比A模型稍慢,但这种程度的性能提升促使我们将PAN应用到最终的模型中。
由于YOLOv4与YOLOv5评估过程中的输入尺寸为640,我们将训练与评估的输入尺寸同样调整到了640以进行公平对比。可以看到:模型性能得到了0.6%mAP提升。
持续输入尺寸应该受益更多,然而不可能同时采用大输入尺寸与大batch。因此我们采用更大输入尺寸 每个GPU12图像训练模型D。此时可以带来额外的0.6%mAP指标提升。
在训练阶段,改进IoU损失表现更好。通过该损失的替换,模型E的提升提升到了49.1%mAP指标且不造成推理效率的损失。
Comparsion with Other SOTA Detectors上表给出了所提方法与其他SOTA方案的性能、效率对比,从中可以看到:
- PP-YOLOv2显著优于YOLOv4-CSP与YOLOv5;
- 在同等FPS下,PP-YOLOv2以2%mAP优于YOLOv4-CSP,以1.3%AP优于YOLOv5l;
- 替换ResNet50为ResNet101后,PP-YOLOv2的性能与YOLOv5x相当且推理速度快15.9%。
由于COCO train2017数据上训练(8个V100)PP-YOLO需要花费80小时,因此我们采用COCO minitrain(它是COCO train2017的子集,包含25K图像)加速消融分析。在COCO minitrain数据上总计训练90k迭代并在60k迭代是学习率除10,其他训练配置同前。
在PP-YOLOv2的研发过程中,我们尝试了大量的素材,某些在COCO minitrain上有正向作用但在COCO train2017上反而具有负面作用。接下来,我们对其中一些进行讨论分析。
Cosine Learning Rate Decay 不同于线性方式学习率衰减,cosine方式学习率衰减是一种平滑的学习率调整,会更有益于训练过程。尽管cosine学习率在COCO minitrain表现更佳,但它对于超参(比如初始学习率、warmup迭代次数、最终的学习率)比较敏感。我们尝试了多种超参数组合,但是在COCO train2017上并未发现正向作用。
Backbone Parameter Freezing 当在下游任务微调ImageNet预训练模型,冻结前两阶段的参数是一种常用策略。尽管在COCO minitrain上这种策略可以带来1%mAP的性能增益,然而COCO train2017数据上反而带来了0.8%mAP性能下降。
SiLU Activation Function 我们还尝试在DetectionNeck中采用SiLU替换Mish,在COCO minitrain可以带来0.3%mAP指标提升,但是在COCO train2017上反而带来了0.5%mAP指标下降。
Conclusion本文对PP-YOLO进行了更新得到了PP-YOLOv2,取得了更高的性能同时保持推理速度不明显提升,在性能-推理速度方面取得了更好的均衡,取得了优于YOLOv4与YOLOv5的性能。我们在PP-YOLO的基础上,通过评估、添加不同的改进措施提升PP-YOLO的性能。