mmdetection訓練voc數據集


📖 首先需要准備好數據集,這里有xml標簽數據轉voc數據集格式的說明以及免費分享的數據集:xml轉voc數據集 - 一屆書生 - 博客園 (cnblogs.com)

1. 准備工作目錄

我們的工作目錄,也就是mmdetection目錄,如下所示:

.
├── configs
│   ├── _base_
│   │   ├── datasets
│   │   ├── models
│   │   ├── schedules
│   │   └── default_runtime.py
│   ├──pascal_voc
│   │   └── ......
│   └──......
├── data
│   └── VOCdevkit
│        └── VOC2007 
│              ├── Annotations
│              │   ├── 003002_0.xml
│              │   ├── 003002_1.xml
│              │   └── ......
│              ├── ImageSets
│              │   └── Main
│              │        ├── test.txt
│              │        ├── train.txt
│              │        ├── trainval.txt
│              │        └── val.txt
│              └── JPEGImages
│                   ├── 003002_0.jpg
│                   ├── 003002_1.jpg
│                   └── ......
├── mmdet
│   ├── core
│   ├── datasets
│   └── ......
├── tools
│   └── ......
└── ......
  • configs就是我們的訓練所設計的配置的文件夾,我們需要進行修改符合voc格式。

  • data就是我們的數據集文件,文件目錄如上。

  • mmdet是我們所需要修改的,主要是對訓練的一些數據進行配置,需要修改類別數,。

  • tools是我們的mmdetection提供的工具箱,里邊包含我們要用的訓練和測試文件。

2. 修改mmdetection模型的配置

主要分為兩部分,configs文件夾和mmdet文件夾。

2.1 修改configs文件夾

配置文件指的是 mmdetection/configs 下的文件,也就是你要訓練的網絡的一些配置。默認情況下,這些配置文件的使用的是 coco 格式,只有 mmdetection/pascal_voc 文件夾下的模型是使用 voc 格式,數量很少。如果要使用其他模型,則需要修改配置文件,這里以mmdetection/configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x.py 為例。

1️⃣ 我們先在目錄 mmdetection/configs/pascal_voc 下創建一個 cascade_rcnn_r50_fpn_1x_voc0712.py 作為cascade使用voc數據集的配置文件。就是我們的模型,使用以下基礎配置文件,如果想要修改,可以直接去基礎配置文件里面改。

ascade_rcnn_r50_fpn_1x_voc0712.py 的內容如下:

_base_ = [
    '../_base_/models/cascade_rcnn_r50_fpn_voc.py',
    '../_base_/datasets/voc0712.py',
    '../_base_/schedules/schedule_1x.py', 
    '../_base_/default_runtime.py',
]

runner = dict(type='EpochBasedRunner', max_epochs=7)	# max_epochs就是我們要訓練的總數,根據自己情況修改。

2️⃣ 我們先對 mmdetection/configs/_base_/models 目錄下的創建一個 cascade_rcnn_r50_fpn_voc.py配置文件,文件的內容從同目錄下 cascade_rcnn_r50_fpn.py 里面復制一下,然后進行以下修改。

在 cascade_rcnn_r50_fpn_voc.py配置文件中搜索 num_classes ,改成自己的類別數量,比如說我有一個類,我就改成1。配置文件里一共有三處。

3️⃣ 【可選】如果自己的顯存比較小的話,可以修改 _base_/datasets/voc0712.py 文件里面的 img_scale 共兩處,例如改成(600,400)。

4️⃣ 【可選】為了讓訓練過程更直觀,以及節省存儲空間,可以修改 _base_/default_runtime.py 里面的 interval ,一共有兩個,第一個是模型權重的保存間隔,一般我們設置的比較大一點,例如20(根據你訓練的總epoch而定)。第二個是日志的保存間隔,一般我們設置的比較小一點,例如1(根據你訓練的總epoch而定)。

2.1 修改mmdet文件夾(修改完這里邊的內容需要重新編譯)

1️⃣ 修改 mmdetection/mmdet/core/evaluation/class_names.py ,把 voc_classes() 方法返回值,修改為自己的類別。例如我只有一類,我就改成下面這樣,只有一類的后邊加個逗號,有多類的不用加逗號。

image-20211101155849844

2️⃣ 修改 mmdetection/mmdet/datasets/voc.py ,把 CLASSES ,修改為自己的類別。例如我只有一類,我就改成下面這樣,只有一類的后邊加個逗號,有多類的不用加逗號。

image-20211101160125644

⚠️⚠️⚠️ 兩個文件夾都修改完后,在mmdetection文件夾下,運行命令,python setup.py install,重新編譯一下,為了讓所修改的內容生效。如果報錯類別數量不對的話,請參考:# AssertionError: The `num_classes` (3) in Shared2FCBBoxHead of MMDataParallel does not matches the length of `CLASSES` 80) in CocoDataset - 一屆書生 - 博客園 (cnblogs.com)

3. 開始訓練

1️⃣ 單GPU訓練

python tools/train.py configs/pascal_voc/cascade_rcnn_r50_fpn_1x_voc0712.py

2️⃣ 多GPU訓練

 bash tools/dist_train.sh configs/pascal_voc/cascade_rcnn_r50_fpn_1x_voc0712.py  2  
  • configs/pascal_voc/cascade_rcnn_r50_fpn_1x_voc0712.py 就是我們要訓練模型的配置文件
  • 2 是我們的GPU數目

4. 模型測試

python tools/test.py work_dirs/cascade_rcnn_r50_fpn_1x_voc0712/cascade_rcnn_r50_fpn_1x_voc0712.py work_dir s/cascade_rcnn_r50_fpn_1x_voc0712/latest.pth --show-dir work_dirs/cascade_rcnn_r50_fpn_1x_voc0712/test_show

可視化結果展示:

同時我們的 work_dirs/mask_rcnn_r101_fpn_2x_coco/ 目錄下還會有個json文件,可以可視化我們的一些評價指標的變化情況。為了方便顯示,我們在 mmdetection/ 目錄下新建一個 logs 文件夾,講 json 文件拷貝到 logs 文件夾。

python tools/analysis_tools/analyze_logs.py plot_curve logs/20211101_171556.log.json --keys loss_rpn_cls loss_rpn_bbox loss --out out.pdf
  • plot_curve 代表畫折線

  • logs/20211101_171556.log.json 換成你自己的 json 文件

  • loss_rpn_cls loss_rpn_bbox loss 你想顯示的數據

  • out.pdf 你輸出的文件

顯示結果如下圖:

image-20211101200908517

⭐ 文章到此結束了,完結撒花。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM