IoU。我如何计算对象检测算法的真实阳性率,其中每个图像可以有多个对象?

时间:2019-02-27 12:48:43

标签: machine-learning deep-learning conv-neural-network bounding-box

如何为一个物体检测算法计算出假阳性率,其中每个图像可以有多个物体?

在我的数据中,给定的图像可能有很多对象。如果将其与真值框的IOU超过某个阈值,我会将预测值框视为真阳性,否则将其视为假阳性。例如: 我有2个预测边界框和2个真实边界框:

我为每对预测和真实边界框计算了IoU: IoU = 0.00, 0.60, 0.10, 0.05 threshold = 0.50

在这种情况下,我是否有TP示例?你能解释一下吗?

2 个答案:

答案 0 :(得分:0)

摘要(具体):是的,您有交易记录;您也有FP和FN。

摘要,详细:您的预测模型正确识别了一个GT(基本事实)框。它错过了另一个。它错误地标识了第三个框。

分类逻辑:

至少,您的IoU数字应该是矩阵,而不是线性序列。对于M个预测和N个GT框,您将拥有一个N x M矩阵。你看起来像这样:

0.00 0.60
0.10 0.05

现在,在矩阵中找到最大值0.60。这高于阈值,因此您可以声明匹配项,并从矩阵中消除该预测和该GT框。这给您留下了一个相当无聊的矩阵:

0.10

由于此值低于阈值,因此您不匹配。您有一个预测,还有一个GT。使用一个“命中”,您在分类集中有三个对象:两个预期对象,第三个由预测变量创建。您可以这样编写gt和pred列表:

gt   = [1, 1, 0]    // The first two objects are valid; the third is a phantom.
pred = [1, 0, 1]    // Identified one actual box and the phantom.

够清楚吗?

答案 1 :(得分:0)

您可以使用算法(例如Hungarian algorithm aka Kuhn–Munkres algorithm aka Munkres algorithm)将检测结果分配给基本事实。您可能会合并不将检测结果分配给地面真实情况的功能,反之亦然(例如,允许错误警报和错过的检测结果)。

将检测结果分配给基本事实后,只需使用TPR Wikipedia page for Sensitivity (aka TPR) & Specificity (aka TNR)

的定义

之所以提供此答案,是因为我认为@Prune提供了一个答案,该答案使用Greedy算法对地面真相进行检测分配(即“现在,在矩阵中找到最大值0.60。这高于阈值,所以您声明匹配,并从矩阵中消除该预测和该GT框。”)。此贪婪分配方法无法在所有情况下都很好地工作。例如,假设检测和地面真相边界框之间的IoU值矩阵

      det1 det2
pred1 0.4  0.0
pred2 0.6  0.4

贪婪算法会将pred2分配给det1,将pred1分配给det2(如果考虑到错误警报的可能性,则将pred1分配为空)。但是,匈牙利算法会将pred1分配给det1,将pred2分配给det2,在某些情况下可能会更好。