Описываю свой подход, который немного отличается от всех существующих подходов.

Содержание:

  • Вступление
  • Отображение как проблема машинного обучения
  • О данных
  • Метрики оценки
  • Исследовательский анализ данных
  • Подготовка данных и моделирование
  • Заключение и дальнейшая работа
  • использованная литература

1. Введение

Предположим, что ваше дыхание стало постоянно затрудненным и поверхностным. После посещения больницы ваш врач подтвердил, что вы страдаете от легочного фиброза (ЛФ). ПФ - это заболевание легких, у которого нет известных причин и методов лечения. Это происходит, когда легочная ткань повреждается и покрывается рубцами. По мере того, как это состояние ухудшается, ваше дыхание становится все более коротким. Повреждение легких, вызванное легочным фиброзом, непоправимо, иными словами, мы можем сказать, что от него нет лечения. Современный подход к лечению PF заключается в использовании лекарств и методов лечения для облегчения симптомов. Иногда пересадка легкого также является подходящим вариантом для некоторых пациентов. Если эксперты в области здравоохранения заранее знают прогноз этого заболевания, они могут сформулировать более эффективные способы лечения этого заболевания. Open Source Imaging Consortium (OSIC) - некоммерческая организация, они организовали конкурс на Kaggle, чтобы решить эту задачу прогнозирования прогрессии с использованием методов машинного обучения.

2. Отображение как проблема машинного обучения

Учитывая данные изображения (компьютерная томография легких), метаданные и исходный уровень FVC в качестве входных данных, задача состоит в том, чтобы разработать надлежащие методы ML, которые позволят прогнозировать прогрессирование фиброза легких в предстоящие недели, то есть прогнозировать значение FVC и достоверности на будущей неделе.

3. О данных

Данные взяты с соответствующей страницы конкурса Kaggle. Нам были предоставлены следующие файлы:

  • train.csv - обучающий набор, содержащий полную историю клинической информации.
  • test.csv - набор тестов, содержащий только базовые измерения.
  • train / - эта папка содержит исходную компьютерную томографию обучающихся пациентов в формате DICOM.
  • test / - эта папка содержит исходную компьютерную томографию тестируемых пациентов в формате DICOM.
  • sample_submission.csv - демонстрирует формат отправки.

Столбцы в train.csv и test.csv:

  • Patient - уникальный идентификатор для каждого пациента (также имя папки DICOM пациента)
  • Weeks- относительное количество недель до / после базовой КТ (может быть отрицательным)
  • FVC - записанная емкость легких в мл
  • Percent- вычисляемое поле, которое приблизительно соответствует FVC пациента как процент от типичного FVC для человека с аналогичными характеристиками.
  • Возраст - возраст пациента
  • Пол - Пол пациента
  • SmokingStatus -, курит ли пациент или нет.

Столбцы в образце submission.csv

  • Patient_Week - уникальный идентификатор, сформированный путем объединения столбцов "Пациент" и "Неделя" (т. Е. ABC_22 - это прогноз для пациента ABC на 22 неделе)
  • FVC - прогнозируемая ФЖЕЛ в мл
  • Confidence - значение достоверности вашего прогноза (также есть единицы в мл)

4. Показатели оценки

Метрика, используемая в этом конкретном соревновании, представляет собой модифицированную версию логарифма правдоподобия Лапласа. Узнайте о распределении Лапласа отсюда.

Здесь σ - стандартное отклонение. Подробности об этих оценочных показателях можно найти здесь.

О ФЖЕЛ: сокращенно Форсированная жизненная емкость легких ФЖЕЛ измеряется с помощью устройства, известного как спирометр.

