PASCAL VOC資料集分析(檢測部分)
阿新 • • 發佈:2019-02-12
Pascal VOC 資料集介紹
介紹Pascal VOC資料集:
- Challenge and tasks, 只介紹Detection與Segmentation相關內容。
- 資料格式 Dataset
- 衡量方式 Evaluation
- voc2007, voc2012
Challenge and tasks
給定自然圖片, 從中識別出特定物體。
待識別的物體有20類:
- person
- bird, cat, cow, dog, horse, sheep
- aeroplane, bicycle, boat, bus, car, motorbike, train
- bottle, chair, dining table, potted plant, sofa, tv/monitor
有以下幾個task:
* Classification(略過)
* Detection: 將圖片中所有的目標用bounding box(bbox)框出來
* Segmentation: 將圖片中所有的目標分割出來
* Person Layout(略過)
接下來本文只介紹Detection與Segmentation相關的內容。
Dataset
- 所有的標註圖片都有Detection需要的label, 但只有部分資料有Segmentation Label。
- VOC2007中包含9963張標註過的圖片, 由train/val/test三部分組成, 共標註出24,640個物體。
- VOC2007的test資料label已經公佈, 之後的沒有公佈(只有圖片,沒有label)。
- 不同年份的VOC資料集之間存在交集,後面年份的VOC資料集是在之前的資料集基礎之上新增資料得到的。
- 對於檢測任務,VOC2012的trainval/test包含08-11年的所有對應圖片。 trainval有11540張圖片共27450個物體。
- 對於分割任務, VOC2012的trainval包含07-11年的所有對應圖片, test只包含08-11。trainval有 2913張圖片共6929個物體。
Detection Ground Truth and Evaluation
Ground truth
<annotation>
<folder>VOC2007</folder>
<filename >009961.jpg</filename>
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
<flickrid>334575803</flickrid>
</source>
<owner>
<flickrid>dictioncanary</flickrid>
<name>Lucy</name>
</owner>
<size><!--image shape-->
<width>500</width>
<height>374</height>
<depth>3</depth>
</size>
<segmented>0</segmented><!--是否有分割label-->
<object>
<name>dog</name> <!--類別-->
<pose>Unspecified</pose><!--物體的姿態-->
<truncated>0</truncated><!--物體是否被部分遮擋(>15%)-->
<difficult>0</difficult><!--是否為難以辨識的物體, 主要指要結體背景才能判斷出類別的物體。雖有標註, 但一般忽略這類物體-->
<bndbox><!--bounding box-->
<xmin>69</xmin>
<ymin>4</ymin>
<xmax>392</xmax>
<ymax>345</ymax>
</bndbox>
</object>
</annotation>
Evaluation
提交的結果儲存在一個檔案中, 每行的格式為:
<image identifier> <confidence> <left> <top> <right> <bottom>
圖片名稱 confidence 左x 上y 右x 下y例如:
comp3_det_test_car.txt:
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
- confidence會被用於計算mean average precision(mAP). 簡要流程如下, 詳細可參考https://sanchom.wordpress.com/tag/average-precision/
- 根據confidence對結果排序,計算top-1, 2, …N對應的precision和recall
- 將recall劃分為n個區間
t in [t1, ..., tn]
- 找出滿足
recall>=t
的最大presicision - 最後得到n個最大precision, 求它們的平均值
aps = []
for t in np.arange(0., 1.1, 0.1):#將recall分為多個區間
# 在所有 recall > t對應的precision中找出最大值
mask = tf.greater_equal(recall, t)
v = tf.reduce_max(tf.boolean_mask(precision, mask))
aps.append(v / 11.)
# 得到其平均值
ap = tf.add_n(aps)
return ap
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
如果,recall-precision曲線是單調下降的,這樣得到的結果其實就近似的等於recall-precision的面積。
程式碼給出的是voc07的計算方式, voc2010在recall區間區分上有變化: 假如有M個正樣例,則將recall劃分為[1/M, 1/(M - 1), 1/(M - 2), ... 1]
。其餘步驟不變。
預測的bbx的判別:
- 如輸出的bbox與一個ground truth bbox的 IOU大於0.5, 且類別相同,則為True Positive, 否則為False Positive
- 對於一個ground truth bbox, 只會有一個 true positive, 其餘都為false positive.
Segmentation
Ground Truth
分割的label由兩部分組成: 對畫素點進行分類
* class segmentation: 標註出每一個畫素的類別(語義分割)
* object segmentation: 標註出每一個畫素屬於哪一個物體(例項分割)
Evaluation
每類的precision和總體precision.
轉載自:http://blog.csdn.net/weixin_35653315/article/details/71028523
北理工車輛檢測資料集:
http://iitlab.bit.edu.cn/mcislab/vehicledb/