1.dice系数和dice损失
(1)Dice系数:DiceCofficient
用于计算两个样本的相似度(取值范围0~1)
|X|表示标签中像素的个数,|Y|表示预测的图片中像素的个数
(2)Dice损失:DiceLoss
DiceLoss和DiceCofficient之间的关系:DiceLoss=1-DiceCofficient
所以:
2.实际的例子
3. 代码实现:
在实现的时候,往往会加上一个smooth,防止分母为0的情况出现。所以公式变成:
一般smooth=1
def dice_coeff(pred, target):
smooth = 1.
num = pred.size(0)
m1 = pred.view(num, -1) # Flatten
m2 = target.view(num, -1) # Flatten
intersection = (m1 * m2).sum()
return (2. * intersection + smooth) / (m1.sum() + m2.sum() + smooth)
def dice_loss(pred, target):
smooth = 1.
num = pred.size(0)
m1 = pred.view(num, -1) # Flatten
m2 = target.view(num, -1) # Flatten
intersection = (m1 * m2).sum()
return 1-(2. * intersection + smooth) / (m1.sum() + m2.sum() + smooth)
4.iou
一个是预测图片,一个是label,预测成功的部分称之为True Positive
分子是预测正确的像素数量
分母是label中所有像素的数量+预测结果中所有像素的数量-重叠部分的像素数量
重叠的越多,IoU越接近1,预测效果越好:
可以看出dice就是在iou的基础上,分子和分母都增加了一个TP
把dice看作自变量,IOU看作因变量,一般使用dice系数可以得到一个更高的指标分数