1. 程式人生 > 其它 >MMDetection v2.0 訓練自己的voc資料集

MMDetection v2.0 訓練自己的voc資料集

1 新建容器

進入正題 mmdetection docker環境上次已經介紹一次了 ,現在我們新建一個容器

sudo nvidia-docker run  -shm-size=8g -name mm_det -it -v  /train_data:/mmdetection/data

nvidia-docker:新建容器能呼叫GPU

-name : 容器名稱 可自行修改

-v :對映宿主目錄到容器目錄, /train_data 是宿主目錄,對映到容器目錄 /mmdetection/data

退出容器

exit

重新進入容器

sudo docker exec -i -t mm_det /bin/bash

doxker exec :在執行的容器中執行命令

-i -t : 互動模式執行

mm_det : 容器名稱

/bin/bash :執行指令碼

2 準備自己的VOC資料集

mmdetection 支援VOC資料集,還有COCO資料集格式,還可以自定義資料格式,現在我們採用VOC的資料格式,mm_det容器已經對映宿主目錄了,在宿主目錄/train_data,新建目錄存放資料集,可在容器內/mmdetection/data裡在操作,新建目錄結構如下

VOCdevkit

--VOC2007

----Annotations

----ImageSets

------Main

----JEPGImages

Annotations 目錄存放.xml檔案,JEPGImages 存放訓練圖片,劃分資料集使用以下程式碼,

程式碼儲存在/VOCdevkit/VOC2007 目錄下 ,直接執行

import os
import random

trainval_percent = 0.8
train_percent = 0.8
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

上述程式碼分割資料集,訓練集佔80%,測試集佔20% 執行程式碼後可在/VOCdevkit/VOC2007/ImageSets/Main看見三個.txt檔案

三個.txt檔案裡面分別是訓練測試圖片名稱的索引,資料集準備到這就完成了

3 修改 VOC0712.py 檔案

cd /mmdetection/configs/_base_/datasets

進入目錄後開啟voc0712.py

在data的配置 要刪除遮蔽VOC2012的路徑,和VOC2012變數 儲存檔案

4 修改 voc.py 檔案

cd /mmdetection/mmdet/datasets

開啟 voc.py檔案

這個CLASSE 是VOC標籤的類別 我們要換成自己資料集的類別標籤

5 修改class_names.py 檔案

cd /mmdetection/mmdet/core/evaluation

開啟 class_names.py 檔案

修改 voc_classes() 函式返回的標籤,換成自己資料集的標籤 儲存退出

6 修改 faster_rcnn_r50_fpn_1x_coco.py

cd mmdetection/configs/faster_rcnn

我們這次選用faster_rcnn 模型訓練,開啟faster_rcnn_r50_fpn_1x_coco.py檔案

faster_rcnn_r50_fpn_1xcoco.py檔案裡面呼叫了三個檔案,第一個是模型配置檔案,第二個是資料集配置檔案,後來兩個是配置學習率,迭代次數,模型載入路徑等等,我們把原來COCO_detection.py 修改成VOC0712.py 檔案

7 修改faster_rcnn_r50_fpn.py

cd /mmdetection/configs/_base_/models

開啟 faster_rcnn_r50fpn.py 檔案 ,修改num_classes 數量,num_classes 的值等於類別數量,不需要加背景了

以上就是需要修改的內容,修改完成後開始訓練模型

8 訓練模型

python3 ./tools/train.py ./configs/faster_rcnn_r50_fpn_1x.py

訓練完成後可以參考/mmdetection/demo/image_demo.py檔案進行測試

以上就是使用自己的資料集集訓練mmdetection faster_rcnn模型的所有內容

轉載:https://zhuanlan.zhihu.com/p/162730118