日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【深度学习】制作VOC2007数据集用于Faster-RCNN训练

發(fā)布時間:2025/3/21 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习】制作VOC2007数据集用于Faster-RCNN训练 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

制作VOC2007數據集用于Faster-RCNN訓練:VOC2007格式是faster-RCNN中官方給出的用于訓練的數據集,把它下載下來用frcnn/tool里的訓練程序跑一跑就可以得到自己的訓練網絡了,首先說明一下我們需要準備的文件:

1. 訓練所需的圖片;

2. 圖片上ROI標注信息的XML文件;

3. 將數據集分割為三部分分別用于frcnn進行訓練,驗證,測試等。

第一步:圖片的重命名

VOC2007格式必須為JPG格式,并且圖片是統(tǒng)一的六位數字,從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呢,在網上搜索半天發(fā)現原來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训练的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。