使用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: 后面參數是你的配置文件的路徑
研究了一下,不知道怎么附文件,如果有感興趣的,可以私聊我~~~~~~