1. 基本要求
從直觀理解,一個目標檢測網絡性能好,主要有以下表現:
- 把畫面中的目標都檢測到——漏檢少
- 背景不被檢測為目標——誤檢少
- 目標類別符合實際——分類准
- 目標框與物體的邊緣貼合度高—— 定位准
- 滿足運行效率的要求——算得快
下圖是從 Tensorflow Object Detection API 的 Model Zoo 中截取的部分模型列表。
算得快這一點通過 Speed 來體現。而其他因素,使用了mAP (mean average Precision) 這一個指標來綜合體現。
mean 和 average 都有平均的意思,因此從字面理解,mAP 指標至少從兩個方面進行了平均。
2. mAP指標計算
mAP 的計算大致可以分解為以下幾步:
階段 | 輸出 | 關鍵變量 |
---|---|---|
針對單個目標 | TP、FP、FN | IOU(交並比) |
針對單個類別 | PR-Curve、AP | Confidence(置信度) |
針對測試集全集 | mAP |
2.1 輸出檢測結果
針對不同類型的目標檢測網絡,模型推理的原始輸出可能的形式多種多樣。
首先需要完成目標解碼,生成標准化的目標列表,至少包含每個目標的:
- 類別
- 2DBBox
- 置信度
這里的置信度與推理使用時的置信度閾值有差別,沒有固定的閾值,只要在該通道有響應,都輸出為目標。
不同類型的網絡,置信度數值的含義也不同,因此也無法設定一個統一的閾值。
2.2 針對單個目標
針對單個目標,問題簡化為分類結果的判定。
首先將 GT (Ground Truth) 和 Predictions 分別按照各自的類別分組。
在每一個類別內,對 GT 和 Predictions 兩組數據進行匹配,匹配的依據是 IOU。
匹配結果可能有如下幾種:
-
TP (True Positive):一個正確的檢測,
IOU ≥ threshold
。即預測的目標分類正確,且邊框與 GT 重合度夠高。 -
FP (False Positive):一個錯誤的檢測,沒有匹配上 GT 的目標,或
IOU < threshold
。即預測的目標分類不正確,或邊框與 GT 重合度不夠高。 -
FN (False Negative):漏檢的 GT。即沒有被匹配上目標的 Ground Truth。
2.3 針對單個類別
完成對整個測試集上每個目標的判斷后,分類別統計 Precision 和 Recall:
-
Precision:准確率(查准率),模型只找正確目標的能力。
Precision = TP / (TP + FP)
,其中TP+FP
即模型找到的所有目標。 -
Recall:召回率(查全率),模型找到所有目標的能力。
Recall = TP / (TP + FN)
,其中TP+FN
即所有的 GT。
在單個目標的處理步驟中,只需要記錄TP。則對於所有檢測目標,非TP即為FP,對於所有 GT,非TP即為FN。
當設定不同的 Confidence 閾值時,輸出的檢測目標數量不同,由此計算得到的 Precision 和 Recall 也不同。
根據不同的閾值,可以得到一系列 Precision 和 Recall 的值,連起來即可得到PR曲線。
在實際操作中,將所有目標按照置信度從高到低排序,每一步都只累加一個目標,統計當前的P-R值。
PR曲線示例如上圖所示。
PR曲線會有折線的原因。每累加一步,如果:
-
當前累加的目標是FP,則 Recall 值不變, Precision 值變小,對應圖中豎直向下的線段;
-
當前累加的目標是TP,則 Recall 和 Precision 都變大,對應圖中斜向右上方的線段。
2.4 針對全集
至此,針對每一個類別,都計算得到一條PR曲線。
PR曲線與x軸所圍成的面積,即為當前類別的AP值。
Average 是指對不同 Confidence 閾值下的結果進行平均。
所有類別AP值的均值,即為 mAP。
mean 是指對不同類別之間結果進行平均。
3. 存在問題及改進思路
3.1 問題
(1)誤檢/漏檢少、分類准、定位准,這些要求並沒有在 mAP 的整個計算過程中一直傳導到最終結果。
首先按照目標類別進行分類處理。
在對單個目標的處理中,將IOU作為匹配的指標,將檢測到的目標二分類為TP/FP。在選定IOU閾值后,TP/FP的分配也就確定了。在后續的步驟中,目標被抽象為正確/錯誤兩類,但正確或錯誤的程度被忽略了。
下圖為 IOU=0.5 時的極限情況示意:
類似的IOU值實際可能代表的不同情況:
在對所有目標的處理中,主要考察不同的 Confidence 閾值下,檢測出正確目標的能力。
因此,誤檢/漏檢少、分類准、定位准這幾個要求是按照一種串行的方式,分階段組織起來的。
(2)問題是多樣化的,只用一個指標,沒法知道目前的性能瓶頸在哪里。
根據 mAP 的高低,我們只能較為概括地知道網絡整體性能的好壞,但比較難分析問題具體在哪。
舉幾個例子:
-
如果網絡輸出的框很貼合,選擇合適的 Confidence 閾值時,檢出和召回也較均衡,但是目標的類別判斷錯誤較多。由於首先根據類別結果分類處理,只要類別錯了,定位、檢出和召回都很好,mAP 指標也不會高。但從結果觀察,並不能很明確知道,問題出在類別判斷上。
比如 Faster-RCNN 系列網絡,如果 RPN 部分效果很好,但是 RCNN 部分效果很差,只根據 mAP, 是無法判斷出來的。
-
如果兩個網絡的其他性能表現都類似,但是輸出框的定位精度不同。對於大部分判定為 TP 的目標,一個網絡的目標 IOU 值很高,框非常貼合 GT;另一個網絡的目標 IOU 值剛剛超過閾值。理論上這樣兩個網絡計算出來的 mAP 值是類似的,但實際使用的表現是有差別的。
(3)mAP 指標關注的點,與實際應用時關注的點,並不完全吻合
mAP 會統計所有 Confidence 值下的 PR值,而實際使用時,會設定一個 Confidence 閾值,低於該閾值的目標會被丟棄,這部分目標在統計 mAP 時也會有一定的貢獻。部分針對比賽刷榜的漲點技巧,會關注這部分檢測結果對 mAP 的影響。
此外,在 ADAS 應用(特別是車輛檢測)中一些比較關心的點,mAP 指標並沒有很好地體現。比如:
- 最關心正前方近處的目標,對遠處側面的目標關注度相對低
- 關注目標框的下沿和寬度,而對上沿的要求不高
- 關注連續幀中,同一個目標檢測結果的穩定性和連續性
- 不同的類別錯判,嚴重程度不同(比如卡車誤判為客車問題不大,行人誤判為車輛問題就比較大)
3.2 改進
(1)考察不同 IOU 閾值下的性能表現
在 VOC 標准的 mAP 計算中,只取 IOU=0.5 一個閾值。
MS-COCO 標准對此進行了改進,取0.5:0.05:0.95
等間隔的11個閾值,分別統計:
- AP:在所有11個 IOU 閾值上計算出來的 mAP 的均值(最主要的度量指標)
- AP@.5IOU:閾值取0.5時的 mAP 值(等價於 VOC mAP)
- AP@.75IOU:閾值取0.75時的 mAP 值
此外還針對目標大小分別進行了統計:
- AP(small):像素面積小於32^2的目標,在所有11個 IOU 閾值上的AP
- AP(medium):像素面積介於322和962之間的目標,在所有11個 IOU 閾值上的AP
- AP(large):像素面積大於96^2的目標,在所有11個 IOU 閾值上的AP
此外,還有 AR (Average Recall) 相關的一系列指標。
可見, COCO mAP 對檢測性能進行了更全面的評估,改進了單一 IOU 閾值的問題。
COCO mAP 的計算可以直接使用
pycocotools
,將檢測結果按照規定的格式提供,即可自動完成計算。
(2)統一訓練和評測的指標
在網絡訓練過程中,location 分支的輸出通常會用IOU Loss
去進行優化,目前已經升級到DIOU
或CIOU
。
那么在測試過程中,也可以將 IOU 指標替換為類似 DIOU 或 CIOU 的版本,實現更合理的評價,以及訓練和評測的統一。
(3)設計更多自定義的指標
mAP 是一個基准指標,屬於規定動作,可以用來比較不同網絡,包括與開源模型、外部團隊開發的模型等進行比較。
此外,基於我們關心的模型性能表現,可以設計一些額外的指標。包括:
- mAP 計算過程中,可拆分出來的的一些中間指標
- mAP 沒有涵蓋到的指標
(4)模型使用時的閾值選擇
使用模型進行推理時,在目標解碼過程中涉及 Confidence 閾值的選取。通常是采用一刀切的方式,選擇一個統一的閾值。
在 mAP 的計算過程中,會輸出每個類別的PR曲線。一個典型PR曲線的示意如下:
根據PR曲線,既可以找到一個數學意義上的最優點,也可以根據實際使用時,對於誤檢和漏檢的不同容忍程度,選定一個權衡值。
可以根據每個類別的不同情況,選取不同的 Confidence 閾值,來讓每一個類別的檢測結果達到最優。
在實際操作中,可先根據 class 通道的結果,判定類別,再根據 conf 通道的結果和不同的閾值,篩選檢出的目標。
對於類別性質差異較大,類別不均衡現象較為嚴重的案例,可以實現更理想的輸出。
比如,在ADAS應用中,對於車輛目標、行人目標、交通標識目標的識別要求可能存在差異。根據各自的PR曲線去定制閾值,是一個更合理的選擇。