PASCAL VOC2012数据集

下载的官方网址:http://host.robots.ox.ac.uk/pascal/voc/voc2012/index.html#devkit

一、介绍与下载

PASCAL VOC 挑战赛(The PASCAL Visual Object Classes)是一个世界级的计算机视觉挑战赛。PASCAL全称Pattern Analysis, Statistical modelling and Computational Learning(模式分析、统计建模和计算学习),是一个由欧盟资助的网络组织。PASCAL VOC挑战赛主要包括下面几类:

图像分类(Object Classification)
目标检测(Object Detection)
目标分割(Object Segmentation)
动作识别(Action Classification)
etc

找到Development Kit即可进行下载

一共有20个类别

二、下载数据集的文件结构及详解

1.Annotation

随便打开一个annotation文件:

<annotation>  # 主节点<folder>VOC2012</folder>  # 文件夹名字<filename>2007_000187.jpg</filename>  # 图片名称<source>  # 源<database>The VOC2007 Database</database>  # 来自VOC 2007<annotation>PASCAL VOC2007</annotation>  # 标注信息来源 VOC 2007<image>flickr</image>  # 来自网络分享</source><size>  # 图片大小节点<width>500</width>  # 宽度<height>375</height>  # 高度<depth>3</depth>  # 深度(通道数)</size><segmented>1</segmented>  # 该节点:该图片有没有被分割过(1和0)<object>  # 目标检测节点(可以有多个检测目标)<name>tvmonitor</name>  # 目标所属类别<pose>Frontal</pose>  # 用不到<truncated>1</truncated>  # 目标有没有被截断(如果目标在图片的边界,那么就是被截断的状态)<difficult>0</difficult>  # 目标检测的难易程度(0:容易检测; 1:难以检测)<bndbox>  # bounding box<xmin>1</xmin>  # 左上角x坐标<ymin>95</ymin>  # 左上角y坐标<xmax>240</xmax>  # 右下角x坐标<ymax>336</ymax>  # 右下角y坐标</bndbox></object><object>  # 第二个检测目标<name>person</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>137</xmin><ymin>78</ymin><xmax>497</xmax><ymax>375</ymax></bndbox></object><object>  # 三个检测目标<name>person</name><pose>Unspecified</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>89</xmin><ymin>202</ymin><xmax>129</xmax><ymax>247</ymax></bndbox>
</annotation>

flickr 网络 相片分享;
truncated 英[trʌŋˈkeɪtɪd] 美[ˈtrʌŋkeɪtɪd] adj. (版本)缩减的,删节的,截短了的; v. 截短,缩短,删节(尤指掐头或去尾);
一张图片中可以有多个检测目标

2.train.txtval.txt

对于目标检测任务,我们主要关注ImageSets\Main下的train.txtval.txttrainval.txt这三个文件。

下面是train.txtval.txt的部分内容展示(trainval.txt也是下面的样式):

每一行代表图像名称

2008_000008
2008_000015
2008_000019
2008_000023
2008_000028
2008_000033
2008_000036
2008_000037
2008_000041
...

train.txtval.txt包含了训练时图片的名称和验证时图片的名称。

3.trainval.txt

trainval.txt文件包含了训练使用的训练集和验证集。

总所周知,训练集和验证集是互斥的,那么为什么会有 trainval.txt这个文件呢?

因为我们得到结果可以去PASCAL官网进行测试,而PASCAL VOC 2012的测试集是不公开的,所以官方需要知道你在训练时使用了哪些文件,这时我们就需要提交这个文件以此在测试时可以剔除掉我们训练用过的文件。

4.boat_train.txt表示船的训练集

2008_000143 -1
2008_000144 -1
2008_000148  1
2008_000151 -1
2008_000187 -1
2008_000188 -1
2008_000189 -1
2008_000191  0
2008_000192 -1
2008_000193 -1

这个文件中,除了图片的名称外,还有一列,包含三个数-1,0,1,分别表示:

  • -1:图片中没有boat这个目标
  • 0:包含boat目标,但该目标检测很困难
  • 1:图片中boat这个目标

5.文件使用流程

  • 先读取ImageSets/Maintrain.txt,获取它的每一行信息(每一张图片的名称)
  • 得到图片名称后,去Annotation找到对应的.xml文件并解析该文件,得到图片标签的信息
  • 再去ImageSet/JPEGImages找到相应的图片并载入内存

三、标注属于自己的数据集

1. 标注软件介绍与安装

标注图像的软件有很多,在GitHub上有很多开源项目,比如:

https://github.com/tzutalin/labelImg
可以生成 .xml文件

https://github.com/wkentaro/labelme
主要生成json文件

为了保持和PASCAL VOC数据集一致,这里使用labelImg

