PASCAL VOC 2012 数据集解析

2023-10-31

目录

一、Introduction

Classification/Detection Competitions

Segmentation Competition

Action Classification Competition

ImageNet Large Scale Visual Recognition Competition

Person Layout Taster Competition

二、Data

三、VOC2012 VS. VOC2011

四、Development Kit

五、Test Data

六、分割数据集

1、VOC2012

2、SBD

3、如何得到训练集10582?

4、语义分割训练数据制作

七、参考资源



一、Introduction

该数据集的主要目的是建立针对实际场景中的视觉目标进行识别的挑战任务。基于标注的图像数据,它是基本的有监督学习问题。数据集中总共有20类目标需要识别:

  • Person: person
  • Animal: bird, cat, cow, dog, horse, sheep
  • Vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train
  • Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor

基于上述数据集,有三项视觉目标识别任务:分类(classification),检测(detection),分割(segmentation)。 ImageNet提供了另外一个大规模目标识别数据集,主要用于分类任务。此外,还有一个 Person Layout Taster 数据集,主要识别人体的头、手、脚的位置。

Classification/Detection Competitions

  1. Classification: 给定一张测试图片,判别其中每一个目标所属类别,类别必须属于20类之一;

  2. Detection: 给定测试图片,预测图片中每一个目标的 bounding box(位置) and label(类别);

参赛者可以选择上述的任意一种挑战任务,处理任意类或者全部类目标,该挑战可以允许两类方法:

  1. 除了测试集,参赛者可以使用任意的方法和数据建立或者训练系统,目的是为了评估当前算法能够达到的基本水平;
  2. 使用官方提供的训练和验证集建立系统,目的是为了评测不同算法的性能;

Segmentation Competition

Segmentation: 给出图片中每一个像素所属的类别,否则就是背景类。

Action Classification Competition

Action Classification: 判定静态图片中人的活动类别,总共10类。

ImageNet Large Scale Visual Recognition Competition

参考ImageNet官网:ImageNet

Person Layout Taster Competition

Person Layout: 预测人体部位的矩形框位置,主要是头,手,脚。

二、Data

To download the training/validation data, see the Development Kit section.

  • 目标检测中的每一张图片标注信息包括:bounding box and object class label. 需要注意的是,一张图片中可能包含属于多个类别的多个目标。标注的相关规则和注意的细节,参考 guidelines.
  • 原始数据中的一部分图像被标注为像素级分割标签,每一个像素都标注了所属类别,提供了语义分割的竞赛挑战数据集。
  • 用于动作分类任务的数据集与 classification/detection/segmentation tasks 的数据集是分开的。其中一部分被标注为people、bounding box、reference points and their actions. 标注规则和细节,参考guidelines
  • 用于person layout taster的图像,测试集从主任务中分开,额外的标注了人的每一部分,主要是 head/hands/feet.
  • 数据分为两个阶段提供,1、Development Kit 会更新训练集和验证集,以及评估软件(MATLAB)。验证集的目的是为了在提交到官方评测集之前,评估算法的性能。2、测试集用于实际的评估,在VOC2008-2011竞赛中,测试集没有真实标签。
  • 数据被分为 training/validation and testing,每一部分数据量差不多,数据的详细分布,参考:Statistics.

三、VOC2012 VS. VOC2011

VOC2012数据集主要是为了增加分割(segmentation)和动作分类(action classification)数据集的数量,classification/detection tasks没有增加标注数据集。下面列举了VOC2012 和 VOC2011的差别:

  • Classification/Detection: 没有增加额外标注的数据。
  • Segmentation: 在 VOC2008-2011 的基础上,VOC2012 增加了标注数据,数量从7062增加到9993(有这么多?).
  • Action Classification: 在VOC2011基础上,增加了额外的标注数据。为了弥补"boxless"的动作分类任务,除了标注 box annotation, 人的身体上被标注了参考点。具体可以参考(development kit)。
  • Person Layout Taster: 没有增加额外标注数据。

四、Development Kit

The development kit consists of the training/validation data, MATLAB code for reading the annotation data, support files, and example implementations for each competition.

The development kit is now available:

五、Test Data

The test data will be made available according to the challenge timetable. Note that the only annotation in the data is for the action task and layout taster. As in 2008-2011, there are no current plans to release full annotation - evaluation of results will be provided by the organizers.

The test data can be downloaded from the evaluation server. You can also use the evaluation server to evaluate your method on the test data.

六、分割数据集

在学习语义分割系列算法时,经常会看到下面的一段话:

The original dataset contains 1 , 464 ( train), 1 , 449 ( val), and 1 , 456 ( test) pixel-level labeled images for training, validation, and testing, respectively. The dataset is augmented by the extra annotations provided by [29], resulting in 10, 582 ( trainaug) training images.

如上所示,通常语义分割涉及两个数据集官方PASCAL VOC 2012 和 SBD,相应的下载链接如下:

VOC2012VOCtrainval_11-May-2012.tar(~2GB)

SBDbenchmark.tgz(~1.3G)

1、VOC2012

下载的官方 VOCtrainval_11-May-2012.tar 解压后,目录结构如上图所示,该部分只介绍用于分割的数据集。

