目标检测数据集PASCAL VOC简介
簡介
?
PASCAL VOC挑戰賽 (The?PASCAL?Visual Object Classes )是一個世界級的計算機視覺挑戰賽,?PASCAL全稱:Pattern Analysis, Statical Modeling and Computational Learning,是一個由歐盟資助的網絡組織。
很多優秀的計算機視覺模型比如分類,定位,檢測,分割,動作識別等模型都是基于PASCAL VOC挑戰賽及其數據集上推出的,尤其是一些目標檢測模型(比如大名鼎鼎的R CNN系列,以及后面的YOLO,SSD等)。
PASCAL VOC從2005年開始舉辦挑戰賽,每年的內容都有所不同,從最開始的分類,到后面逐漸增加檢測,分割,人體布局,動作識別(Object Classification 、Object Detection、Object Segmentation、Human Layout、Action Classification)等內容,數據集的容量以及種類也在不斷的增加和改善。該項挑戰賽催生出了一大批優秀的計算機視覺模型(尤其是以深度學習技術為主的)。
?
?
我們知道在 ImageNet挑戰賽上涌現了一大批優秀的分類模型,而PASCAL挑戰賽上則是涌現了一大批優秀的目標檢測和分割模型,這項挑戰賽已于2012年停止舉辦了,但是研究者仍然可以在其服務器上提交預測結果以評估模型的性能。
雖然近期的目標檢測或分割模型更傾向于使用MS COCO數據集,但是這絲毫不影響 PASCAL VOC數據集的重要性,畢竟PASCAL對于目標檢測或分割類型來說屬于先驅者的地位。對于現在的研究者來說比較重要的兩個年份的數據集是 PASCAL VOC 2007 與 PASCAL VOC 2012,這兩個數據集頻頻在現在的一些檢測或分割類的論文當中出現。
-
PASCAL主頁?與?排行榜?(榜上已幾乎看不到傳統的視覺模型了,全是基于深度學習的)
-
PASCAL VOC 2007 挑戰賽主頁?與?PASCAL VOC 2012 挑戰賽主頁?與?PASCAL VOC Evaluation Server.
-
以及在兩個重要時間點對 PASCAL VOC挑戰賽 成績進行總結的兩篇論文
-
The PASCAL Visual Object Classes Challenge: A Retrospective
Everingham, M., Eslami, S. M. A., Van Gool, L., Williams, C. K. I., Winn, J. and Zisserman, A.
International Journal of Computer Vision, 111(1), 98-136, 2015
Bibtex source?|?Abstract?|?PDF主要總結PASCAL VOC 2012的數據集情況,以及2011年-2013年之間出現的模型及其性能對比
-
The PASCAL Visual Object Classes (VOC) Challenge
Everingham, M., Van Gool, L., Williams, C. K. I., Winn, J. and Zisserman, A.
International Journal of Computer Vision, 88(2), 303-338, 2010
Bibtex source?|?Abstract?|?PDF主要總結PASCAL VOC 2007的數據集情況,以及2008年之前出現的模型及其性能對比
-
不過在以上論文中出現的深度學習模型只有一個 R-CNN吧,大部分都是傳統方式的模型,畢竟深度學習模型主要在14年以后才大量涌現。
-
本文也是以PASCAL VOC 2007 和 2012 為例簡要介紹VOC數據集的結構。
1 數據集整體概況
1.1 層級結構
PASCAL VOC 數據集的20個類別及其層級結構:
-
從2007年開始,PASCAL VOC每年的數據集都是這個層級結構
-
總共四個大類:vehicle,household,animal,person
-
總共20個小類,預測的時候是只輸出圖中黑色粗體的類別
-
數據集主要關注分類和檢測,也就是分類和檢測用到的數據集相對規模較大。關于其他任務比如分割,動作識別等,其數據集一般是分類和檢測數據集的子集。
1.2 發展歷程與使用方法
簡要提一下在幾個關鍵時間點數據集的一些關鍵變化,詳細的請查看PASCAL VOC主頁?。
-
2005年:還只有4個類別: bicycles, cars, motorbikes, people. Train/validation/test共有圖片1578 張,包含2209 個已標注的目標objects.
-
2007年 :在這一年PASCAL VOC初步建立成一個完善的數據集。類別擴充到20類,Train/validation/test共有9963張圖片,包含24640 個已標注的目標objects.
07年之前的數據集中test部分都是公布的,但是之后的都沒有公布。
-
2009年:從這一年開始,通過在前一年的數據集基礎上增加新數據的方式來擴充數據集。比如09年的數據集是包含了08年的數據集的,也就是說08年的數據集是09年的一個子集,以后每年都是這樣的擴充方式,直到2012年;09年之前雖然每年的數據集都在變大(08年比07年略少),但是每年的數據集都是不一樣的,也就是說每年的數據集都是互斥的,沒有重疊的圖片。
-
2012年:從09年到11年,數據量仍然通過上述方式不斷增長,11年到12年,用于分類、檢測和person layout 任務的數據量沒有改變。主要是針對分割和動作識別,完善相應的數據子集以及標注信息。
對于分類和檢測來說,也就是下圖所示的發展歷程,相同顏色的代表相同的數據集:
?
分割任務的數據集變化略有不同:
- VOC 2012用于分類和檢測的數據包含 2008-2011年間的所有數據,并與VOC2007互斥。
- VOC 2012用于分割的數據中train+val包含 2007-2011年間的所有數據,test包含2008-2011年間的數據,沒有包含07年的是因為07年的test數據已經公開了。
2012年是最后一次挑戰賽,最終用于分類和檢測的數據集規模為:train/val :11540 張圖片,包含 27450 個已被標注的 ROI annotated objects ;用于分割的數據集規模為:trainval:2913張圖片,6929個分割,用于其他任務的不再細說,參考這里?。
即便挑戰賽結束了,但是研究者們仍然可以上傳預測結果進行評估。上傳入口:?PASCAL VOC Evaluation Server.
目前廣大研究者們普遍使用的是 VOC2007和VOC2012數據集,因為二者是互斥的,不相容的。
論文中針對 VOC2007和VOC2012 的具體用法有以下幾種:
- 只用VOC2007的trainval 訓練,使用VOC2007的test測試
- 只用VOC2012的trainval 訓練,使用VOC2012的test測試,這種用法很少使用,因為大家都會結合VOC2007使用
- 使用 VOC2007 的 train+val 和 VOC2012的 train+val 訓練,然后使用 VOC2007的test測試,這個用法是論文中經常看到的 07+12 ,研究者可以自己測試在VOC2007上的結果,因為VOC2007的test是公開的。
- 使用 VOC2007 的 train+val+test 和 VOC2012的 train+val訓練,然后使用 VOC2012的test測試,這個用法是論文中經常看到的 07++12 ,這種方法需提交到VOC官方服務器上評估結果,因為VOC2012 test沒有公布。
- 先在 MS COCO 的 trainval 上預訓練,再使用 VOC2007 的 train+val、 VOC2012的 train+val 微調訓練,然后使用 VOC2007的test測試,這個用法是論文中經常看到的 07+12+COCO 。
- 先在 MS COCO 的 trainval 上預訓練,再使用 VOC2007 的 train+val+test 、 VOC2012的 train+val 微調訓練,然后使用 VOC2012的test測試 ,這個用法是論文中經常看到的 07++12+COCO,這種方法需提交到VOC官方服務器上評估結果,因為VOC2012 test沒有公布。
在各自數據集上分別進行建模和評測的用法比較少,基本上在早期論文里出現就是起個對照作用;現在的大部分論文都會為了增加數據量而將二者合起來使用。
2 數據量統計
由于現在的研究基本上都是在VOC2007和VOC2012上面進行,因此只介紹這兩個年份的。
2.1 VOC 2007
一些示例圖片展示:Classification/detection example images
數據集總體統計:
- 以上是數據集總體的統計情況,這個里面是包含了測試集的,可見person 類是最多的。
訓練集,驗證集,測試集劃分情況
- PASCAL VOC 2007 數據集分為兩部分:訓練和驗證集trainval,測試集test ,兩部分各占數據總量的約 50%。其中trainval 又分為訓練集和測試集,二者分別各占trainval的50%。
- 每張圖片中有可能包含不只一個目標object。
這里我就只貼出用于分類和檢測的劃分情況,關于分割或者其他任務的劃分方式?點擊這里查看?。
2.2 VOC 2012
一些示例圖片展示:Classification/detection example images
數據集總體統計
?
- 這個統計是沒有包含 test部分的,仍然是person類最多
trainval部分的數據統計:
?
test部分沒有公布,同樣的 除了分類和檢測之外的數據統計,參考這里
2.3 VOC 2007 與 2012 的對比
VOC 2007 與 2012 數據集及二者的并集 數據量對比
- 黑色字體所示數字是官方給定的,由于VOC2012數據集中 test 部分沒有公布,因此紅色字體所示數字為估計數據,按照PASCAL 通常的劃分方法,即 trainval 與test 各占總數據量的一半。
3 標注信息
數據集的標注還是很謹慎的,有專門的標注團隊,并遵從統一的標注標準,參考?guidelines?。
標注信息是用 xml 文件組織的如下:
|
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 |
<annotation> <folder>VOC2007</folder> <filename>000001.jpg</filename> <source> <database>The VOC2007 Database</database> <annotation>PASCAL VOC2007</annotation> <image>flickr</image> <flickrid>341012865</flickrid> </source> <owner> <flickrid>Fried Camels</flickrid> <name>Jinky the Fruit Bat</name> </owner> <size> <width>353</width> <height>500</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>dog</name> <pose>Left</pose> <truncated>1</truncated> <difficult>0</difficult> <bndbox> <xmin>48</xmin> <ymin>240</ymin> <xmax>195</xmax> <ymax>371</ymax> </bndbox> </object> <object> <name>person</name> <pose>Left</pose> <truncated>1</truncated> <difficult>0</difficult> <bndbox> <xmin>8</xmin> <ymin>12</ymin> <xmax>352</xmax> <ymax>498</ymax> </bndbox> </object> </annotation> |
-
filename :文件名
-
source,owner:圖片來源,及擁有者
-
size:圖片大小
-
segmented:是否分割
-
object:表明這是一個目標,里面的內容是目標的相關信息
-
name:object名稱,20個類別
-
pose:拍攝角度:front, rear, left, right, unspecified
-
truncated:目標是否被截斷(比如在圖片之外),或者被遮擋(超過15%)
-
difficult:檢測難易程度,這個主要是根據目標的大小,光照變化,圖片質量來判斷
difficult 標簽示例:圖中白色虛線,被標記為 difficult?
-
-
-
bndbox:bounding box 的左上角點和右下角點的4個坐標值。
4 提交格式
4.1 Classification Task
每一類都有一個txt文件,里面每一行都是測試集中的一張圖片,前面一列是圖片名稱,后面一列是預測的分數。
comp1_cls_test_car.txt:
|
1 2 3 4 5 |
000004 0.702732 000006 0.870849 000008 0.532489 000018 0.477167 000019 0.112426 |
4.2 Detection Task
comp3_det_test_car.txt:
|
1 2 3 4 5 |
000004 0.702732 89 112 516 466 000006 0.870849 373 168 488 229 000006 0.852346 407 157 500 213 000006 0.914587 2 161 55 221 000008 0.532489 175 184 232 201 |
每一類都有一個txt文件,里面每一行都是測試集中的一張圖片,每行的格式按照如下方式組織
|
1 |
<image identifier> <confidence> <left> <top> <right> <bottom> |
confidence 用來計算 mAP.
5 評估標準
PASCAL的評估標準是 mAP(mean average precision)
關于mAP不再詳細解釋,參考以下資料:
- 性能指標(模型評估)之mAP
- average precision
- 周志華老師 《機器學習》 模型評估標準一節
這里簡單的提一下:
下面是一個二分類的P-R曲線(precision-recall curve),對于PASCAL來說,每一類都有一個這樣的 P-R曲線,P-R曲線下面與x軸圍成的面積稱為 average precision,每個類別都有一個 AP, 20個類別的AP 取平均值就是 mAP。
PASCAL官方給了評估腳本mAP的腳本和示例代碼?development kit code and documentation?,是用MATLAB寫的。
6 數據集組織結構
數據集的下載:
|
1 2 3 4 5 6 7 8 9 |
# Download the data. cd $HOME/data wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar # Extract the data. tar -xvf VOCtrainval_11-May-2012.tar tar -xvf VOCtrainval_06-Nov-2007.tar tar -xvf VOCtest_06-Nov-2007.tar |
或者支直接點擊下面鏈接下載:
- Download the?training/validation data?(450MB tar file)
- Download the?annotated test data?(430MB tar file)
上面的解壓命令會將VOC2007的trainval和test解壓到一塊,數據會混在一起,如果不想,可以自己指定解壓路徑。以VOC 2007 為例,解壓后的文件:
|
1 2 3 4 5 6 |
. ├── Annotations 進行detection 任務時的 標簽文件,xml文件形式 ├── ImageSets 存放數據集的分割文件,比如train,val,test ├── JPEGImages 存放 .jpg格式的圖片文件 ├── SegmentationClass 存放 按照class 分割的圖片 └── SegmentationObject 存放 按照 object 分割的圖片 |
Annotations 文件夾:
|
1 2 3 4 5 6 7 8 9 10 |
. ├── 000001.xml ├── 000002.xml ├── 000003.xml ├── 000004.xml …… …… …… ├── 009962.xml └── 009963.xml |
以xml 文件的形式,存放標簽文件,文件內容如前述,文件名與圖片名是一樣的,6位整數
ImageSets文件夾:
存放數據集的分割文件
包含三個子文件夾 Layout,Main,Segmentation,其中Main文件夾存放的是用于分類和檢測的數據集分割文件,Layout文件夾用于 person layout任務,Segmentation用于分割任務
|
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
. ├── Layout │?? ├── test.txt │?? ├── train.txt │?? ├── trainval.txt │?? └── val.txt ├── Main │?? ├── aeroplane_test.txt │?? ├── aeroplane_train.txt │?? ├── aeroplane_trainval.txt │?? ├── aeroplane_val.txt │?? ├── bicycle_test.txt │?? ├── bicycle_train.txt │?? ├── bicycle_trainval.txt │?? ├── bicycle_val.txt │?? ├── bird_test.txt │?? ├── bird_train.txt │?? ├── bird_trainval.txt │?? ├── bird_val.txt │?? ├── boat_test.txt │?? ├── boat_train.txt │?? ├── boat_trainval.txt │?? ├── boat_val.txt │?? ├── bottle_test.txt │?? ├── bottle_train.txt │?? ├── bottle_trainval.txt │?? ├── bottle_val.txt │?? ├── bus_test.txt │?? ├── bus_train.txt │?? ├── bus_trainval.txt │?? ├── bus_val.txt │?? ├── car_test.txt │?? ├── car_train.txt │?? ├── car_trainval.txt │?? ├── car_val.txt │?? ├── cat_test.txt │?? ├── cat_train.txt │?? ├── cat_trainval.txt │?? ├── cat_val.txt │?? ├── chair_test.txt │?? ├── chair_train.txt │?? ├── chair_trainval.txt │?? ├── chair_val.txt │?? ├── cow_test.txt │?? ├── cow_train.txt │?? ├── cow_trainval.txt │?? ├── cow_val.txt │?? ├── diningtable_test.txt │?? ├── diningtable_train.txt │?? ├── diningtable_trainval.txt │?? ├── diningtable_val.txt │?? ├── dog_test.txt │?? ├── dog_train.txt │?? ├── dog_trainval.txt │?? ├── dog_val.txt │?? ├── horse_test.txt │?? ├── horse_train.txt │?? ├── horse_trainval.txt │?? ├── horse_val.txt │?? ├── motorbike_test.txt │?? ├── motorbike_train.txt │?? ├── motorbike_trainval.txt │?? ├── motorbike_val.txt │?? ├── person_test.txt │?? ├── person_train.txt │?? ├── person_trainval.txt │?? ├── person_val.txt │?? ├── pottedplant_test.txt │?? ├── pottedplant_train.txt │?? ├── pottedplant_trainval.txt │?? ├── pottedplant_val.txt │?? ├── sheep_test.txt │?? ├── sheep_train.txt │?? ├── sheep_trainval.txt │?? ├── sheep_val.txt │?? ├── sofa_test.txt │?? ├── sofa_train.txt │?? ├── sofa_trainval.txt │?? ├── sofa_val.txt │?? ├── test.txt │?? ├── train_test.txt │?? ├── train_train.txt │?? ├── train_trainval.txt │?? ├── train.txt │?? ├── train_val.txt │?? ├── trainval.txt │?? ├── tvmonitor_test.txt │?? ├── tvmonitor_train.txt │?? ├── tvmonitor_trainval.txt │?? ├── tvmonitor_val.txt │?? └── val.txt └── Segmentation ├── test.txt ├── train.txt ├── trainval.txt └── val.txt 3 directories, 92 files |
主要介紹一下Main文件夾中的組織結構,先來看以下這幾個文件:
|
1 2 3 4 5 |
├── Main │?? ├── train.txt 寫著用于訓練的圖片名稱 共2501個 │?? ├── val.txt 寫著用于驗證的圖片名稱 共2510個 │?? ├── trainval.txt train與val的合集 共5011個 │?? ├── test.txt 寫著用于測試的圖片名稱 共4952個 |
里面的文件內容是下面這樣的:以train.txt文件為例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
000012 000017 000023 000026 000032 000033 000034 000035 000036 000042 …… …… 009949 009959 009961 |
就是對數據庫的分割,這一部分圖片用于train,其他的用作val,test等。
Main中剩下的文件很顯然就是每一類別在train或val或test中的ground truth,這個ground truth是為了方便classification 任務而提供的;如果是detection的話,使用的是上面的xml標簽文件。
|
1 2 3 4 5 6 7 |
├── Main │?? ├── aeroplane_test.txt 寫著用于訓練的圖片名稱 共2501個,指定正負樣本 │?? ├── aeroplane_train.txt 寫著用于驗證的圖片名稱 共2510個,指定正負樣本 │?? ├── aeroplane_trainval.txt train與val的合集 共5011個,指定正負樣本 │?? ├── aeroplane_val.txt 寫著用于測試的圖片名稱 共4952個,指定正負樣本 …… …… |
里面文件是這樣的(以aeroplane_train.txt為例):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
000012 -1 000017 -1 000023 -1 000026 -1 000032 1 000033 1 000034 -1 000035 -1 000036 -1 000042 -1 …… …… 009949 -1 009959 -1 009961 -1 |
前面一列是訓練集中的圖片名稱,這一列跟train.txt文件中的內容是一樣的,后面一列是標簽,即訓練集中這張圖片是不是aeroplane,是的話為1,否則為-1.
其他所有的 (class)_(imgset).txt 文件都是類似的。
- (class)_train 存放的是訓練使用的數據,每一個class都有2501個train數據。
- (class)_val 存放的是驗證使用的數據,每一個class都有2510個val數據。
- (class)_trainval 將上面兩個進行了合并,每一個class有5011個數據。
- (class)_test 存放的是測試使用的數據,每一個class有4952個test數據。
所有文件都 指定了正負樣本,每個class的實際數量為正樣本的數量,train和val兩者沒有交集。
VOC2012 的數據集組織結構是類似的,不一樣的地方在于VOC2012 中沒有 test類的圖片和以及相關標簽和分割文件,因為這部分數據 VOC2012沒有公布。
參考資料
本文標題:目標檢測數據集PASCAL VOC簡介
本文作者:arleyzhang
發布時間:2018年06月03日 - 23:06
最后更新:2018年11月16日 - 22:11
本文鏈接:目標檢測數據集PASCAL VOC簡介 | arleyzhang?
版權聲明:?本文由 arleyzhang 原創,采用??保留署名-非商業性使用-禁止演繹 4.0-國際許可協議,轉載請保留原文鏈接及作者!
總結
以上是生活随笔為你收集整理的目标检测数据集PASCAL VOC简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贷款的风险有哪些
- 下一篇: 目标检测数据集MSCOCO简介