如何计算单目标检测模型的平均精度(Average Precision)?
AP(Average Precision)即平均精度,是用于对目标检测算法进行性能评估的常用指标之一。
众所周知,AP 的值就是 PR 曲线与 x 轴和 y 轴所围成图形的面积。mAP(mean Average Precision)是针对多个类别的目标检测来说的,直接将每个类别目标对应的 AP 进行相加然后再求平均即可。那么,在现实项目中,在训练出来单目标检测模型(即该模型的检测目标只有一个类别)之后,我们该如何来计算该模型的 AP 值呢?在本文中,我们将分以下几步来进行介绍:
1.在测试集上对模型进行评估,计算出每一个预测目标框对应的 Precision 和 Recall
简单地说就是将测试数据集中的每一张图片逐一送入目标检测模型,分别得到其对应的预测结果。然后在预测结果中,对每一个预测目标进行遍历,根据时间先后顺序,每得到一个预测目标框,就计算一次当前的精确度(Precision)和召回率(Recall)。Precision 和 Recall 的计算公式如下:
其中,TP 表示预测准确的目标数量,FP 表示预测错误的目标数量,FN 表示没有被检测到的目标数量,GP 表示所有的实际目标的数量。
计算出来每一个预测目标对应的 Precision 和 Recall 之后,将其按照一定格式逐行写入 log 文件中,方便后续处理。如:

最终得到的 log 文件,其内容如下图所示:

2.根据 Precision 和 Recall 绘制 PR 曲线
上一步我们得到了模型在测试集上的 Precision 和 Recall 数据,并且存在了一个 log 文件中。那么在这一步,我们需要将文件中的内容读取出来,并据此绘制 PR 曲线。
首先,我们通过下面的 Python 代码,将 log 文件读取出来并进行部分展示。
代码运行结果如下图所示:

接着,借助 Python 的 matplotlib.pyplot 模块功能绘制 PR 曲线:
代码运行结果如下:

3.对 PR 曲线进行积分求解,计算其所围成图形的面积
上一步我们完成了PR曲线的绘制,这里我们将借助 Python 的 trapz 模块进行积分求解,最终得到其与横纵坐标轴所围成图形的面积,即 AP(Average Precision) 的值。

至此,该单目标检测模型的平均精度就计算出来了。