【Detection】物体识别-制作PASCAL VOC数据集

代码下载: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)


<annotation>
    <folder>VOC2012</folder>
    <filename>2007_000392.jpg</filename>                               //文件名
    <source>                                                           //图像来源(不重要)
        <database>The VOC2007 Database</database>
        <annotation>PASCAL VOC2007</annotation>
        <image>flickr</image>
    </source>
    <size>                                             //图像尺寸(长宽以及通道数)
        <width>500</width>
        <height>332</height>
        <depth>3</depth>
    </size>
    <segmented>1</segmented>                                   //是否用于分割(在图像物体识别中01无所谓)
    <object>                                                           //检测到的物体
        <name>horse</name>                                         //物体类别
        <pose>Right</pose>                                         //拍摄角度
        <truncated>0</truncated>                                   //是否被截断(0表示完整)
        <difficult>0</difficult>                                   //目标是否难以识别(0表示容易识别)
        <bndbox>                                                   //bounding-box(包含左下角和右上角xy坐标)
            <xmin>100</xmin>
            <ymin>96</ymin>
            <xmax>355</xmax>
            <ymax>324</ymax>
        </bndbox>
    </object>
    <object>                                                           //检测到多个物体
        <name>person</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>                    //检测矩形框坐标
            <xmin>198</xmin>
            <ymin>58</ymin>
            <xmax>286</xmax>
            <ymax>197</ymax>
        </bndbox>
    </object>
</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

