目標檢測中的precision,recall,AP,mAP計算詳解


交並比IoU衡量的是兩個區域的重疊程度,是兩個區域重疊部分面積占二者總面積(重疊部分只計算一次)的比例。如下圖,兩個矩形框的IoU是交叉面積(中間圖片紅色部分)與合並面積(右圖紅色部分)面積之比。

Iou的定義

在目標檢測任務中,如果我們模型輸出的矩形框與我們人工標注的矩形框的IoU值大於某個閾值時(通常為0.5)即認為我們的模型輸出了正確的

精准率與召回率(Precision & Recall)

大雁與飛機

假設現在有這樣一個測試集,測試集中的圖片只由大雁和飛機兩種圖片組成,如下圖所示: 
這里寫圖片描述

假設你的分類系統最終的目的是:能取出測試集中所有飛機的圖片,而不是大雁的圖片。

現在做如下的定義: 
True positives : 飛機的圖片被正確的識別成了飛機。 
True negatives: 大雁的圖片沒有被識別出來,系統正確地認為它們是大雁。 
False positives: 大雁的圖片被錯誤地識別成了飛機。 
False negatives: 飛機的圖片沒有被識別出來,系統錯誤地認為它們是大雁。

假設你的分類系統使用了上述假設識別出了四個結果,如下圖所示: 
這里寫圖片描述

那么在識別出的這四張照片中: 
True positives : 有三個,畫綠色框的飛機。 
False positives: 有一個,畫紅色框的大雁。

沒被識別出來的六張圖片中: 
True negatives : 有四個,這四個大雁的圖片,系統正確地沒有把它們識別成飛機。 
False negatives: 有兩個,兩個飛機沒有被識別出來,系統錯誤地認為它們是大雁。

Precision 與 Recall

Precision其實就是在識別出來的圖片中,True positives所占的比率: 
這里寫圖片描述 
其中的n代表的是(True positives + False positives),也就是系統一共識別出來多少照片 。 
在這一例子中,True positives為3,False positives為1,所以Precision值是 3/(3+1)=0.75。 
意味着在識別出的結果中,飛機的圖片占75%。

Recall 是被正確識別出來的飛機個數與測試集中所有飛機的個數的比值: 
這里寫圖片描述 ,通常tp+fntp+fn在目標檢測中指groundTruth中的真實目標數量,
Recall的分母是(True positives + False negatives),這兩個值的和,可以理解為一共有多少張飛機的照片。 
在這一例子中,True positives為3,False negatives為2,那么Recall值是 3/(3+2)=0.6。 
意味着在所有的飛機圖片中,60%的飛機被正確的識別成飛機.。

Precision 和 Recall最早是信息檢索中的概念,用來評價一個信息檢索系統的優劣。Precision 就是檢索出來的條目中(比如:文檔、網頁等)有多大比例是我們需要的,Recall就是所有我們需要的網頁的條目有多大比例被檢索出來了。用到目標檢測領域,假設我們有一組圖片,里面有若干待檢測的目標,Precision就代表我們模型檢測出來的目標有多打比例是真正的目標物體,Recall就代表所有真實的目標有多大比例被我們的模型檢測出來了。

我們如何來計算Precision和Recall的值呢。

目標檢測TP,FP, TN, FN含義圖釋TP, FP, TN,FN

首先我們根據上圖的規則計算出TP,FP,TN的值,則Precision,Recall可表示為

[公式]

[公式]

PR曲線

我們當然希望檢測的結果P越高越好,R也越高越好,但事實上這兩者在某些情況下是矛盾的。比如極端情況下,我們只檢測出了一個結果,且是准確的,那么Precision就是100%,但是Recall就很低;而如果我們把所有結果都返回,那么必然Recall必然很大,但是Precision很低。

因此在不同的場合中需要自己判斷希望P比較高還是R比較高。如果是做實驗研究,可以繪制Precision-Recall曲線來幫助分析。

這里我們舉一個簡單的例子,假設我們的數據集中共有五個待檢測的物體,我們的模型給出了10個候選框,我們按照模型給出的置信度由高到低對候選框進行排序。

表格第二列表示該候選框是否預測正確(即是否存在某個待檢測的物體與該候選框的iou值大於0.5)第三列和第四列表示以該行所在候選框置信度為閾值時,Precision和Recall的值。我們以表格的第三行為例進行計算:

[公式] [公式] [公式]

[公式]

[公式]

由上表以Recall值為橫軸,Precision值為縱軸,我們就可以得到PR曲線。我們會發現,Precision與Recall的值呈現負相關,在局部區域會上下波動。

PR曲線

AP(Average Precision)

顧名思義AP就是平均精准度,簡單來說就是對PR曲線上的Precision值求均值。對於pr曲線來說,我們使用積分來進行計算。

[公式]

在實際應用中,我們並不直接對該PR曲線進行計算,而是對PR曲線進行平滑處理。即對PR曲線上的每個點,Precision的值取該點右側最大的Precision的值。

PR曲線的平滑處理

用公式來描述就是 [公式] 。用該公式進行平滑后再用上述公式計算AP的值。

Interplolated AP(Pascal Voc 2008 的AP計算方式)

Pascal VOC 2008中設置IoU的閾值為0.5,如果一個目標被重復檢測,則置信度最高的為正樣本,另一個為負樣本。在平滑處理的PR曲線上,取橫軸0-1的10等分點(包括斷點共11個點)的Precision的值,計算其平均值為最終AP的值。

[公式]

Pascal Voc 2008 AP計算方式

在我們的例子里

[公式]

Area under curve

上述方法有兩個缺陷,第一個是使用11個采樣點在精度方面會有損失。第二個是,在比較兩個AP值較小的模型時,很難體現出兩者的差別。所以這種方法在2009年的Pascalvoc之后便不再采用了。在Pascal voc 2010之后,便開始采用這種精度更高的方式。繪制出平滑后的PR曲線后,用積分的方式計算平滑曲線下方的面積作為最終的AP值。

[公式]

Pascal voc 2010-2012 AP 計算方式

COCO mAP

最新的目標檢測相關論文都使用coco數據集來展示自己模型的效果。對於coco數據集來說,使用的也是Interplolated AP的計算方式。與Voc 2008不同的是,為了提高精度,在PR曲線上采樣了100個點進行計算。而且Iou的閾值從固定的0.5調整為在 0.5 - 0.95 的區間上每隔0.5計算一次AP的值,取所有結果的平均值作為最終的結果。

比如我們看一下YOLOv3的作者在論文中展示的在coco數據集上的實驗結果

我們發現除了AP,還有 [公式] , [公式] 等值,這些事代表什么意思呢?

[公式]:IoU閾值為0.5時的AP測量值

[公式]:IoU閾值為0.75時的測量值

[公式] : 像素面積小於 [公式] 的目標框的AP測量值

[公式] : 像素面積在[公式][公式]之間目標框的測量值

[公式] : 像素面積大於 [公式] 的目標框的AP測量值

注:通常來說AP是在單個類別下的,mAP是AP值在所有類別下的均值。在這里,在coco的語境下AP便是mAP,這里的AP已經計算了所有類別下的平均值,這里的AP便是mAP。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM