Необходимые очки знаний для сегментации изображений | Теория потерь в кости + код

искусственный интеллект

Эта статья содержит примеры кода и пояснения, рекомендуется к сбору и кстати. Приветствую друзей и поклонников из всех слоев общества, чтобы добавить мой WeChat, чтобы обсудить проблему: cyx645016617.

Во многих конкурсах, статьях и проектах по сегментации медицинских изображений обнаруживается, что чаще встречается функция потерь коэффициента Дайса (коэффициент Дайса), вот краткое изложение.Используя сегментацию изображения, потерю Dice нельзя обойти, как нельзя обойти IoU при обнаружении цели..

1 Обзор

Потеря кубиков и коэффициент кубиков — это одно и то же, и их соотношение таково:

DiceLoss=1DiceCoefficientDiceLoss = 1-DiceCoefficient

1.2 Определение игры в кости

  • Коэффициент Дайса, названный в честь Ли Рэймонда Дайса, представляет собойУстановить функцию измерения подобия, который обычно используется для вычисления сходства между двумя образцами (значения в диапазоне [0, 1]).

DiceCoefficient=2XYX+YDiceCoefficient = \frac{2|X \bigcap Y|}{|X| + |Y|}

вXY|X| \bigcap |Y|представляет пересечение множеств X и Y, |X| и |Y| представляют количество элементов,Для задач сегментации |X| и |Y| представляют собой основную истину и прогнозную_маску сегментации..

также,Мы можем получить формулу для Dice Loss:

DiceLoss=12XYX+YDiceLoss = 1- \frac{2|X \bigcap Y|}{|X| + |Y|}

2 Ручной кейс

На сайте Dice есть очень хороший случай ручного пуша Dice Loss.Это очень легко понять.Процесс делится на две части:

  1. Рассчитать сначалаXY|X|\bigcap|Y|
  2. пересчитыватьX|X|иY|Y|

Чтобы рассчитать потери, у нас уже должны быть эти два параметра: выходные данные, данные моделью, которые являются предсказанной маской, и основная правда (GT) в наборе данных, которая является реальной маской.

Во многих конкурсах, статьях и проектах по сегментации медицинских изображений обнаруживается, что чаще встречается функция потерь коэффициента Дайса (коэффициент Дайса), вот краткое изложение.Используя сегментацию изображения, потерю Dice нельзя обойти, как нельзя обойти IoU при обнаружении цели..

1 Обзор

Потеря кубиков и коэффициент кубиков — это одно и то же, и их соотношение таково:

DiceLoss=1DiceCoefficientDiceLoss = 1-DiceCoefficient

1.2 Определение игры в кости

  • Коэффициент Дайса, названный в честь Ли Рэймонда Дайса, представляет собойУстановить функцию измерения подобия, который обычно используется для вычисления сходства между двумя образцами (значения в диапазоне [0, 1]).

DiceCoefficient=2XYX+YDiceCoefficient = \frac{2|X \bigcap Y|}{|X| + |Y|}

вXY|X| \bigcap |Y|представляет пересечение множеств X и Y, |X| и |Y| представляют количество элементов,Для задач сегментации |X| и |Y| представляют собой основную истину и прогнозную_маску сегментации..

также,Мы можем получить формулу для Dice Loss:

DiceLoss=12XYX+YDiceLoss = 1- \frac{2|X \bigcap Y|}{|X| + |Y|}

2 Ручной кейс

На сайте Dice есть очень хороший случай ручного пуша Dice Loss.Это очень легко понять.Процесс делится на две части:

  1. Рассчитать сначалаXY|X|\bigcap|Y|
  2. пересчитыватьX|X|иY|Y|

Чтобы рассчитать потери, у нас уже должны быть эти два параметра: выходные данные, данные моделью, которые являются предсказанной маской, и основная правда (GT) в наборе данных, которая является реальной маской.

Конечно, это еще не конец, но надо подводить итоги:

Для задачи бинарной классификации карта сегментации GT имеет только два значения 0 и 1, поэтому она может эффективно очистить все пиксели, которые не активированы в карте сегментации GT в карте сегментации Pred.Для активированных пикселей штраф низкий.Надежность в прогнозе, более высокие значения приводят к лучшим коэффициентам Дайса.

О расчетахX|X|иY|Y|,следующее:

Следует отметить, что в половине случаев это суммирование всех элементов напрямую, конечно, есть метод возведения всех элементов в квадрат и последующего их суммирования. Короче говоря, так много всего, очень просто и удобно в использовании. Однако приведенное выше содержание относится к случаю разделения на две категории, а случай с несколькими категориями в основном такой же, как и для двух категорий..

3 Реализация двухклассового кода

При реализации часто добавляется сглаживание, чтобы знаменатель не равнялся 0. Таким образом, формула становится:

DiceLoss=12XY+smoothX+Y+smoothDiceLoss = 1- \frac{2|X \bigcap Y|+smooth}{|X| + |Y|+smooth}

Обычно гладкость 1

3.1 Реализация PyTorch

Во-первых, это реализация коэффициента кости Форма pred и target — [batch_size,channels,...], которые можно использовать для 2D и 3D.

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)

Конечно, потеря кубиков равна 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 1-(2. * intersection + smooth) / (m1.sum() + m2.sum() + smooth)

3.2 реализация кераса

