目標檢測模型的性能評估--mAP

目標檢測模型中性能評估的幾個重要參數有精確度,精確度和召回率。本文中我們將討論一個常用的度量指標:均值平均精度,即MAP。 
在二元分類中,精確度和召回率是一個簡單直觀的統計量,但是在目標檢測中有所不同的是及時我們的物體檢測器在圖像中檢測到物體,如果我們仍無法找到它所在的圖像中的哪個位置也是無用的。由於我們需要預測圖像中的目標的發生和位置,所以在計算精確度和召回率與普通的二分類有所不同。

一、目標檢測問題
目標檢測問題是指: 
給定一個圖像,找到其中的目標,找到它們的位置,並且對目標進行分類。目標檢測模型通常是在一組固定的類上進行訓練的,所以模型只能定位和分類圖像中的那些類。此外,目標的位置通常是邊界矩陣的形式。所以,目標檢測需要涉及圖像中目標的位置信息和對目標進行分類。所以本文將要描述的均值平均精度(Mean Average Precision)特別適用於我們預測目標與類的位置的算法。同時均值平均值對於評估模型定位性能、目標監測模型性能和分割模型性能都是有用的。

二、評估目標檢測模型

1、選擇MAP的原因 
目標檢測問題中的模型的分類和定位都需要進行評估,每個圖像都可能具有不同類別的不同目標,因此,在圖像分類問題中所使用的標準度量不能直接應用於目標檢測問題。
2、Ground Truth 的定義 
對於任何算法,度量總是與數據的真實值(Ground Truth)進行比較。我們只知道訓練、驗證和測試數據集的Ground Truth信息。對於物體檢測問題,Ground Truth包括圖像,圖像中的目標的類別以及圖像中每個目標的邊界框。 
下圖給出了一個真實的圖像(JPG/PNG)和其他標註信息作爲文本(邊界框座標(X, Y, 寬度和高度)和類),其中上圖的紅色框和文本標籤僅僅是爲了更好的理解,手工標註可視化顯示。 

對於上面的例子,我們在模型在訓練中得到了下圖所示的目標邊界框和3組數字定義的ground truth(假設這個圖像是1000*800px,所有這些座標都是構建在像素層面上的) 

接下來,讓我們看看如何計算MAP
3、計算MAP 
假設原始圖像和真實的標註信息(ground truth)如上所示,訓練和驗證數據以相同的方式都進行了標註。該模型將返回大量的預測,但是在這些模型中,大多數都具有非常低的置信度分數,因此我們只考慮高於某個置信度分數的預測信息。我們通過我們的模型運行原始圖像,在置信閾值確定之後,下面是目標檢測算法返回的帶有邊框的圖像區域(bounding boxes)。 

但是怎樣在實際中量化這些檢測區域的正確性呢? 
首先我們需要知道每個檢測的正確性。測量一個給定的邊框的正確性的度量標準是loU-交幷比(檢測評價函數),這是一個非常簡單的視覺量。 
下面給出loU的簡單的解釋。
4、loU 
loU(交併比)是模型所預測的檢測框和真實(ground truth)的檢測框的交集和並集之間的比例。這個數據也被稱爲Jaccard指數。爲了得到交集和並集值,我們首先將預測框疊加在ground truth實際框上面,如下圖所示:

現在對於每個類,預測框和真實框重疊的區域就是交集區域,預測框和真實框的總面積區域就是並集框。 
在上面的目標馬的交集和聯合看起來是這樣的: 

交集包括重疊區域(青色區域), 並集包括橙色和青色區域。 
loU(交併比將會這樣計算):

 

識別正確的檢測和計算精度 
我們使用loU看檢測是否正確需要設定一個閾值,最常用的閾值是0.5,即如果loU>0.5,則認爲是真實的檢測(true detection),否則認爲是錯誤的檢測(false detection)。我們現在計算模型得到的每個檢測框(置信度閾值後)的loU值。用計算出的loU值與設定的loU閾值(例如0.5)比較,就可以計算出每個圖像中每個類的正確檢測次數(A)。對於每個圖像,我們都有ground truth的數據(即知道每個圖像的真實目標信息),因此也知道了該圖像中給定類別的實際目標(B)的數量。我們也計算了正確預測的數量(A)(True possitive)。因此我們可以使用這個公式來計算該類模型的精度(A/B)

   

即給定一張圖像的類別C的Precision=圖像正確預測(True Positives)的數量除以在圖像張這一類的總的目標數量。 
假如現在有一個給定的類,驗證集中有100個圖像,並且我們知道每個圖像都有其中的所有類(基於ground truth)。所以我們可以得到100個精度值,計算這100個精度值的平均值,得到的就是該類的平均精度。 
  

即一個C類的平均精度=在驗證集上所有的圖像對於類C的精度值的和/有類C這個目標的所有圖像的數量。 
現在加入我們整個集合中有20個類,對於每個類別,我們都先計算loU,接下來計算精度,然後計算平均精度。所有我們現在有20個不同的平均精度值。使用這些平均精度值,我們可以輕鬆的判斷任何給定類別的模型的性能。 
但是問題是使用20個不同的平均精度使我們難以度量整個模型,所以我們可以選用一個單一的數字來表示一個模型的表現(一個度量來統一它們),我們可以取所有類的平均精度值的平均值,即MAP(均值平均精度)。 
  

MAP=所有類別的平均精度求和除以所有類別 
即數據集中所有類的平均精度的平均值。

使用MAP值時我們需要滿足一下條件: 
(1) MAP總是在固定的數據集上計算 
(2)它不是量化模型輸出的絕對度量,但是是一個比較好的相對度量。當我們在流行的公共數據集上計算這個度量時,這個度量可以很容易的用來比較不同目標檢測方法 
(3)根據訓練中類的分佈情況,平均精度值可能會因爲某些類別(具有良好的訓練數據)非常高(對於具有較少或較差數據的類別)而言非常低。所以我們需要MAP可能是適中的,但是模型可能對於某些類非常好,對於某些類非常不好。因此建議在分析模型結果的同時查看個各類的平均精度,這些值也可以作爲我們是不是需要添加更多訓練樣本的一個依據。

發佈了158 篇原創文章 · 獲贊 42 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章