代码下载:github

PASCAL VOC数据集

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

默认为20类物体

1 数据集结构

①JPEGImages

JPEGImages文件夹中包含了PASCAL VOC所提供的所有的图片信息,包括了训练图片和测试图片。

ref:PASCAL VOC数据集分析

②Annotations

Annotations文件夹中存放的是xml格式的标签文件,每一个xml文件都对应于JPEGImages文件夹中的一张图片。

xml文件的具体格式如下:(对于2007_000392.jpg)


  1. <annotation>
  2. <folder>VOC2012</folder>
  3. <filename>2007_000392.jpg</filename> //文件名
  4. <source> //图像来源(不重要)
  5. <database>The VOC2007 Database</database>
  6. <annotation>PASCAL VOC2007</annotation>
  7. <image>flickr</image>
  8. </source>
  9. <size> //图像尺寸(长宽以及通道数)
  10. <width>500</width>
  11. <height>332</height>
  12. <depth>3</depth>
  13. </size>
  14. <segmented>1</segmented> //是否用于分割(在图像物体识别中01无所谓)
  15. <object> //检测到的物体
  16. <name>horse</name> //物体类别
  17. <pose>Right</pose> //拍摄角度
  18. <truncated>0</truncated> //是否被截断(0表示完整)
  19. <difficult>0</difficult> //目标是否难以识别(0表示容易识别)
  20. <bndbox> //bounding-box(包含左下角和右上角xy坐标)
  21. <xmin>100</xmin>
  22. <ymin>96</ymin>
  23. <xmax>355</xmax>
  24. <ymax>324</ymax>
  25. </bndbox>
  26. </object>
  27. <object> //检测到多个物体
  28. <name>person</name>
  29. <pose>Unspecified</pose>
  30. <truncated>0</truncated>
  31. <difficult>0</difficult>
  32. <bndbox> //检测矩形框坐标
  33. <xmin>198</xmin>
  34. <ymin>58</ymin>
  35. <xmax>286</xmax>
  36. <ymax>197</ymax>
  37. </bndbox>
  38. </object>
  39. </annotation>

对应的图片为:

③ImageSets

ImageSets存放的是每一种类型的challenge对应的图像数据。

在ImageSets下有四个文件夹:

其中Action下存放的是人的动作(例如running、jumping等等,这也是VOC challenge的一部分)

Layout下存放的是具有人体部位的数据(人的head、hand、feet等等,这也是VOC challenge的一部分)

Main下存放的是图像物体识别的数据,总共分为20类。

Segmentation下存放的是可用于分割的数据。

在这里主要考察Main文件夹。

Main文件夹下包含了20个分类_train.txt、_val.txt和***_trainval.txt。

这些txt中的内容都差不多如下:

前面的表示图像的name,后面的1代表正样本,-1代表负样本。

_train中存放的是训练使用的数据,每一个class的train数据都有5717个。

_val中存放的是验证结果使用的数据,每一个class的val数据都有5823个。

_trainval将上面两个进行了合并,每一个class有11540个。

需要保证的是train和val两者没有交集,也就是训练数据和验证数据不能有重复,在选取训练数据的时候 ,也应该是随机产生的。

Ref: PASCAL VOC数据集分析

2 生成/创建 PASCAL VOC 数据集

2.1 利用现有数据集 - Openimages

900万张标注图像,谷歌发布Open Images最新V3版

该数据集包含一个训练集(9011219张图像)、一个验证集(41620张图像)和一个测试集(125436张图像)。V1 版本里的验证集在 V2 版本中被划分为验证集和测试集,这样做是为了更好地进行评估。Open Images 中的所有图像都标注有图像级标签和边界框

600余物体类别在线浏览

分类标签示例:

2.1.1 下载openimages

到官网下载的时候要一次性下载所有的部分,不仅文件很大,而且下载的也不大快,更重要的是自己训练要用到的类别并不多。