pip3 install labelImg
labelImg
labelImg ./image[IMAGE_PATH] [PRE-DEFINED CLASS FILE]./class.txt

2.标注软件使用

简单使用流程:

  1. 准备一个关于类别的文件信息
  2. 打开软件
  3. 设置图像文件夹所在目录,以及标注文件保存目录
  4. 标注图像并保存
  5. 若要修改源代码,在项目的libs -> labelFile.py文件中修改

2.1第一步:准确文件和文件夹并进入目标路径

我们先将文件夹和文件准备好,如:

├── annotation
├── classes.txt
└── images├── test_1├── test_1.jpg├── test_2.jpg├── test_3.jpg└── test_4.jpg

其中:

  • annotation是标注文件夹,一会儿我们会将软件标注的结果放这里面
  • classes.txt是类别的信息,内容如下:
dog
person
cat
tv
car
meatballs
marinara sauce
tomato soup
chicken noodle soup
french onion soup
chicken breast
ribs
pulled pork
hamburger
cavity

images:放图片的文件夹,里面是具体需要标注的图片

第二步:打开软件

# 进入文件夹
ls
annotation  classes.txt  images# 打开软件   labelImg [图片文件夹路径] [标签文件]
labelImg ./images/ ./classes.txt

第三步:设置标注文件保存目录

第四步:标注图像并保存

此时Annotation文件夹下就有一个文件test_1.xml,内容如下:

<annotation><folder>images</folder>  # 图片所属文件夹<filename>test_1.jpg</filename>  # 图片的名字<path>/home/leovin/PyTorchProject/A2_object_detection/faster_rcnn/label_our_datasets/images/test_1.jpg</path><source><database>Unknown</database></source><size><width>1032</width>  # 图片的宽度<height>795</height>  # 图片的高度<depth>3</depth>  # 图片的深度</size><segmented>0</segmented><object>  # 第一个目标<name>cat</name>  # 目标的真实类别<pose>Unspecified</pose><truncated>0</truncated>  # 没有被截断<difficult>0</difficult><bndbox>  # BBox的坐标(两个点坐标)<xmin>362</xmin><ymin>122</ymin><xmax>1029</xmax><ymax>790</ymax></bndbox></object><object>  # 第二个目标<name>dog</name><pose>Unspecified</pose><truncated>1</truncated>  # 被截断<difficult>0</difficult><bndbox><xmin>30</xmin><ymin>342</ymin><xmax>415</xmax><ymax>795</ymax></bndbox></object><object><name>dog</name><pose>Unspecified</pose><truncated>0</truncated>  # 没有被截断<difficult>0</difficult><bndbox><xmin>684</xmin><ymin>165</ymin><xmax>953</xmax><ymax>582</ymax></bndbox></object>
</annotation>

之后就可以进行其他图片的标注了。

快捷键(Hotkeys)

key action
Ctrl + u 选择一个目录(文件夹)加载其中所有图片
Ctrl + r 更改标注的保存目录
Ctrl + s 保存本次标注
Ctrl + d 复制当前的标注及标注框
Ctrl + Shift + d 删除当前的图片
Space 标记当前图片为验证集
w 创建一个新的矩形框
d 下一张图片
a 上一张图片
del 删除所选的矩形框
Ctrl + + 放大
Ctrl + - 缩放
↑→↓← 微调矩形框

3. 数据集划分

在得到自己标注好的数据后,如何得到像VOC 2012那样的train.txt文件呢?

import os
import randomdef main():random.seed(0)  # 设置随机种子,保证随机结果可复现# 给定数据集Annotation的路径files_path = "./VOCdevkit/VOC2012/Annotations"assert os.path.exists(files_path), "path: '{}' does not exist.".format(files_path)# 验证集的比例val_rate = 0.2  # 因为测试集不公开,训练:验证集=8:2"""for file in os.listdir(files_path)其中os.listdir(files_path)遍历该路径下所有的文件file就是一个一个文件file.split(".")[0]分割字符串并取出文件名sorted()排序函数Note: 列表表达式最后得到肯定是一个list"""files_name = sorted([file.split(".")[0] for file in os.listdir(files_path)])files_num = len(files_name)  # 得到文件的数量"""random.sample(序列,k=采样个数)可以简单理解为从某个list中随机采样k个点(且k不会重复)返回值是一个list>>> import random>>> random.sample(range(0, 10), 6)[8, 3, 7, 0, 6, 2]random.sample(range(0, files_num), k=int(files_num*val_rate))从0到files_num-1中随机采样files_num*val_rate个点组成一个list并返回"""val_index = random.sample(range(0, files_num), k=int(files_num*val_rate))train_files = []val_files = []# files_name是一个list,list可以被enumeratefor index, file_name in enumerate(files_name):if index in val_index:  # 如果这张图片是采样图片,则放入验证集val_files.append(file_name)else:train_files.append(file_name)  # 否则放入训练集try:# 'x'用于创建并写入新文件# \n 表示换行符train_f = open("train.txt", "x")eval_f = open("val.txt", "x")train_f.write("\n".join(train_files))eval_f.write("\n".join(val_files))except FileExistsError as e:print(e)exit(1)if __name__ == '__main__':main()

