【深度学习】制作VOC2007数据集用于Faster-RCNN训练
制作VOC2007數據集用于Faster-RCNN訓練:VOC2007格式是faster-RCNN中官方給出的用于訓練的數據集,把它下載下來用frcnn/tool里的訓練程序跑一跑就可以得到自己的訓練網絡了,首先說明一下我們需要準備的文件:
1. 訓練所需的圖片;
2. 圖片上ROI標注信息的XML文件;
3. 將數據集分割為三部分分別用于frcnn進行訓練,驗證,測試等。
第一步:圖片的重命名
VOC2007格式必須為JPG格式,并且圖片是統一的六位數字,從000001開始。那我們也需要將所有訓練圖片重命名為此。Python代碼如下:
import os import numpy as np import re import pandas as pddire = r'F:\dataset\UAV' a = os.listdir(dire)mode = re.compile(r'\d+') for i in range(n):ids[i] = mode.findall(a[i])[0]a[i] = dire + '\\' + a[i]b = np.zeros(n).astype(np.str) pos = 6 for i in range(n):c = str(i)ze = pos-len(c)b[i] = '0'*ze+str(i)b[i] = dire +'\\'+b[i]+'.jpg'for i in range(n):os.rename(a[i],b[i])第二步:框定ROI
針對需要訓練的圖像,我們需要將ROI輸出,如下圖所示,位置信息包含四個值,分別為ROI左上角的X,Y值與右下角的X,Y值。那個問題來了,針對大批量的數據集如何快速提取ROI呢,在網上搜索半天發現原來Matlab2014已經有了這個功能。
這里要注意的是,matlab打框產生的ROI產生的4個值,分別為ROI左上角的X,Y值與ROI的寬和高。這里推薦可以用Eexcel處理一下。
第三步:產生XML文件
把上一步得到的txt文檔轉換為XML文件,python代碼如下,我的需要訓練識別的物體只有一個,如果要識別多個目標,那需要略微修改一下如下代碼。
#encoding=utf-8import sys import os import codecs import cv2root = r'F:\dataset\xml' fp = open('F:\dataset\pos-all.txt') fp2 = open('train.txt', 'w') uavinfo = fp.readlines()for i in range(len(uavinfo)):line = uavinfo[i]line = line.strip().split('\t') img = cv2.imread(line[0])sp = img.shapeheight = sp[0]width = sp[1]depth = sp[2]info1 = line[0].split('\\')[-1]info2 = info1.split('.')[0]l_pos1 = line[1]l_pos2 = line[2]r_pos1 = line[3]r_pos2 = line[4]fp2.writelines(info2 + '\n')with codecs.open(root +r'\\'+ info2 + '.xml', 'w', 'utf-8') as xml:xml.write('\n')xml.write('\t<folder>' + 'UAV_data' + '</folder>\n')xml.write('\t<filename>' + info1 + '</filename>\n')xml.write('\t<source>\n')xml.write('\t\t<database>The UAV autolanding</database>\n')xml.write('\t\tUAV AutoLanding</annotation>\n')xml.write('\t\t<img src="" style="display: none;"><img alt="加載中..." title="圖片加載中..." src="http://statics.2cto.com/images/s_nopic.gif">flickr\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t\n')xml.write('\t<owner>\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t\t<name>XuSenhai</name>\n')xml.write('\t</owner>\n')xml.write('\t<size>\n')xml.write('\t\t<width>'+ str(width) + '</width>\n')xml.write('\t\t<height>'+ str(height) + '</height>\n')xml.write('\t\t<depth>' + str(depth) + '</depth>\n')xml.write('\t</size>\n')xml.write('\t\t<segmented>0</segmented>\n')xml.write('\t<object>\n')xml.write('\t\t<name>uav</name>\n')xml.write('\t\t<pose>Unspecified</pose>\n')xml.write('\t\t<truncated>0</truncated>\n')xml.write('\t\t<difficult>0</difficult>\n')xml.write('\t\t<bndbox>\n')xml.write('\t\t\t<xmin>' + l_pos1 + '</xmin>\n')xml.write('\t\t\t<ymin>' + l_pos2 + '</ymin>\n')xml.write('\t\t\t<xmax>' + r_pos1 + '</xmax>\n')xml.write('\t\t\t<ymax>' + r_pos2 + '</ymax>\n')xml.write('\t\t</bndbox>\n')xml.write('\t</object>\n')xml.write('</annotation>') fp2.close()第四步:數據集分割
在實際訓練過程中,需要四個文件,分別為test.txt是測試集,train.txt是訓練集,val.txt是驗證集,trainval.txt是訓練和驗證集。每個文件為對于圖片的名字。在VOC2007中,trainval大概是整個數據集的50%,test也大概是整個數據集的50%;train大概是trainval的50%,val大概是trainval的50%。可參考以下代碼:
#coding=utf-8 import cv2 import os import randomroot = 'F:\dataset' fp = open(root + '\\'+'name_list.txt') fp_trainval = open(root + '\\'+'trainval.txt', 'w') fp_test = open(root + '\\'+'test.txt', 'w') fp_train = open(root + '\\'+'train.txt', 'w') fp_val = open(root + '\\'+'val.txt', 'w')filenames = fp.readlines() for i in range(len(filenames)):pic_name = filenames[i]pic_name = pic_name.strip()x = random.uniform(0, 1)pic_info = pic_name.split('.')[0]if x >= 0.5:fp_trainval.writelines(pic_info + '\n')else:fp_test.writelines(pic_info + '\n')fp_trainval.close() fp_test.close()fp = open(root + '\\' +'trainval.txt') filenames = fp.readlines() for i in range(len(filenames)):pic_name = filenames[i]pic_name = pic_name.strip()pic_info = pic_name.split('.')[0]x = random.uniform(0, 1)if x >= 0.5:fp_train.writelines(pic_info + '\n')else:fp_val.writelines(pic_info + '\n') fp_train.close() fp_val.close()?
第五步:將得到的文件放置正確路徑
1. 將訓練圖片放置于 faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages 中;
2. 將得到的xml文件放置于 faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations 中;
3. 將得到的test.txt,train.txt,val.txt,trainval.txt 放置于 faster-rcnn/data/VOCdevkit2007/VOC2007/ Annotations/ImageSets/Main 。
?
原文鏈接:制作VOC2007數據集用于Faster-RCNN訓練
總結
以上是生活随笔為你收集整理的【深度学习】制作VOC2007数据集用于Faster-RCNN训练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OpenCV3】如何给图像添加(不)透
- 下一篇: 【OpenCV3】cv::compare