借条。如何计算对象检测算法的真阳性率,其中每个图像可以有多个对象?
IoU. How can I calculate the true positive rate for an object detection algorithm, where I can have multiple objects per image?
如何计算对象检测算法的误报率,其中每个图像可以有多个对象?
在我的数据中,给定的图像可能有很多对象。如果预测框与真值框的 IOU 高于某个阈值,我将其计为真阳性,否则为假阳性。例如:
我有 2 个预测边界框和 2 个真实边界框:
我为每对预测和地面实况边界框计算了 IoU:
IoU = 0.00, 0.60, 0.10, 0.05
threshold = 0.50
在这种情况下,我是否有TP示例?你能解释一下吗?
总结,具体:是的,你有一个TP;你还有一个 FP 和一个 FN。
总结,详细:您的预测模型正确识别了一个 GT(ground truth)框。它错过了另一个。它错误地识别了第三个盒子。
分类逻辑:
最起码,你的IoU数字应该是一个矩阵,而不是一个线性序列。对于 M
预测和 N
GT 框,您将有一个 N
xM
矩阵。你看起来像这样:
0.00 0.60
0.10 0.05
现在,找出矩阵中的最大值 0.60。这高于阈值,因此您声明匹配并从矩阵中消除该预测和 GT 框。这给你留下了一个相当无聊的矩阵:
0.10
由于该值低于阈值,您不匹配。您还有一个预测和一个 GT。对于 "hit",您的分类集中有三个对象:两个预期对象和预测器创建的第三个对象。你像这样编码你的 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.
够清楚了吧?
您可以使用算法(例如 Hungarian algorithm aka Kuhn–Munkres algorithm aka Munkres algorithm)将检测分配给基本事实。您可以合并不将检测分配给地面实况的功能,反之亦然(例如,允许误报和漏检)。
将检测分配给ground truths后,只需使用TPR的定义Wikipedia page for Sensitivity (aka TPR) & Specificity (aka TNR)
我提供这个答案是因为我认为@Prune 提供了一个答案,该答案使用贪婪算法将检测分配给基本事实(即 "Now, find the largest value in the matrix, 0.60. This is above the threshold, so you declare the match and eliminate both that prediction and that GT box from the matrix.")。这种 Greedy 赋值方式并不是在所有场景下都能很好地工作。例如,想象一下检测和地面实况边界框之间的 IoU 值矩阵
det1 det2
pred1 0.4 0.0
pred2 0.6 0.4
贪婪算法会将 pred2 分配给 det1,将 pred1 分配给 det2(如果考虑到误报的可能性,则将 pred1 分配给空)。但是,匈牙利算法会将 pred1 分配给 det1,将 pred2 分配给 det2,这在某些情况下可能会更好。
如何计算对象检测算法的误报率,其中每个图像可以有多个对象?
在我的数据中,给定的图像可能有很多对象。如果预测框与真值框的 IOU 高于某个阈值,我将其计为真阳性,否则为假阳性。例如: 我有 2 个预测边界框和 2 个真实边界框:
我为每对预测和地面实况边界框计算了 IoU:
IoU = 0.00, 0.60, 0.10, 0.05
threshold = 0.50
在这种情况下,我是否有TP示例?你能解释一下吗?
总结,具体:是的,你有一个TP;你还有一个 FP 和一个 FN。
总结,详细:您的预测模型正确识别了一个 GT(ground truth)框。它错过了另一个。它错误地识别了第三个盒子。
分类逻辑:
最起码,你的IoU数字应该是一个矩阵,而不是一个线性序列。对于 M
预测和 N
GT 框,您将有一个 N
xM
矩阵。你看起来像这样:
0.00 0.60
0.10 0.05
现在,找出矩阵中的最大值 0.60。这高于阈值,因此您声明匹配并从矩阵中消除该预测和 GT 框。这给你留下了一个相当无聊的矩阵:
0.10
由于该值低于阈值,您不匹配。您还有一个预测和一个 GT。对于 "hit",您的分类集中有三个对象:两个预期对象和预测器创建的第三个对象。你像这样编码你的 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.
够清楚了吧?
您可以使用算法(例如 Hungarian algorithm aka Kuhn–Munkres algorithm aka Munkres algorithm)将检测分配给基本事实。您可以合并不将检测分配给地面实况的功能,反之亦然(例如,允许误报和漏检)。
将检测分配给ground truths后,只需使用TPR的定义Wikipedia page for Sensitivity (aka TPR) & Specificity (aka TNR)
我提供这个答案是因为我认为@Prune 提供了一个答案,该答案使用贪婪算法将检测分配给基本事实(即 "Now, find the largest value in the matrix, 0.60. This is above the threshold, so you declare the match and eliminate both that prediction and that GT box from the matrix.")。这种 Greedy 赋值方式并不是在所有场景下都能很好地工作。例如,想象一下检测和地面实况边界框之间的 IoU 值矩阵
det1 det2
pred1 0.4 0.0
pred2 0.6 0.4
贪婪算法会将 pred2 分配给 det1,将 pred1 分配给 det2(如果考虑到误报的可能性,则将 pred1 分配给空)。但是,匈牙利算法会将 pred1 分配给 det1,将 pred2 分配给 det2,这在某些情况下可能会更好。