MS COCO資料集目標檢測評估(Detection Evaluation)(來自官網)
目標檢測評估
1. Detection Evaluation
本頁介紹了COCO使用的檢測評估指標。此處提供的評估程式碼可用於在公開可用的COCO驗證集上獲得結果。它計算下面描述的多個指標。為了在COCO測試集上獲得結果,其中隱藏了實際真值註釋,必須將生成的結果上傳到評估伺服器。下面描述的評估程式碼用於評估測試集的結果。
2. Metrics(指標)
Precision 準確率。表示正確識別物體A的個數佔總識別出的物體個數n的百分數
Recall 召回率。表示正確識別物體A的個數佔測試集中物體A的總個數的百分數
fp :false positive誤報,即預測錯誤
fn
tp:true positive
tn:true negative
iou:intersection-over-union
以下12個指標用於表徵COCO上物體檢測器的效能:
Average Precision (AP):
AP % AP at IoU=0.50:0.05:0.95 (primary challenge metric)
APIoU=.50 % AP at IoU=0.50 (PASCAL VOC metric)
APIoU=.75 % AP at IoU=0.75 (strict metric)
AP Across Scales:
APsmall % AP for small objects: area < 322
APmedium % AP for medium objects: 322 < area < 962
APlarge % AP for large objects: area > 962
Average Recall (AR):
ARmax=1 % AR given 1 detection per image
ARmax=10 % AR given 10 detections per image
ARmax=100 % AR given 100 detections per image
AR Across Scales:
ARsmall % AR for small objects: area < 322
ARmedium % AR for medium objects: 322 < area < 962
ARlarge % AR for large objects: area > 962
1)除非另有說明,否則AP和AR在多個交匯點(IoU)值上取平均值。具體來說,我們使用10個IoU閾值0.50:0.05:0.95。這是對傳統的一個突破,其中AP是在一個單一的0.50的IoU上計算的(這對應於我們的度量APIoU=.50 )。超過均值的IoUs能讓探測器更好定位(Averaging over IoUs rewards detectors with better localization.)。
2)AP是所有類別的平均值。傳統上,這被稱為“平均準確度”(mAP,mean average precision)。我們沒有區分AP和mAP(同樣是AR和mAR),並假定從上下文中可以清楚地看出差異。
3)AP(所有10個IoU閾值和所有80個類別的平均值)將決定贏家。在考慮COCO效能時,這應該被認為是最重要的一個指標。
4)在COCO中,比大物體相比有更多的小物體。具體地說,大約41%的物體很小(面積<322),34%是中等(322 < area < 962)),24%大(area > 962)。測量的面積(area)是分割掩碼(segmentation mask)中的畫素數量。
5)AR是在每個影象中檢測到固定數量的最大召回(recall),在類別和IoU上平均。AR與提案評估(proposal evaluation)中使用的同名度量相關,但是按類別計算。
6)所有度量標準允許每個影象(在所有類別中)最多100個最高得分檢測進行計算。
7)除了IoU計算(分別在框(box)或掩碼(mask)上執行)之外,用邊界框和分割掩碼檢測的評估度量在所有方面是相同的。
3. Evaluation Code
評估程式碼可在COCO github上找到。 具體來說,分別參見Matlab或Python程式碼中的CocoEval.m或cocoeval.py。另請參閱Matlab或Python程式碼(demo)中的evalDemo。在執行評估程式碼之前,請按結果格式頁面上描述的格式準備結果(檢視具體的結果格式MS COCO資料集比賽參與(participate)(來自官網))。
評估引數如下(括號中的預設值,一般不需要改變):
params{
"imgIds" : [all]N img ids to use for evaluation
"catIds " : [all] K cat ids to use for evaluation cat=category
"iouThrs" : [0.5:0.05:0.95] T=10 IoU thresholds for evaluation
"recThrs" : [0:0.01:1] R=101 recall thresholds for evaluation
"areaRng" : [all,small,medium,large] A=4 area ranges for evaluation
"maxDets" : [1 10 100] M=3 thresholds on max detections per image
"useSegm" : [1] if true evaluate against ground-truth segments
"useCats" : [1] if true use category labels for evaluation
}
執行評估程式碼通過呼叫evaluate()和accumulate()產生兩個資料結構來衡量檢測質量。這兩個結構分別是evalImgs和eval,它們分別衡量每個影象的質量並聚合到整個資料集中。evalImgs結構體具有KxA條目,每個評估設定一個,而eval結構體將這些資訊組合成 precision 和 recall 陣列。這兩個結構的細節如下(另請參閱CocoEval.m或cocoeval.py):
evalImgs[{
"dtIds" : [1xD] id for each of the D detections (dt)
"gtIds" : [1xG] id for each of the G ground truths (gt)
"dtImgIds" : [1xD] image id for each dt
"gtImgIds" : [1xG] image id for each gt
"dtMatches" : [TxD] matching gt id at each IoU or 0
"gtMatches" : [TxG] matching dt id at each IoU or 0
"dtScores" : [1xD] confidence of each dt
"dtIgnore" : [TxD] ignore flag for each dt at each IoU
"gtIgnore" : [1xG] ignore flag for each gt
}]
eval{
"params" : parameters used for evaluation
"date" : date evaluation was performed
"counts" : [T,R,K,A,M] parameter dimensions (see above)
"precision" : [TxRxKxAxM] precision for every evaluation setting
"recall" : [TxKxAxM] max recall for every evaluation setting
}
最後,summary()根據eval結構計算前面定義的12個檢測指標。
4. Analysis Code
除了評估程式碼外,我們還提供一個函式analyze()來執行誤報的詳細分類。這受到了Derek Hoiem等人在診斷物體檢測器中的錯誤(Diagnosing Error in Object Detectors)的啟發,但在實現和細節方面卻有很大不同。程式碼生成這樣的影象:
這兩幅圖顯示了來自2015年檢測挑戰賽獲勝者Kaiming He等人的ResNet(bbox)檢測器的分析結果。左圖顯示了ResNet的人員類別錯誤;右圖是ResNet對所有類別平均值的整體分析。每個繪圖是一系列精確召回(precision recall)曲線,其中每個PR曲線被保證嚴格地高於之前的評估設定變得更寬容。曲線如下:
1)C75:在IoU = 0.75(嚴格的IoU的AP)的PR(precision),對應於APIoU=.75度量曲線下的面積(area under curve )。
2)C50:IoU = 0.50處的PR(PASCAL IoU處的AP),對應於APIoU=.50度量曲線下面積。
3)Loc:在IoU =0 .10的PR(定位誤差(localization errors ignored)被忽略,但不重複檢測)。 所有其餘的設定使用IoU = 0.1。
4)Sim:超類別誤報(fps,supercategory false positives)被移除後的PR值。具體而言,與具有不同類標籤但屬於同一個超類別的物件的任何匹配都不會被視為fp(或tp)。通過設定同一超類別中的所有物件與所討論的類具有相同的類標籤並將它們的忽略標誌設定為1來計算Sim。注意,該人是單例超類別,因此其Sim結果與Loc完全相同。
5)Oth:所有型別混亂被移除後的PR值。與Sim類似,除了現在如果檢測與任何其他物件匹配,則不再是fp(或tp)。計算Oth的方法是將所有其他物件設定為與所討論的類具有相同的類標籤,並將忽略標誌設定為1。
6)BG:所有背景誤報(和類混亂(class confusion))被移除後的PR。 對於單個類別,BG是一個階躍函式,直到達到最大召回後才降為0(跨類別平均後曲線更平滑)。
7)FN:在所有剩餘錯誤都被刪除後(平均AP = 1)的PR。
每條曲線下面的區域顯示在圖例的括號中。在ResNet檢測器的情況下,IoU = 0.75的整體AP為0.399,完美定位將使AP增加到0.682。有趣的是,消除所有類別混亂(超範疇內和超範疇內)只會將AP略微提升至0.713。除去背景fp會將效能提高到0.870 AP,而其餘的錯誤則缺少檢測(儘管假設更多的檢測被新增,這也會增加大量的fps)。總之,ResNet的錯誤來自不完美的定位和背景混淆。
對於一個給定的探測器(detector),程式碼總共產生了372個塊(plots)!共有80個類別(category),12個超類別(supercategory),1個總體結果,總共93個不同的設定,分析是在4個尺度(scale)(全部,小,中,大,所以93 * 4 = 372個塊)進行。 檔案命名為[supercategory] - [category] - [size] .pdf(對於80 * 4每個分類結果),overall- [supercategory] - [size] .pdf(對於12 * 4每個超類別結果)全部[[size] .pdf為1 * 4的整體結果。在所有圖中,通常總體和超類別的結果是最感興趣的。
注意:analyze()可能需要很長時間才能執行,請耐心等待。因此,我們通常不會在評估伺服器上執行此程式碼;您必須使用驗證集在本地執行程式碼。最後,目前analyze()只是Matlab API的一部分; Python程式碼即將推出。