PASCAL_VOC2012数据集

PASCAL VOC挑战赛主要包括以下几类:图像分类(Object Classification)目标检测(Object Detection)目标分割(Object Segmentation)行为识别(Action Classification)
官网:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/
PASCAL VOC2012数据集介绍_pascal voc 2012-CSDN博客

在Pascal VOC数据集中主要包含20个目标类别,下图展示了所有类别的名称以及所属超类。
image.png

下载地址: http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html#devkit
打开链接后如下图所示,只用下载training/validation data (2GB tar file)文件即可。
image.png
下载后将文件进行解压,解压后的文件目录结构如下所示:

VOCdevkit
    └── VOC2012
         ├── Annotations               所有的图像标注信息(XML文件)
         ├── ImageSets    
         │   ├── Action                人的行为动作图像信息
         │   ├── Layout                人的各个部位图像信息
         │   │
         │   ├── Main                  目标检测分类图像信息
         │   │     ├── train.txt       训练集(5717)
         │   │     ├── val.txt         验证集(5823)
         │   │     └── trainval.txt    训练集+验证集(11540)
         │   │
         │   └── Segmentation          目标分割图像信息
         │         ├── train.txt       训练集(1464)
         │         ├── val.txt         验证集(1449)
         │         └── trainval.txt    训练集+验证集(2913)
         │ 
         ├── JPEGImages                所有图像文件
         ├── SegmentationClass         语义分割png图(基于类别)
         └── SegmentationObject        实例分割png图(基于目标)

注意,train.txt、val.txt和trainval.txt文件里记录的是对应标注文件的索引,每一行对应一个索引信息,也就是图片名称。如下图所示:
image.png
image.png

目标检测任务

接下来简单介绍下如何使用该数据集中目标检测的数据。

  1. 首先在Main文件中,读取对应的txt文件(注意,在Main文件夹里除了train.txt、val.txt和trainval.txt文件外,还有针对每个类别的文件,例如bus_train.txt、bus_val.txt和bus_trainval.txt)。比如使用train.txt中的数据进行训练,那么读取该txt文件,解析每一行。上面说了每一行对应一个标签文件的索引。
   ├── Main                  目标检测分类图像信息
   │     ├── train.txt       训练集(5717)
   │     ├── val.txt         验证集(5823)
   │     └── trainval.txt    训练集+验证集(11540)
  1. 接着通过索引在Annotations文件夹下找到对应的标注文件(.xml)。比如索引为2007_000323,那么在Annotations 文件夹中能够找到2007_000323.xml文件。如下图所示,在标注文件中包含了所有需要的信息,比如filename,通过该字段能够在JPEGImages 文件夹中能够找到对应的图片。size记录了对应图像的宽、高以及channel信息。每一个object代表一个目标,其中的name记录了该目标的类别名称,pose表示目标的姿势(朝向),truncated表示目标是否被截断(目标是否完整),difficult表示该目标的检测难易程度(0代表简单,1表示困难),bndbox记录了该目标的边界框信息。

image.png

  1. 接着通过在标注文件中的filename字段在JPEGImages 文件夹中找到对应的图片。比如在2007_000323.xml文件中的filename字段为2007_000323.jpg,那么在JPEGImages 文件夹中能够找到2007_000323.jpg文件。

image.png

标注自己数据集

  • 我们前面使用PASCAL VOC数据集(这个数据集已经给我们标注好了图片的xml信息) 通过 Faster R-CNN训练,能够预测该数据集中的20种类别。
  • 但是实际中 我们自己的数据集可能有不同的类别,并且这些图片还没有标注(也就是还没有根据图片生成xml标记文件),所以我们需要自己确定好 自己数据集的类别,以及需要自己对图片标记,生成标记xml文件。并且这个xml文件的格式要和 PASCAL VOC数据集中的xml文件格式一致。

github标注图片的开源项目:https://github.com/HumanSignal/labelImg,这个开源项目可以生成xml文件。

使用流程:

  1. 前提准备:需要有 Annotations 和 JPEGImages 两个文件夹,一个用于存放生成的xml文件,一个用于存放我们原始的图片。和一个数据集类别的txt文件。

image.png

  1. 在上面三个文件的目录下,按住shift+右键,选择在此处打开powershell窗口,只有这样会进入conda的默认base环境下。下载并打开 labelImg,打开labelImg的时候,需要选择 生成 xml文件的文件夹,也就是第一步准备的Annotations文件夹。
# 下载工具
pip3 install labelImg
# 打开工具
labelImg
# 指定选项打开工具
# IMAGE_PATH为原始图片的路径。PRE-DEFINED CLASS FILE为我们数据集类别的txt文件
labelImg [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
  1. 打开之后是这样子的。点击左侧的change Save dir选择保存xml的路径

image.png

  1. 点击左侧的 Create RectBox 进行人工标记图片,并点击save保存
  2. 这样我们就生成了自己图片的xml标记文件。

image.png

  1. 把xml标记文件放到 Annotations中,把原始图片放到 JPEGImages中。注意还需要把 JPEGImages下的图片,按照一定的比例分成 训练集和 验证集,然后取标签文件名分别放到 train.txt 和 val.txt 中
VOCdevkit
    └── VOC2012
         ├── Annotations               所有的图像标注信息(XML文件)
         ├── ImageSets    
         │   ├── Action                人的行为动作图像信息
         │   ├── Layout                人的各个部位图像信息
         │   │
         │   ├── Main                  目标检测分类图像信息
         │   │     ├── train.txt       训练集(5717)
         │   │     ├── val.txt         验证集(5823)
         │   │     └── trainval.txt    训练集+验证集(11540)
         │   │
         │   └── Segmentation          目标分割图像信息
         │         ├── train.txt       训练集(1464)
         │         ├── val.txt         验证集(1449)
         │         └── trainval.txt    训练集+验证集(2913)
         │ 
         ├── JPEGImages                所有图像文件
         ├── SegmentationClass         语义分割png图(基于类别)
         └── SegmentationObject        实例分割png图(基于目标)

错误总结:
当使用 labelImg1.8.6 标记图片就闪退时。

  1. 说明python版本太高了,解决方法为创建一个python版本为3.9的虚拟环境,在虚拟环境中安装打开labelimg
  2. LabelImg的正常运行需要依赖一些库,如PyQt5、lxml等。如果这些依赖库没有正确安装或版本不兼容,也可能导致LabelImg闪退。
  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值