将数据集做成VOC2007格式用于Faster-RCNN训练

12 篇文章 0 订阅
9 篇文章 0 订阅

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);
 

6.将VOC2007文件夹拷贝到datasets\VOCdevkit2007里就可以了(实现替换)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值