欢迎光临散文网 会员登陆 & 注册

如何计算单目标检测模型的平均精度(Average Precision)?

2022-05-05 14:36 作者:梦醒南天  | 我要投稿

AP(Average Precision)即平均精度,是用于对目标检测算法进行性能评估的常用指标之一。

众所周知,AP 的值就是 PR 曲线与 x 轴和 y 轴所围成图形的面积。mAP(mean Average Precision)是针对多个类别的目标检测来说的,直接将每个类别目标对应的 AP 进行相加然后再求平均即可。那么,在现实项目中,在训练出来单目标检测模型(即该模型的检测目标只有一个类别)之后,我们该如何来计算该模型的 AP 值呢?在本文中,我们将分以下几步来进行介绍:

1.在测试集上对模型进行评估,计算出每一个预测目标框对应的 Precision 和 Recall

简单地说就是将测试数据集中的每一张图片逐一送入目标检测模型,分别得到其对应的预测结果。然后在预测结果中,对每一个预测目标进行遍历,根据时间先后顺序,每得到一个预测目标框,就计算一次当前的精确度(Precision)和召回率(Recall)。Precision 和 Recall 的计算公式如下:

Precision%20%3D%20%5Cfrac%7BTP%7D%7BTP%2BFP%7D%20

Recall%20%3D%20%5Cfrac%7BTP%7D%7BTP%2BFN%7D%3D%5Cfrac%7BTP%7D%7BGP%7D%20%20

其中,TP 表示预测准确的目标数量,FP 表示预测错误的目标数量,FN 表示没有被检测到的目标数量,GP 表示所有的实际目标的数量。

计算出来每一个预测目标对应的 Precision 和 Recall 之后,将其按照一定格式逐行写入 log 文件中,方便后续处理。如:

将每一个预测目标对应的 Precision 和 Recall 写入文件

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


2.根据 Precision 和 Recall 绘制 PR 曲线

上一步我们得到了模型在测试集上的 Precision 和 Recall 数据,并且存在了一个 log 文件中。那么在这一步,我们需要将文件中的内容读取出来,并据此绘制 PR 曲线。

首先,我们通过下面的 Python 代码,将 log 文件读取出来并进行部分展示。

代码运行结果如下图所示:

读取 Precision 和 Recall 的 log 文件

接着,借助 Python 的 matplotlib.pyplot 模块功能绘制 PR 曲线:

代码运行结果如下:

PR 曲线效果图


3.对 PR 曲线进行积分求解,计算其所围成图形的面积

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

通过积分求的 AP 的值

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

如何计算单目标检测模型的平均精度(Average Precision)?的评论 (共 条)

分享到微博请遵守国家法律