0.文件夹名
首先,确定你的数据集所放的文件夹名字,例如我的叫VOC2007
1.图片命名
虽然说图片名对训练没什么影响,但建议还是按VOC2007那样,如“000005.jpg”这种形式。至于图片格式,代码里是写的jpg。
批量修改图片名字为VOC2007格式可以参考以下python代码:
# -*- coding:utf-8 -*-
#批量修改文件名
#批量修改图片文件名
import os
import re
import sys
def renameall():
fileList = os.listdir(r'*********/Desktop/faster-rcnn-traffic-light/green') #带修改文件夹
print('修改前:'+ str(fileList)) #输出文件夹中包含的文件
currentpath = os.getcwd() #得到进程当前工作目录
os.chdir(r'*********/Desktop/faster-rcnn-traffic-light/green') #将当前工作目录修改为待修改文件夹的位置
num = 1 #名称变量
for fileName in fileList: #遍历文件夹中的所有文件
pat = '.+\.(jpg|png|gif)' #匹配文件名正则表达式
pattern = re.findall(pat,fileName) #进行匹配
os.rename(fileName,'00'+(str(num+500)+'.'+pattern[0]))#文件重新命名
num = num + 1 #改变编号,继续下一项
print('------------------------------------------------------------')
os.chdir(currentpath) #改回程序运行前的工作目录
sys.stdin.flush() #刷新
print('修改后:'+str(os.listdir(r'**********/Desktop/faster-rcnn-traffic-light/green')))#输出修改后文件夹包含的文件
renameall()
2.画目标包围框
推荐使用labelImg
3.保存xml到Annotations
在VOC2007下新建一个文件夹,名字为Annotations,将xml文件全部放到该文件夹里。
4.将训练图片放到JPEGImages
在VOC2007下新建一个文件夹,名字为JPEGImages,将所有的训练图片放到该文件夹里。
5.ImageSets\Main里的四个txt文件
在VOC2007下新建main文件夹
main文件夹下新建四个txt文件
- train.txt 是用来训练的图片文件的文件名列表
- val.txt是用来验证的图片文件的文件名列表
- trianval.txt是用来训练和验证的图片文件的文件名列表
- test.txt 是用来测试的图片文件的文件名列表
%%
%该代码根据已生成的xml,制作VOC2007数据集中的trainval.txt;train.txt;test.txt和val.txt
%trainval占总数据集的50%,test占总数据集的50%;train占trainval的50%,val占trainval的50%;
%上面所占百分比可根据自己的数据集修改,如果数据集比较少,test和val可少一些
%%
%注意修改下面四个值
xmlfilepath='E:\Annotations';
txtsavepath='E:\ImageSets\Main\';
trainval_percent=0.5;%trainval占整个数据集的百分比,剩下部分就是test所占百分比
train_percent=0.5;%train占trainval的百分比,剩下部分就是val所占百分比
%%
xmlfile=dir(xmlfilepath);
numOfxml=length(xmlfile)-2;%减去.和.. 总的数据集大小
trainval=sort(randperm(numOfxml,floor(numOfxml*trainval_percent)));
test=sort(setdiff(1:numOfxml,trainval));
trainvalsize=length(trainval);%trainval的大小
train=sort(trainval(randperm(trainvalsize,floor(trainvalsize*train_percent))));
val=sort(setdiff(trainval,train));
ftrainval=fopen([txtsavepath 'trainval.txt'],'w');
ftest=fopen([txtsavepath 'test.txt'],'w');
ftrain=fopen([txtsavepath 'train.txt'],'w');
fval=fopen([txtsavepath 'val.txt'],'w');
for i=1:numOfxml
if ismember(i,trainval)
fprintf(ftrainval,'%s\n',xmlfile(i+2).name(1:end-4));
if ismember(i,train)
fprintf(ftrain,'%s\n',xmlfile(i+2).name(1:end-4));
else
fprintf(fval,'%s\n',xmlfile(i+2).name(1:end-4));
end
else
fprintf(ftest,'%s\n',xmlfile(i+2).name(1:end-4));
end
end
fclose(ftrainval);
fclose(ftrain);
fclose(fval);
fclose(ftest);