Mxnet-R-FCN-訓練自己的資料集

catn1p發表於2018-09-28

前言

SSD 對於小物體的檢測遠不及 R-FCN。因為工作的需要就訓練了一個 R-FCN 的模型。使用到的 Deformable-ConvNets 在這裡

製作 Pascal VOC 格式資料集

使用 LabelImg 標記資料集,將生成圖片對應的 .xml 檔案。下載地址:LabelImg for win and linux (macOS使用者需要從原始碼編譯,Github : labelImg)

# 首先下載 Deformable-ConvNets 原始碼
git clone https://github.com/msracver/Deformable-ConvNets.git

# 建立資料集目錄
cd Deformable-ConvNets/
sh init.sh
cd data/
mkdir VOCdevkit && cd VOCdevkit
mkdir VOC2007 && cd VOC2007
mkdir Annotations
mkdir JPEGImages
mkdir ImageSets && cd ImageSets
mkdir Main
複製程式碼

目錄建立好之後將 .jpg檔案放入 JPEGImages目錄下 將.xml檔案放入Annotations

執行指令碼劃分 trainval 和 test 集

我使用到指令碼如下:

import os  
import random   
  
xmlfilepath=r'/your/path/to/VOCdevkit/VOC2007/Annotations'  
saveBasePath=r"/your/path/to/VOCdevkit"  
  
trainval_percent=0.9   # 劃分整個訓練集百分之幾作為 trainval
train_percent=0.9       # trainval 中  train 所佔比例
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)    
  
print("train and val size",tv)  
print("traub suze",tr)  
ftrainval = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/trainval.txt'), 'w')    
ftest = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/test.txt'), 'w')    
ftrain = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/train.txt'), 'w')    
fval = open(os.path.join(saveBasePath,'VOC2007/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()  
複製程式碼

執行完畢後,可以看到 ~/data/VOCdevkit/VOC2007/ImageSets/Main 下多了幾個 .txt檔案

修改配置檔案

修改 ~/experiments/rfcn/cfgs/下的 resnet_v1_101_voc0712_rfcn_end2end_ohem.yaml

# 4 行,輸出路徑不想更改的話可以不用動
# 5 行,想用幾個 GPU 就寫幾個,比如我寫了 '0,1'
gpus: '0,1'
# 51 行,修改分類類別數。改為你個人分類數 + 1,比如我資料集有4個分類,我寫了 4 + 1 = 5
NUM_CLASSES: 5
# 54 行
image_set: 2007_trainval
複製程式碼

修改 ~/lib/dataset/下的 pascal_voc.py

# 44 行,改為自己的類別名,注意 '__background__' 不要改
self.classes = ['__background__',  # always index 0
                    'label1', 'label2', ..., 'labeln']
複製程式碼

下載預訓練模型並開始訓練

下載 resnet_101 的預訓練模型放與 ~/model/pretrained_model/下 下載地址在 github 中可以找到,覺得下載速度慢或者無法爬梯子的,我也上傳到 CSDN

訓練

python experiments/rfcn/rfcn_end2end_train_test.py --cfg experiments/rfcn/cfgs/resnet_v1_101_voc0712_rfcn_end2end_ohem.yaml
複製程式碼

總結

如果你有任何問題,歡迎留言詢問。如果你覺得對你有幫助,歡迎點贊。 謝謝閱讀。

相關文章