ImageSets:该目录下Segmentation文件夹总共有三个文件,train.txt:训练集名字列表,1464个文件,val.txt:验证集名字列表,1449个文件,trainval.txt:训练集和验证集的集合,2913个文件。

JPEGImages:所有的原始图片,17125个文件,部分示例图片如下右图所示。

SegmentationClass:所有的标签图,2913个文件,部分示例图片如下左图所示。

 

2、SBD

通常语义分割论文使用的 trainaug dataset 是SBD和官方VOC2012合并而来,其中SBD数据集分布:8498 (train), 2857 (val)。

img:该目录包含了所有的原始图片,11355个JPG文件。

cls:该目录包含111355个mat标签文件,与img的JPG一一对应。每一个mat文件指定了类别和目标的边界,mat文件结构如下:
      - GTcls.Segmentation is a single 2D image containing the segmentation. Pixels that belong to 
        category k have value k, pixels that do not belong to any category have value 0.
      - GTcls.Boundaries is a cell array. GTcls.Boundaries{k} contains the boundaries of the k-th category.
        These have been stored as sparse arrays to conserve space, so make sure you convert them to full arrays
        when you want to use them/visualize them, eg : full(GTcls.Boundaries{15})
      - GTcls.CategoriesPresent is a list of the categories that are present.

          

inst:该目录的每一个mat文件包含了像素级分割和边界标签,mat文件结构如下:
       - GTinst.Segmentation is a single 2D image containing the segmentation. Pixels belonging to the
        i-th instance have value i.
       - GTinst.Boundaries is a cell array. GTinst.Boundaries{i} contains the boundaries of the i-th instance.
        Again, these are sparse arrays.
       - GTinst.Categories is a vector with as many components as there are instances. GTinst.Categories(i) is
        the category label of the i-th instance.

         

3、如何得到增强训练集10582?

如上面陈述,通常 trainaug 的数量为10582,该数字获取方式如下:

VOC数据集分布:

  • voc_trainval:2913
  • voc_train:1464
  • voc_val:1449

SBD数据集分布:

  • sbd_train:8498
  • sbd_val:2857

通过对比其中图片文件名重合情况(具体如何比对,可以写代码或者直接文件复制粘贴),可以得到:
sbd_train(8498) = 和voc_train重复的图片(1133) + 和voc_val重复的图片(545) + sbd_train真正补充的图片(6820)
sbd_val(2857) = 和voc_train重复的图片(1) + 和voc_val重复的图片(558) + sbd_val真正补充的图片(2298)

所以可以得到的最大的扩充数据集应为:
12031张标注图 = voc_train(1464) + voc_val(1449) + sbd_train真正补充的图片(6820) + sbd_val真正补充的图片(2298)
用原来的voc_val(1449)作为验证集,剩下的12031-voc_val(1449)=10582都可以用作训练,就是trainaug(10582)。

4、语义分割训练数据制作

该部分主要介绍如何制作用于语义分割的训练数据制作,制作的基本流程如下:

  • VOC2012标签制作
  • SBD mat数据转图片
  • 合并VOC和SBD,保存文件名 trainval.txt
  • 根据原始图片,生成 tfrecord文件

(a)VOC2012 标签制作

下面左图为原始图片,中间的图是官方提供的标注图,参考 download_and_convert_voc2012.sh,可以将中间的图片处理为右边的图片。右图中,背景像素值为 0,人的区域像素值为 15(人属于第15类),飞机区域的像素值为 1(飞机为第1类)。

            

(b)SBD mat 数据转换

数据转换工具 Mat2PNG,可以将mat标签转为灰度图,具体命令为:

python mat2png.py $DATASETS/VOC_aug/dataset/cls $DATASETS/VOC_aug/dataset/cls_png

(c)合并数据集

参考(3、如何得到训练集10582?)中介绍,合并后的名字列表为trainval.txt,也可以从(b)中的链接中直接下载名字列表。

(d)生成TFRecord

参考TensorFlow官网代码 build_voc2012_data.py,可以生成相应的TFRecord文件。

七、参考资源

  1. PASCAL VOC 2012 and SBD (the augment dataset) 总结_sbd dataset_lscelory的博客-CSDN博客
  2. Semantic Boundaries Dataset and Benchmark
  3. 深度学习图像分割(一)——PASCAL-VOC2012数据集(vocdevkit、Vocbenchmark_release)详细介绍_pascal voc 2012_老潘的博客的博客-CSDN博客
  4. The PASCAL Visual Object Classes Challenge 2012 (VOC2012)
  5. 扩增的Pascal VOC 语义分割数据集制作_pascal voc分割_Cloveryww的博客-CSDN博客
  6. PASCAL VOC 2012数据集介绍_voc2012 aug.txt_一只tobey的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PASCAL VOC 2012 数据集解析 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from

