我们在做RCNN系列的实验时,往往需要把数据集的格式设置为和PASCAL VOC数据集一样的格式,其实当然也可以修改读取数据的代码,只是这样更为麻烦,自己的数据格式变了又得修改。 
首先以VOC2008为例,先看一下VOCdevkit的文件夹结构:

VOCdevkit中还有一个devkit_doc.pdf文件,关于PASCAL VOC数据集的所有信息都可以在里面找到。 
我们也按照这样的树形结构建好文件夹,把VOC2007和VOC2008换成自己数据集的名字(保留一个即可),local下面也建一个自己数据集的名字的文件夹。SegmentationObject和SegmentationClass就不需要了。 
我们检测任务所用的数据集只需要JPEGImages、Annotations、ImageSets文件夹。前提是自己要有数据,即图片和标注好的类别名与坐标。

JPEGImages

把自己所有类别的图片放到JPEGImages文件夹下,图片名按类似于000001.jpg、000002.jpg…的格式,不一定非要按数字顺序,但是一定不要重名,最好归一化一下图片的尺寸。

Annotations

VOCcode中的代码已经提供了写注释文件的东西,我的writexml是仿照VOCdevkit中的VOCwritexml来写的。假设我的标注都写到了txt文件里面,且txt文件与相应的图片同名,形如:

第一行是类别名,第二行是目标的坐标(这里每张图像只包含一个目标,多目标的标注是差不多的)。下面是写Annotations的代码

%writeanno.m
path_image='JPEGImages/';
path_label='labels/';%txt文件存放路径
files_all=dir(path_image);for i = 3:length(files_all)msg = textread(strcat(path_label, files_all(i).name(1:end-4),'.txt'),'%s');clear rec;path = ['./Annotations/' files_all(i).name(1:end-4) '.xml'];fid=fopen(path,'w');rec.annotation.folder = 'lml';%数据集名rec.annotation.filename = files_all(i).name(1:end-4);%图片名rec.annotation.source.database = 'The lmls Database';%随便写rec.annotation.source.annotation = 'The lmls Database';%随便写rec.annotation.source.image = 'lml';%随便写rec.annotation.source.flickrid = '0';%随便写rec.annotation.owner.flickrid = 'I do not know';%随便写rec.annotation.owner.name = 'I do not know';%随便写img = imread(['./JPEGImages/' files_all(i).name]);rec.annotation.size.width = int2str(size(img,2));rec.annotation.size.height = int2str(size(img,1));rec.annotation.size.depth = int2str(size(img,3));rec.annotation.segmented = '0';%不用于分割rec.annotation.object.name = msg{1};%类别名rec.annotation.object.pose = 'Unspecified';%不指定姿态rec.annotation.object.truncated = '0';%没有被删节rec.annotation.object.difficult = '0';%不是难以识别的目标rec.annotation.object.bndbox.xmin = msg{2};%坐标x1rec.annotation.object.bndbox.ymin = msg{3};%坐标y1rec.annotation.object.bndbox.xmax = msg{4};%坐标x2rec.annotation.object.bndbox.ymax = msg{5};%坐标y2writexml(fid,rec,0);fclose(fid);
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
%writexml.m
function xml = writexml(fid,rec,depth)fn=fieldnames(rec);
for i=1:length(fn)f=rec.(fn{i});if ~isempty(f)if isstruct(f)for j=1:length(f)            fprintf(fid,'%s',repmat(char(9),1,depth));a=repmat(char(9),1,depth);fprintf(fid,'<%s>\n',fn{i});writexml(fid,rec.(fn{i})(j),depth+1);fprintf(fid,'%s',repmat(char(9),1,depth));fprintf(fid,'</%s>\n',fn{i});endelseif ~iscell(f)f={f};end       for j=1:length(f)fprintf(fid,'%s',repmat(char(9),1,depth));fprintf(fid,'<%s>',fn{i});if ischar(f{j})fprintf(fid,'%s',f{j});elseif isnumeric(f{j})&&numel(f{j})==1fprintf(fid,'%s',num2str(f{j}));elseerror('unsupported type');endfprintf(fid,'</%s>\n',fn{i});endendend
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

ImageSets

ImageSets里只需要用到Main文件夹,而在Main中,主要用到4个文件: 
- train.txt 是用来训练的图片文件的文件名列表 
- trianval.txt是用来训练和验证的图片文件的文件名列表 
- val.txt是用来验证的图片文件的文件名列表 
- test.txt 是用来测试的图片文件的文件名列表 
我们希望训练集、验证集、测试集的分别是随机的,下面是实现随机选取样本集合与写txt文件的代码:

%writetxt.m
file = dir('Annotations');
len = length(file)-2;num_trainval=sort(randperm(len, floor(9*len/10)));%trainval集占所有数据的9/10,可以根据需要设置
num_train=sort(num_trainval(randperm(length(num_trainval), floor(5*length(num_trainval)/6))));%train集占trainval集的5/6,可以根据需要设置
num_val=setdiff(num_trainval,num_train);%trainval集剩下的作为val集
num_test=setdiff(1:len,num_trainval);%所有数据中剩下的作为test集
path = 'ImageSets\Main\';fid=fopen(strcat(path, 'trainval.txt'),'a+');
for i=1:length(num_trainval)s = sprintf('%s',file(num_trainval(i)+2).name);fprintf(fid,[s(1:length(s)-4) '\n']);
end
fclose(fid);fid=fopen(strcat(path, 'train.txt'),'a+');
for i=1:length(num_train)s = sprintf('%s',file(num_train(i)+2).name);fprintf(fid,[s(1:length(s)-4) '\n']);
end
fclose(fid);fid=fopen(strcat(path, 'val.txt'),'a+');
for i=1:length(num_val)s = sprintf('%s',file(num_val(i)+2).name);fprintf(fid,[s(1:length(s)-4) '\n']);
end
fclose(fid);fid=fopen(strcat(path, 'test.txt'),'a+');
for i=1:length(num_test)s = sprintf('%s',file(num_test(i)+2).name);fprintf(fid,[s(1:length(s)-4) '\n']);
end
fclose(fid);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

