1. 程式人生 > >win10 tensorflow faster rcnn訓練自己的資料集(一、製作VOC2007資料集)

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中使用。