轉自:http://blog.csdn.net/zziahgf/article/details/79142978
Detectron 初步使用
Detectron 提供了基於 COCO Dataset 的推斷和訓練使用說明 - Using Detectron.
1. Detectron Model ZOO 和 Baselines
Detectron 截止到 2017.12 提供了很多 baselines 模型,並記爲 12_2017_baselines
.
Baselines 的配置文件在路徑 configs/12_2017_baselines
中,並提供了對應的模型和結果. 如Table表.
1.1 Settings 和 Notes
- 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_train
和coco_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 即將發佈.
1.2 訓練方案
Detectron 提供了三種訓練方案,參見表中的 lr schd 項.
-
1x - minibatch 爲 16, 該方案的初始 LR=0.002,並在 60K 和 80K 次迭代後衰減 *0.1,在 90K 次迭代終止.
該方案在
coco_2014_train
unioncoco_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 迭代次數的調整.
1.3 ImageNet Pretrained Models
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)
1.4 Proposal, Box, and Mask Detection Baselines
參見 Proposal, Box, and Mask Detection Baselines.
1. 基於預訓練模型進行推斷
1.1 直接處理圖片文件 Image
假設圖片文件保存路徑爲 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
- 1
- 2
- 3
- 4
- 5
- 6
Detectron 根據 --wts
參數指定的 URL 自動下載模型.
Detectron 根據 --output-dir
參數指定的路徑,輸出檢測的可視化結果,PDF 格式.
如:
Mask RCNN 輸出示例.
注:
當對 high-resolution 圖片進行推斷時,Mask RCNN 可能比較慢,因爲很多時間被花費在將預測 masks 上採樣到原始圖片分辨率上(Detectron 還未進行優化).
解決方案是,先將高分辨率圖片 resize,確保其最短邊在 600-800px;再對 resized 圖片進行推斷.
1.2 COCO Dataset
採用單塊 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
- 1
- 2
- 3
- 4
採用多塊 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
- 1
- 2
- 3
- 4
- 5
在 NVIDIA Tesla P100 GPU 上,單張圖片的推斷時間大概是 130-140ms.
2. Detectron 訓練
簡單介紹在 COCO Dataset 上訓練模型.
採用 ResNet-50-FPN Backbone 進行 end-to-end 的 Faster R-CNN 訓練.
這裏簡單進行模型訓練,小尺寸的輸入圖片,能夠使訓練和推斷的速度相對較快.
2.1 單 GPU 訓練
python2 tools/train_net.py \
--cfg configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml \
OUTPUT_DIR /tmp/detectron-output
- 1
- 2
- 3
- 輸出保存路徑
/tmp/detectron-output
,如 models, validation set detections 等. - Maxwell GPU,如 M40 上,訓練耗時大約 4.2 個小時.
- M40 上,每張圖片的推斷時間大約是 80 ms.
coco_2014_minival
上的 Box AP 大約是 22.1%.
2.2 Multi-GPU 訓練
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
- 1
- 2
- 3
- 4
--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 開銷的減少比例會提高.