win10 tensorflow faster rcnn訓練自己的資料集(一、製作VOC2007資料集)
參考部落格:http://blog.csdn.net/gaohuazhao/article/details/60871886
一、關於VOC資料集:
1)JPEGImages資料夾
資料夾裡包含了訓練圖片和測試圖片,混放在一起
2)Annatations資料夾
資料夾存放的是xml格式的標籤檔案,每個xml檔案都對應於JPEGImages資料夾的一張圖片
3)ImageSets資料夾
Action存放的是人的動作,我們暫時不用
Layout存放的人體部位的資料。我們暫時不用
Main存放的是影象物體識別的資料,分為20類,當然我們自己製作就呵呵呵不一定了,如果你有精力,Main裡面有test.txt , train.txt, val.txt ,trainval.txt.這四個檔案我們後面會生成
Segmentation存放的是可用於分割的資料
4)其他的資料夾不解釋了,分割XXX等用的
如果你下載了VOC2007資料集,那麼把它解壓,把各個資料夾裡面的東西刪除,保留資料夾名字。
二、JPEGImages資料夾
1、重新命名圖片
使用的為Total_Commander軟體
在軟體中開啟影象所處資料夾
全選圖片後,選擇左上角Files——Multi-Rename Tool
選擇Counter,如圖右上方start為起始數,步長為1,Digits為總位數,設定為6。點選Start即可。
三、Annatations資料夾
使用Github上的labelimg:
https://github.com/tzutalin/labelImg
安裝anaconda再cmd中輸入conda list檢視Pyqt and lxml相應版本(如未安裝,按Github上安裝相應檔案)
下載ZIP檔案後,解壓,在labelimg資料夾下shift+右鍵開啟powershell
輸入命令:
pyrcc5 -o resources.py resources.qrc(數字5為Pyqt對應版本)
python labelImg.py
即可開啟labelimg介面
選擇open dir 開啟圖片所處資料夾。點選create rexbox進行標註,點選Save,即可得到這張圖的xml檔案,點選Next Image處理下一張圖。
標註後得到的xml檔案儲存在annotations資料夾下。
生成的xml檔案如圖
如果需要修改xml檔案中的路徑path,可使用一下程式碼(來自部落格:http://blog.csdn.net/Pennypinch/article/details/77750191)
import os
import re
#設定為自己Annotations儲存路徑
_dir = "G:/Annotations/"
xmlList = os.listdir(_dir)
n = 1
for xml in xmlList:
#f = open(_dir + xml, "r")
f = open(_dir + xml, "r", encoding='utf-8')
xmldata = f.read()
#設定為希望修改的path即可
xmldata = re.sub('\<path>(.*?)\</path>', '<path>G:/data/VOCdevkit2007/VOC2007/JPEGImages/' + str(n).zfill(6) + '.jpg</path>', xmldata)
f.close()
f = open(_dir + xml, "w")
f.write(xmldata)
f.close()
n += 1
四、生成ImageSets資料夾中的Main資料夾中的檔案
程式碼來源於參考部落格
在自己的VOC2007資料夾下建立.py檔案,執行以下程式
可修改trainval_percent和train_percent兩個引數,調整用於訓練和測試的圖片數量
import os
import random
trainval_percent = 0.66
train_percent = 0.5
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()
至此,VOC2007資料集製作完成,後續會將此資料集用於tensorflow faster rcnn中使用。