用法:main.py [-h] [--Dataset/path/to/OID/csv/] [-y]
               [ - 类列表[类列表...]]
               [--type_csv'train'或'validation'或'test'或'all']
               [--sub 子人验证图像的子集或机器生成的h或m)]
               [--image_IsOccluded 1或0] [ -  image_IsTruncated 1或0]
               [--image_IsGroupOf 1或0] [ -  image_IsDepiction 1或0]
               [--image_IsInside 1或0] [--multiclasses 0(默认值或1)
               [--n_threads [默认20]] [--noLabels]
               [--limit integer number]
               <command>'downloader','visualizer'或'ill_downloader'。
Open Image Dataset Downloader
打开图像数据集下载程序
位置参数:
  <command>'downloader','visualizer'或'ill_downloader'。
                        'downloader','visualizer'或'ill_downloader'。
可选参数:
  -h, --help      显示此帮助消息并退出
  --Dataset /path/to/OID/csv/
                        OID数据集文件夹的目录
  -y, --yes 是和是可以下载丢失的文件
   - 类列表[类列表...]
                        所需类的“字符串”序列
  --type_csv'train'或'validation'或'test'或'all'
                        从什么csv搜索图像
  --sub  人工验证图像或机器生成的子集(h或m)
                        从人类验证的数据集或从
                        机器生成一个。
  --image_IsOccluded 1或0
                        图像的可选特征。表示
                        对象被图像中的另一个对象遮挡。
  --image_IsTruncated 1或0
                        图像的可选特征。表示
                        对象超出图像的边界。
  --image_IsGroupOf 1或0
                        图像的可选特征。表示
                        盒子跨越一组物体(分钟5)。
  --image_IsDepiction 1或0
                        图像的可选特征。表示
                        对象是一个描述。
  --image_IsInside 1或0
                        图像的可选特征。表示a
                        从对象内部拍摄的照片。
  --multiclasses 0(默认值)或1
                        分别(0)或一起下载不同的类
                        (1)
  --n_threads [默认20]
                        要使用的线程数
  --noLabels            没有标签创作
  --limit integer number
                        要下载的图像数量的可选限制

下载完成后得到 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 后期训练时可再次生成,代码如下

# -*- coding:utf-8 -*-
# -*- python3.5
import os
import random 

trainval_percent = 0.7 #可以自己设置
train_percent = 0.8    #可以自己设置

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()
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文件

原文地址:https://www.cnblogs.com/Neo007/p/12316584.html

时间: 2024-11-10 18:33:54

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

PASCAL VOC数据集分析(转)

PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge. 本文主要分析PASCAL VOC数据集中和图像中物体识别相关的内容. 在这里采用PASCAL VOC2012作为例子.下载地址为:点击打开链接.(本文中的系统环境为ubuntu14.04) 下载完之后解压,可以在VOCdevkit目录下的VOC2012中看到如下的文件: 其中在图像物体识别上着重需要了解的是Annotation

Pascal VOC &amp; COCO数据集介绍 &amp; 转换

目录 Pascal VOC & COCO数据集介绍 Pascal VOC数据集介绍 1. JPEGImages 2. Annotations 3. ImageSets 4. SegmentationObject & SegmentationClass COCO数据集介绍 数据集分类 Coco VOC数据集转化为COCO数据集格式 训练detectron 训练 测试 评估 Reference Pascal VOC & COCO数据集介绍 Pascal VOC数据集介绍 Annotat

谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(二)[超详细教程] ubuntu16.04版本

本节对应谷歌开源Tensorflow Object Detection API物体识别系统 Quick Start步骤(一): Quick Start: Jupyter notebook for off-the-shelf inference 本节步骤较为简单,具体操作如下: 1.在第一节安装好jupyter之后,在ternimal终端进入到models文件夹目录下,执行命令: jupyter-notebook 2.会在网页打开Jupyter访问object_detection文件夹,进入obj

VOC数据集 目标检测

最近在做与目标检测模型相关的工作,很多都要求VOC格式的数据集. PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛, PASCAL全称:Pattern Analysis, Statical Modeling and Computational Learning,是一个由欧盟资助的网络组织.很多模型都基于此数据集推出.比如目标检测领域的yolo,ssd等等. voc数据集结构 看下目录结构 :~/git_project

PASCAL VOC DATASET

PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge.该挑战的主要目的是识别真实场景中一些类别的物体.在该挑战中,这是一个监督学习的问题,训练集以带标签的图片的形式给出.这些物体包括20类: Person: personAnimal: bird, cat, cow, dog, horse, sheepVehicle: aeroplane, bicycle, boat, bus, car, motorbike, t

使用labelImg制作自己的数据集(VOC2007格式)用于Faster-RCNN训练

https://blog.csdn.net/u011956147/article/details/53239325 https://blog.csdn.net/u011574296/article/details/78953681 2018年01月02日 17:13:59 ZealCV 阅读数:10459 标签: faster-r-cnn数据标注 更多 个人分类: 深度学习 版权声明:本文为博主原创文章,欢迎转载,请注明出处 https://blog.csdn.net/u011574296/ar

深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集 - gybheroin的博客 - 博客频道 - CSDN.NET gybheroin的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [

Windows10+YOLOv3实现检测自己的数据集(1)——制作自己的数据集

本文将从以下三个方面介绍如何制作自己的数据集 数据标注 数据扩增 将数据转化为COCO的json格式 参考资料 一.数据标注 在深度学习的目标检测任务中,首先要使用训练集进行模型训练.训练的数据集好坏决定了任务的上限.下面介绍两种常用的图像目标检测标注工具:Labelme和LabelImg. (1)Labelme Labelme适用于图像分割任务和目标检测任务的数据集制作,它来自该项目:https://github.com/wkentaro/labelme . 按照项目中的教程安装完毕后,应用界

matlab练习程序(神经网络识别mnist手写数据集)

记得上次练习了神经网络分类,不过当时应该有些地方写的还是不对. 这次用神经网络识别mnist手写数据集,主要参考了深度学习工具包的一些代码. mnist数据集训练数据一共有28*28*60000个像素,标签有60000个. 测试数据一共有28*28*10000个,标签10000个. 这里神经网络输入层是784个像素,用了100个隐含层,最终10个输出结果. arc代表的是神经网络结构,可以增加隐含层,不过我试了没太大效果,毕竟梯度消失. 因为是最普通的神经网络,最终识别错误率大概在5%左右. 迭