Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算用于多类图像分割的多类骰子系数?_Python_Image Processing_Machine Learning_Deep Learning_Image Segmentation - Fatal编程技术网

Python 如何计算用于多类图像分割的多类骰子系数?

Python 如何计算用于多类图像分割的多类骰子系数?,python,image-processing,machine-learning,deep-learning,image-segmentation,Python,Image Processing,Machine Learning,Deep Learning,Image Segmentation,我正在尝试训练一个用于多类分割的网络,我想使用骰子系数(参见)作为损失函数,而不是交叉熵 你可以看看这个公式(其中S是分段,G是基本真理。) 一个简单的解决方案是取每个类的骰子系数的平均值,并将其用于损失函数。这种方法不会区分面积较大的类和像素数较少的类(体素) 有人有什么建议吗 如果您有多个类,并且这些类是分类的,没有顺序关系,例如,我们并不意味着dog比cat小,因为我们分别设置了标签1和2,您应该已经在使用一个热编码标签了。因此,您可以使用下面的函数计算骰子系数 import numpy

我正在尝试训练一个用于多类分割的网络,我想使用骰子系数(参见)作为损失函数,而不是交叉熵

你可以看看这个公式(其中S是分段,G是基本真理。)

一个简单的解决方案是取每个类的骰子系数的平均值,并将其用于损失函数。这种方法不会区分面积较大的类和像素数较少的类(体素)


有人有什么建议吗

如果您有多个类,并且这些类是分类的,没有顺序关系,例如,我们并不意味着
dog
cat
小,因为我们分别设置了标签
1
2
,您应该已经在使用一个热编码标签了。因此,您可以使用下面的函数计算骰子系数

import numpy as np

def dice_coef(y_true, y_pred, epsilon=1e-6):
"""Altered Sorensen–Dice coefficient with epsilon for smoothing."""
    y_true_flatten = np.asarray(y_true).astype(np.bool)
    y_pred_flatten = np.asarray(y_pred).astype(np.bool)

    if not np.sum(y_true_flatten) + np.sum(y_pred_flatten):
        return 1.0

    return (2. * np.sum(y_true_flatten * y_pred_flatten)) /\
           (np.sum(y_true_flatten) + np.sum(y_pred_flatten) + epsilon)
这里额外的一位是,如果预测标签和真实标签都为空,我们得到
1