Щелкните для навигации: Часть 1 - › Часть 2 -› Часть 3

Нарушения сегментации на маммограммах (часть 1 из 3)

Пошаговое руководство по реализации конвейера семантической сегментации глубокого обучения на маммограммах в TensorFlow 2

Если вы читаете эту статью, скорее всего, у нас схожие интересы и мы работаем в схожих отраслях. Итак, давайте поговорим о подключении через LinkedIn, где я поделюсь своими мыслями и ресурсами об искусственном интеллекте и машинном обучении!

Структура статьи

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

Часть 1:

  • Постановка задачи.
  • Что такое семантическая сегментация.
  • Руководство по загрузке набора данных.
  • Что вы найдете в наборе данных.
  • Раскрытие структуры вложенных папок набора данных.
  • Исследование данных.

"Часть 2":

  • Обзор конвейера предварительной обработки изображений.
  • Общие проблемы с необработанными маммограммами.
  • Погрузитесь в конвейер предварительной обработки необработанных маммограмм.
  • Подробнее о конвейере предварительной обработки соответствующей маски.

Часть 3:

  • Представляем модель VGG-16 U-Net.
  • Реализация модели в TensorFlow 2.
  • Примечания по обучению модели.
  • Результаты и пост-анализ.
  • Подведение итогов.

Репозиторий GitHub

Код этого проекта можно найти на моем Github в этом репозитории.

1. Постановка проблемы

Цель проекта - сегментировать аномалии массы на изображениях отсканированных маммограмм.

Полное сканирование маммограммы будет служить в качестве входных данных 2D в модели сегментации изображения с соответствующими двоичными масками в качестве основных меток истинности. Модель выведет прогнозируемую маску для каждой маммограммы.

1.1. Выбранный набор данных - CBIS-DDSM

Я решил использовать набор данных CBIS-DDSM, потому что он подходит для проектов компьютерного зрения средней сложности. С 2620 сканированными изображениями пленочной маммографии, этого достаточно, чтобы провести достойное обучение модели. Кроме того, поскольку набор данных CBIS-DDSM содержит сканированные маммограммы реального мира, они достаточно беспорядочные, так что для достижения достойных результатов при выполнении поставленной задачи требуется тщательная и преднамеренная предварительная обработка изображений. Предварительная обработка изображений рассматривается в части 2 здесь.

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

Это основные причины, по которым я выбрал набор данных CBIS-DDSM для решения задачи семантической сегментации.

2. Что такое семантическая сегментация?

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

«Где на изображении находится интересующий объект?»

Определение того, где находятся интересующие объекты на изображении, является естественным шагом от классификации изображений, когда речь идет о понимании сцены. Классификация изображений сообщает нам «что находится на изображении» (т. Е. Делает прогноз для всего входного изображения). Затем локализация, обнаружение и сегментация сообщает нам «где [интересующий объект] находится на изображении».

Существует две основных формы информации о позе, которые говорят нам, где расположены объекты на изображении - ограничивающие рамки и маски. Модели локализации объектов и обнаружения объектов выводят прогнозируемые ограничивающие рамки, а модели сегментации изображений Выводит предсказанные маски. Затем сегментацию изображений можно разделить на модели семантической сегментации и модели сегментации экземпляра. Таким образом, четыре основных типа методов определения местоположения объектов на изображениях:

  • Локализация объекта: включает обнаружение одного экземпляра класса объекта (также известного как метка), обычно путем прогнозирования сильно обрезанного ограничивающего прямоугольника с центром на экземпляре. Обычно он сопровождается классификацией. Обычно вы можете встретить терминологию «классификация + локализация».
  • Обнаружение объекта: включает обнаружение нескольких экземпляров одного или нескольких классов объектов на изображении. Подобно локализации объекта, он прогнозирует ограничивающие рамки вокруг каждого обнаруженного экземпляра каждого класса объектов.
  • Семантическая сегментация: предсказывает для каждого пикселя изображения класс объекта (среди двух или более классов объектов), к которому он принадлежит. Все классы объектов должны быть известны модели. Результатом является предсказанная маска.
  • Экземплярная сегментация - это более сложная форма семантической сегментации. Разница в том, что он может различать два экземпляра одного и того же класса объектов. Например, он может отделить одного пешехода от другого на изображении тротуара. Вывод также представляет собой прогнозируемую маску.

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

