交並比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可表示為
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1QcmVjaXNpb24lM0QlNUNmcmFjJTdCVFAlN0QlN0JUUCUyQkZQKyU3RA==.png)
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1SZWNhbGwlM0QlNUNmcmFjJTdCVFAlN0QlN0JUUCUyQkZOJTdE.png)
PR曲線
我們當然希望檢測的結果P越高越好,R也越高越好,但事實上這兩者在某些情況下是矛盾的。比如極端情況下,我們只檢測出了一個結果,且是准確的,那么Precision就是100%,但是Recall就很低;而如果我們把所有結果都返回,那么必然Recall必然很大,但是Precision很低。
因此在不同的場合中需要自己判斷希望P比較高還是R比較高。如果是做實驗研究,可以繪制Precision-Recall曲線來幫助分析。
這里我們舉一個簡單的例子,假設我們的數據集中共有五個待檢測的物體,我們的模型給出了10個候選框,我們按照模型給出的置信度由高到低對候選框進行排序。

表格第二列表示該候選框是否預測正確(即是否存在某個待檢測的物體與該候選框的iou值大於0.5)第三列和第四列表示以該行所在候選框置信度為閾值時,Precision和Recall的值。我們以表格的第三行為例進行計算:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1UTiUzRDMr.png)
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1QcmVjaXNpb24lM0QlNUNmcmFjJTdCMiU3RCU3QjIlMkIxJTdEJTNEMC42Nw==.png)
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1SZWNhbGwlM0QlNUNmcmFjJTdCMiU3RCU3QjIlMkIzJTdEJTNEMC40Kw==.png)
由上表以Recall值為橫軸,Precision值為縱軸,我們就可以得到PR曲線。我們會發現,Precision與Recall的值呈現負相關,在局部區域會上下波動。
PR曲線
AP(Average Precision)
顧名思義AP就是平均精准度,簡單來說就是對PR曲線上的Precision值求均值。對於pr曲線來說,我們使用積分來進行計算。
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1BUCUzRCU1Q2ludF8lN0IwJTdEJTVFJTdCMSU3RHAlMjhyJTI5ZHI=.png)
在實際應用中,我們並不直接對該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的值。
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1BUCslM0QrJTVDZnJhYyU3QjElN0QlN0IxMSU3RCU1Q3N1bV8lN0IwJTJDMC4xLi4uMS4wJTdEJTdCUF8lN0JzbW9vdGglN0QlMjhpJTI5JTdE.png)
Pascal Voc 2008 AP計算方式
在我們的例子里
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1BUCslM0QrJTVDZnJhYyU3QjElN0QlN0IxMSU3RCUyODUlNUN0aW1lczAuMSslMkIrNCU1Q3RpbWVzMC41NyUyQjIlNUN0aW1lczAuNSUyOSUzRDAuNzUz.png)
Area under curve
上述方法有兩個缺陷,第一個是使用11個采樣點在精度方面會有損失。第二個是,在比較兩個AP值較小的模型時,很難體現出兩者的差別。所以這種方法在2009年的Pascalvoc之后便不再采用了。在Pascal voc 2010之后,便開始采用這種精度更高的方式。繪制出平滑后的PR曲線后,用積分的方式計算平滑曲線下方的面積作為最終的AP值。
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1BUCUzRCU1Q2ludF8lN0IwJTdEJTVFJTdCMSU3RHBfJTdCc21vb3RoJTdEJTI4ciUyOWRy.png)
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。
