利用matlab将自己的数据制作为标准VOC数据集格式

来源:互联网 发布:京东校招算法工程师 编辑:程序博客网 时间:2024/05/17 04:31

在使用各种深度网络的时候,需要根据自己的需求,自己的数据fine-tuning自己的模型,首要的一步就是讲自己的数据制作成标准VOC数据集,本文记录自己利用matlab制作标准VOC数据集的方法。

1、将自己的图片数据规范命名
VOC标准数据集中图片名称都为“000001.jpg”…”000013.jpg”…都为6位数字,jpg格式。
根据以下代码将自己图片规范命名:

%假设图片放置于"images\"下,需要将其规范命名到"image-convert\"下imgs = dir(['images\',*.jpg]);for i = 1:length(imgs)    imgPath = ['images\',imgs(i).name];    img = imread(imgPath);    imgPathTrans = ['image-convert\',num2str(i,'%06d'),'.jpg'];    imwrite(img,imgPathTrans);end

生成的图片名称:
这里写图片描述

2、在图片中标注目标
这个部分代码写的很粗糙,只够满足当时需求

imgs = dir(['img-convert\','*.jpg']);len = length(imgs);fid = fopen('groundtruth.txt','w');for i = 1:len    imagename = imgs(i).name;    image = imread(['img-convert\',imagename]);    while 1        [img,rect] = imcrop(image);        rect = round(rect);        label = input('please input lable:','s');        fprintf(fid,'%s %s %d %d %d %d\n',imagename,label,rect(1),rect(2),rect(1)+rect(3),rect(2)+rect(4));        isEnd = input('is this picture select over?','s');        if isEnd=='s'            break;        end    endendfclose(fid);

生成的文件格式:
这里写图片描述

3、利用groundtruth文件生成XML文件
到这一步,可以开始构建标准VOC的文件夹了,文件夹形式如下:
这里写图片描述
其中Annotations、ImageSets和JPEGImages是VOC数据集格式。

然后利用网上查到的代码,下载地址:将txt转成VOC标准数据集XML
利用此代码可以根据groundtruth文件生成标准XML文件:
这里写图片描述
每个图片会在Annotations下生成一个XML文件,如图:
这里写图片描述
于此同时,这个过程会把img-convert里的图片拷贝到JPEGImages文件夹下。

4、生成训练、验证数据集配置文件
这一步也是从网上找到的代码,将已有的样本分配为训练集和验证集,代码如下:

%%%该代码根据已生成的xml,制作VOC2007数据集中的trainval.txt;train.txt;test.txt和val.txt%trainval占总数据集的50%,test占总数据集的50%;train占trainval的50%,val占trainval的50%;%上面所占百分比可根据自己的数据集修改,如果数据集比较少,test和val可少一些%%%注意修改下面四个值xmlfilepath='Annotations';txtsavepath='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));    endendfclose(ftrainval);fclose(ftrain);fclose(fval);fclose(ftest);

将生成的四个文件放置在ImageSets\Main 文件夹下,即完成标准VOC数据集的制作。

1 0
原创粉丝点击