3. Загрузка данных

Набор данных можно найти здесь в Архиве визуализации рака.

Загрузить данные довольно просто, если вы выполните следующие общие шаги. Обратите внимание, что я работаю на Mac, при работе с другими системами может быть небольшая разница.

Шаг 1 - Установите NBIA Data Retriever из Mac App Store. Перейдите по этой ссылке для получения подробных инструкций.

Шаг 2 - Загрузите .tcia файл манифеста на локальный компьютер.

Шаг 3 - Откройте только что загруженный .tcia файл манифеста с помощью NBIA Data Retriever.

Шаг 4 - В NBIA Data Retriever нажмите «Обзор», чтобы выбрать каталог, в котором вы хотите сохранить набор данных.

Шаг 5 - Затем нажмите «Пуск», чтобы начать загрузку набора данных.

Внимание, поскольку этот набор данных составляет около 160 ГБ, загрузка может занять некоторое время.

4. Что вы найдете в наборе данных

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

Беспорядочная и вложенная структура папок, которую вы увидите в загруженном наборе данных, будет объяснена и решена в Части 2. На данный момент мы сосредоточимся на понимании типов данных, содержащихся в наборе данных.

Набор данных содержит два основных типа файлов - файлы DICOM (.dcm) и файлы .csv.

4.1. Файлы .dcm

Изображения в наборе данных CBIS-DDSM по умолчанию распаковываются в формат DICOM. Обратитесь к this, this и this для краткого обзора формата DICOM и того, как работать с DICOM в Python.

Пациенту можно сделать два сканирования маммограммы одной и той же груди, каждое в разном виде (а именно, MLO и CC). Каждая из этих маммограмм содержит следующие 3 вида изображений:

  1. Полная маммограмма: настоящая маммограмма.
  2. Обрезанное изображение: увеличенное изображение массового отклонения от нормы.
  3. Маска области интереса (ROI): основная двоичная маска, которая определяет местонахождение массового отклонения от нормы.

Каждое из этих изображений распаковывается в свой собственный .dcm файл. Для каждого из этих трех типов изображений существует отдельный .dcm файл (т. Е. Грудь с одним массовым отклонением будет иметь 3 .dcm файла, по одному для каждого из трех типов изображений). Каждый.dcm файл содержит изображение (в виде массивов) и другую информацию о сканировании, такую ​​как Patient's ID, Patient Orientation, Series Description, Modality и Laterality.

Вы найдете груди с более чем 1 аномалией массы. В этих случаях будет обрезанное изображение и маска области интереса для каждой массовой аномалии.

4.2. Файлы .csv

Файлы .csv служат каталогом для сканированных маммограмм. Всего 4 .csv файлов:

  1. Calc-Test-Description.csv
  2. Calc-Train-Description.csv
  3. Mass-Test-Description.csv
  4. Mass-Train-Description.csv

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

5. Раскрытие структуры вложенных папок в наборе данных

В других проектах, использующих набор данных CBIS-DDSM, часто упускается из виду объяснение, заключающееся в реорганизации структуры папок в структуру, с которой легко работать.

Из приведенного ниже фрагмента видно, что исходная структура папок загруженного набора данных вложена, имеет неописательные имена подпапок и неуникальные .dcm имена файлов. . Это делает чрезвычайно сложной загрузку изображений в конвейер предварительной обработки изображений (и, в конечном итоге, в конвейер обучения модели). Следовательно, мы напишем код для создания новой структуры папок для решения этих проблем.

5.1. Объяснение исходной структуры папок

Folder structure BEFORE restructuring
=====================================
CBIS-DDSM
├── Calc-Test_P_00038_LEFT_CC
│   └── 1.3.6.1.4.1.9590...
│       └── 1.3.6.1.4.1.9590..
│           └── 1-1.dcm <--- full mammogram scan

