Faster R-CNN Tensorflow实现之数据集制作(3)---xml文件信息写入txt文件中

按照前面三篇文章的顺序标注好数据后,现在需要将数据集进行划分,包括火车,测试,trainval,缬氨酸等四个部分,也就是生成ImageSets文件夹中的主文件夹中的四个的txt文件。四个TXT文件中都只包含对应图像的名称,不包含扩展名。内容如下

说明一下这四个文件的对应关系,即总的数据集分为trainval和测试,在trainval又划分成列车和缬氨酸,所以我们需要根据自己数据情况来设置对应的比例。根据这个比例对XML文件进行划分得到对应的TXT文件来处理标注数据。下面贴出我制作时参考的大佬源码,写下来记录一下。

python版

import os  
import random  
  
trainval_percent = 0.66  
train_percent = 0.5  
xmlfilepath = 'Annotations'  
txtsavepath = '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)  
  
ftrainval = open('ImageSets/Main/trainval.txt', 'w')  
ftest = open('ImageSets/Main/test.txt', 'w')  
ftrain = open('ImageSets/Main/train.txt', 'w')  
fval = open('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()

MATLAB版

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

 至此,所有的数据制作工作结束,接下来就是运行train.py就OK了,但是再运行是又碰到了下面这个错误

这个问题也是耽误了一段时间,后来找到了答案

原来是我在之前利用标准VOC2007数据集训练网络时在Faster-RCNN-TensorFlow-Python3.5-master\lib\cache\文件夹下生成了一个后缀名为pkl文件,我们在训练之前需要将它删去,然后这个KeyError问题就解决了。至此终于看到了一点希望的曙光!

参考文章:

https://blog.csdn.net/gaohuazhao/article/details/60871886

https://blog.csdn.net/u011574296/article/details/78953681

猜你喜欢

转载自blog.csdn.net/jcli1_14/article/details/81458847
今日推荐