Диагностика множества различных заболеваний, от различных видов рака до инфекционных заболеваний, таких как пневмония, во многом зависит от таких методов визуализации, как рентген, компьютерная томография, МРТ, ультразвук и биопсия. Изображения, полученные с помощью этих методов, обычно читаются медицинским работником, который затем ставит диагноз на основе того, что видно на изображении. В эпоху технологий идея разработки инструментов поддержки принятия клинических решений, которые могут анализировать большие объемы данных изображений (а также других форматов данных), предлагать следующие шаги для лечения и отмечать потенциальные проблемы, что, в свою очередь, повысит эффективность здравоохранения и уменьшит человеческая ошибка в диагностике очень привлекательна. Но сработает ли это? В качестве доказательства принципа я использовал рентгеновские снимки грудной клетки для разработки модели машинного обучения для диагностики пневмонии.

Пневмония - это воспалительное заболевание легких, обычно вызываемое вирусами или бактериями. Обычно симптомы включают некоторую комбинацию продуктивного или сухого кашля, боли в груди, лихорадки и затрудненного дыхания. Степень тяжести может быть разной, но в тяжелых случаях или случаях, когда не диагностирована пневмония, она может привести к смерти. Фактически, ежегодно пневмония поражает около 450 миллионов человек во всем мире (7% населения) и приводит примерно к 4 миллионам смертей. Однако в некоторых случаях, если болезнь диагностируется и лечится на ранних стадиях, пневмония в значительной степени поддается лечению. Поэтому крайне важно разработать более совершенные инструменты, которые могут упростить и улучшить диагностику пневмонии.

Набор данных, используемый в этом анализе / модели, доступен на Kaggle (https://www.kaggle.com/paultimothymooney/chest-xray-pneumonia) и содержит в общей сложности 5863 рентгеновских снимка грудной клетки любого здорового (нормального) ) или пациентов с диагнозом пневмония (пневмония). Набор данных состоит из трех дополнительных наборов данных:

· Набор тренировочных данных (содержит 5216 рентгеновских снимков грудной клетки)

· Набор тестовых данных (содержит 629 рентгеновских снимков грудной клетки)

· Набор проверочных данных (содержит 16 рентгеновских снимков грудной клетки)

Вот подсчет количества рентгеновских снимков грудной клетки, приписываемых каждому диагнозу, включенному в набор данных тренировки:

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

А вот как выглядит рентген грудной клетки больных пневмонией:

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

Алгоритмы нейронных сетей состоят из слоев «нейронов», связанных таким образом, что вход одного слоя является выходом предыдущего слоя. Этот тип архитектуры позволяет нейронным сетям гибко отображать лежащие в основе отношения между вводом и выводом задач. Чтобы разработать модель, способную делать рентгеновские снимки грудной клетки и прогнозировать, есть ли у пациента пневмония или здоров, я использовал алгоритм сверточных нейронных сетей (CNN). Это основано на традиционных нейронных сетях, но использует определенный тип архитектуры, который использует особые свойства изображения. CNN сначала уменьшает размер изображений, используя сверточные слои и объединяющие слои, чтобы затем передать уменьшенные данные на полностью связанные слои. Таким образом, чтобы построить CNN, нам необходимо скомпилировать модель, предоставив инструкции для каждого гиперпараметра на каждом уровне.

Чтобы подготовить рентгеновские изображения к моделированию, я использовал ImageDataGenerator для загрузки данных и подготовки данных для моделирования. Это очень полезно при работе с большими наборами данных, так как позволяет последовательно загружать изображения партиями из файла, извлекая ровно столько данных, сколько необходимо. Конструктор ImageDataGenerator содержит множество аргументов, чтобы указать, как манипулировать данными изображения после его загрузки, включая масштабирование пикселей и увеличение данных. Таким образом, это также позволяет не настраивать конкретные детали каждого изображения по мере его загрузки, а также расширять набор обучающих данных новыми, правдоподобными примерами. Используя этот класс, я масштабировал массив пикселей в исходных изображениях всех моих наборов данных до значений пикселей от 0 до 1, что является предпочтительным диапазоном для моделирования нейронных сетей. Я также использовал методы увеличения данных, включая вращение, сдвиги по ширине и высоте и масштабирование, чтобы создать вариации изображений обучающего набора, которые, вероятно, будут видны модели.

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

Теперь давайте посмотрим, действительно ли моя модель CNN может предсказать пневмонию по рентгену грудной клетки!

Эта модель довольно хороша, имеет точность 87%, что означает, что в 87% случаев она может точно определить, является ли рентгеновский снимок нормальным здоровым легким или легким человека с пневмонией. Тем не менее, он по-прежнему имеет 19% ложноположительных результатов диагностики нормального легкого как пневмонии. Чтобы понять, какие особенности рентгеновских изображений способствовали неправильной диагностике нормальных рентгеновских лучей как пневмонии, я использовал пакет Lime, чтобы изобразить особенности, которые модель считала наиболее важными для ее прогнозов.

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

Загляните на мой GitHub, чтобы узнать, как я разработал эту модель!