mmdetection訓練voc格式的自己的數據集


使用mmdetection訓練自己的VOC數據集

首先,是按照官方文檔組織VOC的數據集結構;

1.目錄結構

mmdetection
├── mmdet
├── tools
├── configs
├── data #手動創建data、VOCdevkit、VOC2007、Annotations、JPEGImages、ImageSets、Main這些文件夾 │ ├── VOCdevkit │ │ ├── VOC2007 │ │ │ ├── Annotations #把test.txt、trainval.txt對應的xml文件放在這 │ │ │ ├── JPEGImages #把test.txt、trainval.txt對應的圖片放在這 │ │ │ ├── ImageSets │ │ │ │ ├── Main │ │ │ │ │ ├── test.txt │ │ │ │ │ ├── trainval.txt


2.修改類別

修改mmdetection/mmdet/core/evaluation下的class_names.py中的voc_classes,將 其改為要訓練的數據集的類別名稱。如果不改的話,最后測試的結果的名稱還會是’aeroplane’, ‘bicycle’, ‘bird’, ‘boat’,…這些。修改的位置如圖:

3.修改voc.py文件

修改mmdetection/mmdet/datasets/voc.py 下的類別,如果只有一個類,要加上一個逗號,否則將會報錯,修改位置如圖:

4.修改配置文件

這些類似faster_rcnn_r50_fpn_1x_voc.py的文件,也就是你要訓練的網絡,不過mmdetecion已經把模型搭好,直接調用就好。默認情況下,這些配置文件的使用的是coco格式,只有mmdetection/pascal_voc文件夾下的模型是使用voc格式,不過數量很少,只有三個。當前最新版本的配置文件在mmdetection/configs的目錄如下:

 

 

除了my_configs這個文件是我自己新建的,其他的都是官方給的,打開pascal_voc文件夾,發現voc格式的配置文件僅僅只有幾個;

 

 是的,你沒看錯,官方給的voc格式的配置文件就這么幾個,其他文件夾下打開一看,配置文件基本都是基於coco格式的;

 

 

打開faster_rcnn_r50_fpn_1x_voc.py和faster_rcnn_r50_fpn_1x_coco.py文件,做個對比,看看具體有什么不一樣的地方,方便后面用模型的coco格式文件改成voc格式的,對比圖如下:

 

 

說實話,最開始打開這兩個文件的我也是一臉懵的,后來揣測沒寫的部分,應該是按照默認設置了,這里有個較粗暴的方法,數據可以先不准備,直接將相關環境准備好后,運行訓練的命令:python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py --work-dir work_dirs  

 

運行完命令后,會生成一個包含所有配置信息的配置文件在mmdetection/work_dirs文件夾下面,名稱與你訓練的命令指定的配置文件名稱一樣。

 

這里我生成了兩個具有完整配置信息的配置文件,分別是faster_rcnn_r50_fpn_1x_voc.py和faster_rcnn_r50_fpn_1x_coco.py文件(這兩個文件我也放到后面,有興趣的可以自己下載看看),為了方便將coco的配置文件改為用voc格式的數據取訓練,我仔細對比了兩個文件的不同之處,其實主要是數據那塊的配置信息不太一樣,主要對比如下:

 

 

 

對了,如果要拿coco的配置文件改成voc格式的配置文件,有一個地方要特別注意一下,在配置文件的最后面有一行coco和voc不一樣

evaluation = dict(interval=1, metric='bbox')       //coco格式

evaluation = dict(interval=1, metric='mAP')       //voc格式

 

數據部分的配置信息以及evaluation部分修改完畢,基本就可以用這個文件去加載voc格式的數據了。

 

4.1 修改faster_rcnn_r50_fpn_1x_voc.py里的num_classes變量

首先,全局搜索num_classes,將其值改為: 類別數(注意:這里我搜到的博客都說要改為類別數+1,但是在新版本的mmdetection中,如果這樣改的話,會報錯的)。把搜索到的num_classes全改掉。如圖:

4.2 修改faster_rcnn_r50_fpn_1x_voc.py里的數據加載部分的信息

接着修改faster_rcnn_r50_fpn_1x_voc.py中的數據加載部分的信息,全局搜索dataset_type就能找到在哪,基本就是修改數據的位置之類的信息,注意:我畫橫線的部分,如果你訓練自己的數據,沒有列出VOC2012的數據,就把這兩部分刪除。修改后如圖:

 

 

 


 

5.訓練

運行命令開始訓練:python tools/train.py configs/my_configs/faster_rcnn_r50_fpn_1x_voc.py

ps: 后面參數是你的配置文件的路徑

 

研究了一下,不知道怎么附文件,如果有感興趣的,可以私聊我~~~~~~



免責聲明!

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



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