制作VOC数据集

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

其中在图像物体识别上着重需要了解的是Annotations(xml图片信息)、ImageSets[challenge对应的图像数据,main存放训练测试的.txt,包括每一类图片(txt:前面的表示图像的name,后面的1代表正样本,-1代表负样本。)train.txt(数据位置)]和JPEGImages(图片)。

①JPEGImages:JPEGImages文件夹中包含了PASCAL VOC所提供的所有的图片信息,包括了训练图片和测试图片。
这些图像都是以“年份_编号.jpg”格式命名的。
图片的像素尺寸大小不一,但是横向图的尺寸大约在500*375左右,纵向图的尺寸大约在375*500左右,基本不会偏差超过100。

②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:存放的是每一种类型的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两者没有交集,也就是训练数据和验证数据不能有重复,在选取训练数据的时候 ,也应该是随机产生的。
④SegmentationClass和SegmentationObject:这两个文件夹下保存了物体分割后的图片
 

二、制作自己的数据集

存入JPEGImages文件夹——你可以直接从各种渠道下载得到所需要的图片集,存入到JPEGImages文件夹下,命名格式统一为“%6d.jpg”,(000001.jpg)

第二步:生成Main文件夹下的.txt文件——在主目录下运行以下代码既可生成test.txt、train.txt、val.txt、trainval.txt四个文件,请注意每一个path地址是否正确

# -*- 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')

运行完成,得到四个txt文件:可以打开看一看,内容就是各个图片的索引,意味着哪些图片用做训练,哪些用做测试。

③  生成.xml标签

cvs生成.xml(以Google openimage为例):点击下载代码

txt同理换一下数据就好

 


---------------------   
参考:1.https://blog.csdn.net/zhangjunbob/article/details/52769381  

             2.https://blog.csdn.net/zzZ_CMing/article/details/81131101

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值