1. 程式人生 > >效能指標(模型評估)之mAP

效能指標(模型評估)之mAP

為什麼效能指標

用於評價模型的好壞,當然使用不同的效能指標對模型進行評價往往會有不同的結果,也就是說模型的好壞是“相對”的,什麼樣的模型好的,不僅取決於演算法和資料,還決定於任務需求。因此,選取一個合理的模型評價指標是非常有必要的。

錯誤率 & 精度

針對資料集D和學習器f而言:

1、錯誤率:分類錯誤的樣本數佔總樣本的比例

E(f;D)=1mi=1mI(f(xi)yi)
2、精度:分類正確的樣本數佔總樣本的比例
acc(f;D)=1mi=1mI(f(xi)=yi)=1E(f;D)

召回率 & 準確率

為什麼引入

精度和錯誤率雖然常用,但還是不能滿足所有的需求。舉個例子:

資訊檢索中,我們經常會關係檢索出的資訊有多少比例是使用者感興趣的以及使用者感興趣的資訊中有多少被檢索出來了,用精度和錯誤率就描述出來了,這就需要引入準確率(precision,亦稱查準)和召回率(recall,亦稱查全)。

表1 測試樣本分類說明(分4類)
真實情況 預測為正 預測為反 召回率
TP(真正) FN(假反) R=TPTP+FN
FP(假正) TN(真反)
準確率 P=TPTP+FP

準確率

預測結果中,究竟有多少是真的正?(找出來的對的比例)

P=T
P
TP+FP

召回率

所有正樣本中,你究竟預測對了多少?(找回來了幾個)

R=TPTP+FN

P-R曲線

一般來說,我們希望上述兩個指標都是越高越好,然而沒有這麼好的事情,準確率和召回率是一對矛盾的度量,一個高時另一個就會偏低,當然如果兩個都低,那肯定時哪點除了問題。

當我們根據學習器的預測結果對樣例進行排序(排在前面的時學習器認為“最可能”是正例的樣本),然後按此順序依次吧樣本餵給學習器,我們把每次的準確率和召回率描出來就會得到一個P-R曲線(稱為P-R圖)。根據這個圖怎麼評估不同的學習器的好壞呢?

  • 直觀感受:如果一個學習器的P-R被另一個學習器的該曲線包圍,則可以斷言後面的要好些。

但是如果兩個曲線有交叉,那就很難說清楚了。一個比較合理的判據是我比較下兩個曲線下面的面積大小,他能在一定程度上反應P和R“雙高”的比例,但問題是這個面積值不太容易估算啊。那有沒有綜合考慮這兩個指標的指標呢?當然是有的,且看下面

平衡點(Break-Even Point, BEP)

就是找一個 準確率 = 召回率 的值,就像上面的圖那樣。

F1度量

F1是準確率和召回率的調和平均,即是1F1=12×(1P+1R),換算下:

F1=2PRP+R
然而,在更一般的情況下,我們對P和R的重視程度又是不同的,因此,F1度量的更一般的形式可以寫作加權調和平均Fβ,即是1Fβ=11+β2×(1P+β2R),換算下:
Fβ=(1+β2)PRβ2P+R

mAP

mAP是什麼

多標籤影象分類任務中圖片的標籤不止一個,因此評價不能用普通單標籤影象分類的標準,即mean accuracy,該任務採用的是和資訊檢索中類似的方法—mAP(mean Average Precision),雖然其字面意思和mean accuracy看起來差不多,但是計算方法要繁瑣得多。

計算過程

儲存所有樣本的confidence score

首先用訓練好的模型得到所有測試樣本的confidence score,每一類(如car)的confidence score儲存到一個檔案中(如comp1_cls_test_car.txt)。假設共有20個測試樣本,每個的id,confidence score和ground truth label如下:​​

對confidence score進行排序
計算precision和recall

上面我們一共有20個測試樣本,如果把這20個樣本放在一起,按照表1給出的把他們分成4類,就可以得到下面的示意圖:

其中,圓圈內(真正 + 假正)是我們模型預測為正的元素,比如對測試樣本在訓練好的car模型上分類(如果是car,輸出label = 1,反之=0),現在假設我們想得到top-5的結果,也就是說圓圈內一共有5個數據,即排序好的表的前面5個:

好了,上表就是我們預測為正的元素啦,他的準確率是多少?

P=TPTP+FP=22+3=25=40%
召回率是多少呢?在這裡請注意我們的所有測試樣本一共有多少個car(也就是label=1有幾條資料),在下表中很容易找到6條記錄,那我們預測出來的結果找到幾個car呢?上面的top-5中我們只找到了2個car

也就是說,召回率為:

R=TPTP+FN=22+4=26=30%

實際多類別分類任務中,我們通常不滿足只通過top-5來衡量一個模型的好壞,而是需要知道從top-1到top-N(N是所有測試樣本個數,本文中為20)對應的precision和recall。顯然隨著我們選定的樣本越來也多,recall一定會越來越高,而precision整體上會呈下降趨勢。把recall當成橫座標,precision當成縱座標,即可得到常用的precision-recall曲線。這個例子的precision-recall曲線如下:

計算AP

接下來說說AP的計算,此處參考的是PASCAL VOC CHALLENGE的計算方法。首先設定一組閾值,[0, 0.1, 0.2, …, 1]。然後對於recall大於每一個閾值(比如recall>0.3),我們都會得到一個對應的最大precision。這樣,我們就計算出了11個precision。AP即為這11個precision的平均值。這種方法英文叫做11-point interpolated average precision。​

當然PASCAL VOC CHALLENGE自2010年後就換了另一種計算方法。新的計算方法假設這N個樣本中有M個正例,那麼我們會得到M個recall值(1/M, 2/M, …, M/M),對於每個recall值r,我們可以計算出對應(r’ > r)的最大precision,然後對這M個precision值取平均即得到最後的AP值。計算方法如下:​


注:這裡倒數第二列,top-6的Max Precision應該為36(而不是47),上面圖片有點問題。

AP衡量的是學出來的模型在給定類別上的好壞,而mAP衡量的是學出的模型在所有類別上的好壞,得到AP後mAP的計算就變得很簡單了,就是取所有AP的平均值。

參考