目标检测是机器视觉领域的核心问题之一。7 月 3 日百度 AI 开发者大会,飞桨核心框架 Paddle Fluid v1.5 宣布开源了 PaddleDetection 物体检测统一框架,用户可以非常方便、快速的搭建出各种检测框架,构建强大的各类应用。
PaddleDetection 物体检测统一框架,覆盖主流的检测算法,即具备高精度模型、也具备高速推理模型,并提供丰富的预训练模型,具有工业化、模块化、高性能的优势。
- 工业化:结合飞桨核心框架的高速推理引擎,训练到部署无缝衔接
- 模块化:提供模块化设计,模型网络结构和数据处理均可定制
- 高性能:基于高效的核心框架,训练速度和显存占用上有一定的优势,例如,YOLO v3 训练速度相比同类框架快 1.6 倍。
支持的模型与主干网络体系
模型
Faster-RCNN(支持 FPN):创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,建议框数目减少,质量提高。
Mask-RCNN(支持 FPN):经典的两阶段框架,在 Faster R-CNN 模型基础上添加分割分支,得到掩码结果,实现了掩码和类别预测关系的解藕,可得到像素级别的检测结果。
Cascade-RCNN:在训练过程中选取不同的 IoU 阈值,训练多个级联的检测器。在具有挑战性的 COCO 数据集上,作为单模型对象检测器表现优异。
RetinaNet:经典的一阶段框架,由 ResNet 主干网络、FPN 结构、和两个分别用于回归物体位置和预测物体类别的子网络组成。在训练过程中使用 Focal Loss,解决了传统一阶段检测器存在前景背景类别不平衡的问题,进一步提高了一阶段检测器的精度。
YOLO v3:速度和精度均衡的目标检测网络,相比于原作者 DarkNet 中的 YOLO v3 实现,飞桨的实现参考了论文 Bag of Tricks for Image Classification with Convolutional Neural Networks 增加了 mixup,label_smooth 等处理,精度(mAP(0.5:0.95))相比于原作者提高了 4.7 个绝对百分点,在此基础上加入 synchronize batch normalization,最终精度相比原作者提高 5.9 个绝对百分点。
SSD:很好的继承了 MobileNet 预测速度快,易于部署的特点,能够很好的在多种设备上完成图像目标检测任务。
主干网络
ResNet、ResNet-VD、ResNeXt、ResNeXt-VD、SENet、MobileNet、DarkNet。
预训练模型效果
本次 PaddleDetection 总共开源 20+ 个预训练模型,不仅开源常用主干网络的基线模型,并且基于 ResNet 改进版的模型,几乎在不增加计算量的情况下,在 COCO 数据集上,相比基线模型精度提升 1% 左右,如下表所示。Yolo v3 也持续发布更轻量的主干网络模型。
安装好飞桨环境后,可以下载预训练模型快速验证推理效果。 同时,PaddleDetection 也提供了 Jupyter Notebook 的推理示例程序,参考:
https://github.com/PaddlePaddle/models/blob/develop/PaddleCV/PaddleDetection/demo/mask_rcnn_demo.ipynb
python tools/infer.py -c configs/mask_rcnn_r50_1x.yml -o weights=https://paddlemodels.bj.bcebos.com/object_detection/mask_rcnn_r50_1x.tar --infer_img=demo/000000570688.jpg
自动生成配置文件
PaddleDetection 从自动化和静态分析的原则出发,采用了一种用户友好、 易于维护和扩展的配置设计,避免对配置的检查并不严格造成的拼写错误或者遗漏的配置项造成训练过程中的严重错误,将问题提前规避。
利用 Python 的反射机制,PaddleDection 的配置系统从 Python 类的构造函数抽取多种信息, 如参数名、初始值、参数注释、数据类型来作为配置规则,便于设计的模块化,提升可测试性及扩展性。
为了方便用户配置,PaddleDection 提供了 configure 工具,为用户提供以下功能:
- 预定义好各个模块,根据给出的模块列表生成配置文件,默认生成完整配置;
- 如果指定参数,也可以生成最小配置,即省略所有默认配置项;
- 检查配置文件中的缺少或者多余的配置项以及依赖缺失;
- 显示指定模块的帮助信息,如描述,配置项,配置文件模板及命令行示例;
- 列出当前已注册的模块。
灵活易用的数据处理
- 支持多种数据源,方便的数据源扩展能力;
- 可定制的、可插拔的图像预处理功能,可快速构建复杂预处理流程;
- 多种数据预处理加速策略 ,具备基于共享内存多进程加速能力。
数据是深度学习中最关键的一步,数据的量级和数据类型直接影响模型的训练结果。如何进行数据预处理也是各位开发者开始训练一个模型的第一步,PaddleDetection 的数据处理模块用于加载数据并将其转换成适用于检测模型的训练、验证、测试所需要的格式。
PaddleDetection 为用户提供可定制的、可插拔的图像预处理功能,即为用户针对不同的算法提供了缺省的数据预处理操作,也给用户预留了的灵活配置的接口,下面截取部分配置文件代码片段,可自由增添操作。
sample_transforms:- !DecodeImageto_rgb: truewith_mixup: false- !RandomFlipImageprob: 0.5- !NormalizeImageis_channel_first: falseis_scale: truemean: [0.485, 0.456, 0.406]std: [0.229, 0.224, 0.225]- !ResizeImagemax_size: 1333target_size: 800- !Permutechannel_first: trueto_bgr: false
项目地址:
https://github.com/PaddlePaddle/models/tree/v1.5/PaddleCV/PaddleDetection?fr=zhihu
下载最新版本的 Paddle Fluid v1.5:
http://www.paddlepaddle.org.cn?fr=zhihu