如何将自己的数据集转换为标准的VOC数据集格式?

我有自己的图片,也知道这些图片的类别和里面物体的bounding box,请问我得怎样才能转为标准的VOC数据集以及lmdb,使得能用上faster rcnn。
已邀请:

王斌_ICT - 研究领域:深度学习,目标检测

赞同来自: caffe 王蒙蒙 徐国智_受限的玻尔兹曼 caney

直接用matlab写一个文件就可以了,下边是我做行人检测时格式转换代码,你可以参考一下。
close all;
clear all;
clc

hThresh = 50; %save the iamges continue gtboxes whos hight is larger than hThresh
srcImgPath = '..\myData\USA\images';
srcAnoPath = '..\myData\USA\annotation';
outImgPath = '..\myData\USA_RCNN\images';
outAnoPath = '..\myData\USA_RCNN\annotation';
fpAnno = fopen('..\myData\USA_RCNN\train.txt','wt');
if ~exist(outImgPath,'dir')
mkdir(outImgPath);
end
if ~exist(outAnoPath,'dir')
mkdir(outAnoPath);
end
srcList = dir(srcImgPath);
srcNum = length(srcList)-2;

count = 1;
for i = 1:srcNum
if mod(i,1000)==0
fprintf('CurNum:%d\n',i);
end
curAnno = sprintf('%s\\Id.txt', srcAnoPath,i);
curImgName = sprintf('%s\\Id.jpg', srcImgPath,i);
txtData = importdata(curAnno);
if isstruct(txtData)
srcList = txtData.textdata(2:end);
gtList = find(strcmp(srcList,'person'));
gtBoxes = txtData.data(gtList,1:4);
gtBoxes = gtBoxes(find(gtBoxes(:,4)>=hThresh),1:4);
if isempty(gtBoxes)
continue;
end
fprintf(fpAnno,'Id\n',count);
choseId = sprintf('%s\\Id.xml',outAnoPath,count);
fp = fopen(choseId,'wt');
curImg = imread(curImgName);
[imgH,imgW,channel] = size(curImg);
fprintf(fp, '<annotation>\n');
fprintf(fp, '\t<folder>Daimler</folder>\n');
fprintf(fp, '\t<filename>Daimler</filename>\n');
fprintf(fp, '\t<source>\n');
fprintf(fp, '\t\t<database>Daimler</database>\n');
fprintf(fp, '\t</source>\n');

fprintf(fp, '\t<size>\n');
fprintf(fp, '\t\t<width>%d</width>\n',imgW);
fprintf(fp, '\t\t<height>%d</height>\n',imgH);
fprintf(fp, '\t\t<depth>3</depth>\n');
fprintf(fp, '\t</size>\n');

for boxId = 1:size(gtBoxes,1)
fprintf(fp, '\t<object>\n');
fprintf(fp, '\t\t<name>pedestrian</name>\n');
fprintf(fp, '\t\t<bndbox>\n');
fprintf(fp,'\t\t\t<xmin>%d</xmin>\n',gtBoxes(boxId,1));
fprintf(fp,'\t\t\t<xmax>%d</xmax>\n',gtBoxes(boxId,1)+gtBoxes(boxId,3));
fprintf(fp,'\t\t\t<ymin>%d</ymin>\n',gtBoxes(boxId,2));
fprintf(fp,'\t\t\t<ymax>%d</ymax>\n',gtBoxes(boxId,2)+gtBoxes(boxId,4));
fprintf(fp, '\t\t</bndbox>\n');
fprintf(fp, '\t</object>\n');
end
fprintf(fp, '</annotation>\n');
fclose(fp);
copyfile(curImgName, sprintf('%s//Id.jpg',outImgPath,count));
count = count+1;
end
end
fclose(fpAnno);

wait_alone - Hello world

赞同来自: 徐国智_受限的玻尔兹曼

github上面有个python代码,用来标注,你可以看一下:
https://github.com/tzutalin/labelImg

要回复问题请先登录注册