【轉】Caffe2 - Detectron 初步使用

轉自:http://blog.csdn.net/zziahgf/article/details/79142978

Detectron 初步使用

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_traincoco_2014_valminusminival 上進行訓練的,其與最新的 coco_2017_val數據集基本一致.
  • 推斷時間一般表示爲 X+YX 表示在 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 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 迭代次數的調整.

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 開銷的減少比例會提高.


發佈了102 篇原創文章 · 獲贊 75 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章