PASCAL VOC2012数据集相关推荐

  1. PspNet在MMsegmentation框架下成功训练Pascal VOC2012数据集及踩坑实录

    时间:2021/08/29/05:45:28 一晚上了,难以置信,我竟然还不困,还有着整理博客的冲动.也就在这周,熬夜能力突然就在几个晚上的不归宿中突破了,一夜过后天壤之别,一晚比一晚能熬,之前还会担 ...

  2. Pascal VOC2012数据集下载

    数据集下载 刚发现原来数据集下载也是这么麻烦的一件事情,还有人用链接换积分.还好找到了一个好心人,连接在下面. 好心人的网址 他给的链接地址 https://pjreddie.com/projects ...

  3. PASCAL VOC2012 数据集讲解与制作自己的数据集

    前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容.来源于哔哩哔哩博主"霹雳吧啦Wz",博主学习作为笔记记录,欢 ...

  4. 【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战

    接着上一次的多标签分类综述,本文主要以Pascal VOC2012增强数据集进行多标签图像分类训练,详细介绍增强数据集制作.训练以及指标计算过程,并通过代码进行详细阐述,希望能为大家提供一定的帮助! ...

  5. python不同曲线设置标签_【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战...

    接着上一次的多标签分类综述,本文主要以Pascal VOC2012增强数据集进行多标签图像分类训练,详细介绍增强数据集制作.训练以及指标计算过程,并通过代码进行详细阐述,希望能为大家提供一定的帮助! ...

  6. PASCAL VOC2012类型的数据集生成train.txt\val.txt等文件

    PASCAL VOC 2012 图像分割经常要用的到这个数据集,我是自己做的数据集,但也仿照了PASCAL VOC2012的格式,在数据中,需要把所有图片放在一个文件夹中,mask放在另一个文件夹中, ...

  7. 语义分割数据集Pascal VOC2012的读取与处理

    语义分割数据集Pascal VOC2012的读取与处理 前言 读取文件路径 数据预处理 自定义数据集类 完整代码 前言 Pascal VOC2012是语义分割的一个重要数据集.学习一下使用Pytorc ...

  8. (转) 技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道

    技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道 原创 2016-09-21 钟巧勇 深度学习大讲堂 点击上方"深度学习大讲堂"可订阅哦!深度学习大讲堂是高质 ...

  9. 利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件

    转载自:利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件 - Why So Serious? - 博客频道 - CSDN.NET  http://blog.csd ...

最新文章

  1. CoordinatorLayout 的jar包位置
  2. Springboot的部分依赖及作用
  3. 列标题 如何删除gridcontrol_DEV控件GridControl常用属性设置(转)
  4. 从创业到成功,SaaS巨头Salesforce靠的是这七大秘诀
  5. 使用Nomad和OpenFaaS提供FaaS服务
  6. 详解 二叉搜索树-----AVL树
  7. weka使用训练集分类测试集_科学网—使用独立测试集对分类模型进行评估 - 李向东的博文...
  8. * poj 3159 Candies 最短路 dijkstra堆优化
  9. Hibernate学习笔记_查询
  10. pytorch 三维点分类_基于深度学习的三维重建——MVSNet系列论文解读
  11. IEEE VIS 2018专题
  12. C++类对象创建过程揭密
  13. 软考高级系统架构设计师系列论文四十九:论微服务架构及其应用
  14. 数电5_3——边沿触发的触发器
  15. 如何出售自己的代码并且不让人看到自己的源码?
  16. LaTeX制作幻灯片
  17. python Selenium
  18. Flash数据读取和保存
  19. PCF8563模块不走时(海振电子PCF8653模块)
  20. 谁会买下Delphi?

热门文章

  1. 数据结构·堆·完全二叉树
  2. runauto.. 病毒斗争记
  3. python sort函数
  4. LR---Loadrunner11破解方法
  5. Maya的Xgen导向为什么非常宽?
  6. 每日词根——sol(完整可靠安慰,太阳严肃)
  7. linux把u盘只读文件,完美解决linux下U盘文件只读的问题
  8. css3实现小图标向下引导小箭头动态效果
  9. 玉柴spn码故障对照表_玉柴电控柴油机故障代码及读码方法2
  10. Franka Emika Panda 机械臂环境配置