计算具有多个类别的目标检测任务的TP,FP,FN数量

问题描述

我正尝试计算具有两个类的对象检测任务的“真阳性”(TP),“假阳性”(FP)和“假阴性”(FN)数量。我以为:

  1. TP-是具有联合交叉(IoU)>阈值,相同类别且仅是给定对象的第一次检测的检测

  2. FP-是所有预测数减去TP数(FP = PRED-TP)

  3. FN-是非基本事实的数量,应等于ALL_GTS-TP

基于上述内容,我编写了以下方法

def detail_results(gts,model_pred,th):
TP = 0
FP = 0
FN = 0
GTS = 0
PRED = 0

for image_idx in range(len(gts)):
    gt = gts[image_idx]
    pred = model_pred[image_idx]
    GTS+=len(gt)
    PRED+= len(pred)
    IoUs = []
    IoU_idxs = []
    for d_gt in gt:
        founded = False
        for d_pred in pred:
            IoU = bb_intersection_over_union( d_pred[0:4],d_gt[0:4])
            if IoU != 0.0:
                # IoU bigger than threshold,same class,not double detection
                if IoU >= th and d_gt[4] == d_pred[4] and not founded:
                    TP+=1
                    founded = True
        # GT than was not founded 
        if not founded:
            FN+=1
FP = PRED - TP
return(GTS,PRED,TP,FP,FN)

位置:

  • gts 包含以下格式的地面真理边界框:[x1,y1,w,h,class]
  • model_pred 包含相同格式的模型预测
  • th IoU阈值
  • 方法 bb_intersection_over_union 计算GT的IoU, 预测边界框。

但是此方法返回的结果与Darknet framework中嵌入方法所计算的结果不同:

enter image description here

我在哪里弄错了?

您知道一些可以根据边界框坐标计算TP,FP和FN的库吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)