最后,在训练时要把VOCCode/VOCinit.m中的VOCopts.dataset即数据集名改为自己的数据集名字,VOCopts.classes即类别名改为自己的类别名字。 
此外多说一个RCNN系列实验使用数据集的问题,有时候测试的AP值总显示results为0,发现问题在imdb_eval_voc.m中,改了数据集名字后得不到它想要的年份信息,就不会算AP值,因此也做了一点修改:

代码风格不好,请高手们尽情鄙视。

RCNN系列实验的PASCAL VOC数据集格式设置相关推荐

  1. 将PASCAL VOC数据集格式转换为YOLOV5 所需的格式

    1. VOC数据集 VOC数据集格式如下(以2007为例): 其中JPEGImages文件夹存放图片,Anootations下放的是标注框的信息,格式为xml:但YOLOv5所需要的格式为txt,且t ...

  2. PASCAL VOC 数据集的标注格式

    PASCAL VOC 数据集的标注格式 PASCAL VOC 挑战赛 ( **The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛. PASCAL的全称是 ...

  3. Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

    实验目的 继caffe和ssd搭建完成,demo也演示完毕,了解一些基本知识后,现在开始训练自己的数据集,在给自己的训练集处理之前,先跟着官方的示例将Pascal VOC数据集训练走一遍,把可能会踩坑 ...

  4. 图像处理基本库的学习笔记5--公共数据集,PASCAL VOC数据集,NYUD V2数据集的简介与提取,COCO2017,医学影像数据集汇总

    目录 公共数据集 计算机视觉标准数据集整理-PASCAL VOC数据集 数据集文件结构 Annotation JPEGImages SegmentationClass SegmentationObje ...

  5. Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型

    0 说明 系统环境为Ubuntu14.04, 已经安装好了CUDA和cuDNN以及Python等基础包. 1 设置和编译py-faster-rcnn 1.1 下载py-faster-rcnn $ gi ...

  6. voc数据集格式转换为coco数据集格式+修改xml格式文件

    voc数据集格式转换为coco格式+修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 下面这份代码只需修改文件所在 ...

  7. 人工智能学习:PASCAL VOC数据集读取(6)

    PASCAL VOC是一个国际的计算机视觉挑战赛,数据集包含了20个分类的3万多张图片.挑战赛及其数据集基础上涌现不少知名的目标检测模型如R-CNN,YOLO,SSD等.可以通过下载和读取的方法载入P ...

  8. Pascal VOC 数据集介绍(tensorflow model zoo)

    Pascal VOC 数据集的下载 # 下载2007年的训练数据 wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06- ...

  9. PASCAL VOC数据集分析(分类部分)

    PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge. 每一年都有自己的数据集.pa ...

最新文章

  1. android sdk软件开发套件,ANDROIDSDK-SITARA
  2. VMware虚拟机NAT模式的具体配置
  3. 元素不包括_干货 | FDA法规对元素杂质的限度控制及计算方法
  4. html匹配属性正则表达式,正则表达式匹配html标签的属性值
  5. 用 Python 写软件原来这么简单
  6. DCMTK3.5.4与3.6.0版本的区别
  7. 重磅:阿里发布神器工具,直接帮你改代码,我高潮了!网友:工作量又减轻了!...
  8. bzoj 3012: [Usaco2012 Dec]First! Trie+拓扑排序
  9. 轮廓系数的应用:kmeans聚类理论篇K的选择(轮廓系数)
  10. OFD文件在线阅读器
  11. bc547可以用8050代换吗_代换S8550 S8050三极管要特别注意放大倍数
  12. 软件测试系列——冒烟测试(Smoke Test,ST)
  13. 关于安装anaconda错误:failed to create anaconda menus
  14. 至少连接一个aura sync兼容设备_医疗设备10个常见电磁兼容干扰问题-优德分享
  15. 柴达木盆地第四大气区探实 尖北产量超亿方
  16. 计算机函数match,Excel函数公式:掌握Match函数,如虎添翼
  17. 8086汇编之乘法指令MUL
  18. 【面向对象】重载和重写
  19. 音乐制作中计算机编程,计算机音乐制作技术在音乐创作的应用
  20. Ubuntu13.04下让宏碁Aspire4750G屏幕亮度可调节

热门文章

  1. boost::stable_sort相关的测试程序
  2. boost::pool模块实现验证是否 malloc/free 宏一切仍然正常的测试程序)
  3. boost::mp11::mp_transform_front相关用法的测试程序
  4. boost::hana::cycle用法的测试程序
  5. boost::fusion::unused_type用法的测试程序
  6. boost::detail::sp_typeinfo用法实例
  7. ITK:直方图创建和Bin访问
  8. ITK:Voronoi图
  9. VTK:Utilities之CameraModifiedEvent
  10. VTK:PolyData之OrientedBoundingCylinder