如何为一个物体检测算法计算出假阳性率,其中每个图像可以有多个物体?
在我的数据中,给定的图像可能有很多对象。如果将其与真值框的IOU超过某个阈值,我会将预测值框视为真阳性,否则将其视为假阳性。例如: 我有2个预测边界框和2个真实边界框:
我为每对预测和真实边界框计算了IoU:
IoU = 0.00, 0.60, 0.10, 0.05
threshold = 0.50
在这种情况下,我是否有TP示例?你能解释一下吗?
答案 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,在某些情况下可能会更好。