【机器学习】 - 目标检测 - VOC格式数据集介绍与自己制作

一、VOC数据集

 

PASCAL VOC 挑战赛主要有 Object Classification 、Object Detection、Object Segmentation、Human Layout、Action Classification 这几类子任务。每年都有新的数据集供参赛者进行训练。公布了2007和2012两年的数据集,分别称之为VOC2007和VOC2012,

VOC2012数据集下载地址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

VOC数据集下载地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/

所有的标注图片都有Detection需要的label, 但只有部分数据有Segmentation Label。
VOC2007中包含9963张标注过的图片, 由train/val/test三部分组成, 共标注出24,640个物体。
VOC2007的test数据label已经公布, 之后的没有公布(只有图片,没有label)。
对于检测任务,VOC2012的trainval/test包含08-11年的所有对应图片。 trainval有11540张图片共27450个物体。
对于分割任务, VOC2012的trainval包含07-11年的所有对应图片, test只包含08-11。trainval有 2913张图片共6929个物体。

 二、VOC格式数据集

因为标签不再是唯一的(因为VOC数据集需要进行很多任务,对每个任务都需要有至少一个标签来进行标注),因此VOC数据集有自己固定的组织格式,以 VOC 2007 为例,解压后的文件为:

.
├── Annotations 进行 detection 任务时的标签文件,xml 形式,文件名与图片名一一对应
├── ImageSets 包含三个子文件夹 Layout、Main、Segmentation,其中 Main 存放的是分类和检测的数据集分割文件
├── JPEGImages 存放 .jpg 格式的图片文件
├── SegmentationClass 存放按照 class 分割的图片
└── SegmentationObject 存放按照 object 分割的图片├── Main
│   ├── train.txt 写着用于训练的图片名称, 共 2501 个
│   ├── val.txt 写着用于验证的图片名称,共 2510 个
│   ├── trainval.txt train与val的合集。共 5011 个
│   ├── test.txt 写着用于测试的图片名称,共 4952 个

在大家进行目标检测的时候,可能需要针对某一特定任务进行训练和检测,因此可能需要重构成自己的VOC格式数据集,即在保证组织形式不变的前提下,更换成自己的数据集。文件格式和组织形式的统一,是为了后序代码处理的统一性。

 

三、制作自己的数据集

解压VOC2007数据集后可以看到VOC2007文件夹下有以下5个文件夹:

Annotations文件夹
该文件下存放的是xml格式的标签文件,每个xml文件都对应于JPEGImages文件夹的一张图片。
JPEGImages文件夹
改文件夹下存放的是数据集图片,包括训练和测试图片。
ImageSets文件夹
该文件夹下存放了三个文件,分别是Layout、Main、Segmentation。在这里我们只用存放图像数据的Main文件,其他两个暂且不管。
SegmentationClass文件和SegmentationObject文件。
这两个文件都是与图像分割相关。

我们只关注三个文件夹(目标检测)

annotation 和 JPEGImages 一一对应。

 

开始制作:
制作自己的VOC2007格式数据集其实不需要上述那么多内容,我们只要做三个部分即可:Annotations文件夹、JPEGImages文件夹、ImageSets文件夹下的Main文件。


第一步:我们参照原始VOC2007数据集的文件层次创建上述四个文件夹,也就是创建一个VOCdevkit文件夹,下面再创建Annotations、JPEGImages、ImageSets三个文件夹,最后在ImageSets文件夹下再创建一个Main文件夹。
创建好所有文件夹后,我们将自己的数据集图片都放到JPEGImages文件夹下。按照习惯,我们将图片的名字修改为000001.jpg这种格式的(参照原始数据集图片命名规则),统一命名方法网络上有很多,网上很多,这里就不多赘述了。
另外强调两点:第一点是图片的格式,图片需是JPEG或者JPG格式,其他格式需要转换一下。第二点是图片的长宽比,图片长宽比不能太大或太小,这个参考原始VOC2007数据集图片即可。


第二步:我们来制作Annotations文件夹下所需要存放的xml文件。这里我们需要借助大神带给我们的福利了:LabelImg工具,可以按照上面的说明进行安装和使用。看到满篇的英文是不是很晕,那这里有个简单的方法可以帮助到大家!当然lxml 库文件还是要装的,但如果你用的是Anaconda环境,那么你什么都不用做,只需要点击这里:LabelImg标注工具,根据自己的情况选择下载window版本还是linux版本,然后解压使用就行了!
关于如何使用,这里以window版本的为例说明。下载解压后会得到一个exe可执行文件,另一个是data文件夹,这里面有个txt文件,内容是预定义的分类标签名,里面的标签可以根据自己的需要进行修改。执行exe文件打开标注界面就可以进行操作了,操作方法可以参考这篇文章:使用方法
这里给张标注工具的参考图:

下面就进行漫长的标注工作吧。。。
说明:每标注完一张图片后进行保存,保存的xml文件名要与对应图片名一致,大家可以参考原始VOC2007数据集中JPEGImages文件夹下图片的命名和Annotations文件夹中的xml文件命名规则。
备注:这里还有个制作工具  VOC2007数据格式制作工具 也很好用,大家也可以试一试。


第三步:我们来制作ImageSets文件夹下Main文件夹中的4个文件(test.txt、train.txt、trainval.txt、val.txt)。
首先我们先来了解下这四个文件到底是干什么用的,当然从文件的命名上我们也都能大体猜得上来他们的作用,不过这里还是简单的说明一下吧。
test.txt:测试集
train.txt:训练集
val.txt:验证集
trainval.txt:训练和验证集

在原始VOC2007数据集中,trainval大约占整个数据集的50%,test大约为整个数据集的50%;train大约是trainval的50%,val大约为trainval的50%。所以我们可参考以下代码来生成这4个txt文件:

import os  
import random  trainval_percent = 0.5  
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(txtsavepath+'/trainval.txt', 'w')  
ftest = open(txtsavepath+'/test.txt', 'w')  
ftrain = open(txtsavepath+'/train.txt', 'w')  
fval = open(txtsavepath+'/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()

注意:上述代码中涉及到的路径要写全,另外各个数据集所占比例根据实际数据集的大小调整比例。

至此,我们自己的VOC2007格式数据集就全部制作完成了。

 

 

参考资料:

https://blog.csdn.net/qq_41185868/article/details/79927556

https://blog.csdn.net/weixin_35653315/article/details/71028523

https://blog.csdn.net/mzpmzk/article/details/88065416

https://blog.csdn.net/gulingfengze/article/details/79639111

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python学习】win10+Anaconda3环境,安装phthon第三方库Jieba

一、介绍 jieba库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式、全模式和搜索引擎模式,下面是三种模式的特点。 精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分…

【PAT甲级最新题解】PAT甲级2020.7月春季考试满分题解(附代码)

写在前面&#xff1a;这次题目虽然大多数是模拟题且不算难&#xff0c;但是题面其实不算友好&#xff0c;不少同学因为题目描述而错失满分。 A&#xff1a; 题意&#xff1a;给定一个数字串&#xff0c;问每一个前缀串是否是素数。 模拟题不多解释。 #include<cstdio>…

SharePoint PowerShell命令系列

(1) Backup-SPSite & Restore-SPSite 这两条命令可能是大家最先接触的PowerShell命令了吧, 一个是备份网站集, 另一个是还原网站集. Backup-SPSite 例子 Backup-SPSite http://site_name -Path C:\Backup\site_name.bak 参数 Force: 覆盖现有备份NoSiteLock: 设置备份…

【Processing学习】 - 公交车马路动态绘制

效果图: 汽车动态移动,云彩动态移动,小草没有找到矢量图,百度了一张先用着. float q 0; int s 0; int add 1;PImage p1;void setup() {size(800, 400);background(0, 0, 255);rect(300, 150, 300, 140, 30);//sunfill(255, 255, 0);circle(800, 0, 40);first//circle(360,…

Qt 5.14 安装,windows10系统,64位,详细步骤,非常简单!

下载地址&#xff1a;http://download.qt.io/archive/qt/5.14/5.14.2/ 直接选择windows系统或mac兄或Linux系统对应版本即可。 这里解释一下 Qt 的版本号&#xff0c;比如 5.14.2 是完整的 Qt 库版本号&#xff0c;第一个数字 5 是大版本号&#xff08;major&#xff09;&…

2023年12月16日~12月22日(自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法:CNN-RWI)

标题&#xff1a;Adaptive Feedback Convolutional-Neural-Network-Based High-Resolution Reflection-Waveform Inversion 全波形反演&#xff08;FWI&#xff09;是一种非线性拟合观测地震记录从而获得高清晰速度模型的最优化算法。FWI能够通过拟合浅层初至波和反射波获得较准…

SharePoint 2016文档库所在数据库表的说明(文档库数据库)

突然被客户问一个问题&#xff0c;说数据库存在哪一个表&#xff0c;这个原本是开发的事&#xff0c;竟然文档我了&#xff0c;好吧这里记录一下&#xff0c;以便记忆给客户汇报。 SharePoint 数据库表说明&#xff1a; FeaturesTable that holds information about all the …

SharePoint 2013 RBS(Remote BLOB Storag) 安装、部署、垃圾回收

SharePoint 承担着文件管理的工作&#xff0c;默认都是将它们以BLOB的数据形式存储在内容数据库当中&#xff1b;当文件大时&#xff0c;就很容易导致数据库容量被这些BLOB数据所快速消耗&#xff0c;而且频繁地对这些大数据量的BLOB数据进行读写访问&#xff0c;很容易在SQL端…

Processing 闪烁的圆 动画效果

打开Processing,CtrlR运行. 运行效果 : class myRect {float x,y;float r,a;//banjing secai bianhua myRect(float x, float y, float r,float a) {this.x x;this.y y;this.r r;this.a a;}void chang(){this.a 0.02;} void display() {stroke(255);fill(120-120*cos(a…

用生动的例子花式解释:python类中一定需要有 __init__方法么?没有会怎样?

python 类中一定需要有 __init __方法么&#xff1f;没有的会怎样&#xff1f; 在回答这个问题之前&#xff0c;先说两个问题&#xff1a;① 面向对象编程&#xff1f; ② 什么是类&#xff1f; 面向对象&#xff0c;先上一个正式点的解释&#xff1a; “把一组数据结构和处…

Anaconda安装绘图模块altair

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple altair

MOSS/Sharepoint RBS概念以及运用

注&#xff1a;原文作者不知道是谁&#xff0c;先收藏了这篇&#xff08;若有侵权&#xff0c;请留言&#xff0c;删除&#xff09; EBS -> External Blob Storage 外部大二进制对象存储 RBS -> Remote Blob Storage 远程大二进制对象存储 这俩概念据我所知&#xff0c;…

【Python学习】 - 超详细的零基础Pandas学习(附Python数据分析与应用课本第四章实训答案)

&#xff08;博文体系参考&#xff1a;《Python数据分析与应用》课本&#xff09; 任务数据如下&#xff1a; 读入csv文件时&#xff0c;encoding必须是正确的&#xff0c;常用的编码格式有&#xff1a;UTF-8 , UTF-16 , GBK , GB2312 , GB18030等。 如果和文件的编码格式不符…

win10,配置环境变量时系统环境变量和用户环境变量的优先级

关于%%中间夹着的东西&#xff0c;比如%AppData%的路径&#xff0c;是在注册表中可以修改的&#xff0c;用户也可以自定义这种%...%&#xff0c;相当于你定义了一个路径常量&#xff0c;定义方法也是去系统的环境变量中去添加即可。 比如一般常用%JAVAHOME%这种。 参考文章&a…

sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系**

1.一个数据库用户可以对应多个架构&#xff08;架构是表容器&#xff09;。架构里面包含的是数据库表。 2.一个数据库角色有可能涉及多个架构。数据库角色对应的是权限。 3.一个用户对应一个数据库角色。 4.登录名与数据库用户在服务器级别是一对多的&#xff1b;在数据库级…

python 字典、列表、字符串 之间的相互转换

1、列表与字符串转换 列表转字符串&#xff1a; 将列表中的内容拼接成一个字符串 将列表中的值转成字符串 字符串转列表&#xff1a; 用eval转换 将字符串每个字符转成列表中的值 将字符串按分割成列表 2、列表与字典转换 列表转字典&#xff1a; 将两个列表转成字典 将嵌…

【转】aspx,ascx和ashx使用小结

做asp.net开发的对.aspx,.ascx和.ashx都不会陌生。关于它们&#xff0c;网上有很多文章介绍。“纸上得来终觉浅&#xff0c;绝知此事要躬行”&#xff0c;下面自己总结一下做个笔记。1、.aspx Web窗体设计页面。Web窗体页由两部分组成&#xff1a;视觉元素&#xff08;html、服…

【转】Azure DevOps —— Azure Board 之 长篇故事、特性、用户情景(故事)的用法应用场景

前提 我以前在之前的文章里大概介绍了 Azure Board 的基本使用&#xff0c;可以回看《Azure Board 的基本使用》。如果你想使用 Azure Board 来安排工作的话&#xff0c;请提前了解《敏捷开发》的相关知识。 作者将使用 “Agile” 作为项目的模板&#xff0c;不明白的先阅读《…

【VIJOS - P1037】搭建双塔(dp)

题干&#xff1a; 描述 2001年9月11日&#xff0c;一场突发的灾难将纽约世界贸易中心大厦夷为平地&#xff0c;Mr. F曾亲眼目睹了这次灾难。为了纪念“9?11”事件&#xff0c;Mr. F决定自己用水晶来搭建一座双塔。 Mr. F有N块水晶&#xff0c;每块水晶有一个高度&#xff0…

【POJ - 1459】Power Network(网络流最大流,建图)

题干&#xff1a; A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supplied with an amount s(u) > 0 of power, may produce an amount 0 < p(u) < p max(u) of power, may …