淺析經典目標檢測評價指標--mmAP(一)
大家好,我是曠視科技南京研究院研究員趙博睿,主要研究領域為目標檢測。今天和大家聊聊mmAP的那些事~
目標檢測是計算機視覺領域的一項基礎問題,在許多智慧場景的落地應用中目標檢測通常都是視覺感知的第一步。在學術研究中,MS COCO作為目標檢測領域中最常用、最權威的公共資料集被作為目前幾乎每一個目標檢測演算法的標準“演武場”,其效能度量中的指標—mmAP更是被廣大研究者耳熟能詳成為經典。不過,經典之餘,一些研究者往往對此“拿來主義”不求甚解。
本文上半篇將針對mmAP這一經典的目標檢測評價指標詳細解析其定義初衷和具體計算方式;本文的下半篇將繼續分析mmAP的特點,並介紹針對這些特點現有方法如何“hack” mmAP,最後將提出幾個mmAP未考慮到的評測要素。僅拋磚引玉,期待諸君有更優評價指標的提出。
目標檢測
目標檢測(Object Detection)是計算機視覺中非常常見的任務,該任務的輸入是一張影象,輸出為影象中的所有存在的目標,每個目標都要給出類別資訊(是什麼?)和位置資訊(在哪裡?)。這個位置資訊通常用一個外接矩形框(俗稱bounding box)來表示。

這個任務有一個特點,就是它的輸出是非結構化的。也就是說,它的輸出具有很強的不確定性。舉個例子,影象分類任務的輸入也是一張影象,輸出為一個標籤/類別,代表著這張圖的分類,因此分類任務的輸出是結構化的,有且僅有一個標籤;而目標檢測的輸出是影象中的所有目標(類別+位置),影象中到底有多少個目標是不確定的。這一特點非常重要,也正因為這一特點,目標檢測的效能度量方法要比影象分類任務複雜得多,這在後面的分析中會提到。
什麼樣的檢測結果是“好”的?
什麼樣的檢測結果是好的?這個問題看起來很簡單,因為我們在看一張圖(包含了檢測出來的框/分割掩碼)時,很容易就能夠對比出真實目標和檢測結果的“貼合程度”。但是對於計算機視覺任務,我們需要一個明確的數字化的判斷標準。(以下均使用目標檢測任務作為示例)
下面我們用 GT(類別, 矩形) 來表示一個圖中的目標(也就是我們希望找出來的目標,也可稱作Ground Truth),用DT(類別, 矩形)來表示一個我們檢測出來的目標(Detection Result)。
首先,一個好的檢測結果,至少得把類別搞對。如果類別就錯了,位置資訊再準確都是白搭,也就是GT(類別)=DT(類別);其次,DT(矩形)要儘可能地“貼合”GT(矩形),越“貼合”越好。如何判斷這個“貼合程度”呢?最常用的一種評價方式是交集和並集的比值(交併比、Intersection over Union、IoU)。顧名思義,交併比就是DT(矩形)和GT(矩形)的重合部分面積(交集) 與 兩者的全部面積(並集,重合的部分不會重複計算面積)。

這個比值最小為0,也就是兩個矩形毫無交集;最大為1,也就是兩個矩形完全重合。IoU越大,檢測的結果越好。
評價檢測效能之前
知道了什麼樣的檢測結果是好的,就可以評價檢測演算法的效能了。但在這之前,先思考一個問題:評價一個檢測演算法的效能,真的像想象中那麼容易嗎?
我們都知道,評價一個影象分類結果的效能,只需要看預測類別是否正確即可,在一個數據集上面,我們可以很容易地得出一個平均準確率。可是目標檢測的輸出目標數量和真實目標數量都是不固定的(前文提到的非結構化的特性),因此評判時要考慮的就不僅是“對錯”這麼簡單了,我們需要考慮的有:如果漏掉了一個目標對效能有多大損傷?如果多檢測出了一個目標對效能有多大損傷?如果檢測出來的位置資訊有所偏差對效能有多大損傷?進一步地,在這麼多的檢測結果中,總有一些是檢測器十分篤定的,有一些是模稜兩可的。如果檢測器對多檢測出來的那個目標本身也不太確定呢?如果檢測器最滿意最信任的那個檢測結果出錯了呢?換言之:一個檢測結果對效能的影響,是否應該和檢測器對它的滿意程度(置信度)相關?以及,檢測錯了一個稀有的物體和檢測錯了一個常見的物體所帶來的效能損傷是否應該相同?......
正戲來了:mmAP
剛剛提到的所有問題,mmAP都要一一給出答案。
首先是位置偏差問題。有的使用場景對位置的準確度要求不高,有的則要求精確定位。因此,mmAP先按位置準確度的需求進行劃分,設定一組IOU閾值,這組閾值為 (0.5, 0.55, 0.6, ..., 0.9, 0.95),如果DT與GT的IOU超過閾值,則視作檢測成功。這樣每給定一個閾值就可以計算出一個性能(也就是mAP,後面詳述),然後對這些效能取平均(也就是mmAP,後面詳述)就是整個檢測演算法的效能了。
然後是類別平衡問題,這一問題在分類領域非常常見,“將一個白血病患者錯分為健康的人“和“將一個健康的人錯分為白血病患者“是一樣的嗎?顯然不是,因為白血病患者本身就屬於少數,如果一個分類器把所有人都無腦地判斷為健康,其正確率就是 健康的人/全部人。這個分類器的正確率很高但是完全失去了判斷病患的功能。mmAP為了公平的評價檢測器在各個類別上的效能,採用了類別間求平均的方法:先給定一個IOU閾值,然後將所有的GT和DT按照類別先進行劃分,用同一類的所有GT和DT計算出一個性能(也就是AP,馬上詳述),然後對所有類別的效能取平均(mAP),就是檢測演算法在這個IOU閾值下的效能。
現在我們來看看,給定了一個IOU閾值、並給定了一個類別,如何具體地計算檢測的效能。首先,我們要先對所有的檢測結果排序,得分越高的排序越靠前,然後依次判斷檢測是否成功。將排序後的所有結果定義為DTs,所有同類別的真實目標定義為GTs。先依序遍歷一遍DTs中的所有DT,每個DT和全部GT都計算一個IOU,如果最大的IOU超過了給定的閾值,那麼視為檢測成功,算作TP(True Positive),並且最大IOU對應的GT被視為匹配成功;如果該DT與所有GT的IOU都沒超過閾值,自然就是FP(False Positive);同時,每當一個GT被檢測成功後,都會從GTs中“被取走”,以免後續的檢測結果重複匹配。因此如果有多個檢測結果都與同一個GT匹配,那麼分數最高的那個會被算為TP,其餘均為FP。遍歷完成後,我們就知道了所有DTs中,哪些是TP,哪些是FP,而由於被匹配過的GT都會“被取走”,因此GTs中剩下的就是沒有被匹配上的FN(False Negative)。以下是為了方便理解的程式碼(Python),這段程式碼僅用於理解,效率較低。真實程式碼請參考MS COCO的官方原始碼。

