轉:https://blog.csdn.net/syoung9029/article/details/56276567
算法
召回率(Recall),精確率(Precision),平均正確率(AP),交除並(IoU)函數
摘要性能
在訓練YOLO v2的過程當中,系統會顯示出一些評價訓練效果的值,如Recall,IoU等等。爲了怕之後忘了,如今把本身對這幾種度量方式的理解記錄一下。
這一文章首先假設一個測試集,而後圍繞這一測試集來介紹這幾種度量方式的計算方法。測試
大雁與飛機
假設如今有這樣一個測試集,測試集中的圖片只由大雁和飛機兩種圖片組成,以下圖所示:
url
假設你的分類系統最終的目的是:能取出測試集中全部飛機的圖片,而不是大雁的圖片。spa
如今作以下的定義:
True positives : 飛機的圖片被正確的識別成了飛機。
True negatives: 大雁的圖片沒有被識別出來,系統正確地認爲它們是大雁。
False positives: 大雁的圖片被錯誤地識別成了飛機。
False negatives: 飛機的圖片沒有被識別出來,系統錯誤地認爲它們是大雁。.net
假設你的分類系統使用了上述假設識別出了四個結果,以下圖所示:
3d
那麼在識別出的這四張照片中:
True positives : 有三個,畫綠色框的飛機。
False positives: 有一個,畫紅色框的大雁。blog
沒被識別出來的六張圖片中:
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 是被正確識別出來的飛機個數與測試集中全部飛機的個數的比值:
Recall的分母是(True positives + False negatives),這兩個值的和,能夠理解爲一共有多少張飛機的照片。
在這一例子中,True positives爲3,False negatives爲2,那麼Recall值是 3/(3+2)=0.6。
意味着在全部的飛機圖片中,60%的飛機被正確的識別成飛機.。
調整閾值
你也能夠經過調整閾值,來選擇讓系統識別出多少圖片,進而改變Precision 或 Recall 的值。
在某種閾值的前提下(藍色虛線),系統識別出了四張圖片,以下圖中所示:
分類系統認爲大於閾值(藍色虛線之上)的四個圖片更像飛機。
咱們能夠經過改變閾值(也能夠看做上下移動藍色的虛線),來選擇讓系統識別能出多少個圖片,固然閾值的變化會致使Precision與Recall值發生變化。好比,把藍色虛線放到第一張圖片下面,也就是說讓系統只識別出最上面的那張飛機圖片,那麼Precision的值就是100%,而Recall的值則是20%。若是把藍色虛線放到第二張圖片下面,也就是說讓系統只識別出最上面的前兩張圖片,那麼Precision的值仍是100%,而Recall的值則增加到是40%。
下圖爲不一樣閾值條件下,Precision與Recall的變化狀況:
Precision-recall 曲線
若是你想評估一個分類器的性能,一個比較好的方法就是:觀察當閾值變化時,Precision與Recall值的變化狀況。若是一個分類器的性能比較好,那麼它應該有以下的表現:被識別出的圖片中飛機所佔的比重比較大,而且在識別出大雁以前,儘量多地正確識別出飛機,也就是讓Recall值增加的同時保持Precision的值在一個很高的水平。而性能比較差的分類器可能會損失不少Precision值才能換來Recall值的提升。一般狀況下,文章中都會使用Precision-recall曲線,來顯示出分類器在Precision與Recall之間的權衡。
上圖就是分類器的Precision-recall 曲線,在不損失精度的條件下它能達到40%Recall。而當Recall達到100%時,Precision 下降到50%。
Approximated Average precision
相比較與曲線圖,在某些時候仍是一個具體的數值能更直觀地表現出分類器的性能。一般狀況下都是用 Average Precision來做爲這一度量標準,它的公式爲:
在這一積分中,其中p表明Precision ,r表明Recall,p是一個以r爲參數的函數,That is equal to taking the area under the curve.
實際上這一積分極其接近於這一數值:對每一種閾值分別求(Precision值)乘以(Recall值的變化狀況),再把全部閾值下求得的乘積值進行累加。公式以下:
在這一公式中,N表明測試集中全部圖片的個數,P(k)表示在能識別出k個圖片的時候Precision的值,而 Delta r(k) 則表示識別圖片個數從k-1變化到k時(經過調整閾值)Recall值的變化狀況。
在這一例子中,Approximated Average Precision的值
=(1 * (0.2-0)) + (1 * (0.4-0.2)) + (0.66 * (0.4-0.4)) + (0.75 * (0.6-0.4)) + (0.6 * (0.6-0.6)) + (0.66 * (0.8-0.6)) + (0.57 * (0.8-0.8)) + (0.5 * (0.8-0.8)) + (0.44 * (0.8-0.8)) + (0.5 * (1-0.8)) = 0.782.
=(1 * 0.2) + (1 * 0.2) + (0.66 * 0) + (0.75 * 0.2) + (0.6 *0) + (0.66 * 0.2) + (0.57 *0) + (0.5 *0) + (0.44 *0) + (0.5 * 0.2) = 0.782.
經過計算能夠看到,那些Recall值沒有變化的地方(紅色數值),對增長Average Precision值沒有貢獻。
Interpolated average precision
不一樣於Approximated Average Precision,一些做者選擇另外一種度量性能的標準:Interpolated Average Precision。這一新的算法再也不使用P(k),也就是說,再也不使用當系統識別出k個圖片的時候Precision的值與Recall變化值相乘。而是使用:
也就是每次使用在全部閾值的Precision中,最大值的那個Precision值與Recall的變化值相乘。公式以下:
下圖的圖片是Approximated Average Precision 與 Interpolated Average Precision相比較。
須要注意的是,爲了讓特徵更明顯,圖片中使用的參數與上面所說的例子無關。
很明顯 Approximated Average Precision與精度曲線挨的很近,而使用Interpolated Average Precision算出的Average Precision值明顯要比Approximated Average Precision的方法算出的要高。
一些很重要的文章都是用Interpolated Average Precision 做爲度量方法,而且直接稱算出的值爲Average Precision 。PASCAL Visual Objects Challenge從2007年開始就是用這一度量制度,他們認爲這一方法能有效地減小Precision-recall 曲線中的抖動。因此在比較文章中Average Precision 值的時候,最好先弄清楚它們使用的是那種度量方式。
IoU
IoU這一值,能夠理解爲系統預測出來的框與原來圖片中標記的框的重合程度。
計算方法即檢測結果Detection Result與 Ground Truth 的交集比上它們的並集,即爲檢測的準確率:
以下圖所示:
藍色的框是:GroundTruth
黃色的框是:DetectionResult
綠色的框是:DetectionResult ⋂GroundTruth
紅色的框是:DetectionResult ⋃GroundTruth
轉:https://blog.csdn.net/linchunmian/article/details/79644300
1. PR曲線(Precision&Recall)
首先須要瞭解幾個概念。
True positive(TP): 預測爲positive ground truth爲True
True negative(TN): 預測爲positive 但ground truth 爲negative
False positive(FP): 預測爲positive 但ground truth 爲negative
False negative(FN): 預測爲negative ground truth也爲False
precision: 查準率,指預測爲positive中,ground truth是positive所佔的比例 (TP/(TP+FP)),該值越大越好,1爲理想狀態
recall: 查全率,指全部的True樣本中,預測爲positive所佔的比例(TP/(TP+FN)),該值越大越好,1爲理想狀態
F1-score: 將precision 和recall合成一個指標,越大越好
accuracy: 全部預測結果與實際結果同樣的樣本/全部樣本
FP Rate(FPR): false positive佔整個negative的比例,就是說本來是negative 預測爲positive的比例,越小越好
TP Rate(TPR): true positive 佔整個positive 的比例
PR曲線:(precision,recall)曲線,越凸向右上方效果越好
AP:PR曲線下的面積
AUC: Area Under the Curve 是一個抽象的概念,並不單指ROC曲線下的面積
經過計算每一個樣本的TP, FP, TN, FN的值,獲得每一個樣本對應的(P, R)值對,從而能夠繪製PR曲線圖。PR曲線的通常趨勢是向右上方凸起的一條曲線,最右上方凸起點成爲平衡點,該點的p、r座標值越大越好,表示檢測器性能在該點達到平衡狀態,既保證高精確度又保證高召回率。
此外,F1-score的計算公式爲F1 = 2 * p * r* (p+r)
2. ROC曲線(receiver operating characteristic)
ROC曲線是一種描述靈敏度的評價指標。ROC曲線能夠經過計算樣本的真陽性率TPR和假陽性率FPR獲得,所以ROC曲線也叫作相關操做特徵曲線。與PR曲線相反,ROC 曲線的趨勢是向左上角凸起的一條曲線,以下圖。評價兩條ROC曲線的性能優劣,一般計算曲線下方包含的面積AUC,面積越大則表明檢測器性能越好。
3. MAP(Mean Average Precision), AP(Average Precision)
AP一般用於計算平均的檢測精度,用於衡量檢測器在每一個類別上的性能好壞;而MAP則更多用於評價多目標的檢測器性能,衡量檢測器在全部類別上的性能好壞,即獲得每一個類別的AP值後再取全部類別的平均值。假設N個樣本中有M個positive的正例,那麼咱們就會獲得M個recall值(1/M,2/M,3/M......M/M),對於每一個recall值r,咱們能夠計算出對應r'>r的最大的precision值,而後對這M個precision 值取平均即獲得最後的AP值。計算過程以下表所示:
此時的PR曲線爲: