效能指標(模型評估)之mAP
為什麼效能指標
用於評價模型的好壞,當然使用不同的效能指標對模型進行評價往往會有不同的結果,也就是說模型的好壞是“相對”的,什麼樣的模型好的,不僅取決於演算法和資料,還決定於任務需求。因此,選取一個合理的模型評價指標是非常有必要的。
錯誤率 & 精度
針對資料集
1、錯誤率:分類錯誤的樣本數佔總樣本的比例
2、精度:分類正確的樣本數佔總樣本的比例
召回率 & 準確率
為什麼引入
精度和錯誤率雖然常用,但還是不能滿足所有的需求。舉個例子:
資訊檢索中,我們經常會關係“檢索出的資訊有多少比例是使用者感興趣的”以及“使用者感興趣的資訊中有多少被檢索出來了”,用精度和錯誤率就描述出來了,這就需要引入準確率(precision,亦稱查準)和召回率(recall,亦稱查全)。
真實情況 | 預測為正 | 預測為反 | 召回率 |
---|---|---|---|
正 | TP(真正) | FN(假反) | |
反 | FP(假正) | TN(真反) | |
準確率 |
準確率
預測結果中,究竟有多少是真的正?(找出來的對的比例)
召回率
所有正樣本中,你究竟預測對了多少?(找回來了幾個)
P-R曲線
一般來說,我們希望上述兩個指標都是越高越好,然而沒有這麼好的事情,準確率和召回率是一對矛盾的度量,一個高時另一個就會偏低,當然如果兩個都低,那肯定時哪點除了問題。
當我們根據學習器的預測結果對樣例進行排序(排在前面的時學習器認為“最可能”是正例的樣本),然後按此順序依次吧樣本餵給學習器,我們把每次的準確率和召回率描出來就會得到一個P-R曲線(稱為P-R圖)。根據這個圖怎麼評估不同的學習器的好壞呢?
- 直觀感受:如果一個學習器的P-R被另一個學習器的該曲線包圍,則可以斷言後面的要好些。
但是如果兩個曲線有交叉,那就很難說清楚了。一個比較合理的判據是我比較下兩個曲線下面的面積大小,他能在一定程度上反應P和R“雙高”的比例,但問題是這個面積值不太容易估算啊。那有沒有綜合考慮這兩個指標的指標呢?當然是有的,且看下面
平衡點(Break-Even Point, BEP)
就是找一個 準確率 = 召回率 的值,就像上面的圖那樣。
F1度量
F1是準確率和召回率的調和平均,即是
然而,在更一般的情況下,我們對P和R的重視程度又是不同的,因此,F1度量的更一般的形式可以寫作加權調和平均
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個:
好了,上表就是我們預測為正的元素啦,他的準確率是多少?
召回率是多少呢?在這裡請注意我們的所有測試樣本一共有多少個car(也就是label=1有幾條資料),在下表中很容易找到6條記錄,那我們預測出來的結果找到幾個car呢?上面的top-5中我們只找到了2個car。
也就是說,召回率為:
實際多類別分類任務中,我們通常不滿足只通過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應該為
AP衡量的是學出來的模型在給定類別上的好壞,而mAP衡量的是學出的模型在所有類別上的好壞,得到AP後mAP的計算就變得很簡單了,就是取所有AP的平均值。