Detectron安装与Mask RCNN介绍

现在,官方版开源代码终于来了。同时发布的,是这项研究背后的一个基础平台:Detectron

官方地址:https://github.com/facebookresearch/Detectron

Detectron是Facebook的物体检测平台,今天宣布开源,它基于Caffe2,用Python写成,这次开放的代码中就包含了Mask R-CNN的实现。

除此之外,Detectron还包含了ICCV 2017最佳学生论文RetinaNet,Ross Girshick(RBG)此前的研究Faster R-CNN和RPN、Fast R-CNN、以及R-FCN的实现。

Detectron的基干(backbone)网络架构包括ResNeXt{50,101,152}、ResNet{50,101,152}、FPN和VGG16。

同时,Facebook还发布了70多种ImageNet-1k预训练模型的性能基准,包括用用1、2块GPU时,上述各种基干架构和检测算法相结合做区域建议、遮罩检测以及人体关键点检测的训练时间、推理时间等。

要使用Detectron,你需要先配置英伟达GPU(是的,它还不支持CPU)、Linux系统和Python2,还要安装Caffe2和COCO API。

前序步骤参考https://github.com/facebookresearch/detectron官方介绍并百度谷歌参考,注意,安装caffe2要求在Python2.7环境进行,如果系统中同时安装Anoconda3的话,就需要在安装运行时有所区分。具体可参考:http://blog.csdn.net/xiongchao99/article/details/79165527

然后,三步装上Detectron:

Clone Detectron:

# DETECTRON=/path/to/clone/detectron 
git clone https://github.com/facebookresearch/detectron $DETECTRON

设置Python模块:

cd $DETECTRON/lib 
make

检查Detectron的测试通过:

sudo python2 $DETECTRON/tests/test_spatial_narrow_as_op.py

这样,就足够用预训练模型做推理了。如果前面命令运行出现No module named caffe.proto或No module named caffe错误,参考http://blog.csdn.net/xiongchao99/article/details/79166113

如果要用Detectron来训练自己的检测模型,就需要先确保能通过符号链接lib/datasets/data找到数据集,然后用CMake创建定制的运算符库:

cd $DETECTRON/lib
make ops

并检查这些运算符的测试通过:

sudo python2 $DETECTRON/tests/test_zero_even_op.py

Facebook还贴心地写了份上手教程,教你用预训练的Mask R-CNN来做物体检测。

如果要在本地图像上运行,只需要使用infer_simple.py工具,运行:

sudo python2 tools/infer_simple.py \
    --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml \
    --output-dir /tmp/detectron-visualizations \
    --image-ext jpg \
    --wts https://s3-us-west-2.amazonaws.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl \
    demo

这里是直接到网上下载已经训练好的最终模型,其对应的配置文件就是命令中的configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml文件,运行结束就能得到如下图所示的输出。

如果要在COCO数据集上做测试,需要运行:

sudo python2 tools/test_net.py \
    --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml \
    TEST.WEIGHTS https://s3-us-west-2.amazonaws.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl \
    NUM_GPUS 1

注意:这里需要先把Coco数据集下载下来,下载方法参见detectron/lib/datasets/data/README.md,如下:

上面这个例子,用了端到端预训练的Mask R-CNN,在一块GPU上运行。如果要使用多个GPU,需要在第二行之后添加 —multi-gpu-testing \ 并更改最后的NUM_GPUS数量。

至于训练模型,官方的GETTING_STARTED.md给了训练faster rcnn模型的方法:
这里参考其Training with 1 GPU进行训练Mask RCNN:

(1)、拷贝configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml一份到getting_started下并命名为tutorial_1gpu_e2e_mask_rcnn_R-50-FPN.yaml;
(2)、修改tutorial_1gpu_e2e_mask_rcnn_R-50-FPN.yaml文件:将configs/test_time_aug/e2e_mask_rcnn_R-50-FPN_2x.yaml中的MRCNN配置拷贝到tutorial_1gpu_e2e_mask_rcnn_R-50-FPN.yaml文件中,粘贴到FAST_RCNN后面,如下所示:

最终我的配置文件如下:


(3)、使用1个GPU的训练命令进行训练:
sudo python2 tools/train_net.py \
--cfg configs/getting_started/tutorial_1gpu_e2e_mask_rcnn_R-50-FPN.yaml \
OUTPUT_DIR /tmp/detectron-output

最终的输出模型在/tmp/detectron-output中,这个地址可改为自己习惯的位置。注意,使用训练好的模型进行上述本地图片或Coco数据集测试时,配置文件就应该使用这个训练用的配置文件configs/getting_started/tutorial_1gpu_e2e_mask_rcnn_R-50-FPN.yaml。


在Facebook内部,Detectron不仅用于研究,还用来为增强现实、商业诚信等方面的应用训练定制化的模型。这些模型训练完成后可以部署在云端或者移动设备上,由Caffe2运行时提供支持。

RBG说,Facebook将Detectron平台开源出来,是想要加速世界各地实验室的研究,推动物体检测的进展。

Now go forth and create algorithms to detect all of the things!

想用Detectron搞物体检测算法,你可能要用到下面这些链接:

Detectron开源代码:
https://github.com/facebookresearch/Detectron

相关物体检测论文:

Mask R-CNN
https://arxiv.org/abs/1703.06870

RetinaNet
https://arxiv.org/abs/1708.02002

Faster R-CNN和RPN
https://arxiv.org/abs/1506.01497

Fast R-CNN
https://arxiv.org/abs/1504.08083

R-FCN
https://arxiv.org/abs/1605.06409

性能基准和Model ZOO:
https://github.com/facebookresearch/Detectron/blob/master/MODEL_ZOO.md

另外,你们可能还想去RBG大神的FB帖子底下表达一波感谢(以及质问开源代码为何拖了这么久):

https://www.facebook.com/ross.girshick/posts/10159910213745261

Have fun~

猜你喜欢

转载自blog.csdn.net/Xiongchao99/article/details/79167353