1、Detectron2入門
本文檔簡要介紹了detectron2中內置命令行工具的用法。
1.1、預訓練模型的推理
step1:從模型Zoo中選擇一個模型及其配置文件 ,例如:
mask_rcnn_R_50_FPN_3x.yaml
step2:我們提供demo.py能夠運行內置標準模型的工具。使用以下命令運行它:
cd demo/
python demo.py --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml \
--input input1.jpg input2.jpg \
[--other-options]
--opts MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
實例測試:
python demo.py --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input input1.jpg input2.jpg --opts MODEL.WEIGHTS ../models/model_final_f10217.pkl
這些配置是爲了進行訓練而設計的,因此我們需要MODEL.WEIGHTS從模型zoo中指定一個模型進行評估。此命令將運行推斷並在OpenCV窗口中顯示可視化效果。
有關命令行參數的詳細信息,請參閱或查看其源代碼以瞭解其行爲。一些常見的參數是:demo.py -h
-
要在您的網絡攝像頭上運行,請替換爲。--inputfiles--webcam
-
要播放視頻,請替換爲。--inputfiles--video-inputvideo.mp4
-
要在cpu上運行,請在之後添加。MODEL.DEVICEcpu--opts
-
要將輸出保存到目錄(用於圖像)或文件(用於網絡攝像頭或視頻),請使用--output。
1.2、命令行中的訓練和評估
在“ tools / {,plain_} train_net.py”中提供了一個腳本,該腳本用於訓練detectron2中提供的所有配置。可能希望將其用作編寫自己的訓練腳本的參考。
在環境中設置數據集環境變量,DETECTRON2_DATASETS變量值設置爲:F:\dataset\coco2017,數據集結構如下:
要使用“ train_net.py”訓練模型,請首先在datasets / README.md之後設置相應的數據 集,然後運行:
cd tools/
python train_net.py --num-gpus 8 \
--config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml
這些配置是爲8-GPU訓練而設計的。要在1個GPU上訓練,您可能需要更改一些參數,例如:
python train_net.py \
--config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \
--num-gpus 1 SOLVER.IMS_PER_BATCH 2 SOLVER.BASE_LR 0.0025
寫成一行:
python train_net.py --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml --num-gpus 1 SOLVER.IMS_PER_BATCH 2 SOLVER.BASE_LR 0.0025
對於大多數模型,不支持CPU訓練。
要評估模型的性能,請使用:
cd tools
python train_net.py \
--config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \
--eval-only MODEL.WEIGHTS /path/to/checkpoint_file
有關更多選項,請參見。./train_net.py -h
1.3、在代碼中使用Detectron2 API
請參閱我們的 Colab Notebook 以瞭解如何使用detectron2 API來:
1.對現有模型進行推斷
2.在自定義數據集上訓練內置模型
有關在detectron2 上構建項目的更多方法,請參見detectron2 / projects。
2、設置內置數據集
Detectron2內置了對一些數據集的支持。假定數據集存在於環境變量指定的目錄中 DETECTRON2_DATASETS。在該目錄下,detectron2希望在下面描述的結構中查找數據集。
您可以通過設置內置數據集的位置。如果未設置,則默認爲相對於您當前的工作目錄。export DETECTRON2_DATASETS=/path/to/datasets./datasets
該 model zoo 包含CONFIGS並使用這些數據集內置構建機制。
2.1、用於COCO實例/關鍵點檢測的預期數據集結構
coco/
annotations/
instances_{train,val}2017.json
person_keypoints_{train,val}2017.json
{train,val}2017/
# image files that are mentioned in the corresponding json
您也可以使用2014年版本的數據集。
某些內置測試(dev/run_*_tests.sh)使用了COCO數據集的小版本,您可以使用下載./prepare_for_tests.sh。
2.2、PanopticFPN的預期數據集結構
coco/
annotations/
panoptic_{train,val}2017.json
panoptic_{train,val}2017/ # png annotations
panoptic_stuff_{train,val}2017/ # generated by the script mentioned below
通過以下方式安裝panopticapi:
pip install git+https://github.com/cocodataset/panopticapi.git
然後,運行,從全景標記中提取語義標記。python prepare_panoptic_fpn.py
2.3、LVIS實例細分的預期數據集結構
coco/ {train,val,test}2017/ lvis/ lvis_v0.5_{train,val}.json lvis_v0.5_image_info_test.json
通過以下方式安裝lvis-api:
pip install git+https://github.com/lvis-dataset/lvis-api.git
運行以準備“ cocofied” LVIS註釋,以評估在COCO數據集上訓練的模型。python prepare_cocofied_lvis.py
2.4、城市景觀的預期數據集結構
cityscapes/
gtFine/
train/
aachen/
color.png, instanceIds.png, labelIds.png, polygons.json,
labelTrainIds.png
...
val/
test/
leftImg8bit/
train/
val/
test/
通過以下方式安裝城市景觀腳本:
pip install git+https://github.com/mcordts/cityscapesScripts.git
注意:labelTrainIds.png是使用城市景觀腳本創建的:
CITYSCAPES_DATASET=$DETECTRON2_DATASETS/cityscapes python cityscapesscripts/preparation/createTrainIdLabelImgs.py
實例細分不需要它們。
2.5、Pascal VOC的預期數據集結構
VOC20{07,12}/
Annotations/
ImageSets/
Main/
trainval.txt
test.txt
# train.txt or val.txt, if you use these splits
JPEGImages/
3、擴展Detectron2的默認值
研究是以新的方式做事。這給如何在代碼中創建抽象帶來了壓力,這對於任何規模很大的研究工程項目都是一個挑戰:
一方面,它需要具有非常薄的抽象,以允許以新方式進行所有操作。打破現有的抽象並將其替換爲新的抽象應該相當容易。
另一方面,這樣的項目也需要合理的高級抽象,以便用戶可以輕鬆地以標準方式執行操作,而不必擔心僅某些研究人員關心的細節。
在detectron2中,有兩種類型的接口可以共同解決這種壓力:
1、帶有config(cfg)參數的函數和類(有時只有幾個額外的參數)。
這些函數和類實現“標準默認”行爲:它將從配置中讀取所需內容並執行“標準”操作。用戶只需要加載一個給定的配置並傳遞它,而不必擔心使用了哪些參數以及它們的含義。
2、具有定義明確的自變量的函數和類。
這些都是整個系統的一個很小的組成部分。他們需要用戶的專業知識來理解每個參數應該是什麼,並且需要付出更多的努力才能將它們組合成一個更大的系統。但是它們可以以更靈活的方式縫合在一起。
當您需要實現detectron2所包含的“標準默認值”不支持的功能時,可以重複使用這些定義明確的組件。
3、(實驗性的)一些類通過 @configurable 裝飾器實現-可以使用config或顯式參數來調用它們。它們的顯式參數接口目前處於試驗階段,可能會發生變化。
如果僅需要標準行爲,則“ 初學者的教程” 就足夠了。如果需要將detectron2擴展到自己的需要,請參閱以下教程以瞭解更多詳細信息:
-
Detectron2包含創建用於從數據集中進行訓練/測試的數據加載器的標準邏輯,但是您也可以編寫自己的邏輯。請參閱使用自定義數據加載器。
-
Detectron2提供了默認的訓練循環,適用於常見的訓練任務。您可以使用掛鉤自定義它,也可以編寫自己的循環。見訓練。