前言
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
複製程式碼
總結
如果你有任何問題,歡迎留言詢問。如果你覺得對你有幫助,歡迎點贊。 謝謝閱讀。