近日,飞桨开源了比赛中使用的MSF-DET,助力大规模图像目标检测算法的研究探索和落地应用。
Google AI Open Images 2019比赛地址:
https://www.kaggle.com/c/open-images-2019-object-detection/
GitHub地址:
https://github.com/PaddlePaddle/PaddleDetection/blob/master/docs/OIDV5_BASELINE_MODEL.md
技术报告论文地址:
https://arxiv.org/pdf/1911.07171.pdf
01
Google AI Open Images 2019是Google在2019年举办的大规模目标检测比赛,数据集为Open Images Dataset V5数据集(OIDV5)。OIDV5训练集包含170万张图像,覆盖500个类别,有超过1400万个标注的检测框,是目前已知的最大的目标检测开源数据集,检测图像和标注边框示例图如下图所示。
OIDV5的类别不均衡的现象比较严重[3],有些类别,如Clothing, Flower等,包含上百万个标注边框,而像Hair Dryer等类别仅包含上百个标注边框。不同类别的标注框数量如下图所示,这也造成了模型训练难以收敛的问题。
02
该模型融合了当前较优的目标检测方法,包括Cascade RCNN[4], Feature Pyramid Networks[5], Deformable ConvNets V2[6],Non-local Networks[7],以ResNet200-vd[8]作为骨干网络, 模型结构如下。
ResNet由于其结构简洁、性能很好而被广泛应用于许多深度学习任务中;同时它也有很多变体,下图展示了ResNet的vb、vc和vd结构[9],其中,vd结构在分类和检测等任务上具有更优的性能,在比赛中,团队使用ResNet200-vd作为模型的骨干网络。
Cascade RCNN可以帮助检测器获得更加精确的检测结果。其结构如下所示[4],通过逐渐提升预测框和标注边框的匹配交并比,并不断修正检测框的位置和得分。标准的Cascade RCNN结构只预测前景框和背景框的偏移量,团队在比赛中做了修改,对每个类别都单独预测了一个偏移量。
Feature Pyramid Network解决了目标检测中的多尺度问题,通过将不同等级的特征图进行融合,大大提升了小物体检测的性能,主要结构图如下所示[5]。
Deformable ConvNets V2解决了卷积神经网络在几何变换建模能力有限的缺点。在Deformable ConvNets V1中,卷积核的采样位置不是固定的,而是通过网络学习空间采样的位置,卷积示意图如下;在V2中,除了加了更多的可变形卷积外,还增加了每个采样点的权重的学习,这使得网络在卷积采样时,有更大的自由度[6]。
Non-local Networks引入non-local block,结构如下[7],它基于自注意力机制,使得网络可以获得全局特征图信息,大大提升了网络的全局表征能力,在分类、检测、分割和姿态估计上面都有更优的性能。
此外,在模型训练过程中,团队引入了多尺度训练、动态采样等训练技巧;在计算预测边框的损失函数时,使用Libra loss[10]替代传统的Smooth L1 loss,用于平衡不同难度的预测框之间的损失函数;由于OIDV5和Objects365数据集[11]大约有189个公共类,因此使用Object365数据集对OIDV5数据集进行扩充;在预测时,使用SoftNMS进行后处理[12],保证更多的检测框可以被召回。基于飞桨,该模型在8卡V100(32G)机器上训练之后,最终该单模型(多尺度预测)的得分为0.6492/0.6182。模型的检测效果如下。
为验证模型的泛化性能,基于完全相同的模型结构,DSF-NET在COCO2017[13]和Objects365数据集上也做了实验,最终在各自的验证集上的单模型单尺度mAP如下表。
以上三个数据集的模型均已开源,模型和对应的性能指标可以从这里下载与查看:
https://github.com/PaddlePaddle/PaddleDetection/blob/master/docs/OIDV5_BASELINE_MODEL.md
03
飞桨目标检测库(PaddleDetection)的目的是为工业界和学术界提供丰富、易用的目标检测模型。不仅性能优越、易于部署,而且能够灵活的满足算法研究的需求。主要特性如下:
1. 易部署:
PaddleDetection的模型中使用的核心算子均通过C++或CUDA实现,同时基于PaddlePaddle的高性能推理引擎可以方便地部署在多种硬件平台上。
2. 高灵活度:
PaddleDetection通过模块化设计来解耦各个组件,基于配置文件可以轻松地搭建各种检测模型。
3. 高性能:
基于飞桨框架的高性能内核,在模型训练速度、显存占用上有一定的优势。例如,YOLOv3的训练速度快于其他框架,在Tesla V100 16GB环境下,Mask-RCNN(ResNet50)可以单卡Batch Size可以达到4 (甚至到5)。
飞桨目标检测库github链接如下:
https://github.com/PaddlePaddle/PaddleDetection
04
Objects365数据集和COCO数据集格式相同,在这里主要使用COCO数据集进行介绍
克隆项目并进入项目文件夹。
git clone https://github.com/PaddlePaddle/PaddleDetection.git
cd PaddleDetection
运行下载数据的脚本。
python dataset/coco/download_coco.py
下载并解压完成之后,数据目录结构如下:
dataset/coco/
├── annotations
│ ├── instances_train2014.json
│ ├── instances_train2017.json
│ ├── instances_val2014.json
│ ├── instances_val2017.json
| ...
├── train2017
│ ├── 000000000009.jpg
│ ├── 000000580008.jpg
| ...
├── val2017
│ ├── 000000000139.jpg
│ ├── 000000000285.jpg
| ...
python -u tools/train.py -c configs/dcn/cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms.yml -d ./dataset/coco/
注意:该基线模型需要很大的GPU显存,因此在训练时需要保证GPU显存足够(建议显存至少为22G),如果显存大小不够,建议调整训练的最大尺度(默认配置中为1800)。
首先需要下载COCO的预训练模型并解压。
wget https://paddlemodels.bj.bcebos.com/object_detection/cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms.tar
tar -xf cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms.tar
加载模型和配置文件,指定待检测的图像,进行预测。
python -u tools/infer.py -c configs/dcn/cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms.yml -o weights=./cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms/--infer_img=./demo/000000570688.jpg
可以在output文件夹中查看检测结果。
python -u tools/eval.py -c configs/dcn/cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms.yml -o weights=./cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms/-d ./dataset/coco/
OIDV5数据集与COCO格式不同,目前仅支持单张图片预测。
首先需要下载OIDV5的预训练模型。
wget https://paddlemodels.bj.bcebos.com/object_detection/oidv5_cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms.tar
tar -xf oidv5_cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms.tar
加载模型和配置文件,对单张图片进行预测。
python -u tools/infer.py -cconfigs/oidv5/cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms.yml -o weights=./oidv5_cascade_rcnn_cls_aware_r200_vd_fpn_dcnv2_nonlocal_softnms/ --infer_img=./demo/000000570688.jpg
检测结果可以在output文件夹中查看。
想与更多的深度学习开发者交流,请加入飞桨官方QQ群:796771754。
如果您想详细了解更多飞桨PaddlePaddle的相关内容,请参阅以下文档。
官网地址:
https://www.paddlepaddle.org.cn/
项目地址:
PaddleDetection:https://github.com/PaddlePaddle/PaddleDetection
参考文献及项目地址:
[1] https://www.kaggle.com/c/open-images-2019-object-detection/
[2] https://github.com/PaddlePaddle/PaddleDetection
[3] https://storage.googleapis.com/openimages/web/factsfigures.html
[4] Zhaowei Cai and Nuno Vasconcelos.CascadeR-CNN: Delving into High Quality Object Detection. arXiv:1712.00726[cs], Dec. 2017. arXiv: 1712.00726.
[5] Tsung-Yi Lin, Piotr Dolla ́r, Ross B.Girshick, Kaiming He, Bharath Hariharan, and Serge J. Belongie. Feature pyramidnetworks for object detection. CoRR, abs/1612.03144, 2016.
[6] Xizhou Zhu, Han Hu, Stephen Lin, andJifeng Dai. Deformable convnets v2: More deformable, better results. CoRR,abs/1811.11168, 2018.
[7] Xiaolong Wang, Ross B. Girshick,Abhinav Gupta, and Kaiming He. Non-local neural networks. CoRR, abs/1711.07971,2017.
[8] Kaiming He, Xiangyu Zhang, ShaoqingRen, and Jian Sun. Deep residual learning for image recognition. CoRR,abs/1512.03385, 2015.
[9] Tong He, Zhi Zhang, Hang Zhang,Zhongyue Zhang, Junyuan Xie, and Mu Li. Bag of tricks for image classificationwith convolutional neural networks. CoRR, abs/1812.01187, 2018.
[10] Jiangmiao Pang, Kai Chen, JianpingShi, Huajun Feng, Wanli Ouyang, and Dahua Lin. Libra R-CNN: towards balancedlearning for object detection. CoRR, abs/1904.02701, 2019.
[11] Objects365 Dataset.https://www.objects365.org/overview.html.
[12] Navaneeth Bodla, Bharat Singh, RamaChellappa, and Larry S. Davis. Improving object detection with one line ofcode. CoRR, abs/1704.04503, 2017.
[13] COCO - Common Objects in Context.http:// cocodataset.org/