小编ITi*_*ger的帖子

计算用于目标检测的混淆矩阵的正确方法是什么?

我正在尝试为我的对象检测模型计算一个混淆矩阵。但是我似乎偶然发现了一些陷阱。我目前的方法是将每个预测框与每个地面真实框进行比较。如果它们的IoU>某个阈值,则将预测插入到混淆矩阵中。插入后,我删除预测列表中的元素,然后继续下一个元素。

因为我还希望将分类错误的提案插入混淆矩阵中,所以我将IoU低于阈值的元素视为与背景混淆。我当前的实现如下所示:

def insert_into_conf_m(true_labels, predicted_labels, true_boxes, predicted_boxes):
    matched_gts = []
    for i in range(len(true_labels)):
        j = 0
        while len(predicted_labels) != 0:
            if j >= len(predicted_boxes):
                break
            if bb_intersection_over_union(true_boxes[i], predicted_boxes[j]) >= 0.7:
                conf_m[true_labels[i]][predicted_labels[j]] += 1
                del predicted_boxes[j]
                del predicted_labels[j]
            else:
                j += 1
        matched_gts.append(true_labels[i])
        if len(predicted_labels) == 0:
            break
    # if there are groundtruth boxes that are not matched by any proposal
    # they are treated as if the model classified them as background
    if len(true_labels) > len(matched_gts):
        true_labels = [i …
Run Code Online (Sandbox Code Playgroud)

python object-detection confusion-matrix

7
推荐指数
1
解决办法
1702
查看次数