Detectron 安装.
Detectron 提供了基于 COCO Dataset 的推断和训练使用说明 - Using Detectron.
Detectron 截止到 2017.12 提供了很多 baselines 模型,并记为 12_2017_baselines
.
Baselines 的配置文件在路径 configs/12_2017_baselines
中,并提供了对应的模型和结果. 如Table表.
coco_2014_train
和 coco_2014_valminusminival
上进行训练的,其与最新的 coco_2017_val
数据集基本一致..md5sum
到相应的 URL 接可以下载文件的 md5 hash 值.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.
2x - 1x 方案的两倍,LR 相应的进行比例缩放.
s1x - stretched 1x,该方案是将方案 1x 大约拉伸了 1.44x,并延长了第一个学习率的持续时间.
minibatch 为 16 时,该方案将 LR 在 100K 和 120K 次迭代后衰减 *0.1,在 130K 次迭代终止.
所有的训练方案都使用了 500 次线性学习率的学习率,进行热身.
当 minibatch 在 8 到 16 张图片之间时,根据论文 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour 的策略进行基础学习率 base learning rate 和 SGD 迭代次数的调整.
Detectron 采用了在 ImageNet-1k 数据集上训练的 Backbone 模型.
参见 Proposal, Box, and Mask Detection Baselines.
假设图片文件保存路径为 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 图片进行推断.
采用单块 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.
简单介绍在 COCO Dataset 上训练模型.
采用 ResNet-50-FPN Backbone 进行 end-to-end 的 Faster R-CNN 训练.
这里简单进行模型训练,小尺寸的输入图片,能够使训练和推断的速度相对较快.
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 等.coco_2014_minival
上的 Box AP 大约是 22.1%.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) 进行并行化推断.
期望的结果:
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 开销的减少比例会提高.