文章目录
- Abstract
- 1. Introduction
- 2. Revisit PP-YOLO
- Pre-Processing
- Baseline Model
- Training Schedule
- 3. Selection of Refinements
- Path Aggregation Network
- Mish Activation Function
- Larger Input Size
- IoU Aware Branch
- 4. Experiments
- 6. Conclusions
原文地址
源代码
Abstract
对于实际使用的目标检测器来说,有效和高效是必不可少的。为了满足这两个问题,我们综合评估了现有的改进集合,以提高PP-YOLO的性能,同时几乎保持推断时间不变。本文将分析一系列改进,并通过增量烧蚀研究来实证评估它们对最终模型性能的影响,我们尝试过但没有成功的东西也会被讨论。
通过结合多种有效的改进,我们将PP-YOLO在COCO2017测试开发中的性能从45.9% mAP提高到49.5% mAP。由于取得了显著的性能提升,我们提出了PP-YOLOv2。在速度方面,PP-YOLOv2在640x640输入尺寸下运行68.9FPS。采用TensorRT、FP16-精度和batchsize=1的桨叶推理引擎进一步提高了pp - yolov2的推理速度,达到了106.5 FPS。这样的性能超过了具有大致相同参数数量的现有目标检测器(即YOLOv4-CSP, YOLOv5l)。此外,基于ResNet101的PP-YOLOv2在COCO2017测试开发上实现了50.3%的mAP
1. Introduction
近年来,随着深度卷积神经网络(cnn)的兴起,目标检测器的性能得到了迅速提高,YOLOv3[20]仍然是工业中应用最广泛的检测器之一,YOLOv3的精度与两阶段目标探测器存在较大差距。因此,如何在保持推理速度的同时提高YOLOv3的有效性是实际应用中必不可少的问题
为了同时满足这两个问题,我们增加了一堆改进,几乎不增加推断时间,以提高PP-YOLO[16]的整体性能
实际上,这篇文章更像是一篇TECH REPORT,它告诉你如何一步一步地构建PP-YOLOv2
我们在有效性(49.5% mAP)和效率(69 FPS)之间实现了更好的平衡,超过了现有的具有大致相同参数数量的鲁棒检测器,如YOLOv4-CSP[26]和yolov5。希望我们构建PP-YOLOv2的经验可以帮助开发人员和研究人员在实际应用中实现目标检测器时进行更深入的思考
2. Revisit PP-YOLO
Pre-Processing
使用从Beta(α,β)分布中采样的权值来应用Mixup Training[27],其中α = 1.5,β = 1.5。然后,RandomColorDistortion, RandomExpand, RandCrop和RandomFlip逐个应用,概率为0.5。接下来,分别减去0.485、0.456、0.406,除以0.229、0.224、0.225,对RGB通道进行归一化。最后,从中均匀抽取输入大小 [320, 352, 384, 416, 448, 480, 512, 544, 576,608]
Baseline Model
我们的基准模型是PP-YOLO,它是YOLOv3的增强版本。具体来说,它首先将主干替换为ResNet50-vd[9]。之后,总共有10个技巧可以提高YOLOv3的性能几乎没有损失效率,如变形Conv [5], SSLD[4],协调Conv [12], Drop- Block [6], SPP[7]等。本文介绍了PP-YOLO的体系结构
Training Schedule
在COCO train2017上,使用随机梯度下降法(SGD)对网络进行500K次迭代训练,其中96张图像分布在8个gpu上。在4K迭代中,学习率从0线性增加到0.005,在迭代400K和450K时分别除以10。权重衰减设为0.0005,动量设为0.9。采用梯度裁剪来稳定训练过程
3. Selection of Refinements
Path Aggregation Network
在不同尺度上检测目标是目标检测的一个基本挑战。neck用于在所有尺度上构建高级语义特征图。在PP-YOLO中,采用FPN组成自下而上的路径,最近,人们提出了几种FPN变体来增强金字塔表示的能力。如:BiFPN[24]、PAN[14]、RFP[19]等。我们遵循PAN的设计来聚合自顶向下的信息。PAN的详细结构如图2所示
Mish Activation Function
Mish激活函数[18]在许多实际的探测器中被证明是有效的,如YOLOv4和YOLOv5。它们在骨干中采用mish激活功能。然而,我们更喜欢使用预训练的参数,因为我们有一个强大的模型,在ImageNet上达到82.4%的top-1准确率。为了保持主干不变,我们在检测颈部使用mish激活函数代替主干
Larger Input Size
增加输入大小可以扩大对象的面积。这样,小尺度物体的信息就比以前更容易保存。因此,性能将得到提高。但是,更大的输入大小占用更多的内存。为了应用这个技巧,我们需要减小批大小。更具体地说,我们将批处理大小从每个GPU 24张图像减少到每个GPU 12张图像,并将最大输入大小从608张扩展到768张。输入大小从[320,352,384,416,448,480,512,544,576,608,640,672,704,736,768]中均匀抽取
IoU Aware Branch
在PP-YOLO中, IoU aware loss是以软权重形式计算的,这与初始意图不一致。因此,我们采用软标签格式。这是 IoU aware loss
式中t为锚点与其匹配的真地边界框之间的IoU,p为IoU感知支路的原始输出,σ(·)为s型激活函数。需要注意的是,只计算阳性样本的IoU感知损失。通过替换损失函数,IoU感知分支比以前工作得更好(yolov3和pp-yolo也没见IoU aware公式呀)
4. Experiments
我们比较了批大小为1,不使用tensorRT(不使用TRT)或使用tensorRT(使用TRT)的结果。用“+”标记的结果是来自相应官方代码库的更新结果。用“*”标记的结果在我们的环境中使用官方代码和模型进行测试。“†”表示结果包括边界框解码时间(1 ~ 2ms)
6. Conclusions
本文对PP- yolo进行了一些改进,形成了高性能的目标检测器PP- YOLOv2。PP-YOLOv2比其他著名的探测器(如YOLOv4和YOLOv5)在速度和精度之间取得了更好的平衡。在本文中,我们探索了一些技巧,并展示了如何将这些技巧结合在PP- YOLO检测器上,并证明了它们的有效性。此外,有了PaddlePaddle的官方支持,模型开发和生产部署之间的差距缩小了