图像分割 dice overlap jaccard Intersection over union区别

1 介绍

在这里插入图片描述

true positive / (true positive + false positive + false negative)

值的范围也是0到1,所以与jaccard系数的区别是什么?

事实上,iou就是jaccard?
下面提供了计算的方式
https://stackoverflow.com/questions/48260415/pytorch-how-to-compute-iou-jaccard-index-for-semantic-segmentation

kaggle评判规则解读
https://www.kaggle.com/pestipeti/explanation-of-scoring-metric

  • 总体意思
    不同iou阈值下的精度,例如iou=0.5时,满足这个iou>=0.5的,就代表被找到了,然后可以算出一个精度,这样,每一个iou的大小都大于0.9了,就代表iout=0.9是精度为1了,还是比较难达到的,所以可以看出这个mean iou还是可以衡量平均水平的,

参考:

https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/
https://en.wikipedia.org/wiki/Overlap_coefficient
https://en.wikipedia.org/wiki/Sørensen–Dice_coefficient
https://en.wikipedia.org/wiki/Jaccard_index

import pandas as pd import numpy as np from itertools import combinations def jaccard_similarity(set1, set2): """计算Jaccard相似度系数""" intersection = len(set1 & set2) union = len(set1 | set2) return intersection / union if union != 0 else 0 def dice_similarity(set1, set2): """计算Dice相似度系数""" intersection = len(set1 & set2) return (2 * intersection) / (len(set1) + len(set2)) if (len(set1) + len(set2)) != 0 else 0 def overlap_similarity(set1, set2): """计算重叠相似度系数""" intersection = len(set1 & set2) min_size = min(len(set1), len(set2)) return intersection / min_size if min_size != 0 else 0 # 读取Excel文件 file_path = "sets_data.xlsx" # 替换为你的文件路径 df = pd.read_excel(file_path) # 检查数据格式并转换为集合 if not df.applymap(lambda x: isinstance(x, (int, float, bool))).all().all(): # 非二进制格式:每个单元格包含元素列表 sets = {col: set(df[col].dropna().astype(str).sum().split(';')) for col in df.columns} else: # 二进制格式:每行代表一个元素 sets = {} for col in df.columns: if df[col].dtype in [int, float, bool]: sets[col] = set(df.index[df[col].astype(bool)]) # 计算所有集合对的相似度 set_names = list(sets.keys()) similarity_matrix = pd.DataFrame( np.zeros((len(set_names), len(set_names))), index=set_names, columns=set_names ) for (name1, set1), (name2, set2) in combinations(sets.items(), 2): jaccard = jaccard_similarity(set1, set2) dice = dice_similarity(set1, set2) overlap = overlap_similarity(set1, set2) # 存储结果(矩阵对称) similarity_matrix.loc[name1, name2] = jaccard similarity_matrix.loc[name2, name1] = jaccard # 添加对角线(相同集合相似度为1) np.fill_diagonal(similarity_matrix.values, 1) # 保存结果 output_path = "similarity_matrix.xlsx" similarity_matrix.to_excel(output_path) print(f"相似度矩阵已保存至: {output_path}") # 打印示例结果 print("\n相似度矩阵示例:") print(similarity_matrix.head()) 上述代码获得的相似度系数要么为1要么为0,这是不正确的,请分析改正
最新发布
07-01
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值