近日,百度视觉团队借助PaddleDetection在计算机视觉顶会ECCV 2020 (European Conference on Computer Vision,欧洲计算机视觉国际会议)比赛中,斩获两个赛道冠军,分别是Tiny Object Detection和目标检测领域最权威的比赛COCO。git
下载安装命令
## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle
## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
PaddleDetection是基于飞桨核心框架构建的目标检测开发套件,覆盖主流目标检测算法,并提供丰富的预训练模型,帮助开发者快速搭建出各类检测任务框架,高质量完成各种目标检测任务。PaddleDetection采用模块化设计,解耦了检测经常使用的组件,很是方便开发者按需组合并扩展新的算法。github
PaddleDetection产品结构算法
通过不断打磨优化,PaddleDetection的YOLO v3系列模型性能大幅加强,新增多款IoU(Interp over Union)、损失函数、以及多种强大的目标检测模型,套件总体丰富度再次提高。下面咱们一块儿深度探究一下冠军团队的模型优化思路。网络
小目标检测架构
(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.五、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技术之一。
PaddleDetection在各领域的工业应用
实际生产环境对检测算法的精度、速度、体积等要求每每十分苛刻。例如工业质检,生产线上每每须要毫秒级别的图片检测速度,而为了确保使用厂商收益最大化,还须要尽可能平衡硬件成本和性能。所以,如何在保持高检测精度的前提下,尽可能提升检测速度、减少模型体积,成为这项技术真正深刻工业实际应用的关键。为了匹配工业实际应用,百度视觉团队探索出了一整套更深度的算法优化秘籍: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或提出宝贵建议!
下载安装命令
## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle
## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu