Detectron 目标检测的简单使用,基本介绍. Detectron 初步使用

[Caffe2 - Detectron 安装].

Detectron 提供了基于 COCO Dataset 的推断和训练使用说明 - Using Detectron.

<h2>1. Detectron Model ZOO 和 Baselines</h2>

Detectron 截止到 2017.12 提供了很多 baselines 模型,并记为 12_2017_baselines.

Detectron Model Zoo

Baselines 的配置文件在路径 configs/12_2017_baselines中,并提供了对应的模型和结果.
如Table表.

<h3>1.1 Settings 和 Notes</h3>

  • Baselines 是在 Big Basin 服务器上得到的,其共 8 张 Tesla P100 GPUs (16GB GPU memory, CUDA 8.0, and cuDNN 6.0.21).
  • Baselines 是采用 8 块 GPUs 数据并行 SGD 训练的(data parallel sync SGD),minibatch 为 8 或 16 张图片(参见 表中的 im/gpu).
  • 训练时,只进行了水平翻转数据增广.
  • 推断时,没有数据增广,如 multiple scales, flipping 等处理.
  • 模型都是在 coco_2014_traincoco_2014_valminusminival 上进行训练的,其与最新的 coco_2017_val数据集基本一致.
  • 推断时间一般表示为 X+Y, X 表示在 well-optimized GPU 上的耗时,Y 是在 unoptimized CPU 上的耗时( CPU 耗时可以根据工程实际进一步优化).
  • 推断结果,如 boxes、masks 和 keypoints(kps) 是保存为 COCO json format 的.
  • mode id 项是为了便于参考.
  • 检验下载文件完整性:添加.md5sum 到相应的 URL 接可以下载文件的 md5 hash 值.
  • 模型和结果都是基于 COCO Dataset.
  • 基于 Cityscapes dataset 即将发布.

<h3>1.2 训练方案</h3>

Detectron 提供了三种训练方案,参见表中的 lr schd 项.

  • 1x - minibatch 为 16, 该方案的初始 LR=0.002,并在 60K 和 80K 次迭代后衰减 *0.1,在 90K 次迭代终止. 该方案在 coco_2014_train union coco_2014_valminusminival (或,coco_2017_train) 数据集上的 118287张图片上训练了 12.17 个 epochs.</p>
  • <p>2x - 1x 方案的两倍,LR 相应的进行比例缩放.</p>
  • <p>s1x - stretched 1x,该方案是将方案 1x 大约拉伸了 1.44x,并延长了第一个学习率的持续时间. minibatch 为 16 时,该方案将 LR 在 100K 和 120K 次迭代后衰减 *0.1,在 130K 次迭代终止.</p>

<p>所有的训练方案都使用了 500 次线性学习率的学习率,进行热身.

当 minibatch 在 8 到 16 张图片之间时,根据论文 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour 的策略进行基础学习率 base learning rate 和 SGD 迭代次数的调整.

<h3>1.3 ImageNet Pretrained Models</h3>

Detectron 采用了在 ImageNet-1k 数据集上训练的 Backbone 模型.

  • R-50.pkl: converted copy of MSRA's original ResNet-50 model
  • R-101.pkl: converted copy of MSRA's original ResNet-101 model
  • X-101-64x4d.pkl: converted copy of FB's original ResNeXt-101-64x4d model trained with Torch7
  • X-101-32x8d.pkl: ResNeXt-101-32x8d model trained with Caffe2 at FB
  • X-152-32x8d-IN5k.pkl: ResNeXt-152-32x8d model trained on ImageNet-5k with Caffe2 at FB (see our ResNeXt paperfor details on ImageNet-5k)

<h3>1.4 Proposal, Box, and Mask Detection Baselines</h3>

参见 Proposal, Box, and Mask Detection Baselines.

<h2>1. 基于预训练模型进行推断</h2>

<h3>1.1 直接处理图片文件 Image</h3>

假设图片文件保存路径为 demo/*.jpg,运行 infer_simple.py 即可进行测试.

infer_simple.py是采用 end-to-end 训练得到的 Mask RCNN 模型,ResNet-101-FPN Backbone:

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

Detectron 根据 --wts 参数指定的 URL 自动下载模型.

Detectron 根据 --output-dir参数指定的路径,输出检测的可视化结果,PDF 格式.

如:

Mask RCNN 输出示例.

注: 当对 high-resolution 图片进行推断时,Mask RCNN 可能比较慢,因为很多时间被花费在将预测 masks 上采样到原始图片分辨率上(Detectron 还未进行优化). 解决方案是,先将高分辨率图片 resize,确保其最短边在 600-800px;再对 resized 图片进行推断.

<h3>1.2 COCO Dataset</h3>

采用单块 GPU 运行 end-to-end 训练的 Mask RCNN 模型.

coco_2014_minival 的所有图片进行推断:

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

采用多块 GPUs 时,如 N=8

python2 tools/test_net.py \
    --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml \
    --multi-gpu-testing \
    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 $N

在 NVIDIA Tesla P100 GPU 上,单张图片的推断时间大概是 130-140ms.

<h2>2. Detectron 训练</h2>

简单介绍在 COCO Dataset 上训练模型.

采用 ResNet-50-FPN Backbone 进行 end-to-end 的 Faster R-CNN 训练.

这里简单进行模型训练,小尺寸的输入图片,能够使训练和推断的速度相对较快.

<h3>2.1 单 GPU 训练</h3>

python2 tools/train_net.py \
    --cfg configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml \
    OUTPUT_DIR /tmp/detectron-output
  • 输出保存路径 /tmp/detectron-output,如 models, validation set detections 等.
  • Maxwell GPU,如 M40 上,训练耗时大约 4.2 个小时.
  • M40 上,每张图片的推断时间大约是 80 ms.
  • coco_2014_minival上的 Box AP 大约是 22.1%.

<h3>2.2 Multi-GPU 训练</h3>

Detectron 提供了基于2、4、8 张 GPUS 训练的 configs 参数配置文件.

configs/getting_started/tutorial_{2,4,8}gpu_e2e_faster_rcnn_R-50-FPN.yaml.

如,2 张 GPUs 的训练:

python2 tools/train_net.py \
    --multi-gpu-testing \
    --cfg configs/getting_started/tutorial_2gpu_e2e_faster_rcnn_R-50-FPN.yaml \
    OUTPUT_DIR /tmp/detectron-output

--multi-gpu-testing是告诉 Detectron 在训练结束后,采用 multiple GPUs (如 NUM_GPUs 为 2) 进行并行化推断.

期望的结果:

  • 训练在 2 张 M40 上大概耗时 2.3 个小时.
  • 推断时间大约是 80 ms,在 2 张 GPUs 上并行推断时,耗时减半.
  • coco_2014_minival上的 Box AP 大约是 22.1%.

关于学习方案的调整(“linear scaling rule”),可以参考提供的 config 文件,阅读论文 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.

除了这里,其它的 configs 都是基于 8 GPUs.

如果训练的 GPUs 少于 8,或者想尝试改变 minibatch size,有必要理解如何根据 linear scaling rule 来调整训练方案.

注: 这里的训练示例采用了相对低的 GPU-compute 模型,因此,Caffe2 Python op 的开销相对较高. 导致将 GPUs 由 2 增加到 8 时,开销并不成比例减少,如采用 8 GPUs,需要训练 0.9 小时,只比单张 GPU 快了 4.5x 倍. 当采用相对高的 GPU-compute 模型时,multi-GPUs 开销的减少比例会提高.
Last modification:October 9th, 2018 at 09:31 am