深度學習-目標檢測中的mAP計算
謹以本文記錄深度學習入門過程中學習的目標檢測常見指標,如有錯誤還請朋友不吝指教!
目標檢測評價指標——mAP
- GT與預測框的IoU是否大於閾值?
- 預測的類別是否正確?
- 置信度是否大於閾值?
交併比(IoU,Intersection over Union)
IoU的作用是評價兩個矩形框之間的相似性,在目標檢測中是度量兩個檢測框的交疊程度。計算公式如下:
\[IOU=\frac{area(B_{gt}\cap B_{p})}{area(B_{gt} \cup B_p)} \]其中\(B_{gt}\)
查準率和查全率
什麼是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} \]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,所以
繪製出對應的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