Реализация некоторых показателей оценки в Python

Вот ссылка на мой Код блокнота Kaggle.

Теперь, когда у вас есть обученная модель для вашей задачи сегментации? Но как узнать, хорошо ли работает ваша модель сегментации? Другими словами, как мы оцениваем производительность нашей модели?

Показатели оценки — вот ответ!

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

Цель: оценить сходство между прогнозируемой (прогноз) и аннотированной сегментацией (основная правда).

5 показателей оценки:

  • Точность и полнота (чувствительность)
  • Точность/индекс Rand
  • Коэффициент кости
  • Индекс Жаккара (IoU)

Все представленные показатели основаны на вычислении матрицы путаницы для бинарной маски сегментации, которая содержит количество истинно положительных (TP), ложноположительных (FP), истинно отрицательных (TN) и ложных отрицательные (FN) предсказания. Диапазоны значений всех представленных показателей варьируются от нуля (худший) до единицы (лучший).

Что такое матрица путаницы? И почему это важно?

Одна картинка стоит тысячи слов!

Давайте интерпретируем эти термины в нашем контексте! Наша цель в этой задаче состоит в том, чтобы сегментировать маску FTU для каждого гистопатологического изображения. Каждая маска представлена ​​либо 0-фоном, либо 1-FTU. Так,

  • TP (True Positive): представляет количество пикселей FTU, которые были должным образом классифицированы как FTU.
  • FP (ложноположительный результат): представляет количество фоновых пикселей, ошибочно классифицированных как FTU (из-за смещения)
  • False Negative: количество пикселей FTU, ошибочно классифицированных как фон.
  • TN(True Negative): представляет количество фоновых пикселей, которые были правильно классифицированы как фон.

Давайте углубимся в каждую оценочную метрику и построим наше понимание на простых иллюстрациях!

Точность и отзыв:

Для классификации пикселей:

Показатель точности – это количество действительно положительных результатов, деленное на количество всех положительных результатов.

Показатель отзыва, также известный как Чувствительность или коэффициент истинно положительных результатов, представляет собой количество истинно положительных результатов, деленное на количество всех образцов, которые должны были был идентифицирован как положительный

def precision_score_(groundtruth_mask, pred_mask):
    intersect = np.sum(pred_mask*groundtruth_mask)
    total_pixel_pred = np.sum(pred_mask)
    precision = np.mean(intersect/total_pixel_pred)
    return round(precision, 3)

def recall_score_(groundtruth_mask, pred_mask):
    intersect = np.sum(pred_mask*groundtruth_mask)
    total_pixel_truth = np.sum(groundtruth_mask)
    recall = np.mean(intersect/total_pixel_truth)
    return round(recall, 3)

Точность/индекс ранда:

Показатель точности, также известный как индекс Рэнда, представляет собой количество правильных прогнозов, состоящее из правильных положительных и отрицательных прогнозов, деленное на общее количество прогнозов.

def accuracy(groundtruth_mask, pred_mask):
    intersect = np.sum(pred_mask*groundtruth_mask)
    union = np.sum(pred_mask) + np.sum(groundtruth_mask) - intersect
    xor = np.sum(groundtruth_mask==pred_mask)
    acc = np.mean(xor/(union + xor - intersect))
    return round(acc, 3)

Коэффициент игры в кости (F1-Score):

F-мера, также называемая F-оценкой: одна из самых распространенных оценок для измерения производительности в компьютерном зрении и в MIS (сегментация медицинских изображений).

Коэффициент Dice рассчитывается на основе точности и отзыва прогноза. Затем он оценивает совпадение между прогнозируемой сегментацией и истинностью. Это также наказывает за ложные срабатывания, что является распространенным фактором в наборах данных с высоким классом несбалансированности, таких как MIS.

На основе F-меры в MIS используются две популярные метрики:

  • Intersection-over-Union (IoU), также известный как индекс Жаккара или коэффициент сходства Жаккара.
  • Коэффициент подобия Dice (DSC), также известный как F1-score или индекс Sørensen-Dice: наиболее часто используемый показатель в подавляющем большинстве научных публикаций для оценки MIS.

