依據這個連接步驟進行安裝: https://github.com/facebookresearch/Detectron/blob/master/INSTALL.mdpython
下載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
網上有許多LabelMe的安裝方法, 這裏就再也不重複。在win7下面完成安裝,在cmd窗口輸入測試
labelme
就能夠進入LableMe的窗口。spa
標註後,每張圖片會生成一個json文件。code
LabelMe產生的Json文件須要進行轉換,才能被Detectron所訓練。該連接的python文件能夠完成轉換:https://github.com/lindylin1817/labelme2cocoblog
在./mydata目錄下存放全部LabelMe產生的標註.json文件,運行以下命令完成轉換。圖片
python labelme2coco.py
轉換後的文件爲new.json。該數據集可用爲訓練數據,所以把new.json重命名爲train.json
重複上面的步驟,把訓練數據集中的一部分圖片標註,做爲驗證數據集。經過labelme2coco.py,生成validate.json
在./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, 等
爲了能得到合理的訓練結果, 咱們須要對訓練中出現的不一樣問題進行解決. 解決的重要方法就是調整訓練參數. 如下羅列分別在不一樣狀況下,該如何調整.
若是咱們機器只有一塊GPU, 那咱們經過修改e2e_mask_rcnn_R-50-FPN_1x.yaml, 能夠把GPU數量進行調整.
NUM_GPUS: 1
在一開始訓練時, 咱們不建議進行不少次的迭代. 咱們儘可能使用短一些的時間, 檢驗整個訓練的配置是否合理. 咱們能夠經過修改e2e_mask_rcnn_R-50-FPN_1x.yaml來減小迭代次數.
MAX_ITER: 10000
在缺省設置中, 該參數被設爲90000次. 改成10000次後, 在P100 GPU的環境下, 能夠1個小時左右完成整個訓練.
當咱們使用本身的數據來進行訓練時, 它的數據量和數據分佈都和COCO數據集有着極大的差距. 因此, 若是保留缺省learning rate的值(0.02), 很容易出現NaN的問題(俗稱跑飛了), 而致使訓練終止. 因此咱們須要經過修改e2e_mask_rcnn_R-50-FPN_1x.yaml來把learning rate的初始值減小.
BASE_LR: 0.002
由於咱們在訓練中指定了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文件,以下圖
完成了上面的步驟, 基本上就完成了整個訓練過程。下面就是要測試本身的圖片了。假設咱們的測試圖片都存放在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 目錄下