detectron2代碼運行及數據集配置

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包含創建用於從數據集中進行訓練/測試的數據加載器的標準邏輯,但是您也可以編寫自己的邏輯。請參閱使用自定義數據加載器

  • Detectron2實現許多標準的檢測模型,併爲您提供覆蓋其行爲的方法。請參見使用模型編寫模型

  • Detectron2提供了默認的訓練循環,適用於常見的訓練任務。您可以使用掛鉤自定義它,也可以編寫自己的循環。見訓練

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章