有了TP、FP、FN的定義,就可以方便地得出準確率(Precison,P,即所有的檢測結果中多少是對的)和召回率(Recall,R,即所有的真實目標中有多少被檢測出來了),兩者的定義分別為:P = TP / (TP + FP), R = TP / (TP + FN) = TP / len(GTs)。
但是,單純地用Precision和Recall來評價整個檢測器並不公平,因為有的檢測任務要求更高的Recall,“錯檢”幾個影響不大;有的檢測任務則要求更高的Precision,“漏檢”幾個影響不大。因此我們需要對Precision和Recall做一個整體的評估,而這個評估就是前文提到的AP(Average Precision),其定義非常簡單,對排序好的det結果進行“擷取”,依次觀察det結果的前1個(也就是隻有第一個結果)、前2個、...、前N個,每次觀察都能夠得到一個對應的P和R,隨著觀察數量的增大,R一定會變大或不變。因此可以以R為橫軸,P為縱軸,將每次的“擷取”觀察到的P和R畫成一個點(R,P)。值得注意的是,當“擷取”到的新結果為FP時,因為R沒有變化所以並不會有新的(R,P)點誕生。最後利用這些(R,P)點繪製成P-R曲線,定義: 。通俗點講,AP就是這個P-R曲線下的面積。AP計算了不同Recall下的Precision,綜合性地評價了檢測器,並不會對P和R有任何“偏好”,同時,檢測分數越高的結果對AP的影響越大,分數越低的對AP的影響越小。
我們再重新過一遍計算方法:給定一組IOU閾值,在每個IOU閾值下面,求所有類別的AP,並將其平均起來,作為這個IOU閾值下的檢測效能,稱為mAP(比如[email protected]就表示IOU閾值為0.5時的mAP);最後,將所有IOU閾值下的mAP進行平均,就得到了最終的效能評價指標:mmAP。
值得注意的一個細節是:在實際計算時,mmAP並不會把所有檢測結果都考慮進來,因為那樣總是可以達到Recall=100%,為了更有效地評價檢測結果,mmAP只會考慮每張圖片的前100個結果。這個數字應該隨著資料集變化而改變,比如如果是密集場景資料集,這個數字應該提高。
還有一個細節非常重要:剛才說AP是P-R曲線下的面積,其實這個說法並不準確。實際上在計算AP時,都要對P-R曲線做一次修正,將P值修正為當R>R0時最大的P(R0即為該點對應的R),即 。下圖即為修正前P-R曲線和修正後P-R曲線。

如圖,藍色實曲線為原始P-R曲線、橘色虛曲線為修正後P-R曲線。為什麼要修正P-R曲線呢?這是因為評價檢測效能時,更應該關心“當R大於某個值時,能達到的最高的P是多少”、而不是“當R等於某個值時,此時的P是多少”。
除了AP、mAP、mmAP之外,還有一個重要的效能是Recall,有時我們也需要關心“檢測器能達到的最大Recall是多少?儘管此時的Precision可能非常低”,AR就是度量Recall的。每給定一個IOU閾值和類別,都會得到一個P-R曲線,該曲線P不為0時的最大的R,就稱為該IOU閾值下該類別的Recall(其實是“最大Recall”),在類別尺度上平均後,就是該IOU閾值下的AR,通常我們會用AR[0.5:0.95]表示所有IOU閾值下AR的平均值(也就是mAR)。值得注意的是,AR並不是和mmAP同等量級的效能度量指標,因為AP綜合考慮了P和R,而AR只是考慮了Recall。計算AR通常是用於幫助我們分析檢測器效能特點的。在兩個檢測結果的mmAP相同時,更高的AR並不意味著更好的檢測效果,而僅僅意味著“更扁平的P-R曲線”(可自行腦補該曲線)。
本文上篇完。
關於mmAP的其他特點,及在這些特點的基礎上怎樣理解“為何有些論文會漲點”,以及mmAP侷限等內容,且聽本文下回分解: 淺析經典目標檢測評價指標--mmAP(二)
PS:曠視南京研究院全職、實習崗位持續open,歡迎推薦、自薦,簡歷請傳送至南京研究院負責人魏秀參博士: [email protected]