45.2mAP+155FPS! PP-YOLO来了, 精度速度双超YOLOv4
共 3902字,需浏览 8分钟
·
2020-07-28 17:05
点击上方“AI算法与图像处理”,选择加"星标"或“置顶”
重磅干货,第一时间送达
来源:AIWalker
【Happy导语】该文是百度的研究员基于PaddlePaddle而设计了一种高效YOLO系列检测器,它在精度与速度方面双超YOLOv4;同时还给出了各种trick的组合方式,业界良心啊。大家还在等什么,快快去把玩一番咯。
paper:https://arxiv.org/abs/2007.12099
Code: https://github.com/PaddlePaddle/PaddleDetection
Abstract
目标检测是计算机视觉领域非常重要的一个领域,它在不同应用场景中起重要作用。然而由于硬件的约束,往往需要通过牺牲精度以确保检测器在实际应用的推理速度。因此,目标检测器的高效性与高精度的平衡必须要考虑。本文的目标在于实现一个具有精度与速度相对平衡的可以直接在实际场景中进行应用的检测器,而非提出一种新的检测模型。
考虑到YOLOv3已被广泛应用,作者在YOLOV3的基础上研发了一个新的目标检测器。作者主要尝试不会导致模型参数量与FLOPs急剧增加的情况下,组合不同的trick,在确保检测器推理速度不变前提下尽可能提升模型的精度。由于所有实验均基于PaddlePaddle实现,所以作者将其称之为PP-YOLO。通过组合多种trick,所提PP-YOLO可以达成精度(45.2%mAP)与效率(72.9FPS)的更好均衡并取得了优于EfficientDet与YOLOV4的效果。
不同于YOLOv4,PP-YOLO并未尝试不同的骨干网络与数据增广方法,也并未采用NAS技术搜索超参数。在骨干网络方面,该文直接采用ResNet作为骨干网络;在数据增广方面,作者直接采用了基本的MixUp。一个原因:ResNet被广泛应用且不同框架进行过深度优化,故而具有更好的推理速度;另一个原因:骨干网络与数据增广方法的是相对独立的因素,且与该文的探索的trick不相关,同时已有诸多论文进行过相应研究,故而作者并未进行相关的重复探索。因此作者沿着YOLOv3的路线采用手工方式设置参数,不过作者认为更好的骨干网络、更好的增广方案以及NAS搜索超参数可以进一步提升PP-YOLO的性能。
最终,作者通过各种trick探索,PP-YOLO将COC数据集上的精度由43.5%提升到了45.2%同时具有比YOLOv4更快的推理速度。
Method
基于锚点的单阶段检测器通过包含骨干网络、检测衔接模块(通常为FPN)以及检测头用于分类与定位。作者首先对YOLOv3的结构进行了分析并引入了改进版骨干网络ResNet50-vd-dcn;然后作者引入了可以提升性能且不损失有效性的trick组合。
Architecture
Backbone 下图给出了YOLOv3的网络架构图,在原始YOLOv3中,骨干网络为DarkNet53并用于提取多尺度特征。在这里作者采用ResNet50-vd替换DarkNet53并作为PP-YOLO的骨干网络。考虑直接替换会损害YOLOv3的性能,作者采用形变卷积替换ResNet50-vd中的某些卷积层。注:DCN并不会导致参数量与FLOPs的增加,但会影响推理速度。因此,为平衡精度与效率,作者仅对最后一个阶段的卷积进行替换。此时骨干网路为ResNet50-vd-dcn,输出特征分别为。
Detection Neck 作者采用FPN构建特征金字塔进行特征的横向连接,被送入FPN模块,我们采用表示输出特征,见上图。
Detection Head YOLOv3的检测头非常简单,它包含两个卷积层:3x3卷积后接1x1卷积用于得到最终的预测。预测的输出通道数为,其中K表示类别数。在预测的特征图每个位置上赋予三个不同的锚点,对于每个锚点,前K个通道表示K类的预测概率,后续4个通道表示位置,最后通道表示目标得分。对于分类与定位而言,其损失函数分别为CrossEntropyLoss与L1Loss。
Selection of Tricks
在该部分内容中,我们将介绍一下该文用到的trick,这些trick均为已有技术。该文并未提出新颖的检测方法,仅仅聚焦于组合现有trick提升检测的精度且保持速度不变。由于部分trick无法直接用于YOLOv3,故而作者对其进行了调整以适配YOLOv3.
Larger Batch Size 采用更大的batch可以提升训练的稳定性并得到更好的结果,作者将batch从64调整到了196,并同步调整训练机制与学习率;
EMA 在训练过程中,训练参数的滑动平均往往是有益的,已有研究表明:滑动平均参数往往具有比最终模型更优的性能。参数的滑动平均计算方式如下:
注:.
DropBlock 它是一种结构化的丢弃,不同于原文,作者在这里仅对检测头部分添加了DropBlock,因为作者发现对骨干网络添加DropBlock会造成模型的性能损失。
IoU Loss 边界框回归是目标检测非常重要的步骤。在YOLOv3中,L1Loss用于边界框回归。但它并非针对mAP定制,而mAP更依赖于IoU。故IoU以及CIoU、GIoU被提出用于解决该问题。不同于YOLOv4采用IoU损失替换L1损失,作者添加了另外一个分支计算IoU损失。作者发现不同的IoU损失得到的提升是非常相似的,故而作者选择了最基本的IoU损失。
IoU Aware 在YOLOv3中,分类概率与目标得分相乘作为最终的检测置信度,而并未考虑定位精度。为解决该问题,作者添加IoU预测分支度量定位精度,即采用IoU aware损失训练IoU预测分支。在推理阶段,预测IoU与分类概率、目标得分相乘作为最终的预测置信度,并作为后接NMS的输入。该分支会引入额外的计算消耗,大概0.01%的参数量与0.0001%的FLOPs。
Grid Sensitive Grid Sensitive是YOLOv4中引入的一种非常有效的trick。在YOLOv3中,边界框的中心坐标为x和y,此时有:
其中,分别表示sigmoid函数与整数,s为尺度因子。这种表示表示形式导致它难以预测位于网格边界的边界框的中心。作者通过如下改进解决了该问题:
其中。该trick引入的FLOPs非常小,可以忽略不计。
Matrix NMS 它是受Soft-NMS启发而得到了一种技术,它可以并行执行并比传统NMS更快。
CoordConv 它可以使得网络具有translation invariance。考虑到它会引入额外的参数与FLOPs,作者仅仅采用CoordConv替换FPN中的1x1卷积与检测头的第一个卷积。
SPP 该模块是恺明大神提出的一种用于目标检测的模块,它将SPM集成入了CNN。YOLOv4采用SPP通过Concat集成不同尺度kernel最大值池化的结果。尽管SPP不会引入额外参数,但后接卷积的输入通道数会增加。故大约造成2%的额外参数量与1%的FLOPs。
Better Pretrain Model 采用具有更高ImageNet分类精度的骨干网络可以得到更好的检测性能。因此作者采用蒸馏得到的ResNet50-vd模型作为预训练模型。注:这个不会影响检测器的效率。
Experiments
前面已经把该文的全部核心内容介绍完毕,这里就直接上结果咯。下图给出了不同trick产生的性能增益与参数量、FLOPs、推理速度等的对比。
可以看到这样几点:
ResNet50-vd-dcn骨干网路的替换可以得到0.2%mAP的性能增益; LB+EMB+DropBlock组合可以得到另外的2.3%mAP的性能增益; IoU损失可以得到0.5%mAP的性能增益; IoU Aware可以得到0.6%mAP的性能增益; Grid Sensitive可以得到0.3%mAP的性能增益; Matrix NMS可以得到0.7%mAP的性能增益; CoordConv可以得到0.5%mAP的性能增益; SPP可以得到0.3%mAP的性能增益; Better ImageNet Pretrain可以得到0.3%mAP的性能增益。
最后,上图给出了所提PP-YOLO与其他方法的性能-推理速度的对比。可以看到:相比YOLOv4,PP-YOLO具有更高的mAP指标,同时具有更快的推理速度。此外,经由TensorRT优化,速度甚至可达155.6FPS@45.2%mAP。
Conclusion
该文基于PaddlePaddle引入一种新的目标检测器实现,称之为PP-YOLO。相比YOLOv4与EfficientDet,PP-YOLO具有更高的精度更快的推理速度。作者探索了大量的trick,并给出如何组合这些trick提升YOLOv3检测器的精度与速度。
最后的最后求一波分享!
YOLOv4 trick相关论文已经下载并放在公众号后台
关注“AI算法与图像处理”,回复 “200714”获取
个人微信 请注明:地区+学校/企业+研究方向+昵称 如果没有备注不拉群!