mAP(mean Average Precision)
概述
- 預備參數:類別數,IoU閾值,maxDets值(每張測試圖像最多保留maxDets個預測框,通常是根據置信度得分排序后取前maxDets個);
- Q: 假如某張測試圖像只有3個預測框dt,而此時的maxDets=5,如何處理?A: 只保留這3個dt,對應代碼是dt[0:maxDets]
- 根據模型輸出的置信度分數,將所有預測框按從高到低排序;
- 根據IoU是否超過閾值,判斷每個預測框是 T P I o U TP_{IoU} TPIoU?還是 F P I o U FP_{IoU} FPIoU?(TP/FP還要結合分類置信度判斷);
- 不同置信度閾值對應一個Precision-Recall點,取不同置信度閾值得到 Precision-Recall 曲線;
- PR曲線下面積即為 AP(根據面積積分計算方式不同,分為VOC和COCO風格);
- 所有類別AP平均值即為mAP;如果數據集中包含多個 IoU 閾值,則需要分別計算每個 IoU 閾值下的mAP,然后取平均值,例如 mAP@[0.5:0.95] 。
背景知識
Precision 和 Recall
- Precision(精確率) :預測為正類的樣本中,實際為正類的比例。
P r e c i s i o n = T r u e P o s i t i v e s ( T P ) T r u e P o s i t i v e s ( T P ) + F a l s e P o s i t i v e s ( F P ) Precision=\frac{True Positives (TP)}{True Positives (TP)+False Positives (FP)} Precision=TruePositives(TP)+FalsePositives(FP)TruePositives(TP)? - Recall(召回率) :實際為正類的樣本中,被正確預測為正類的比例。
R e c a l l = T r u e P o s i t i v e s ( T P ) T r u e P o s i t i v e s ( T P ) + F a l s e N e g a t i v e s ( F N ) Recall= \frac{True Positives (TP)}{True Positives (TP)+False Negatives (FN)} Recall=TruePositives(TP)+FalseNegatives(FN)TruePositives(TP)?
IoU與匹配規則
- IoU :預測框與真實框的交集面積與并集面積的比值。
I o U = A r e a o f O v e r l a p A r e a o f U n i o n IoU=\frac{Area of Overlap}{Area of Union} IoU=AreaofUnionAreaofOverlap? - 如果 IoU 超過某個閾值(通常為 0.5 或其他自定義值),則認為該預測框是 T P I o U TP_{IoU} TPIoU?,否則為 F P I o U FP_{IoU} FPIoU?。
計算 Precision-Recall 曲線
假設我們有一個簡單的例子,包含以下數據:
- 總共有 5 個真實框。
- 模型輸出了 5 個預測框,按置信度排序后的結果如下:
取預測框1的置信度為閾值,則TP = 1, FP = 0;Precision=1/1=1.0,Recall=1/5=0.2;
…
取預測框5的置信度為閾值,則TP = 3, FP = 2;Precision=3/5=0.6,Recall=3/5=0.6;
這5個點可以組成PR曲線。
20250520更新
Q:在計算目標檢測的mAP的時候,如果當前有100個預測框,而只有5個GT。在分配TP和FP的時候,只要預測框的iou大于閾值,就認為它是TP嗎?還是100個預測框按置信度降序排列,按iou分配完5個GT后,剩余的都作為FP?
A:TP和 FP 的分配不是簡單地“只要預測框的 IoU 大于閾值就算 TP”,而是需要考慮 置信度排序 和 唯一匹配原則。
- 將所有預測框按照置信度得分從高到低排序
- 從得分最高的預測框開始,依次與GT進行匹配
- 如果當前預測框與某個未被匹配的 GT 框的 IoU ≥ 閾值(通常是 0.5),則這個預測框被標記為 TP,同時該 GT 框被“占用”,不能再被其他預測框匹配
- 如果沒有任何未匹配的 GT 框與當前預測框的 IoU ≥ 閾值,那么這個預測框被標記為 FP
- 注意!這里的TP和FP實際對應 T P I o U TP_{IoU} TPIoU?和 F P I o U FP_{IoU} FPIoU?
計算 AP(曲線下面積)
- 插值處理 :為了消除 Precision 的波動,通常對 Precision 進行插值處理,即對于每個 Recall 值 r,取大于等于 r 的最大 Precision 值。
- 積分計算 :對插值后的 Precision-Recall 曲線進行積分,計算曲線下面積。常用的方法包括:
- 直接數值積分(COCO風格)
- 使用 11 點插值法(如 VOC 2007 的標準),在 Recall = [0, 0.1, 0.2, …, 1.0] 處取 Precision 值并求平均。
Recall
以COCO計算方式為例,如果是單獨考慮recall指標,則指每一類下, T P I o U TP_{IoU} TPIoU?和GT數量的比值。并沒有考慮置信度閾值,而只考慮根據IoU匹配上來決定TP。