我采用的是工具箱的方法(https://github.com/EscVM/OIDv4_ToolKit),实际操作起来也挺顺利的。

Open Images V4 下载自己需要的特定类别

Step1:Install the required packages

pip install -r requirements.txt

Step2:

python main.py downloader --classes ./classes.txt --type_csv all --limit 3000

  1. 用法:main.py [-h] [--Dataset/path/to/OID/csv/] [-y]
  2. [ - 类列表[类列表...]]
  3. [--type_csv'train''validation''test''all']
  4. [--sub 子人验证图像的子集或机器生成的hm)]
  5. [--image_IsOccluded 10] [ - image_IsTruncated 10]
  6. [--image_IsGroupOf 10] [ - image_IsDepiction 10]
  7. [--image_IsInside 10] [--multiclasses 0(默认值或1
  8. [--n_threads [默认20]] [--noLabels]
  9. [--limit integer number]
  10. <command>'downloader''visualizer''ill_downloader'
  11. Open Image Dataset Downloader
  12. 打开图像数据集下载程序
  13. 位置参数:
  14. <command>'downloader''visualizer''ill_downloader'
  15. 'downloader''visualizer''ill_downloader'
  16. 可选参数:
  17. -h --help 显示此帮助消息并退出
  18. --Dataset /path/to/OID/csv/
  19. OID数据集文件夹的目录
  20. -y --yes 是和是可以下载丢失的文件
  21. - 类列表[类列表...]
  22. 所需类的“字符串”序列
  23. --type_csv'train''validation''test''all'
  24. 从什么csv搜索图像
  25. --sub 人工验证图像或机器生成的子集(hm
  26. 从人类验证的数据集或从
  27. 机器生成一个。
  28. --image_IsOccluded 10
  29. 图像的可选特征。表示
  30. 对象被图像中的另一个对象遮挡。
  31. --image_IsTruncated 10
  32. 图像的可选特征。表示
  33. 对象超出图像的边界。
  34. --image_IsGroupOf 10
  35. 图像的可选特征。表示
  36. 盒子跨越一组物体(分钟5)。
  37. --image_IsDepiction 10
  38. 图像的可选特征。表示
  39. 对象是一个描述。
  40. --image_IsInside 10
  41. 图像的可选特征。表示a
  42. 从对象内部拍摄的照片。
  43. --multiclasses 0(默认值)或1
  44. 分别(0)或一起下载不同的类
  45. 1
  46. --n_threads [默认20]
  47. 要使用的线程数
  48. --noLabels 没有标签创作
  49. --limit integer number
  50. 要下载的图像数量的可选限制

下载完成后得到 OID Folder

2.1.2 csv生成.xml(以Google openimage为例)

代码下载:github

Step1:Get VOC.xml - csv2voc.py

Openimage.csv to Anotation/XXX.xml

  • Input : OPEN_IMAGES_DIR = folder of csv file

eg. where the validation-annotations-bbox.csv is.

  • Output = Anotation/XXX.xml +

    test.txt、train.txt、val.txt、trainval.txt

生成后得到VOCify Folder

Note: 此时无需直接操作图片

test.txt、train.txt、val.txt、trainval.txt 后期训练时可再次生成,代码如下

  1. # -*- coding:utf-8 -*-
  2. # -*- python3.5
  3. import os
  4. import random
  5. trainval_percent = 0.7 #可以自己设置
  6. train_percent = 0.8 #可以自己设置
  7. xmlfilepath = 'Annotations' #地址填自己的
  8. txtsavepath = 'ImageSets/Main'
  9. total_xml = os.listdir(xmlfilepath)
  10. num = len(total_xml)
  11. list = range(num)
  12. tv = int(num*trainval_percent)
  13. tr = int(tv*train_percent)
  14. trainval = random.sample(list,tv)
  15. train = random.sample(trainval,tr)
  16. ftrainval = open(txtsavepath+'/trainval.txt', 'w')
  17. ftest = open(txtsavepath+'/test.txt', 'w')
  18. ftrain = open(txtsavepath+'/train.txt', 'w')
  19. fval = open(txtsavepath+'/val.txt', 'w')
  20. for i in list:
  21. name = total_xml[i][:-4]+'\n'
  22. if i in trainval:
  23. ftrainval.write(name)
  24. if i in train:
  25. ftrain.write(name)
  26. else: fval.write(name)
  27. else:
  28. ftest.write(name)
  29. ftrainval.close()
  30. ftrain.close()
  31. fval.close()
  32. ftest .close()
  33. print('Well finshed')

Step2:Save images to JPEGImages folder - By hand

cp -r Dataset/images_file* VOCify/JPEGImages

Source : Dataset/images_file

Destination : VOCify/JPEGImages

Step3:Set same name - my_same_name.py

Set Anotation/XXX.xml as JPEGImages/XXX.jpg

Make XXX the same

ref: 制作VOC数据集

2.2 手工标注

推荐:使用labelImg工具给图片上标签,并生成.xml文件

【Detection】物体识别-制作PASCAL VOC数据集的更多相关文章

  1. 自动化工具制作PASCAL VOC 数据集

    自动化工具制作PASCAL VOC 数据集   1. VOC的格式 VOC主要有三个重要的文件夹:Annotations.ImageSets和JPEGImages JPEGImages 文件夹 该文件 ...

  2. PASCAL VOC数据集分析(转)

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

  3. 【计算机视觉】PASCAL VOC数据集分析

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

  4. PASCAL VOC数据集The PASCAL Object Recognition Database Collection

    The PASCAL Object Recognition Database Collection News 04-Apr-07: The VOC2007 challenge development ...

  5. 【Tensorflow】 Object_detection之训练PASCAL VOC数据集

    参考:Running Locally 1.检查数据.config文件是否配置好 可参考之前博客: Tensorflow Object_detection之配置Training Pipeline Ten ...

  6. PASCAL VOC数据集分析

    http://blog.csdn.net/zhangjunbob/article/details/52769381

  7. YOLO v3 & Pascal VOC数据集

    代码地址:https://github.com/YunYang1994/tensorflow-yolov3 https://hackernoon.com/understanding-yolo-f5a7 ...

  8. Pascal VOC & COCO数据集介绍 & 转换

    目录 Pascal VOC & COCO数据集介绍 Pascal VOC数据集介绍 1. JPEGImages 2. Annotations 3. ImageSets 4. Segmentat ...

  9. Python生成PASCAL VOC格式的xml标注文件

    Python生成PASCAL VOC格式的xml标注文件 PASCAL VOC数据集的标注文件是xml格式的.对于py-faster-rcnn,通常以下示例的字段是合适的: <annotatio ...

随机推荐

  1. Docker日常常用命令汇总

    一.使用docker镜像/容器 (1)创建容器,且进入命令台 docker run --name 容器名 -i -t ubuntu /bin/bash (2)查看/容器 docker ps #查看正在 ...

  2. PHP 对接 饿了么开放平台 接单

    <?php # 一开始使用的是API方式对接,所以我这里是API的方式+SDK的结合 (除了获取token之外都是使用SDK方式,所以看到的朋友还是直接使用纯SDK方式对接最好),因为我这里使用 ...

  3. linux搭建简单的web服务器

    主要想法是:使用虚拟机的Ubuntu系统搭建http服务器,然后在window的浏览器上测试 1.先测试windows和虚拟机上的ubuntu能否相互ping通 2.下载http.tar.gz并拷贝到 ...

  4. schedule of 2016-10-17~2016-10-23(Monday~Sunday)——1st semester of 2nd Grade

    most important things to do 1.joint phd preparations 2.journal paper to write 3.solid fundamental kn ...

  5. Collection 的子类 List

    List集合的一些使用方法: 一. 声明集合: List<String> list = new ArrayList<String>(); 二.往集合里面添加元素 list.ad ...

  6. PHP高级程序员必看知识点:目录大全(不定期更新)

    面试题系列: 分享一波腾讯PHP面试题 2019年PHP最新面试题(含答案) Redis 高级面试题 学会这些还怕进不了大厂? 阿里面试官三年经验PHP程序员知识点汇总,学会你就是下一个阿里人! ph ...

  7. 浅析PHP类的自动加载和命名空间

    php是使用require(require_once)和include(include_once)关键字加载类文件.但是在实际的开发工程中我们基本上不会去使用这些关键字去加载类. 因为这样做会使得代码 ...

  8. .Net Framework为什么需要联网?

    .Net Framework在安装时需要从微软官方网站下载语言包,所以需要联网. 如果想要真正离线安装,需要先把所需的语言包下载下来.

  9. Java 项目热部署,节省构建时间的正确姿势

    上周末,帮杨小邪(我的大学室友)远程调试项目.SpringBoot 构建,没有热部署,改一下就得重启相关模块.小小的 bug ,搞了我一个多小时,大部分时间都还在构建上(特么,下次得收钱才行).我跟他 ...

  10. DP-Fibonacci

    善于发现 DP 中的 Fibonacci 我们在做 DP  题时  , 会发现有一些题 类似于找规律的题 ,观察测试样例 , 要对数据敏感 , 比如输入 2 输出 1 , 输入 3 就输出 2 …… ...