您當前的位置:首頁 > 書法

PASCAL VOC資料集的標註格式

作者:由 Gemfield 發表于 書法時間:2018-02-07

背景

PASCAL的全稱是Pattern Analysis, Statistical Modelling and Computational Learning。

VOC的全稱是Visual Object Classes。

第一屆PASCAL VOC舉辦於2005年,然後每年一屆,於2012年終止。

本文以PASCAL VOC 2012為基礎。

資料標註方式

PASCAL VOC資料集的標註格式

資料集簡介

PASCAL VOC競賽目標主要是目標識別,其提供的資料集裡包含了20類的物體。

person

bird, cat, cow, dog, horse, sheep

aeroplane, bicycle, boat, bus, car, motorbike, train

bottle, chair, dining table, potted plant, sofa, tv/monitor

PASCAL VOC的主要2個任務是(按照其官方網站所述,實際上是5個):

分類: 對於每一個分類,判斷該分類是否在測試照片上存在(共20類);

檢測:檢測目標物件在待測試圖片中的位置並給出矩形框座標(bounding box);

Segmentation: 對於待測照片中的任何一個畫素,判斷哪一個分類包含該畫素(如果20個分類沒有一個包含該畫素,那麼該畫素屬於背景);

(在給定矩形框位置的情況下)人體動作識別;

Large Scale Recognition(由ImageNet主辦)。

另外,PASCAL VOC利用其訓練集的一個子集對外提供2個嚐鮮性質的任務:

(無給定矩形框位置的情況下)人體動作識別;

Person Layout: 對於待測照片中的每一個人,預測出這個人的bounding box,以及這個人的頭、手、腳的bounding box。

在本文中,Gemfield只討論目標檢測。關於語義分割的訪問,請訪問gemfield專欄文章:語義分割的資料集

XML標註格式

對於目標檢測來說,每一張圖片對應一個xml格式的標註檔案。所以你會猜到,就像gemfield準備的訓練集有8萬張照片一樣,在存放xml檔案的目錄裡,這裡也將會有8萬個xml檔案。下面是其中一個xml檔案的示例:

<?xml version=“1。0” encoding=“utf-8”?>

VOC2007

test100。mp4_3380。jpeg

1280

720

3

gemfield

549

715

257

289

0

0

civilnet

842

1009

138

171

0

0

0

在這個測試圖片上,我們標註了2個object,一個是gemfield,另一個是civilnet。

在這個xml例子中:

bndbox是一個軸對齊的矩形,它框住的是目標在照片中的可見部分;

truncated表明這個目標因為各種原因沒有被框完整(被截斷了),比如說一輛車有一部分在畫面外;

occluded是說一個目標的重要部分被遮擋了(不管是被背景的什麼東西,還是被另一個待檢測目標遮擋);

difficult表明這個待檢測目標很難識別,有可能是雖然視覺上很清楚,但是沒有上下文的話還是很難確認它屬於哪個分類;標為difficult的目標在測試成績的評估中一般會被忽略。

注意:在一個<object />中,<name /> 標籤要放在前面,否則的話,目標檢測的一個重要工程實現SSD會出現解析資料集錯誤(另一個重要工程實現py-faster-rcnn則不會)。

如何評判目標檢測的成績?

先來介紹幾個概念

1,IoU

這是關於一個具體預測的Bounding box的準確性評估的資料。對於目標檢測任務來說,一個具體的目標預測包括一個bounding box的座標和它的置信度。透過測量預測的bndbox(bounding box)和ground truth的bndbox之間的重合度,我們來得出此次預測是true positive還是false positive。

PASCAL VOC資料集的標註格式

一般來說,重合區域的面積(上面公式的分子)和2個bndbox的面積之和的比例(上面公式的分母)如果大於50%,那麼認為這是一個成功的預測(true positive),否則認為這是一個失敗的預測(false positive)。公式等號的左邊就是IoU。50%這個數值的選取是考慮了一些因素的,比方說人有胳膊有腿,有蜷縮有伸展的狀態,因此這個數也不能太嚴格。

如果對於一個目標演算法檢測出多個目標,比如一個目標上演算法給出了5個檢測框,那麼就算4個檢測錯誤。

2,mAP

對於一個給定的任務和分類:

precision/recall曲線是根據演算法的輸出計算得到的。

Recall(召回率)說的是所有正樣本中被演算法預測出來的樣本所佔的比率;

(Recall is defined as the proportion of all positive examples ranked above a given rank。)

Precision(準確率)說的是預測出來的樣本中是正確的比例是多少;

(Precision is the proportion of all examples above that rank which are from the positive class。 )

AP的值就某種程度上反映了上述PR曲線(precision/recall)的形狀,我們把recall的值從0到1 (0%到100%)劃分為11份:0、0。1、0。2、0。3、0。4、0。5、0。6、0。7、0。8、0。9、1。0,在每個recall尺度上我們計算下準確率,然後再計算總和並平均,就是AP值。

