如何計(jì)算單目標(biāo)檢測模型的平均精度(Average Precision)?
AP(Average Precision)即平均精度,是用于對(duì)目標(biāo)檢測算法進(jìn)行性能評(píng)估的常用指標(biāo)之一。
眾所周知,AP 的值就是 PR 曲線與 x 軸和 y 軸所圍成圖形的面積。mAP(mean Average Precision)是針對(duì)多個(gè)類別的目標(biāo)檢測來說的,直接將每個(gè)類別目標(biāo)對(duì)應(yīng)的 AP 進(jìn)行相加然后再求平均即可。那么,在現(xiàn)實(shí)項(xiàng)目中,在訓(xùn)練出來單目標(biāo)檢測模型(即該模型的檢測目標(biāo)只有一個(gè)類別)之后,我們?cè)撊绾蝸碛?jì)算該模型的 AP 值呢?在本文中,我們將分以下幾步來進(jìn)行介紹:
1.在測試集上對(duì)模型進(jìn)行評(píng)估,計(jì)算出每一個(gè)預(yù)測目標(biāo)框?qū)?yīng)的 Precision 和 Recall
簡單地說就是將測試數(shù)據(jù)集中的每一張圖片逐一送入目標(biāo)檢測模型,分別得到其對(duì)應(yīng)的預(yù)測結(jié)果。然后在預(yù)測結(jié)果中,對(duì)每一個(gè)預(yù)測目標(biāo)進(jìn)行遍歷,根據(jù)時(shí)間先后順序,每得到一個(gè)預(yù)測目標(biāo)框,就計(jì)算一次當(dāng)前的精確度(Precision)和召回率(Recall)。Precision 和 Recall 的計(jì)算公式如下:
其中,TP 表示預(yù)測準(zhǔn)確的目標(biāo)數(shù)量,F(xiàn)P 表示預(yù)測錯(cuò)誤的目標(biāo)數(shù)量,F(xiàn)N 表示沒有被檢測到的目標(biāo)數(shù)量,GP 表示所有的實(shí)際目標(biāo)的數(shù)量。
計(jì)算出來每一個(gè)預(yù)測目標(biāo)對(duì)應(yīng)的 Precision 和 Recall 之后,將其按照一定格式逐行寫入 log 文件中,方便后續(xù)處理。如:

最終得到的 log 文件,其內(nèi)容如下圖所示:

2.根據(jù) Precision 和 Recall 繪制 PR 曲線
上一步我們得到了模型在測試集上的 Precision 和 Recall 數(shù)據(jù),并且存在了一個(gè) log 文件中。那么在這一步,我們需要將文件中的內(nèi)容讀取出來,并據(jù)此繪制 PR 曲線。
首先,我們通過下面的 Python 代碼,將 log 文件讀取出來并進(jìn)行部分展示。
代碼運(yùn)行結(jié)果如下圖所示:

接著,借助 Python 的?matplotlib.pyplot 模塊功能繪制 PR 曲線:
代碼運(yùn)行結(jié)果如下:

3.對(duì) PR 曲線進(jìn)行積分求解,計(jì)算其所圍成圖形的面積
上一步我們完成了PR曲線的繪制,這里我們將借助 Python 的?trapz 模塊進(jìn)行積分求解,最終得到其與橫縱坐標(biāo)軸所圍成圖形的面積,即 AP(Average Precision) 的值。

至此,該單目標(biāo)檢測模型的平均精度就計(jì)算出來了。