目标检测的平均精度

机器算法验证 机器学习 精确召回 模型评估 平均精度 物体检测
2022-03-01 00:02:13

我对如何计算 AP 或 mAP 值感到很困惑,因为似乎有很多不同的方法。我特别想获取对象检测的 AP/mAP 值。

我只知道:

召回率 = TP/(TP + FN),精度 = TP/(TP + FP)

例如,如果我只有 1 个类要评估,并说 500 个测试图像。每张测试图像可能有不同数量的预测(边界框建议),但每张图像只有一个真实边界框。

图 1:[类别,概率,x1,y1,x2,y2],[类别,概率,x3,y3,x4,y4],[类别,概率,x5,y5,x6,y6],[类别,概率, x7, y7, x8, y8], ...

图 2:[类别,概率,x1,y1,x2,y2],[类别,概率,x3,y3,x4,y4],...

. . . (等等)

*只是一个例子,我编的

我知道要获得 TP,我们必须找到每个预测的 IOU,并计算高于所选阈值(例如 0.5)的 IOU(如果我们有多个 IOU 高于阈值的预测,我们是否只计算一次并处理其他的作为FP?)。

这就是让我困惑的地方:

  1. TP + FP = 为每张图像做出的预测数?

  2. 由于所有测试图像都没有底片,TP+FN = 500?

  3. 它是按图像计算的,还是按类别计算的?

  4. 有人可以让我知道根据我的示例获取 AP/mAP 的分步指南吗?我发现最模棱两可的部分是我们是按图像还是按班级(即一次全部 500 张图像)进行处理。

我发现的大多数指南/论文都非常针对信息检索。在这方面将不胜感激。

*注意:我正在一些自定义数据集上对其进行测试。我知道 PASCAL VOC 有一些代码可以做到这一点,但我想自己编写代码,根据我自己的数据定制。

4个回答

我认为接受的答案直接错误地计算mAP。因为即使对于每个班级,AP 也是平均产品。在我的回答中,我仍然会包括对 IOU 的解释,所以初学者不会很难理解它。

对于给定的目标检测任务,参与者将提交每个类别的置信度(预测概率)的边界框列表。为了被认为是有效的检测,预测边界框和地面真实边界面积占总面积的比例必须超过 0.5。对应的公式为: aobpbt

ao=Area(bpbt)Area(bpbt)

在我们筛选出有效的个预测边界框列表后,我们将独立评估每个类作为一个二分类问题。所以对于一个典型的“人”类评价过程。我们可以首先列出这些边界框如下:MM

对象索引、置信度、基本事实

边界框 1, 0.8, 1

边界框 1, 0.7, 1

边界框 2, 0.1, 0

边界框 3, 0.9, 1

然后,您需要按置信度从高到低对它们进行排名。之后,你只需要像往常一样计算 PR 曲线,并在这 11 个召回点上计算出 11 个插值精度结果等于 [0, 0.1, ..., 1]。(详细计算方法在这里)值得一提对于单个边界框的多次检测,例如我的示例中的边界框 1,我们最多将其视为正确一次,将所有其他视为 False。然后你遍历 20 个类并计算它们的平均值。然后你得到你的mAP。

而且,现在我们稍微扭曲一下这个方法来找到我们的mAP。我们将使用特定类的真实数 K 并计算插值精度,而不是使用 10 个召回断点。即 [0,1/K,2/K...]

这是PASCOL-VOC 2012和MS-COCO计算mAP的方式,伪代码如下:

For each single class of object,

iterate through entire list of predictions for all images

TP = [0] * number of predictions
NP = [0] * number of predictions

for i, prediction in enumerate(predictions): # sorted by prediction confidence, descended

    try to find the ground truth with same class and largest IoU:

        if IoU > threshold(0.5 in PASCOL VOC 2012)

            if ground truth has not been assigned yet:

                assign this ground truth to the prediction
                TP[i] = 1      

        else: # corresponding ground truth has been assigned or IoU < threshold
            FP[i] = 1

    not find:
        FP[i] = 1

then calculate FN = number of unassigned ground truth

Precision = TP/(TP+FP)
Recall = TP/(TP+FN)

要得到AP,首先要平滑PR曲线,然后计算曲线下面积。要获得 mAP,请对所有类重复上述步骤并对它们进行平均。

参考:

Python版PASCOL VOC 2012评估指标:https ://github.com/Cartucho/mAP

原始PASCOL VOC 2012 工具包(在MATLAB 中): https ://github.com/Cartucho/mAP

原始 MSCOCO:http ://cocodataset.org/#detection-eval

Victor Lavrenko 的“评估 12:平均精度”讲座包含一张幻灯片,非常清楚地解释了文档检索案例的平均精度 (AP) 和平均平均精度 (mAP):

在此处输入图像描述

要将幻灯片应用于对象检测:相关文档 = 预测边界框,其 IoU 等于或高于某个阈值(通常为 0.5)。

IoU = 联合上的交集,请参见下图了解视觉定义:

在此处输入图像描述

实际图片上的 IoU 计算示例:

在此处输入图像描述

图片来源

仅供参考:平均平均精度与平均倒数排名

虽然@User1915 自己找到了答案,但我想留点东西给有兴趣的人。

以下是我对上述问题的回答:

Q1:TP+FP = 每张图像的预测数?

是的。由于TP数量有限,预测越多,准确率越低。

Q2:既然所有测试图像都没有底片,TP+FN = 500?

是的。因为每张图片只有一个ground truth box

Q3:是按图像计算,还是按类别计算?

每班。

Q4:有人可以让我知道根据我的示例获取 AP/mAP 的分步指南吗?我发现最模棱两可的部分是我们是按图像还是按班级(即一次全部 500 张图像)进行处理。

请参阅上面@User1915 的帖子。