深度学习指标precision,recall,f1不正常

文章讲述了作者在道路分割任务中遇到precision,recall,F1指标异常的问题,发现是因为计算时忽略了某些没有道路像素的图像。通过添加平滑项修正代码,解决了这个问题。
摘要由CSDN通过智能技术生成

深度学习指标precision,recall,f1不正常

目前研究方向是做道路分割,做精度评价使用的指标是iou,precision,recall,f1。做测试发现precision,recall,f1总是特别低,百思不得其解。最后只能查看每张测试图像的计算结果。
发现有很多图像iou为1,但是precision,recall,f1都为0,终于恍然大悟,原来有很多图像上是一个道路像素都没有的,求precision,recall,f1指标时我只在分母上加了平滑项。
于是,求指标的代码修改成这样,问题解决:

# 定义一个平滑项,用于防止分母为零
smooth = 1e-6
def precision_score_batch(true: np.ndarray, pred: np.ndarray):
    # 获取batch的大小
    b = pred.shape[0]
    # 将预测值和真实值展平成一维向量
    pred = pred.reshape(b, -1)
    true = true.reshape(b, -1)
    pre = (np.sum(true * pred, axis=1) + smooth) / (np.sum(pred, axis=1) + smooth)
    return pre

def recall_score_batch(true: np.ndarray, pred: np.ndarray):
    # 获取batch的大小
    b = pred.shape[0]
    # 将预测值和真实值展平成一维向量
    pred = pred.reshape(b, -1)
    true = true.reshape(b, -1)
    rec = (np.sum(true * pred, axis=1) + smooth) / (np.sum(true, axis=1) + smooth)
    return rec

def f1_score_batch(true: np.ndarray, pred: np.ndarray):
    # 获取batch的大小
    b = pred.shape[0]
    # 将预测值和真实值展平成一维向量
    pred = pred.reshape(b, -1)
    true = true.reshape(b, -1)
    pre = (np.sum(true * pred, axis=1) + smooth) / (np.sum(pred, axis=1) + smooth)
    rec = (np.sum(true * pred, axis=1) + smooth) / (np.sum(true, axis=1) + smooth)
    f1 = (2 * pre * rec + smooth) / (pre + rec + smooth)
    return f1
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值