常用分割评价指标Dice、Hausdorff_95、IOU、PPV等 + Python实现

v2-b673c4420f19e080eef70431cb9f38ac_b.jpg

 

 

 

 

v2-90ff0e56b01f771d251ef0bb4a3f26a4_b.jpg

TP(紫色部分)

TN:True Negative,被判定为负样本,事实上也是负样本,即红色与蓝色以外区域

 

v2-3ab5cc3d743399d3b302b0890b680bd0_b.jpg

TN(紫色部分)

FP:False Positive,被判定为正样本,但事实上是负样本,即红色中除了蓝色部分

 

v2-2f59348c83010896c1557128fe5519e9_b.jpg

FP(紫色部分)

FN:False Negative,被判定为负样本,但事实上是正样本,即蓝色中除了红色部分

 

v2-b125fb40406f70fdc6c1884914118b21_b.jpg

FN(紫色部分)

Dice

v2-5b6c0386a3fd6eb4e22a6360235a58d8_b.jpg

Pytorch 代码示例

        def dice_coef(output, target):#output为预测结果 target为真实结果
    smooth = 1e-5 #防止0除

    if torch.is_tensor(output):
        output = torch.sigmoid(output).data.cpu().numpy()
    if torch.is_tensor(target):
        target = target.data.cpu().numpy()

    intersection = (output * target).sum()

    return (2. * intersection + smooth) / \
        (output.sum() + target.sum() + smooth)
      

IOU

 

Pytorch 代码示例

        def iou_score(output, target):
    smooth = 1e-5

    if torch.is_tensor(output):
        output = torch.sigmoid(output).data.cpu().numpy()
    if torch.is_tensor(target):
        target = target.data.cpu().numpy()
    output_ = output > 0.5
    target_ = target > 0.5
    intersection = (output_ & target_).sum()
    union = (output_ | target_).sum()

    return (intersection + smooth) / (union + smooth)
      

Sensitivity

 

pytorch 代码示例

        def sensitivity(output, target):
    smooth = 1e-5

    if torch.is_tensor(output):
        output = torch.sigmoid(output).data.cpu().numpy()
    if torch.is_tensor(target):
        target = target.data.cpu().numpy()

    intersection = (output * target).sum()

    return (intersection + smooth) / \
        (target.sum() + smooth)
      

PPV

 

Pytorch 代码示例

        def ppv(output, target):
    smooth = 1e-5

    if torch.is_tensor(output):
        output = torch.sigmoid(output).data.cpu().numpy()
    if torch.is_tensor(target):
        target = target.data.cpu().numpy()

    intersection = (output * target).sum()

    return (intersection + smooth) / \
        (output.sum() + smooth)
      

Hausdorff_95 (95% HD)

Dice对mask的内部填充比较敏感,而hausdorff distance 对分割出的边界比较敏感。

 

v2-ae141681a17261b5eb73d4524277e8ab_b.png

 

v2-0f431a4c9e8cf45575d953e2b72fec49_b.jpg

 

下面8张图能够很清晰讲解它的原理:

 

v2-4a3b3c833cc314067c135b07811dadef_b.jpg

 

v2-a81618c7c49733d4e2c8862d1b51cf95_b.jpg

 

v2-59dbeaad773049f6043b6491559de041_b.jpg

 

v2-3d08bd2963b4de9f29ef6fd7e37e84b8_b.jpg

 

v2-b73d3c917275d2b669a272af8633b23d_b.jpg

 

v2-cd42fecdf43e7a5564ba95b0eb11b556_b.jpg

 

v2-a91f0f44e5401d4a7c6de24bb9b74a4a_b.jpg

 

v2-347f13310c0230598749c53ef5eab148_b.jpg

95% HD is similar to maximum HD. However, it is based on the calculation of the 95th percentile of the distances between boundary points in X and Y. The purpose for using this metric is to eliminate the impact of a very small subset of the outliers.

Hausdorff_95就是是最后的值乘以95%,目的是为了消除离群值的一个非常小的子集的影响。

环境安装

        pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numba
pip install hausdorff
      

numpy 代码示例

        import numpy as np
from hausdorff import hausdorff_distance

# two random 2D arrays (second dimension must match)
np.random.seed(0)
X = np.random.random((1000,100))
Y = np.random.random((5000,100))

# Test computation of Hausdorff distance with different base distances
print("Hausdorff distance test: {0}".format( hausdorff_distance(X, Y, distance="manhattan") ))
print("Hausdorff distance test: {0}".format( hausdorff_distance(X, Y, distance="euclidean") ))
print("Hausdorff distance test: {0}".format( hausdorff_distance(X, Y, distance="chebyshev") ))
print("Hausdorff distance test: {0}".format( hausdorff_distance(X, Y, distance="cosine") ))

# For haversine, use 2D lat, lng coordinates
def rand_lat_lng(N):
    lats = np.random.uniform(-90, 90, N)
    lngs = np.random.uniform(-180, 180, N)
    return np.stack([lats, lngs], axis=-1)
        
X = rand_lat_lng(100)
Y = rand_lat_lng(250)
print("Hausdorff haversine test: {0}".format( hausdorff_distance(X, Y, distance="haversine") ))
      

 

v2-b97fafc668d7d17b219c051e84491989_b.jpg

 

  • 78
    点赞
  • 179
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
图像分割常用评价指标包括DSC(Dice相似系数)、Hausdorff_95IOU(Jaccard指数)和PPV(阳性预测值)。 DSC是一种集合相似度度量指标,用于计算两个样本的相似度,其值的范围在0到1之间,最好的分割结果对应DSC值为1,最差的分割结果对应DSC值为0。\[3\] Hausdorff_95是指Hausdorff距离的95th百分位数,Hausdorff距离是一种衡量两个集合之间的相似度的指标,其计算方法是找到一个集合中的点到另一个集合中的最近点的最大距离。Hausdorff_95表示在所有距离中,有95%的距离小于等于该值。\[1\] IOU是指交并比(Jaccard指数),用于衡量两个集合的重叠程度。它是通过计算两个集合的交集与并集之间的比值来得到的,其值的范围在0到1之间,值越接近1表示重叠程度越高。\[2\] PPV是指阳性预测值(Positive Predictive Value),也称为准确率。它是指在所有被预测为阳性的样本中,实际为阳性的比例。\[2\] 这些评价指标在图像分割任务中被广泛应用,可以帮助评估分割算法的性能和准确度。 #### 引用[.reference_title] - *1* *2* [科研作图-常用的图像分割指标 (Dice, Iou, Hausdorff) 及其计算](https://blog.csdn.net/kksimida/article/details/129643885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[pytorch] Unet医学分割 代码详解](https://blog.csdn.net/qq_38736504/article/details/124003427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖零猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值