5. Исследовательский анализ данных

  • Форма файла train.csv: 1549 записей / строк, 7 столбцов. Форма файла test.csv: 5 строк и 7 столбцов. А форма файла submission.csv составляет 730 строк и 3 столбца.
  • Всего было 176 уникальных пациентов, чья запись была указана в данных поезда. Карта каждого пациента выдается максимум 10 раз и минимум 6 раз. Каждая запись пациента описывает их значение FVC за данную неделю с другой информацией об этом пациенте.

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

  • К каждому из изображений Dicom всегда прикреплена метаинформация, к которой можно легко получить доступ с помощью библиотеки pydicom. Это пакет Python для чтения и записи медицинских файлов DICOM. Используя приведенную ниже функцию, я извлек метаданные из каждого файла Dicom:
  • Я также выполнил сегментацию изображений легких. Есть определенные шаги, связанные с сегментацией, и мне помогала эта записная книжка Kaggle. Шаги, необходимые для сегментации:
  1. Нормализация изображения.
  2. Кластеризация для отделения легких от всего остального.
  3. Пороговое изображение.
  4. Морфология - Эрозия с последующим расширением.
  5. Обозначьте разные регионы и выделите регионы разными цветами.
  6. Создайте маску для легких.
  7. Примените маску к исходному изображению и получите окончательное замаскированное изображение.

6. Подготовка данных и моделирование

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

Используемая архитектура CNN:

Прежде чем обсуждать, как данные вводятся в модель, я хотел бы обсудить архитектуру, которую я использовал, и ее отличия от других существующих решений на соответствующей странице конкурса. После беглого просмотра различных моделей глубокого обучения, которые пробовали другие Kagglers, я узнал, что EfficientNet дала им хорошие результаты, а некоторые использовали глубокие модели CNN с остаточными блоками между ними. Архитектура, которую я создал, была вдохновлена ​​этим блокнотом Kaggle. Поскольку у меня не так много вычислительных мощностей, я решил обучить свою модель только в среде Kaggle, которая не является слишком глубокой (в противном случае возникает ошибка ResourceExhausted).

Мною было создано всего три входных ветви (два входных данных изображения канала ветвления и одно табличные данные канала ветки), вместо того, чтобы просто вводить только одно изображение в качестве одного входа и табличные данные в качестве другого входа. Причина выбора двух изображений в качестве двух входных данных заключалась в том, что для каждого пациента у нас есть много файлов Dicom (у некоторых пациентов даже есть сотни файлов Dicom), так почему бы только случайным образом выбрать одно изображение и ввести его в модель. Почему бы не скармливать больше изображений одновременно, а это означает, что модель будет учиться на большем количестве данных. Но из-за нехватки вычислительной мощности я не могу выбрать 10-20 изображений и передать их все в качестве входных данных для моей модели. Поэтому я решил создать только одну дополнительную входную ветвь, через которую я могу передать модели еще одно изображение Dicom (хм ... что-то лучше, чем ничего 🙃).

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

Здесь необходимо упомянуть один очень важный момент: вместо того, чтобы прогнозировать FVC и процентное значение (основная цель этого проекта), мы прогнозируем коэффициент 'a' . Этот наклон также можно рассматривать как наклон линии, и эту линию можно определить как FVC = a * Week + точка пересечения. Остальную часть кода и подробную информацию обо всех выполненных шагах можно найти в этом репозитории Github здесь.

7. Заключение и дальнейшая работа

После того, как я представил свой последний подход на Kaggle, я получил оценку -6,9034, что можно рассматривать как хороший результат, учитывая ограничение вычислительной мощности. Я попытался каким-то образом передать все изображения Dicom в модель, но это не сработало из-за неравного количества изображений для каждого пациента и ограничений ресурсов. Кроме того, я подумал о том, чтобы попробовать модель LSTM, рассматривая значения FVC и процентов как временные ряды, потому что значения FVC были записаны за период времени. Но проблема с этим подходом заключалась в том, что каждый временной ряд имеет очень короткую длину (некоторые имеют 10 временных шагов, а некоторые - всего 6 временных шагов). В конце концов, я решил использовать метод прогнозирования коэффициента, который уже опробовали другие Kagglers. В качестве будущей работы: можно попробовать сеть CNN, имеющую большую глубину, и вместо того, чтобы просто вводить два изображения в качестве входных данных с использованием двух входных ветвей, можно сгенерировать несколько ветвей для загрузки большего количества изображений Dicom.

8. Ссылки