参考链接:
【数据集制作】VOC2007格式数据集制作和处理教程(Faster-RCNN模型标准输入)_voc2007数据导入-CSDN博客
前提:你需要有数据集图片,与标注好的xml格式的标签
在fasterRCNN源码文件夹中
建立data文件夹,在data中,建立VOC2007文件夹,在VOC2007文件夹中
建立Annotations,ImageSets,JPEGImages三个文件夹,如下
一、Annotations文件夹里面全是xml文件,也就是图片的标签文件
标签的名称需要改成000000,000001这样按顺序的六位数字,代码如下:
import os
import shutil
path = "data/VOCdevkit2007/VOC2007/Annotations" # XMLFiles文件夹所在路径
filelist = os.listdir(path) # 该文件夹下所有的文件(包括文件夹)
count = 0
for file in filelist:
if file.endswith(".xml"): # 如果是XML文件
Olddir = os.path.join(path, file) # 原来的文件路径
filename = os.path.splitext(file)[0] # 文件名
filetype = '.xml' # 文件扩展名
Newdir = os.path.join(path, str(count).zfill(6) + filetype) # 用字符串函数zfill以0补全所需位数
shutil.move(Olddir, Newdir) # 重命名
count += 1
二、JPEGImages文件夹里全是数据集图片,不分训练集数据集,全在里面
图片名称也需要按顺序改成000000,000001,与xml文件对应,代码如下:
"""文件重命名为000000、000001、000002...nnnnn"""
import os
path = "data/VOCdevkit2007/VOC2007/JPEGImages"#JPEGImages文件夹所在路径
filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹)
count=0
for file in filelist:
print(file)
for file in filelist: #遍历所有文件
Olddir=os.path.join(path,file) #原来的文件路径
if os.path.isdir(Olddir): #如果是文件夹则跳过
continue
filename=os.path.splitext(file)[0] #文件名
filetype='.jpg' #文件扩展名
Newdir=os.path.join(path,str(count).zfill(6)+filetype) #用字符串函数zfill 以0补全所需位数
os.rename(Olddir,Newdir)#重命名
count+=1
三、ImageSets文件夹里面建立一个main文件夹,main文件夹中建立4个txt文档,分别是
每一个文档中,对应写着训练集或者测试集的序号,那我们用代码将其按比例分出来并写进文档
import os
import random
trainval_percent = 0.9#验证集和训练集占的百分比
train_percent = 0.7#训练集占的百分比
xmlfilepath = 'data/VOCdevkit2007/VOC2007/Annotations'#Annotation文件夹所在位置
txtsavepath = 'data/VOCdevkit2007/VOC2007/ImageSets/Main'#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)
#Main文件夹下所对应的四个txt文件夹路径
ftrainval = open('data/VOCdevkit2007/VOC2007/ImageSets/Main/trainval.txt', 'w')
ftest = open('data/VOCdevkit2007/VOC2007/ImageSets/Main/test.txt', 'w')
ftrain = open('data/VOCdevkit2007/VOC2007/ImageSets/Main/train.txt', 'w')
fval = open('data/VOCdevkit2007/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()
这样txt文档里的内容是这样的
到此fasterRCNN的数据集就制作完成了