├── Calc-Test_P_00038_LEFT_CC_1
│   └── 1.3.6.1.4.1.9590...
│       └── 1.3.6.1.4.1.9590...├── 1-1.dcm <--- binary mask? cropped image?
│           └── 1-2.dcm <--- cropped image? binary mask?
...─────────────────
bold : folder   │
│ non-bold : file │
└─────────────────

Сканирование левой CC маммограммы пациента P_00038 сохраняется как 1-1.dcm файл в родительской папке Calc-Test_P_00038_LEFT_CC. Разбивая имя родительской папки, мы получаем:

  • Calc (или Mass): тип аномалии, присутствующей на маммограмме.
  • Test (или Train): маммограмма принадлежит набору тестов (CBIS-DDSM уже разделил маммограммы на набор и наборы тестов).
  • P_00038: идентификатор пациента.
  • LEFT (или RIGHT): Левая грудь.
  • CC (или MLO): ориентация, в которой было выполнено сканирование маммограммы.

Сканирование левой CC маммограммы пациента P_00038 имеет соответствующую бинарную маску и обрезанное изображение. Они сохраняются в отдельной папке Calc-Test_P_00038_LEFT_CC_1 (обратите внимание на _1 в конце имени папки). Здесь возникает беспорядок - невозможно определить только по именам файлов, являются ли 1-1.dcm и 1-2.dcm двоичной маской и обрезанным изображением соответственно или наоборот. Если на маммограмме обнаружено более одной аномалии, соответствующая маска для каждой аномалии и обрезанное изображение будут сохранены аналогичным образом, но в отдельных папках, оканчивающихся на _2, _3 и т. Д.

5.2. Создание новой структуры папок

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

Folder structure AFTER restructuring
=====================================
CBIS-DDSM
├── Calc
   ├── Test
     ├── Calc-Test_P_00038_LEFT_CC_FULL.dcm
│     ├── Calc-Test_P_00038_LEFT_CC_CROP_1.dcm
│     ├── Calc-Test_P_00038_LEFT_CC_MASK_1.dcm
│     ...
     └── Calc-Test_P_XXXXX_LEFT_MLO_MASK_1.dcm
   
   └── Train
       ├── Calc-Train_P_XXXXX_LEFT_MLO_FULL.dcm
       ...
       └── Calc-Train_P_XXXXX_RIGHT_CC_MASK_1.dcm
│
└── Mass
    ├── Test
      ├── Mass-Test_P_XXXXX_LEFT_CC_FULL.dcm
      ...
      └── Mass-Test_P_XXXXX_LEFT_MLO_MASK_1.dcm
    
    └── Train
        ├── Mass-Train_P_XXXXX_LEFT_MLO_FULL.dcm
        ...
        └── Mass-Train_P_XXXXX_RIGHT_CC_MASK_1.dcm
┌─────────────────
bold : folder   │
│ non-bold : file │
└─────────────────

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

  • new_name_dcm() читает файл .dcm и переименовывает его с 1-1.dcm или 1-2.dcm в более информативное имя.
  • move_dcm_up() затем перемещает переименованный файл .dcm вверх по структуре вложенных папок в его родительскую папку.
  • delete_empty_folder() затем удаляет все пустые папки (после рекурсивного именования и перемещения файлов .dcm).

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

6. Исследование данных

6.1. Работа со случаями более чем одной аномалии

Из 2620 сканированных маммограмм в наборе данных 1592 содержат аномалии массы (остальные содержат только аномалии кальцификации). Мы будем работать с этими 1592 маммограммами. Из этих 1592 сканирований 71 содержит более 1 аномалий массы. Таким образом, эти 71 маммограмма будут иметь более 1 бинарных масок (по 1 на каждую аномалию).

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

Вверх Далее, Часть 2: Предварительная обработка изображений

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

В части 2 мы разберемся с интуицией различных техник предварительной обработки изображений, которые я использовал, а также с реализацией кода.

Как всегда, код этого проекта можно найти на моем Github в этом репозитории.

До встречи в Части 2 и Части 3!

Спасибо

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

Следуйте за мной на Medium (Клеон Вонг), чтобы быть в курсе моих следующих статей!