Pascal Voc数据集详细介绍

1.首先了解VOC2012数据集的内容

数据集下载后解压得到一个名为VOCdevkit的文件夹,该文件夹结构如下: 

.
└── VOCdevkit     #根目录
    └── VOC2012   #不同年份的数据集,这里只下载了2012的,还有2007等其它年份的
        ├── Annotations        #存放xml文件,与JPEGImages中的图片一一对应,解释图片的内容等等
        ├── ImageSets          #该目录下存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上±1表示正负样本
        │   ├── Action         #存放的是人的动作,我们暂时不用
        │   ├── Layout         #存放的人体部位的数据。我们暂时不用
        │   ├── Main           #存放的是图像物体识别的数据,分为20类
        │   └── Segmentation   #存放的是可用于分割的数据,做检测识别也是用不到的.
        ├── JPEGImages         #存放源图片
        ├── SegmentationClass  #存放的是图片,分割后的效果,见下文的例子
        └── SegmentationObject #存放的是图片,分割后的效果,见下文的例子

1)JPEGImages文件夹

文件夹里包含了训练图片和测试图片,混放在一起,即数据集的原图片 

2)Annatations文件夹

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

3)ImageSets文件夹

Action存放的是人的动作,我们暂时不用
Layout存放的人体部位的数据。我们暂时不用
Main存放的是图像物体识别的数据,分为20类,Main里面有test.txt , train.txt, val.txt ,trainval.txt.这四个文件我们后面会生成
Segmentation存放的是可用于分割的数据,做检测识别也是用不到的.

4)其他的文件夹不解释了.

如果你下载了VOC2012数据集,那么把它解压,把各个文件夹里面的东西删除,保留文件夹名字。如果没下载,那么就仿照他的文件夹格式,自己建好空文件夹就行。

2.Annatations文件夹下xml介绍


    VOC2012             #表明图片来源
    2007_000027.jpg #图片名称
                                 #图片来源相关信息
        The VOC2007 Database
        PASCAL VOC2007
        flickr
    
                                   #图像尺寸
        486
        500
        3
    
    0             #是否用于分割
                                 #包含的物体
        person              #物体类别
        Unspecified         #拍摄角度
        0         #truncated表明这个目标因为各种原因没有被框完整(被截断了),比如说一辆车有一部分在画面外;
        0         #difficult表明这个待检测目标很难识别,有可能是虽然视觉上很清楚,但是没有上下文的话还是很难确认它属于哪个分类;标为difficult的目标在测试成绩的评估中一般会被忽略。
                                 #物体的bbox,bndbox是一个轴对齐的矩形,它框住的是目标在照片中的可见部分;
            174
            101
            349
            351
        
                                   #物体的头
            head
            
                169
                104
                209
                146
            
        
                                    #物体的手
            hand
            
                278
                210
                297
                233
            
        
        
            foot
            
                273
                333
                297
                354
            
        
        
            foot
            
                319
                307
                340
                326
            
        
    

  • bndbox是一个轴对齐的矩形,它框住的是目标在照片中的可见部分;
  • truncated表明这个目标因为各种原因没有被框完整(被截断了),比如说一辆车有一部分在画面外;
  • occluded是说一个目标的重要部分被遮挡了(不管是被背景的什么东西,还是被另一个待检测目标遮挡);
  • difficult表明这个待检测目标很难识别,有可能是虽然视觉上很清楚,但是没有上下文的话还是很难确认它属于哪个分类;标为difficult的目标在测试成绩的评估中一般会被忽略。
  • 注意:在一个中, 标签要放在前面,否则的话,目标检测的一个重要工程实现SSD会出现解析数据集错误(另一个重要工程实现py-faster-rcnn则不会)。

    3.ImageSets文件夹

    ImageSets包含如下四个子文件夹: 

    这里写图片描述 
    各个文件夹中存放的是各种用途的TXT文件。例如在Main文件夹下有名为aeroplane_train.txt的文件,顾名思义是用于飞机类别的训练数据。该txt的具体内容如下,其中±1应该表示的是正负样本的含义(没有具体研究):
    Pascal Voc数据集详细介绍_第1张图片

    其中以下四个文件内容中光有图片的名字,末尾没有标注正负1.

    test.txt: 测试集 
    train.txt:训练集 
    val.txt:  验证集 
    trainval.txt:训练和验证集
    如train.txt文件中内容如下:
    Pascal Voc数据集详细介绍_第2张图片

    在原始VOC2012数据集中,trainval大约占整个数据集的50%,test大约为整个数据集的50%;train大约是trainval的50%,val大约为trainval的50%。所以我们可参考以下代码来生成这4个txt文件: 

    import os  
    import random  
    
    trainval_percent = 0.7  
    train_percent = 0.5  
    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:  
        # 去掉.jpg,.png后缀
        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()
    

    注意:上述代码中涉及到的路径要写全,另外各个数据集所占比例根据实际数据集的大小调整比例。 

    4.JEPGImages文件夹 

    该文件夹存放的是数据集的所有源图片

    5.JEPGImages文件夹和SegmentationClass文件夹

    这两个文件夹的内容对目标检测项目来说暂时用不到。

    参考:

    1. Pascal Voc数据集详细分析
    2. 目标检测之VOC2007格式数据集制作

    你可能感兴趣的:(深度学习)