1. 程式人生 > 其它 >深度學習-目標檢測中的mAP計算

深度學習-目標檢測中的mAP計算

謹以本文記錄深度學習入門過程中學習的目標檢測常見指標,如有錯誤還請朋友不吝指教!

目標檢測評價指標——mAP

如上圖所示,綠顏色的為GT Box,紅顏色的Predict Box。如果要正確檢測出圖中的貓和狗,那怎麼才能算是正確的檢測呢?下邊的這三個標準是都需要看的:
  1. GT與預測框的IoU是否大於閾值?
  2. 預測的類別是否正確?
  3. 置信度是否大於閾值?

交併比(IoU,Intersection over Union)

IoU的作用是評價兩個矩形框之間的相似性,在目標檢測中是度量兩個檢測框的交疊程度。計算公式如下:

\[IOU=\frac{area(B_{gt}\cap B_{p})}{area(B_{gt} \cup B_p)} \]

其中\(B_{gt}\)

表示GT Box,\(B_p\)表示Predict Box。

查準率和查全率

什麼是TP、TN、FP、FN?

  • TP:True Positive
  • TN:True Negative
  • FP:False Positive
  • FN:False Negative

TP、TN、FP和FN的對應解釋如上所述,其中的Positive和Negative表示模型對樣本預測的結果是正樣本還是負樣本True和False表示預測的結果和真實結果是否相同。例如:True Positive就是模型預測樣本為正樣本,該結果與實際結果相同,該樣本實際上本來就是標籤為正的樣本。

如果假設IoU閾值為0.5的話,那在目標檢測中:

  • TP:表示\(IoU>0.5\)的檢測框的數量,也就是檢測正確的數量。
  • FP:表示\(IoU \le 0.5\)的檢測框數量(或者是檢測到同一GT的多餘的檢測框的數量),屬於誤檢一類了。
  • FN:表示沒有檢測到的GT數量,即漏檢的數量。

查準率(Precision)

被預測為正樣本的檢測框中預測正確的佔比:

\[Precision=\frac{TP}{TP+FP}=\frac{TP}{all \ detections} \]

如上圖所示,圖中GT共有5只貓待檢測,但實際上只檢測出來了一隻,而且這個檢測是正確的。那這種情況下的查全率就是:

\[Precision=\frac{1}{1}=100\% \]

查全率(Recall)

被正確檢測出來的真實框佔所有真實框的比例:

\[Recall=\frac{TP}{TP+FN}=\frac{TP}{all \ ground \ truths} \]
同樣是上邊有5個待檢測的GT,這次得到了50個預測框,其中5個全部預測正確,這種情況下TP=5,漏檢FN=0最終的查全率為: \[Recall=\frac{5}{5+0}=100\% \]

AP和mAP

AP 是計算某一類 P-R 曲線下的面積,mAP 則是計算所有類別 P-R 曲線下面積的平均值。其中P是查準率Precision,R是查全率Recall。

下面以3張圖片為例,說明AP和mAP的計算過程:

在所有的圖片中(當前只有上圖一張),待檢測的目標的數量\(num_{ob}=2\),上圖中的檢測情況如下表所示:

GT id Confidence OB(IoU=0.5)
1 0.98 True
1 0.61 False

該表中的順序是按Confidence從高到低排序的,對於一個GT來說,只能有一個檢測框為正確的檢測。

加入第二張圖片,此時待檢測的目標數量\(num_{ob}=3\),檢測情況如下表所示

GT id Confidence OB(IoU=0.5)
1 0.98 True
3 0.89 True
3 0.66 False
1 0.61 False

加入第三張圖片,加上前兩張中的待檢測目標,共有 \(num_{ob}=7\) 個目標需要檢測,檢測情況如下表所示:

GT id Confidence OB(IoU=0.5)
1 0.98 True
3 0.89 True
6 0.88 True
7 0.78 True
3 0.66 False
1 0.61 False
4 0.52 True

依次取Confidence的閾值為[0.98, 0.89, 0.88, 0.78, 0.66, 0.61, 0.52],計算對應的查準率和查全率如下表所示:

Rank Precision Recall Confidence thread
1 1.0 0.14 0.98
2 1.0 0.28 0.89
3 1.0 0.42 0.88
4 1.0 0.57 0.78
5 0.80 0.57 0.66
6 0.66 0.57 0.61
7 0.71 0.71 0.52

以Confidence thread=0.52為例:
此時的TP=5,誤檢FP=2,第一張和第三張兩張圖片共漏檢FN=2,所以

\[Precision=\frac{TP}{TP+FP}=\frac{5}{5+2}=0.71 \]\[Recall = \frac{TP}{TP+FN}=\frac{5}{5+2}=0.71 \]

繪製出對應的P-R曲線圖:

計算曲線下方的面積,也就是貓這一類別的AP:

\[\begin{aligned} & (0.14-0)\times 1.0+(0.28-0.14) \times1.0 + (0.42-0.28)\times 1.0+ \\ & (0.57-0.42) \times1.0 + (0.71-0.57)\times 0.71=0.6694 \end{aligned} \]

對於表格中Recall相同的,只保留Precision最高的值進行計算,最終得到貓這一類的AP=0.6694,如果要計算mAP則需要計算出其他類別的AP,並取平均值。


參考連結:
https://www.zhihu.com/question/53405779/answer/399478988
如果想看視訊講解的朋友可以移步這位up主的投稿,文中的例子也是來源於該視訊:https://www.bilibili.com/video/BV1ez4y1X7g2/?spm_id_from=333.788.recommend_more_video.4