Разница между этими двумя показателями заключается в том, что IoU наказывает за недостаточную и чрезмерную сегментацию больше, чем DSC.

Коэффициент игры в кости = Оценка F1: гармоническое среднее значение точности и полноты. Другими словами, он рассчитывается делением 2*пересечения на общее количество пикселей в обоих изображениях. Обратите внимание, что можно настроить F-оценку, чтобы придать большее значение точности, чем отзыву, или наоборот. Обратитесь к разделу Оценка F-бета для получения дополнительной информации.

def dice_coef(groundtruth_mask, pred_mask):
    intersect = np.sum(pred_mask*groundtruth_mask)
    total_sum = np.sum(pred_mask) + np.sum(groundtruth_mask)
    dice = np.mean(2*intersect/total_sum)
    return round(dice, 3) #round up to 3 decimal places

Индекс Жаккара (IoU):

Индекс Жаккара, также известный как Пересечение по объединению (IoU), представляет собой площадь пересечения по объединению прогнозируемой сегментации и истинности.

def iou(groundtruth_mask, pred_mask):
    intersect = np.sum(pred_mask*groundtruth_mask)
    union = np.sum(pred_mask) + np.sum(groundtruth_mask) - intersect
    iou = np.mean(intersect/union)
    return round(iou, 3)

Визуализация + Заключение:

Давайте соберем все вместе и посмотрим, насколько одна метрика больше подходит для задачи сегментации, чем другая!

Простая наземная правда + предсказанные маски

metrics_table([gt_mask_0], [pred_mask_0])
╔═══════════╦════════╦══════════╦═══════╦═══════╗
║ Precision ║ Recall ║ Accuracy ║ Dice  ║  IoU  ║
╠═══════════╬════════╬══════════╬═══════╬═══════╣
║       1.0 ║  0.615 ║      0.8 ║ 0.762 ║ 0.615 ║
╚═══════════╩════════╩══════════╩═══════╩═══════╝

Наблюдения:

  • Оценка точности = 1! Какой классный прогноз! Но ждать! Разве предсказанная маска не отличалась от истинной на 5 пикселей? Что-то не так в этом показателе? Напомним, что показатель точности — это общее количество истинных положительных результатов, деленное на общее количество всех положительных результатов в прогнозе. По совпадению эти числа равны (=8), Таким образом, показатель точности = 1.
  • Отзыв = IoU
  • Кости › IoU

Основная правда + предсказанные маски из проблемы

╔═══════════╦════════╦══════════╦═══════╦═══════╗
║ Precision ║ Recall ║ Accuracy ║ Dice  ║  IoU  ║
╠═══════════╬════════╬══════════╬═══════╬═══════╣
║     0.256 ║  0.256 ║    0.828 ║ 0.256 ║ 0.147 ║
║     0.721 ║  0.721 ║    0.951 ║ 0.721 ║ 0.563 ║
╚═══════════╩════════╩══════════╩═══════╩═══════╝

Наблюдения:

  • Высокая точность, но низкий балл Dice и IoU. Почему это? Напомним, как рассчитывается показатель точности. Показатель точности представляет собой общее количество правильно предсказанных пикселей (1-FTU, 0-фон), деленное на общее количество предсказаний. Мы можем заметить, что есть только небольшой процент пикселей FTU по сравнению с фоном. Таким образом, если мы используем показатель точности, эти правильно классифицированные фоны будут доминировать во всем члене числителя и приведут к неправомерно высокой оценке.
  • Точность = Отзыв = Игра в кости
  • Коэффициент кости › IoU

Заключение

В этом посте я продемонстрировал 5 показателей оценки в сегментации медицинских изображений (MIS).

  • Точность и полнота (чувствительность)
  • Точность/индекс Rand
  • Коэффициент кости
  • Индекс Жаккара (IoU)

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

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

Использованная литература:

СТАНЬТЕ ПИСАТЕЛЕМ на MLearning.ai