PASCAL VOC 2012 数据集详解

本文是转载过来的,原文地址:https://blog.csdn.net/wenxueliu/article/details/80327316

在目标检测中,如果对数据不了解,在数据集处理这块有时候会看得云里雾里。比如

    trainval 这个词到底指什么

    标签中的 bbox 中的 ymax, xmax, ymin, xmin 取值范围是多少,如何计算的?

    图片与标签是如何关联起来的等等

本文的目的:

    明白数据集是如何组织的

    TensorFlow 是如何对数据做处理的。

数据集详解

在目标检测中,主要用到了 Annotations,ImageSets,JPEGImages

其中 ImageSets/Main/ 保存了具体数据集的索引,Annotations 保存了标签数据, JPEGImages 保存了图片内容。

ImageSets

ImageSets/Main/ 文件夹以 , {class}_trainval.txt {class}_val.txt 的格式命名。 train.txt val.txt 例外

包括 Action,Layout,Main,Segmentation 四个文件夹

    Action:存放的是人的动作(例如running、jumping等等,这也是VOC challenge的一部分)

    Layout:存放的是具有人体部位的数据(人的head、hand、feet等等,这也是VOC challenge的一部分

    Main:存放的是图像物体识别的数据,总共分为20类。

    Segmentation:存放的是可用于分割的数据。

ImageSets/Main/ 文件夹以 , {class}_trainval.txt {class}_val.txt 的格式命名。 train.txt val.txt 例外

aeroplane_train.txt

aeroplane_trainval.txt

aeroplane_val.txt

bicycle_train.txt

bicycle_trainval.txt

bicycle_val.txt

bird_train.txt

bird_trainval.txt

bird_val.txt

boat_train.txt

boat_trainval.txt

boat_val.txt

bottle_train.txt

bottle_trainval.txt

bottle_val.txt

bus_train.txt

bus_trainval.txt

bus_val.txt

car_train.txt

car_trainval.txt

car_val.txt

cat_train.txt

cat_trainval.txt

cat_val.txt

chair_train.txt

chair_trainval.txt

chair_val.txt

cow_train.txt

cow_trainval.txt

cow_val.txt

diningtable_train.txt

diningtable_trainval.txt

diningtable_val.txt

dog_train.txt

dog_trainval.txt

dog_val.txt

horse_train.txt

horse_trainval.txt

horse_val.txt

motorbike_train.txt

motorbike_trainval.txt

motorbike_val.txt

person_train.txt

person_trainval.txt

person_val.txt

pottedplant_train.txt

pottedplant_trainval.txt

pottedplant_val.txt

sheep_train.txt

sheep_trainval.txt

sheep_val.txt

sofa_train.txt

sofa_trainval.txt

sofa_val.txt

train.txt

train_train.txt

train_trainval.txt

train_val.txt

trainval.txt

tvmonitor_train.txt

tvmonitor_trainval.txt

tvmonitor_val.txt

val.txt

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    {class}_train.txt 保存类别为 class 的训练集的所有索引,每一个 class 的 train 数据都有 5717 个。

    {class}_val.txt 保存类别为 class 的验证集的所有索引,每一个 class 的val数据都有 5823 个

    {class}_trainval.txt 保存类别为 class 的训练验证集的所有索引,每一个 class 的val数据都有11540 个

每个文件包含内容为

2011_003194 -1

2011_003216 -1

2011_003223 -1

2011_003230  1

2011_003236  1

2011_003238  1

2011_003246  1

2011_003247  0

2011_003253 -1

2011_003255  1

2011_003259  1

2011_003274 -1

2011_003276 -1

注:1代表正样本,-1代表负样本。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

VOC2012/ImageSets/Main/train.txt 保存了所有训练集的文件名,从 VOC2012/JPEGImages/ 找到文件名对应的图片文件。VOC2012/Annotations/ 找到文件名对应的标签文件

VOC2012/ImageSets/Main/val.txt 保存了所有验证集的文件名,从 VOC2012/JPEGImages/ 找到文件名对应的图片文件。VOC2012/Annotations/ 找到文件名对应的标签文件

读取 JPEGImages 和 Annotation 文件转换为 tf 的 Example 对象,写入 {train|test}{index}_of{num_shard} 文件。每个文件写的 Example 的数量为 total_size/num_shard。(不同数据集可以适当调节 num_shard 来控制每个输出文件的大小)

Annotations

文件夹中文件以 {id}.xml (id 保存在 VOC2012/ImageSets/Main/文件夹 ) 格式命名的 xml 文件,保存如下关键信息

    物体 label : name ,如下例子为 person

    图片尺寸: depth, height, width

    物体 bbox : bndbox 下 xmax, xmin, ymax, ymin

   

        2009_001137.jpg

        VOC2012

       

            person

           

                355

                187

                334

                121

           

            0                //目标是否难以识别(0表示容易识别)

            0

            Unspecified                //拍摄角度

            0                //是否被截断(0表示完整)

       

       

            pottedplant

           

                500

                376

                261

                1

           

            0

            1

            Unspecified

            1

       

        1

       

            3

            334

            500

       

       

            PASCAL VOC2009

            The VOC2009 Database

            flickr

       

   

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

JPEGImages

以 2009_001137.jpg 为例,解码之后获取 image_data(图片内容的二进制),height, width

数据集转换为 TF Record

以上面例子为例,最终的 TFRecord 为

TF Example

{

'filename' : 'VOC{year}/JPEGImages/{id}.jpg'

'height' :  height

'width' :  width

'classes' : [classes.index(person), classes.index(person)]

'y_mins' : [float(121)/334, float(1)/334]  # 各个 object 的  ymin

'x_mins' : [float(187)/500, float(376)/500]

'y_maxes' : [float(334)/334, float(261)/334]

'x_maxes' : [ float(355)/500, float(500)/500]

'encoded' : '图片内容二进制'

}

其中

classes = [

    "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat",

    "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person",

    "pottedplant", "sheep", "sofa", "train", "tvmonitor"

]

注:difficult = 1 的直接跳过,不进行处理。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

以上为将一张图片及标签转为 TF Example,对于整个数据集,依次遍历数据集即可。

---------------------

作者:wenxueliu

来源:CSDN

原文:https://blog.csdn.net/wenxueliu/article/details/80327316

版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(PASCAL VOC 2012 数据集详解)