PASCAL VOC資料集的標註格式

因此,一個表現良好的演算法應該是在各個recall層面上都有足夠好的Precision。

對於給定的任務的所有的分類:

計算每個分類的AP,求和再平均,得到的就是mAP

PASCAL VOC資料集例項

當在PASCAL VOC官方網站上下載了development kit和challenge image database並將它們解壓到同一目錄下,會產生下面這樣的目錄結構:

gemfield@ai:/data/VOCdevkit2007/VOC2007$ ls -l

total

584

drwxrwxr-x

2

gemfield gemfield

270336

2月

7

19:22 Annotations

drwxrwxr-x

5

gemfield gemfield

4096

11月

7

2007

ImageSets

drwxrwxr-x

2

gemfield gemfield

274432

11月

7

2007

JPEGImages

drwxrwxr-x

2

gemfield gemfield

20480

11月

7

2007

SegmentationClass

drwxrwxr-x

2

gemfield gemfield

20480

11月

7

2007

SegmentationObject

其中:

Annotations目錄下放的是標註檔案,xml格式,這是用於目標檢測任務的一個總的標註集合,裡面存放有大而全的xml檔案;具體是在ImageSets/Main目錄中去劃分訓練機、驗證集、測試集;

JPEGImages目錄下是所有的jpg圖片;

ImageSets目錄下有3個子目錄:Layout, Main, Segmentation。

gemfield@ai:/VOCdevkit/VOC2007$ ls -l ImageSets/

total

12

drwxrwxr-x

2

gemfield gemfield

4096

11月

7

2007

Layout

drwxrwxr-x

2

gemfield gemfield

4096

2月

7

19:57 Main

drwxrwxr-x

2

gemfield gemfield

4096

2月

7

19:51 Segmentation

注意啊,這裡面全是train。txt、val。txt、trainval。txt、test。txt。這些檔案裡的每一行都是個檔名,其有2層含義,一方面其對應的圖片來自JPEGImages裡的同名檔案,另一方面其對應的標註結果來自Annotations裡的同名檔案。

SegmentationClass目錄下放的也是圖片,segmentations by object;

SegmentationObject目錄下放的也是圖片,segmentations by class。

建立自己的資料集

本節Gemfield僅以目標檢測為例,建立一個名為VOC2018的資料集。如下所示:

gemfield@ai:/bigdata$ mkdir VOC2018

gemfield@ai:/bigdata$

cd

VOC2018/

gemfield@ai:/bigdata/VOC2018$ ls

gemfield@ai:/bigdata/VOC2018$ mkdir Annotations

gemfield@ai:/bigdata/VOC2018$ mkdir JPEGImages

gemfield@ai:/bigdata/VOC2018$ mkdir -p ImageSets/Main

可以看到,必備的目錄只有Annotations、JPEGImages以及ImageSets/Main。

1,把所有的照片放入到JPEGImages目錄:

gemfield@ai:/bigdata/VOC2018/JPEGImages$ ls

|

head

self1。mp4_0。jpg

self1。mp4_10000。jpg

self1。mp4_1000。jpg

self1。mp4_10010。jpg

self1。mp4_10020。jpg

self1。mp4_10030。jpg

self1。mp4_10040。jpg

self1。mp4_10050。jpg

……

2,把所有的xml標註檔案放入到Annotations目錄:

gemfield@ai:/bigdata/VOC2018/Annotations$ ls

|

head

self1。mp4_0。xml

self1。mp4_10000。xml

self1。mp4_10010。xml

self1。mp4_10020。xml

self1。mp4_10030。xml

self1。mp4_10040。xml

self1。mp4_10050。xml

……

3,把劃分好的訓練集測試集放入到 ImageSets/Main目錄下:

gemfield@ai:/bigdata/VOC2018/ImageSets/Main$ ls -l

total

4012

-rw-r——r——

1

root root

1278209

2月

11

16:53 imageset。txt

-rw-r——r——

1

root root

127874

2月

11

16:53 test。txt

-rw-r——r——

1

root root

1278209

2月

11

16:53 train。txt

-rw-r——r——

1

root root

1278209

2月

11

16:53 trainval。txt

-rw-r——r——

1

root root

127868

2月

11

16:53 val。txt

以val。txt檔案為例,格式如下(這幾個檔案格式一樣):

gemfield@ai:/bigdata/VOC2018/ImageSets/Main$ cat val。txt

|

head

wzry203。mp4_3990

wzry19。mp4_16340

wzry232。mp4_9860

wzry228。mp4_4610

wzry240。mp4_120

wzry49。mp4_1920

wzry222。mp4_8170

wzry219。mp4_10720

wzry250。mp4_4410

wzry249。mp4_7700

標簽: MP4  ai  gemfield  txt  bigdata