RCNN系列实验的PASCAL VOC数据集格式设置
我们在做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数据集格式设置相关推荐
- 将PASCAL VOC数据集格式转换为YOLOV5 所需的格式
1. VOC数据集 VOC数据集格式如下(以2007为例): 其中JPEGImages文件夹存放图片,Anootations下放的是标注框的信息,格式为xml:但YOLOv5所需要的格式为txt,且t ...
- PASCAL VOC 数据集的标注格式
PASCAL VOC 数据集的标注格式 PASCAL VOC 挑战赛 ( **The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛. PASCAL的全称是 ...
- Ubuntu上用caffe的SSD方法训练Pascal VOC数据集
实验目的 继caffe和ssd搭建完成,demo也演示完毕,了解一些基本知识后,现在开始训练自己的数据集,在给自己的训练集处理之前,先跟着官方的示例将Pascal VOC数据集训练走一遍,把可能会踩坑 ...
- 图像处理基本库的学习笔记5--公共数据集,PASCAL VOC数据集,NYUD V2数据集的简介与提取,COCO2017,医学影像数据集汇总
目录 公共数据集 计算机视觉标准数据集整理-PASCAL VOC数据集 数据集文件结构 Annotation JPEGImages SegmentationClass SegmentationObje ...
- Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型
0 说明 系统环境为Ubuntu14.04, 已经安装好了CUDA和cuDNN以及Python等基础包. 1 设置和编译py-faster-rcnn 1.1 下载py-faster-rcnn $ gi ...
- voc数据集格式转换为coco数据集格式+修改xml格式文件
voc数据集格式转换为coco格式+修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 下面这份代码只需修改文件所在 ...
- 人工智能学习:PASCAL VOC数据集读取(6)
PASCAL VOC是一个国际的计算机视觉挑战赛,数据集包含了20个分类的3万多张图片.挑战赛及其数据集基础上涌现不少知名的目标检测模型如R-CNN,YOLO,SSD等.可以通过下载和读取的方法载入P ...
- Pascal VOC 数据集介绍(tensorflow model zoo)
Pascal VOC 数据集的下载 # 下载2007年的训练数据 wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06- ...
- PASCAL VOC数据集分析(分类部分)
PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge. 每一年都有自己的数据集.pa ...
最新文章
- android sdk软件开发套件,ANDROIDSDK-SITARA
- VMware虚拟机NAT模式的具体配置
- 元素不包括_干货 | FDA法规对元素杂质的限度控制及计算方法
- html匹配属性正则表达式,正则表达式匹配html标签的属性值
- 用 Python 写软件原来这么简单
- DCMTK3.5.4与3.6.0版本的区别
- 重磅:阿里发布神器工具,直接帮你改代码,我高潮了!网友:工作量又减轻了!...
- bzoj 3012: [Usaco2012 Dec]First! Trie+拓扑排序
- 轮廓系数的应用:kmeans聚类理论篇K的选择(轮廓系数)
- OFD文件在线阅读器
- bc547可以用8050代换吗_代换S8550 S8050三极管要特别注意放大倍数
- 软件测试系列——冒烟测试(Smoke Test,ST)
- 关于安装anaconda错误:failed to create anaconda menus
- 至少连接一个aura sync兼容设备_医疗设备10个常见电磁兼容干扰问题-优德分享
- 柴达木盆地第四大气区探实 尖北产量超亿方
- 计算机函数match,Excel函数公式:掌握Match函数,如虎添翼
- 8086汇编之乘法指令MUL
- 【面向对象】重载和重写
- 音乐制作中计算机编程,计算机音乐制作技术在音乐创作的应用
- Ubuntu13.04下让宏碁Aspire4750G屏幕亮度可调节
热门文章
- boost::stable_sort相关的测试程序
- boost::pool模块实现验证是否 malloc/free 宏一切仍然正常的测试程序)
- boost::mp11::mp_transform_front相关用法的测试程序
- boost::hana::cycle用法的测试程序
- boost::fusion::unused_type用法的测试程序
- boost::detail::sp_typeinfo用法实例
- ITK:直方图创建和Bin访问
- ITK:Voronoi图
- VTK:Utilities之CameraModifiedEvent
- VTK:PolyData之OrientedBoundingCylinder