目標檢測模型中性能評估的幾個重要參數有精確度,精確度和召回率。本文中咱們將討論一個經常使用的度量指標:均值平均精度,即MAP。
在二元分類中,精確度和召回率是一個簡單直觀的統計量,可是在目標檢測中有所不一樣的是及時咱們的物體檢測器在圖像中檢測到物體,若是咱們仍沒法找到它所在的圖像中的哪一個位置也是無用的。因爲咱們須要預測圖像中的目標的發生和位置,因此在計算精確度和召回率與普通的二分類有所不一樣。算法
1、目標檢測問題
目標檢測問題是指:
給定一個圖像,找到其中的目標,找到它們的位置,而且對目標進行分類。目標檢測模型一般是在一組固定的類上進行訓練的,因此模型只能定位和分類圖像中的那些類。此外,目標的位置一般是邊界矩陣的形式。因此,目標檢測須要涉及圖像中目標的位置信息和對目標進行分類。因此本文將要描述的均值平均精度(Mean Average Precision)特別適用於咱們預測目標與類的位置的算法。同時均值平均值對於評估模型定位性能、目標監測模型性能和分割模型性能都是有用的。函數
2、評估目標檢測模型性能
一、選擇MAP的緣由
目標檢測問題中的模型的分類和定位都須要進行評估,每一個圖像均可能具備不一樣類別的不一樣目標,所以,在圖像分類問題中所使用的標準度量不能直接應用於目標檢測問題。
二、Ground Truth 的定義
對於任何算法,度量老是與數據的真實值(Ground Truth)進行比較。咱們只知道訓練、驗證和測試數據集的Ground Truth信息。對於物體檢測問題,Ground Truth包括圖像,圖像中的目標的類別以及圖像中每一個目標的邊界框。
下圖給出了一個真實的圖像(JPG/PNG)和其餘標註信息做爲文本(邊界框座標(X, Y, 寬度和高度)和類),其中上圖的紅色框和文本標籤僅僅是爲了更好的理解,手工標註可視化顯示。
測試
對於上面的例子,咱們在模型在訓練中獲得了下圖所示的目標邊界框和3組數字定義的ground truth(假設這個圖像是1000*800px,全部這些座標都是構建在像素層面上的) spa
接下來,讓咱們看看如何計算MAP
三、計算MAP
假設原始圖像和真實的標註信息(ground truth)如上所示,訓練和驗證數據以相同的方式都進行了標註。該模型將返回大量的預測,可是在這些模型中,大多數都具備很是低的置信度分數,所以咱們只考慮高於某個置信度分數的預測信息。咱們經過咱們的模型運行原始圖像,在置信閾值肯定以後,下面是目標檢測算法返回的帶有邊框的圖像區域(bounding boxes)。
3d
可是怎樣在實際中量化這些檢測區域的正確性呢?
首先咱們須要知道每一個檢測的正確性。測量一個給定的邊框的正確性的度量標準是loU-交幷比(檢測評價函數),這是一個很是簡單的視覺量。
下面給出loU的簡單的解釋。
四、loU
loU(交併比)是模型所預測的檢測框和真實(ground truth)的檢測框的交集和並集之間的比例。這個數據也被稱爲Jaccard指數。爲了獲得交集和並集值,咱們首先將預測框疊加在ground truth實際框上面,以下圖所示:
blog
如今對於每一個類,預測框和真實框重疊的區域就是交集區域,預測框和真實框的總面積區域就是並集框。
在上面的目標馬的交集和聯合看起來是這樣的: ci
交集包括重疊區域(青色區域), 並集包括橙色和青色區域。
loU(交併比將會這樣計算):it
識別正確的檢測和計算精度
咱們使用loU看檢測是否正確須要設定一個閾值,最經常使用的閾值是0.5,即若是loU>0.5,則認爲是真實的檢測(true detection),不然認爲是錯誤的檢測(false detection)。咱們如今計算模型獲得的每一個檢測框(置信度閾值後)的loU值。用計算出的loU值與設定的loU閾值(例如0.5)比較,就能夠計算出每一個圖像中每一個類的正確檢測次數(A)。對於每一個圖像,咱們都有ground truth的數據(即知道每一個圖像的真實目標信息),所以也知道了該圖像中給定類別的實際目標(B)的數量。咱們也計算了正確預測的數量(A)(True possitive)。所以咱們可使用這個公式來計算該類模型的精度(A/B) io
即給定一張圖像的類別C的Precision=圖像正確預測(True Positives)的數量除以在圖像張這一類的總的目標數量。
假如如今有一個給定的類,驗證集中有100個圖像,而且咱們知道每一個圖像都有其中的全部類(基於ground truth)。因此咱們能夠獲得100個精度值,計算這100個精度值的平均值,獲得的就是該類的平均精度。
即一個C類的平均精度=在驗證集上全部的圖像對於類C的精度值的和/有類C這個目標的全部圖像的數量。
如今加入咱們整個集合中有20個類,對於每一個類別,咱們都先計算loU,接下來計算精度,而後計算平均精度。全部咱們如今有20個不一樣的平均精度值。使用這些平均精度值,咱們能夠輕鬆的判斷任何給定類別的模型的性能。
可是問題是使用20個不一樣的平均精度使咱們難以度量整個模型,因此咱們能夠選用一個單一的數字來表示一個模型的表現(一個度量來統一它們),咱們能夠取全部類的平均精度值的平均值,即MAP(均值平均精度)。
MAP=全部類別的平均精度求和除以全部類別
即數據集中全部類的平均精度的平均值。
使用MAP值時咱們須要知足一下條件:
(1) MAP老是在固定的數據集上計算
(2)它不是量化模型輸出的絕對度量,可是是一個比較好的相對度量。當咱們在流行的公共數據集上計算這個度量時,這個度量能夠很容易的用來比較不一樣目標檢測方法
(3)根據訓練中類的分佈狀況,平均精度值可能會由於某些類別(具備良好的訓練數據)很是高(對於具備較少或較差數據的類別)而言很是低。因此咱們須要MAP多是適中的,可是模型可能對於某些類很是好,對於某些類很是很差。所以建議在分析模型結果的同時查看個各種的平均精度,這些值也能夠做爲咱們是否是須要添加更多訓練樣本的一個依據。