輕鬆訓練Mask RCNN網絡, 生成定製化的instance segmentation(物體分割) 模型 (含圖文步驟)

像素級的物體識別和分割是Computer Vision中很重要的一個功能, 也是利用Deep Learning來進行上手的重要一步.

1. 環境準備

1.1 安裝Detectron

依據這個連接步驟進行安裝: https://github.com/facebookresearch/Detectron/blob/master/INSTALL.mdpython

1.2 使用COCO 2017數據集進行training的測試

下載coco2017數據集, 並存放在 ./detectron/detectron/datasets/data/coco目錄下面。下載後的數據集有三個目錄,分別是train2017, val2017, annotationsgit

修改文件 ./detectron/detectron/datasets/dataset_catalog.py, 添加對這個新的數據集的定義。github

'coco_train2017': {
        _IM_DIR:
            _DATA_DIR + '/coco/train2017',
        _ANN_FN:
            _DATA_DIR + '/coco/annotations/instances_train2017.json'
    },
    'coco_val2017': {
        _IM_DIR:
            _DATA_DIR + '/coco/val2017',
        _ANN_FN:
            _DATA_DIR + '/coco/annotations/instances_val2017.json'
    },

修改配置文件: configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml, 把「TRAIN」的「DATASETS"改爲"coco_train2017", 把"TEST"的"DATASETS"改爲"coco_val2017"json

執行命令:bash

python tools/train_net.py     --cfg configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml     OUTPUT_DIR ./train_output

2. 準備訓練數據

2.1 使用LabelMe標註多邊形數據

網上有許多LabelMe的安裝方法, 這裏就再也不重複。在win7下面完成安裝,在cmd窗口輸入測試

labelme

就能夠進入LableMe的窗口。spa

標註後,每張圖片會生成一個json文件。code

2.2 把LabelMe的數據轉換爲coco數據格式

LabelMe產生的Json文件須要進行轉換,才能被Detectron所訓練。該連接的python文件能夠完成轉換:https://github.com/lindylin1817/labelme2cocoblog

在./mydata目錄下存放全部LabelMe產生的標註.json文件,運行以下命令完成轉換。圖片

python labelme2coco.py

轉換後的文件爲new.json。該數據集可用爲訓練數據,所以把new.json重命名爲train.json

2.3 生成驗證數據validation

重複上面的步驟,把訓練數據集中的一部分圖片標註,做爲驗證數據集。經過labelme2coco.py,生成validate.json

3. 使用Detectron進行數據訓練

在./detectron/detectron/datasets/data下面建立目錄mytrain,用於存放全部的訓練數據和驗證數據。

創建目錄./detectron/detectron/datasets/data/mytrain/train , 把全部用於訓練的.jpg文件拷貝到該路徑下。

創建目錄./detectron/detectron/datasets/data/mytrain/validation , 把全部用於驗證的.jpg文件拷貝到該路徑下。

創建目錄./detectron/detectron/datasets/data/mytrain/annotations , 把train.json和validation.json拷貝到該路徑下。

修改文件 ./detectron/detectron/datasets/dataset_catalog.py, 添加對這個新的數據集的定義。

'my_train': {
        _IM_DIR:
            _DATA_DIR + '/mytrain/train',
        _ANN_FN:
            _DATA_DIR + '/mytrain/annotations/train.json'
    },
    'my_validation': {
        _IM_DIR:
            _DATA_DIR + '/mytrain/validation',
        _ANN_FN:
            _DATA_DIR + '/mytrain/annotations/validation.json'
    }

修改配置文件: configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml, 把「TRAIN」的「DATASETS"改爲"my_train", 把"TEST"的"DATASETS"改爲"my_validation"

執行命令:

python tools/train_net.py     --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml     OUTPUT_DIR ./mytrain_output

"e2e_mask_rcnn_R-50-FPN_1x.yaml"該配置文件定義了訓練的選項, 包括使用MaskRCNN, Resnet50, 等

4. 調整訓練參數

爲了能得到合理的訓練結果, 咱們須要對訓練中出現的不一樣問題進行解決. 解決的重要方法就是調整訓練參數. 如下羅列分別在不一樣狀況下,該如何調整.

4.1 調整GPU數量

若是咱們機器只有一塊GPU, 那咱們經過修改e2e_mask_rcnn_R-50-FPN_1x.yaml, 能夠把GPU數量進行調整.

NUM_GPUS: 1

4.2 調整迭代次數

在一開始訓練時, 咱們不建議進行不少次的迭代. 咱們儘可能使用短一些的時間, 檢驗整個訓練的配置是否合理. 咱們能夠經過修改e2e_mask_rcnn_R-50-FPN_1x.yaml來減小迭代次數.

MAX_ITER: 10000

 在缺省設置中, 該參數被設爲90000次. 改成10000次後, 在P100 GPU的環境下, 能夠1個小時左右完成整個訓練.

4.3 調整Learning Rate

當咱們使用本身的數據來進行訓練時, 它的數據量和數據分佈都和COCO數據集有着極大的差距. 因此, 若是保留缺省learning rate的值(0.02), 很容易出現NaN的問題(俗稱跑飛了), 而致使訓練終止. 因此咱們須要經過修改e2e_mask_rcnn_R-50-FPN_1x.yaml來把learning rate的初始值減小.

BASE_LR: 0.002

5. 檢查訓練後獲得的檢驗結果

由於咱們在訓練中指定了validation的數據, 在訓練結束時, detectron會自動對咱們放在validation目錄下的圖片進行測試。並把測試結果放在文件mytrain_output/test/my_validation/generalized_rcnn/detections.pkl 中。

運行以下命令就能夠生成可視化的檢測結果:

python tools/visualize_results.py     --dataset my_validation     --detections mytrain_output/test/my_validation/generalized_rcnn/detections.pkl     --output-dir mytrain_output/

生成的結果缺省是pdf文件,以下圖

6. 用訓練好的模型測試本身新的圖片

完成了上面的步驟, 基本上就完成了整個訓練過程。下面就是要測試本身的圖片了。假設咱們的測試圖片都存放在mytest目錄下:

python tools/infer_simple.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --output-dir /tmp/detectron-visualizations --image-ext jpg --wts  mytrain_output/train/my_train\:my_validation/generalized_rcnn/model_final.pkl --output-dir mytest_output/ mytest

測試生成的圖片存放在 mytest_output 目錄下

相關文章
相關標籤/搜索