PaddleDetection是基于飞桨核心框架构建的目标检测开发套件,覆盖主流目标检测算法,并提供丰富的预训练模型,帮助开发者快速搭建出各种检测任务框架,高质量完成各类目标检测任务。PaddleDetection采用模块化设计,解耦了检测常用的组件,非常方便开发者按需组合并扩展新的算法。
小目标检测
(Tiny Object Detection)
小目标检测任务使用TinyPerson数据集,包括794张训练图片,每张图片中包括上百个小目标人物。任务的目标是评估测试图片中Tiny大小(20*20~40*40像素)的人体目标的AP(Average Precision)。
百度视觉团队的开发同学研究了几种常见的两阶段检测器:Faster R-CNN、FPN、Deformable R-CNN、Cascade R-CNN等,从而探查其对不同IoU阈值的检测标准的适合性。
算法优化方法主要分为四个部分:数据增强、训练策略改进、模型改进和模型融合。
1. 数据增强
通常无人机采集的人群数据集,如Semantic Drone Dataset、Stanford Drone Dataset ,由于数据集数量较小,很难达到快速收敛和较好的检测效果。百度视觉团队采用额外的同类数据来进行同尺度预训练,从而提高模型对同等先验知识的理解,提高模型的检测能力。通过加入数据增强策略,提升2%至3%。
2. 训练策略改进
对于无人机航拍收集的数据,不同图像的原始尺寸和目标的相对尺寸有所不同,导致检测器对有些图像的理解困难。在训练过程中,我们随机地将输入图像的大小调整为原始大小的0.5、1.5倍、1.5倍,解决尺度差异问题。在改进训练策略以后,由57.9%提升至65.38%。
3. 模型改进
对于传统的二阶段检测器,如R-CNN和FPN系列,通常使用ResNet系列网络作为骨干网络。为了改进此种系列检测器,对于FPN检测器,P3层为微小物体的检测提供了相对应尺度的特征。然而,P3层的不足在于它具有较少的语义信息。因此用PAFPN代替FPN,提高了网络的语义识别能力。与普通的FPN相比,PAFPN增加了一条自下而上的路径,从而提高了基于提议的实例分割框架中的信息流。此外,在下采样模块中,使用“carafe”下采样方法代替原来的卷积模块下采样方法,然后使用可变形卷积模块。在上采样模块中,还使用可变形卷积模块代替原来的卷积模块对特征进行上采样。改进后的PAFPN,提升了1.5%。
4. 模型融合
对于难度较大的无人机航拍的小目标检测任务,单尺度单模型显然无法满足图像的复杂以及低信噪比特性,因此,百度视觉团队考虑使用多尺度多模型实现高精度检测。对于模型融合方法,采用具有不同骨干网络(Res2Net, ResNet200,ResNeXt101,SENet154等)的Cascade R-CNN检测器进行融合。对于每个模型,预测了NMS后的边界框。给每个模型一个0到1区间的标量权重。所有权重总和为1,每个模型的盒子的可信度分数乘以其权重,最后合并来自所有模型的框并运行原始的NMS,添加来自不同模型的分数而不是只保留最高的一个。依次顺序使用NMS的修改合并了不同IoU阈值的预测框。最终,模型的达到了72.23%。
通过以上的优化策略,百度视觉团队在Tiny Object Detection比赛中获得冠军,领先第二名0.8%。
COCO Object Detection
COCO是目前学术界最权威的检测和实例分割比赛。COCO数据集中包括11万条训练数据,涵盖80个类别。COCO目标检测和实例分割任务中三个关键优化策略:
- 强大的目标检测分支
- 加强版FPN模块和加强版header
- Two pipeline策略
1. 强大的目标检测分支
比赛中,我们用效果优良的Cascade Mask R-CNN和HTC网络作为基础网络,在这些基础网络上,加入更多改进策略来提升检测效果。
首先,用PaddlePaddle框架下的ImageNet的蒸馏模型作为预训练模型,训练object365数据集的检测模型;并用这个训练好的object365检测模型作为预训练模型,来训练相同网络结构的COCO模型,这样可以在检测任务上获得显著提升的效果。对于具体的网络结构来说,采用Res2net200模型、CBResnet200、SE154模型作为检测模型的backbone。其中,Res2net200的检测模型在单尺度下mAP可以达到56.2%。
其次,使用加强版的FPN模块来提升网络效果,Acfpn网络来增强检测能力,该模型可以解决高分辨率输入上特征图分辨率与感受域之间的矛盾,Acfpn包括两个模块,加入Acfpn后,box mAP增加了0.8%。除了AC-FPN,我们还使用DetectoRS中的RFP网络,RFP网络将反馈连接添加到自底向上的主干层中,这个在HTC-R50上使box mAP提升4.2%。
除了加强版的FPN模块,还使用了non-local算子和数据增强策略。non-local算子用于描述距离像素之间的关联,输出特征图的每个元素都会受到所有输入特征图的影响;同时,还根据COCO数据集的特性,使用了随机擦除的数据增强策略,即在图像中随机选取一个矩形区域,在训练中对其像素进行随机擦除,这样可以降低过拟合的风险,并提高模型对于遮挡目标检测的鲁棒性。
2. 加强版FPN模块和加强版header
为了提高模型最终mask的准确率,我们使用了增强版的header模块。在增强版header模块中,使用HTC的header作为基础header。在此基础上,用增强的双网络box header来代替原有的box header。除此之外,mask header分支整合了rescoring信息、实际坐标信息和边缘信息,组合成了增强版的header。
原始的HTC的box header只有两个全卷积层用于目标框的回归和分类,而增强版的双分支box header使用两个分支,分别预测框的坐标和类别。为了提高效率, 没有用过重的head结构,只使用一个bottleblock模块代替第一个卷积层,其他的卷积层不变;而对于分割rescoring分支,为了避免计算量过大,只在最后一个阶段加入分割rescoring分支,并用rescoring分支的结果取代原有的box分值赋给mask;而边缘分割分支,是在mask header里融入了边缘信息,来提升mask mAP。
3. Two pipeline策略
为了有效利用多个检测网络的结果,将检测网络的结果当作候选框输入到分割网络的head前,最终得到实例分割网络的最终mask结果,通过这种two pipeline策略,mask mAP增长3.1%。
基于上述优化算法,百度视觉团队在COCO object detection track中一举夺魁。
PP-YOLO
除了在学术界不断突破创新,取得好成绩外,飞桨目标检测套件PaddleDetection在工业界同样发挥着巨大的作用。工业视觉、自动驾驶、安防、新零售等我们身边熟知的各行各业都需要应用目标检测技术。由于其很好的平衡了标注成本、检测精度和速度等,成为当前智能制造产业升级浪潮中被商业化应用最为广泛的AI技术之一。
实际生产环境对检测算法的精度、速度、体积等要求往往十分苛刻。例如工业质检,生产线上往往需要毫秒级别的图片检测速度,而为了确保使用厂商收益最大化,还需要尽量平衡硬件成本和性能。因此,如何在保持高检测精度的前提下,尽量提高检测速度、减小模型体积,成为这项技术真正深入工业实际应用的关键。为了匹配工业实际应用,百度视觉团队探索出了一整套更深度的算法优化秘籍:PP-YOLO,模型精度更高,体积更小。
PP-YOLO是YOLO v3的“华丽变身”,即使对检测视频中非常快速运动的目标也可以达到很好的效果。PP-YOLO将YOLO v3的精度(在COCO test-dev2017数据集)从33.0%提升了12.9个绝对百分点,达到45.9%,处于业界领先行列!而在该精度下,其推理速度在V100上达到了72.9 FPS。也就是说,它在精度和预测速度都超越原生的YOLO v4,并且体积更小,实打实的成为工业应用场景最实用目标检测模型。
经过一系列算法优化,我们将训练迭代次数和学习率衰减的迭代次数调整至和原始YOLO v3模型的迭代次数一致,从25万次增加到50万次,对应学习率衰减的迭代次数调整至40万和45万,PP-YOLO模型在COCO minival数据集精度可达到45.3%,单卡V100上batch size=1时的预测速度为72.9 FPS。如果使用COCO test_dev2017数据集测试,精度将达到45.9%。
如下表所示,在不同输入尺度下PP-YOLO模型与YOLO v4模型在COCO数据集精度和V100推理速度的交手结果。
PP-YOLO所应用的的这套优化策略,也可以被尝试应用到该系列的其它模型上,产业开发者或者科研人员可借鉴这套优化算法展开进一步的探索。而这整套PP-YOLO的优化秘籍也被飞桨团队总结梳理成了论文,感兴趣的开发者可以参见下面的链接阅读原文。
PP-YOLO论文:
https://arxiv.org/abs/2007.12099
PP-YOLO文档:
https://github.com/PaddlePaddle/PaddleDetection/tree/release/0.4/configs/ppyolo
飞桨团队在AI Studio为大家创建了 PP-YOLO实战项目,以供开发者快速体验模型效果:
https://aistudio.baidu.com/aistudio/projectdetail/708923
更多PaddleDetection开源代码和参考文档,可登录如下地址获取:
https://github.com/PaddlePaddle/PaddleDetection
欢迎大家给我们点Star、Fork或提出宝贵建议!
如果您想详细了解更多飞桨的相关内容,请参阅以下文档。
·官网地址·
·飞桨开源框架项目地址·
GitHub:
Gitee: