一、AP指標簡介
AP指標(Average Precision)是目標檢測中最經典的評估指標之一,用于衡量目標檢測器在不同置信度下的準確性。該指標結合了目標檢測的準確率和召回率,並計算得出一個綜合的得分。
二、目標檢測與AP指標
在目標檢測任務中,我們需要確定目標的類別和位置。而對於每一個檢測框,有可能存在多個可能的類別,所以我們需要一個閾值來進行判定,判斷框中是否有目標。
以一張照片中有多個狗的檢測為例,圖中狗的位置和大小都是難以預測的,而且狗的數量也是不確定的,因此我們需要使用一種能夠同時檢測出多個目標的演算法,並能夠度量這個演算法檢測的準確性。
AP指標就是為了解決以上問題而被創建的指標,能夠從多個角度度量目標檢測演算法的性能。其中,AP的概念可以被描述如下:對於每一個類別,我們可以計算出多個不同置信度的檢測框(bounding box),然後以不同的IoU作為閾值來繪製precision-recall曲線。之後,我們計算出該類別下的AP值,最後將所有類別下的AP取平均數作為整個模型的AP值。
三、AP計算過程
AP計算過程可以分為兩個步驟:1. 繪製precision-recall(PR)曲線;2. 計算PR曲線下面積,即AP值。 接下來我們將分別進行講解。
1. 繪製PR曲線
首先,我們需要使用不同的置信度作為閾值,對檢測框進行篩選。隨著置信度的逐漸升高,最後剩下的框數量會逐漸減少,而正確的框數量也會同步減少。通過使用不同的置信度,我們得到了一組precision-recall數據點,然後可以使用這些數據點來繪製PR曲線,如下圖所示:
<img src="PR曲線.png" alt="PR曲線">
該曲線存在凸性,當檢測器置信度較高時,這個凸性變得越來越小,當曲線落到x軸時(此時召回率為100%),AP的值也達到最大。
2. 計算AP值
求解AP值就是對1中的PR曲線下面積進行計算的過程。但是由於PR曲線是呈現凹形的,我們需要 對數據進行插值,將其轉換為平滑的曲線。通常採用的方法是:以每個rec對應的最大prec值為基準,將這些maximizes precision points和每個正確的檢測框的(rec,prec)作為插值點,最後將這些點擬合成一條平滑的曲線計算出PR曲線下面積即可。
四、代碼示例
以下是基於Python語言,使用pycocotools計算AP指標的示例代碼。
import cocoapi.eval_coco_map as coco_map
# cocoapi輸入數據類型為RLE格式,需要將預測結果轉換為RLE格式
prediction_RLE = coco_map.encode_mask(prediction)
coco_map.compute_map(eval_mAP, prediction_RLE, ...)
# 計算AP指標,支持多種AP指標的計算
# 'AP': ordinary average precision
# 'AP50': average precision over 50 IoU thresholds
# 'AP75': average precision over 75 IoU thresholds
# 'APs': average precision for small objects (area < 32^2 pixels)
# 'APm': average precision for medium objects (32^2 < area < 96^2 pixels)
# 'APl': average precision for large objects (96^2 < area)
ap_metrics = coco_eval.summarize()
以上代碼為COCO數據集的mAP計算代碼,其中prediction變數為當前輸入的預測結果,eval_mAP參數則為初始化的COCO數據集對象。在此基礎上,我們可以進一步根據各自需求對AP指標進行計算。
五、總結
AP指標是目標檢測領域中最經典和廣泛應用的評測指標之一,其計算過程和方法已經被標準化。對於既有目標檢測演算法的改進,也為新演算法的評測提供了重要的參考指標。同時注意,文中所提到的計算過程和細節不同演算法庫的實現也會略有不同,可根據具體需求和演算法庫API進行實現。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/158381.html