随机推荐

  • ENVI 混合像元分解

    一 混合像元分解的过程 在影像已经完成预处理的前提下 如几何校正 大气校正 去噪等 混合像元分解的一般的过程 首先获取端元波谱 从图像上 波谱库中或者其他来源 然后选择一种分解模型在每个像素中获取每个端元波谱的相对丰度图 最后从丰度图上提取
  • 3. Flutter——HTTP请求

    dio数据请求 HTTP 添加依赖 dependencies dio 1 0 9 版本 get 请求 import package dio dio dart Dio dio new Dio var response await dio ge
  • Vue-element-admin在左上角添加LOGO的方法

    本文主要是分享一下思路的 如不想看可以直接跳到最后 做项目时有一个在左上角添加logo的需求 但是element admin貌似没有添加logo的位置 于是我先在页面中检查侧边栏 发现它是sidebar container类 于是我在vsc
  • eclipse中使用log4j2在控制台输出彩色日志

    目录 一 eclipse中安装Ansi Console 二 在log4j2配置文件中配置颜色样式 三 在log4j2 component properties 配置文件中启用颜色配置 四 附上log4j2配置文件 1 log4j2 xml
  • left join 连表问题解析:on后多条件无效 & where与on的区别

    在项目中用到多表联合查询 发现2个现象 今天解决这2个疑问 1 left join连接2张表 on后的条件第一个生效 用and连接的其他条件不生效 2 一旦加上where 则显示的结果等同于inner join 先写结论 过滤条件放在 wh
  • 停止一下或多个进程以继续安装 vmware-vmx.exe 问题解决

    1 起因 用vmware大虚拟机做大数据集群经常出现某个虚拟机起不来 还导致vmware无法关闭 提示某某虚拟机繁忙 经网友提示 升级到15 pro可以解决 事实证明无效 最后的解决办法是手动复制虚拟机文件 在配置文件中注释uid 然后用虚
  • Java中的多态调用问题,下面代码输出是什么?

    转自 http www lvhongqiang com blog431 html 问题 下面代码输出是什么 public class Test3 public static void main String args AAA a new B
  • Spring Boot项目中使用Logback日志与使用AOP拦截请求日志信息

    日志记录了系统行为的时间 地点等很多细节的具体信息 在发生错误或者接近某种危险状态时能够及时提醒开发人员处理 往往在系统产生问题时承担问题定位与诊断和解决的重要角色 一般很多线上的问题只能通过进行日志分析才可以解决的 所以需要明确日志在日常
  • 【Android开发,极客时间资源共享

    android divider f00 分割线的颜色 android dividerHeight 2dp 分割条的高度 android cacheColorHint 0fff 当列表使用背景图之后 下拉或者上拉都会出现一个问题 背景图不见了
  • 针对热点数据的处理

    针对热点数据的处理 出现问题 解决办法 大体思路 实现方式一 Spring Data Redis 前言 项目要求 Redis中菜品缓存数据KEY的设计 dish 分类id 一 导入依赖 二 添加缓存的代码例子 三 删除缓存 实现方式二 Sp
  • PAT : 基础编程题目集_编程题答案(7-1 ~ 7-38)(纯C编写)

    题目地址 7 1 include
  • Uncaught ReferenceError: __VUE_HMR_RUNTIME__ is not defined

    Syntax Error Error vitejs plugin vue requires vue gt 3 2 13 or vue compiler sfc to be present in the dependency tree 第一步
  • 使用scrapy和selenium结合爬取网易新闻内容

    代码结构 相关文件的代码 爬虫文件 mid py 爬虫文件 import scrapy from middle items import MiddleItem from selenium import webdriver class Mid
  • 欧拉降幂公式

    欧拉降幂公式 a b a b equiv ab a b
  • CVE-2022-24112 Apache APISIX 命令执行漏洞复现

    CVE 2022 24112 Apache APISIX 命令执行漏洞 Apache APISIX 是 Apache 软件基金会下的云原生 API 网关 它兼具动态 实时 高性能等特点 提供了负载均衡 动态上游 灰度发布 金丝雀发布 服务熔
  • 如何去编写一个C++程序

    如何去编写一个C 程序 1 防卫式声明 2 写class的头 3 考虑复数准备什么数据 4 考虑复数准备哪些函数 5 类外定义函数 成员函数 6 类外定义函数 非成员函数即全局函数 7 调用函数 学习侯捷老师讲授课程C 面向对象高级开发 总
  • 在浏览器中输入URL中会发生什么

    面试官问 在浏览器中输入URL中会发生什么 我们首先分析下这个问题 这是一个很宽泛 细节非常非常多的一个问题 如果要展开来细说我们可以直接从应用层的协议 讲到传输层 网络层 再到数据链路层 可是我们这里不建议大家一开始就深挖协议中的细节 原
  • Unity 视频播放

    Unity 视频播放 前言 在Unity引擎做视频播放的方式有很多种 这里介绍两种 一种是使用RawImage组件的纹理进行视频播放 将视频每一帧的画面复制在RawImage的纹理贴图中 实现视频的播放展示 另外一种是使用插件Av Pro进
  • node.js系统学习4-sync&&async

    async异步 sync同步 阻塞 非阻塞 https www runoob com nodejs nodejs callback html
  • PASCAL VOC 2012 数据集解析

    目录 一 Introduction Classification Detection Competitions Segmentation Competition Action Classification Competition Image