smooth = 1. # 用于防止分母为0.
def dice_coef(y_true, y_pred):
    y_true_f = K.flatten(y_true) # 将 y_true 拉伸为一维.
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    return (2. * intersection + smooth) / (K.sum(y_true_f * y_true_f) + K.sum(y_pred_f * y_pred_f) + smooth)

def dice_coef_loss(y_true, y_pred):
    return 1. - dice_coef(y_true, y_pred)

3.3 реализация тензорного потока

def dice_coe(output, target, loss_type='jaccard', axis=(1, 2, 3), smooth=1e-5):
    """
    Soft dice (Sørensen or Jaccard) coefficient for comparing the similarity of two batch of data, 
    usually be used for binary image segmentation
    i.e. labels are binary. 
    The coefficient between 0 to 1, 1 means totally match.

    Parameters
    -----------
    output : Tensor
        A distribution with shape: [batch_size, ....], (any dimensions).
    target : Tensor
        The target distribution, format the same with `output`.
    loss_type : str
        ``jaccard`` or ``sorensen``, default is ``jaccard``.
    axis : tuple of int
        All dimensions are reduced, default ``[1,2,3]``.
    smooth : float
        This small value will be added to the numerator and denominator.
            - If both output and target are empty, it makes sure dice is 1.
            - If either output or target are empty (all pixels are background), dice = ```smooth/(small_value + smooth)``, then if smooth is very small, dice close to 0 (even the image values lower than the threshold), so in this case, higher smooth can have a higher dice.

    Examples
    ---------
    >>> outputs = tl.act.pixel_wise_softmax(network.outputs)
    >>> dice_loss = 1 - tl.cost.dice_coe(outputs, y_)

    References
    -----------
    - `Wiki-Dice <https://en.wikipedia.org/wiki/Sørensen–Dice_coefficient>`__

    """
    inse = tf.reduce_sum(output * target, axis=axis)
    if loss_type == 'jaccard':
        l = tf.reduce_sum(output * output, axis=axis)
        r = tf.reduce_sum(target * target, axis=axis)
    elif loss_type == 'sorensen':
        l = tf.reduce_sum(output, axis=axis)
        r = tf.reduce_sum(target, axis=axis)
    else:
        raise Exception("Unknow loss_type")
    dice = (2. * inse + smooth) / (l + r + smooth)
    dice = tf.reduce_mean(dice)
    return dice

4 Мультиклассификация

Предположим, что это задача 10-классификации, тогда у нас должен быть результат предсказания модели, подобный этому: [batch_size,10,width,height], а затем нашу основную истину нужно изменить на форму одного горячего, которая также становится [ batch_size,10,ширина,высота]. Остальная часть кода в основном такая же, как и код с двумя категориями.Во-первых, основная истина умножается на соответствующие элементы результата предсказания, а затем результаты умножения суммируются. То есть в итоге необходимо получить среднее значение по каждой категории и каждой выборке.

5 Глубокое погружение в Dice, IoU

Приведенное выше изображение представляет собой наш общий метод IoU, предполагающий наличие двух наборов молекул, один из которых представляет собой наземную истину, а другой набор представляет собой прогнозируемое значение, данное нейронной сетью.Не ограничивайтесь формой квадратов на рисунке, для задач сегментации это, как правило, неправильный шаблон на уровне пикселей..

Если предсказание верно, то есть синее пересечение в молекуле называется True Positive, а количество пикселей, принадлежащих True Positive, является значением молекулы. Значение знаменателя представляет собой сумму количества всех пикселей в исходной точке и количества всех пикселей в результате прогнозирования за вычетом количества пикселей в перекрывающейся части.

Друзья, которые непосредственно изучили отзыв, точность, матрицу путаницы и f1score, должны быть знакомы с FN, TP, TN и FP:

  • Желтая область: прогноз отрицательный, но область ложноотрицательного результата в GT положительна;
  • Красная область: прогноз положительный, но ложноположительная область отрицательного значения находится в GT;

Интуитивное понимание того, является ли предсказание IoU хорошим или плохим, таково: Проще говоря, чем больше перекрытий, тем ближе IoU к 1 и тем лучше эффект предсказания..

Теперь давайте лучше перейдем от IoU к Dice, сначала напишем формулу IoU:

IoU=TPTP+FP+FNIoU = \frac{TP}{TP+FP+FN}

Формула Дайса в сочетании с тем, что мы сказали ранее, может быть выведена следующим образом:XY|X|\bigcap|Y|это ТП,X|X|Если это GT, то это FN+TP.Y|Y|Предположим, что это предсказанная маска, то есть TP+FP, поэтому:

Dicecoefficient=2×TPTP+FN+TP+FPDice_coefficient = \frac{2\times TP}{TP+FN + TP + FP}

Итак, мы можем получить связь между Dice и IoU,Следующие кубики здесь означают коэффициент кубиков по умолчанию.:

IoU=Dice2DiceIoU = \frac{Dice}{2-Dice}

Изображение этой функции показано на рисунке ниже.Мы обращаем внимание только на интервал от 0 до 1. Мы можем найти, что:

  • IoU и Dice равны 0 и 1 одновременно, это легко понять, то есть все предсказания верны и все предсказания неверны
  • Предполагая ту же ситуацию прогнозирования, можно обнаружить, что оценка, данная Dice, будет выше, чем IoU, хахаха.Так данные Дайса будут выглядеть лучше.

Справочная статья:

  1. Woohoo. IU любит. Ферма талантов/любви 1159. …
  2. blog.CSDN.net/friend184473894…