meandice函数实现是否正确?值越高分割质量越好?优化时是否需最小化?
问题解答
一、meandice函数实现正确性与数值含义
首先可以明确:该函数命名存在错误,它并不是标准的Mean Dice系数计算函数,实际是面向语义分割任务设计的带边界权重的复合损失函数,相关结论如下:
- 从内部实现逻辑看,它包含两个损失分支:
wbce是加入边界权重的二元交叉熵损失,数值越高代表预测结果和真值mask的偏差越大,分割效果越差wiou是加入边界权重的1-交并比计算结果,数值越高代表预测和真值的重合度越低,分割效果越差
- 函数最终返回两个损失的平均值,因此数值越高代表图像分割质量越差,和常规Mean Dice系数(数值越高分割效果越好)的变化趋势完全相反,此前认为"meandice数值上升意味着模型质量提升"的说法是把该损失函数和标准Dice系数混淆导致的错误结论。
对应函数实现代码如下:
def meandice(pred, mask): weit = 1 + 5 * torch.abs(F.avg_pool2d(mask, kernel_size=31, stride=1, padding=15) - mask) wbce = F.binary_cross_entropy_with_logits(pred, mask, reduce='none') wbce = (weit * wbce).sum(dim=(2, 3)) / weit.sum(dim=(2, 3)) pred = torch.sigmoid(pred) inter = ((pred * mask) * weit).sum(dim=(2, 3)) union = ((pred + mask) * weit).sum(dim=(2, 3)) wiou = 1 - (inter + 1) / (union - inter + 1) return (wbce + wiou).mean()
二、模型优化时的处理方式
该函数是典型的分割任务损失函数,数值越低代表模型预测效果越好,因此在模型训练优化过程中需要最小化该数值。
内容的提问来源于stack exchange,提问作者sixtytrees
相关产品推荐
相关产品推荐

