人工智能之数据处理

小白AI:VOC数据集史上最实用的介绍和使用(2)

2020-06-29  本文已影响0人  小白学AI

上期介绍了VOC数据集的一些基本知识,相信有需要的小伙伴已经下载从百度网盘下载了VOC的数据。今天笔者就带领大家一起对VOC进行深入的研究和学习。

【题外话:有的人可能认为第一篇文章太过于简单,干货不够。但是笔者认为,要想掌握一门知识,合理的知识陡峭程序很重要。如果一上来笔者直接介绍VOC数据在各类模型中的使用,恐怕对于刚刚接触到VOC的小伙伴们来说简直是如坠云里雾里。所以笔者坚持由简单到复杂,希望给大家带来实实在在的帮助】

下面全部的操作都是在Win10中。

1.VOC数据集

下载下来的VOC数据如下图所示:

1.下载下来的压缩的VOC数据集

可以看到,分为3个独立的tar压缩文件,分别是VOCtest_06-Nov-2007.tar,VOCtrainval_06-Nov-2007.tar和VOCtrainval_11-May-2012.tar。

VOCtest_06-Nov-2007.tar:测试集合(2007

VOCtrainval_06-Nov-2007.tar:训练集合和验证集合(2007

VOCtrainval_11-May-2012.tar:训练集合和验证集合(2012

【注意:这里并没有缺少文件,根据官方的说法,VOC2012是没有提供测试集的,即没有test集合】

好了,下面我们把这3个tar文件解压到该文件夹下。这里有个小技巧,选中全部的3个tar,然后选择解压到当前文件夹下。

(1)选中3个tar->(2)右键解压到当前文件夹(X) 【注意:这里不要选解压每个压缩文件到到单独的文件夹(s)】

3.解压进行中

因为本身VOC的数据集也不是很大,几分钟就可以解压完毕。

4.解压完成

好了,这个VOCdevkit就是我们需要的。为了看起来清爽,这里我们可以直接把下面的3个tar压缩文件删除了。其实也是笔者一直倡导的理念,学习不仅要知其然,更要知其所以然。这里我们的目的就是为了得到解压后的VOC数据库,显然tar就不再需要了。所以明白每一步其实很重要,而不是机械的生搬硬套。我们只保留VOCdevkit文件夹即可。

5.只保留VOCdevkit

OK,终于得到她!让我们一睹芳容。

6.VOC2007和VOC2012

VOC2007:2007年发布的VOC数据集

VOC2012:2012年发布的VOC数据集

这里我们以VOC2007为例,来看一下到底VOC数据集包含哪些部分?

7.VOC2007的数据集结构

(1)Annotations:标注信息。这里所谓的标注信息,实际上是图片中物体(instances)的位置坐标和。文件的形式是xml,并且是1个xml和1张图片相对应。

8.Annotations文件夹

一共有9963个xml文件,意味着会有9963张图片,也即VOC2007全部的数据集有9963张。

打开其中的任意一个xml,比如000001.xml

9.标注文件000001.xml

这里有很多的干货,这里我们逐一来解析:

首先,该xml文件是以<annotation> 开头,</annotation>结尾的。在<annotation> ...</annotation>包裹的范围内,

有如下几个关键的信息:

<size>:代表图片的分辨率,以该xml为例,对应的图片宽度是353pixel,高度是500pixel,通道数是3.

<object>:代表物体,里面有name,pose和bndbox。其中比较重要的是name和bndbox。name是指物体属于的类别,bndbox是标注框的信息

               显然这里的xml里面有2个物体(instances),分别是dog和person。

                以dog的bndbox为例:

                <bndbox>

                                <xmin>48</xmin>

                               <ymin>240</ymin>

                                <xmax>195</xmax>

                                <ymax>371</ymax>

                </bndbox>

xmin和ymin构成了bndbox的左上角,xmax和ymax构成了bndbox的右下角。那么有人肯定要问了:什么是bndbox?

其实bndbox是boundingbox缩写,深度学习的模型检测出了目标之后,会画一个框框,标定这个框内的东西,认为是一个object。

例如:

10.在图片上绘制bndbox

上面我们说到,00001.xml这个标注文件对应的图片中有2个instances,分别是dog和person。那么我们现在来看下,是不是这样的。

首先我们先找到这张图片,请大家记住,VOC数据集中,图片的名称和xml文件的名称是一致的,除了后缀名不一样。例如这里的000001.xml,其对应的图片是:000001.jpg

11.图片000001.jpg

经过观察,该图片中确实如xml中描述的那样,有2个instances,分别是person和dog。

(2)ImageSets:

        Layout下存放的是具有人体部位的数据(人的head、hand等)

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

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

        我们主要关注Main下面的文件.

12.ImageSets下的txt文件

可以看到,在Main下有很多的txt文件,一共是再仔细观察会发现,每个类别有4个txt文件,比如aeroplane(飞机)就有4个txt文件,

分别是:aeroplane_test.txt/aeroplane_train.txt/aeroplane_trainval.txt/aeroplane_val.txt

其他的,比如bicycle,也是有4个txt。

我们来看下:aeroplane_trainval.txt

1代表正样本,-1代表负样本

由于VOC一共有20个类别,所以这里的4*20=80。那么另外的4个txt是什么呢?

其实是train.txt/val.txt/trainval.txt/test.txt,里面记录的是训练和验证以及测试的样本的名称。

上一篇下一篇

猜你喜欢

热点阅读