对于文章论文阅读(12)-优化医学图像分割的Dice 得分和Jaccard 指数: 理论与实践_peacefairy的博客-CSDN博客_jaccard和dice
与其在开篇提出的问题与结尾结论:
引出问题:一个损失函数对图像的分割质量有什么影响?
经过试验证明,指标损失函数的优化效果要优于逐像素的交叉熵损失函数,并且指标损失函数类Dice和Jaccard没有统计上的差别。
进一步地讨论与证明Dice系数与Jaccard系数关系,文章内容简单易懂,主要是证明两个问题:
1、Dice与Jaccard可相互转化,对于同一篇论文,使用Dice与Jaccard验证模型好坏是重复的,且可以通过Dice与Jaccard的关系验证论文数据是否造假。
2、同一图像,Dice >= Jaccard。
3、最后简单实现Dice与Jaccard的计算方法。
图像分割常用指标:Dice与Jaccard。
计算公式如下:
其中 x,y分别为标签(GroundTruth)和预测(Predict)结果。
不难得出:
此外,根据糖水不等式,不难看出,同一分割结果下的 Dice >= Jaccard,当且仅当分割结果为全对(1)和全错(0)的时候,等号成立。
对于分割结果,Dice系数和Jaccard系数越高,证明分割效果越好。
所以,对于Dice与Jaccard,反应分割效果是近似的。
下面是Dice系数与Jaccard系数的代码实现。主要思路是,使用numpy自带的库,分别计算label与predict的和,再使用np.bitwise_and计算label与predict的交集,最后计算Dice系数或Jaccard系数。(代码有限制,计算的系数只能为2分类问题,也就是单任务分割)
Dice代码段:
predict_score = np.sum(predict_num)
label_score = np.sum (label_num)
and_score = np.sum(np.bitwise_and(predict_num,label_num))
if predict_score+label_score == 0:
return 1
dice_score = 2*and_score/(predict_score+label_score)
return dice_score
Jaccard代码段:
predict_score = np.sum(predict_num)
label_score = np.sum (label_num)
and_score = np.sum(np.bitwise_and(predict_num,label_num))
if predict_score+label_score == 0:
return 1
jaccard_score = and_score/((predict_score+label_score)-and_score)
return jaccard_score