Диагностика заболеваний по ЭКГ с помощью сверточных нейронных сетей

Характеристика аритмии как типичного типа сердечно-сосудистых заболеваний, который относится к любым изменениям нормальных ритмов сердца. Анализ особенностей применения сверточных нейронных сетей к задаче классификации данных электрокардиографии.

Рубрика Медицина
Вид дипломная работа
Язык русский
Дата добавления 18.07.2020
Размер файла 1,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ

«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»

Факультет информатики, математики и компьютерных наук

Программа подготовки магистров по направлению

01.04.02 «Прикладная математика и информатика»

Образовательная программа «Интеллектуальный анализ данных»

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

Тема работы:

Диагностика заболеваний по ЭКГ

с помощью сверточных нейронных сетей

электрокардиография аритмия сеть нейронный

Ляшук Александр Юрьевич

Нижний Новгород, 2020

Оглавление

Введение

1. Постановка задачи

1.1 Классификация исследовательских задач

1.2 Классификация используемых моделей глубокого обучения

2. Обзор литературы

3. Данные

3.1 Систематика наборов данных ЭКГ

3.2 MIT-BIH Arrhythmia Database

3.3 Предобработка данных

3.4 EDA

3.5 Тренировочная и валидационная выборки

4. Применение сверточных нейронных сетей к задаче классификации данных ЭКГ

4.1 Подготовка окружения

4.2 Эксперименты

4.3 2D CNN

4.4 1D CNN

4.5 Реализация нового решения EcgResNet

4.6 Выводы

5. Особенности выпускной квалификационной работы

6. Автоматический анализ электрокардиограммы

Заключение

Список литературы

Приложения

Введение

Согласно данным Всемирной Организации Здравоохранения (ВОЗ), сердечно-сосудистые заболевания являются основной причиной смерти людей - в 2016 году более 17 миллионов человек умерло, что составило около 31% всех смертей в мире. [1]. Аритмия - типичный тип сердечно-сосудистых заболеваний, который относится к любым изменениям нормальных ритмов сердца. Существуют различные типы аритмии, например, преждевременные сокращения предсердий или желудочков, мерцательная аритмия, инфаркт миокарда, сердечная недостаточность. Хотя одиночный удар сердца может и не оказать негативного влияния на организм человека, совокупность ударов может привести к необратимым последствиям или смерти. Поэтому, важно преждевременно определять наличие таких ударов для предотвращения сердечно-сосудистых заболеваний.

Рисунок 1. Основные причины смерти в мире (2016 г.)

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

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

В последние годы наблюдается развитие портативных мониторов ЭКГ в области медицины, таких как монитор Холтера [2], и носимых устройств в различных областях здравоохранения, таких как Apple Watch. В результате объем данных ЭКГ, требующих анализа, значительно вырос, а поскольку очень важно вовремя принять меры для нормализации работы сердца, необходимо автоматизировать процесс регистрации сердечных аномалий.

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

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

Главной особенностью настоящей работы является реализация прототипа работы алгоритма. Реализованная программа принимает ЭКГ данные в сыром виде (RAW) в формате WFDB и выдает информацию по каждому удару сердца в графическом виде в формате HTML таким образом, что любой человек на любом устройстве, на котором установлен браузер может посмотреть результаты своей ЭКГ.

1. Постановка задачи

1.1 Классификация исследовательских задач

· Обнаружение заболевания

· Разметка и локализация

· Анализ сна

· Биометрическая идентификация человека

· Уменьшение шумов

Рисунок 2. Классификация исследовательских задач [3]

1.2 Классификация используемых моделей глубокого обучения

· Сверточные нейронные сети (CNN)

· Рекуррентные нейронные сети (RNN)

· Комбинация CNN и RNN (CRNN)

· Автоэнкодеры (AE, VAE)

· Генеративные модели (GAN)

· Полно-связные сети (FC)

Рисунок 3. Классификация используемых моделей [3]

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

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

Результатом работы является программа, которая автоматически анализирует электрокардиограмму и представляет результаты в графическом виде в формате Web страницы.

Для достижения цели решены следующие задачи:

1. Обзор литературы

2. Обзор наборов данных ЭКГ

3. Подготовка и предобработка входных данных

4. Реализация существующих подходов и методов решения поставленной задачи

5. Разработка собственной архитектуры для решения задачи

6. Сравнение результатов

7. Реализация прототипа алгоритма, способного принимать на вход данные в сыром формате, а на выходе отдавать пользователю графическую информацию по ЭКГ

В качестве средств для решения задачи используется язык программирования Python 3 и все необходимые библиотеки (Приложение 8), в том числе фреймворк для автоматического дифференцирования - PyTorch.

2 Обзор литературы

Традиционно автоматический анализ ЭКГ основывался на двух-стадийных методах. Так, например, как показано на Рис.3., сначала специалист выделял «экспертные» признаки на основе необработанных данных, а затем эти признаки передавались в качестве входных данных в традиционные методы машинного обучения для получения финального результата. Признаки можно разделить на следующие категории [4]: статистические, частотные и временные. На практике экспертные признаки извлекаются автоматически, но, тем не менее, этого недостаточно, поскольку алгоритмы ограничены качеством и форматом входных данных.

Рисунок 3. Традиционные методы автоматической обработки ЭКГ [3]

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

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

Выявление аномалий в работе сердца не единственная задача, которую можно решить методами глубокого обучения [3]. Так, например, многие исследования были сфокусированы на автоматической разметке комплекса QRS, который критически важен для определения различных типов аритмий. Одним из используемых наборов данных является Lobachevsky University database (LUDB) [7].

В последние годы понимание паттернов сна является критическим аспектом в здравоохранении, т.к. здоровый сон - ключевой фактор долголетия. Нарушения сна могут значительно ухудшить качество жизни человека, снизить его работоспособность, стать причиной депрессивных состояний и привести к различным последствиям и осложнениям. В [8] авторы используют модель типа автоэнкодер для обнаружения апноэ во сне c использованием набора данных PhysioNet Challenge 2000.

Благодаря развитию носимой электроники, количеству гаджетов, которые в режиме реального времени измеряют активность, температуру, частоту сердечных сокращений и т.д., биометрическая идентификация человека по этим данным становится возможной. В статье [9] авторы создают биометрическую систему идентификации человека, используя сверточную нейронную сеть, и оценивают ее с использованием восьми наборов данных из PhysioNet (STDB, CEBSDB, AFDB, WECG, NSRDB, MITDB, VFDB и FANTASIA).

Процесс получения ЭКГ сигнала часто сопровождается большим количеством шума, что отрицательно влияет на точность диагностики. В [10], чтобы убрать шум, используется сверточная архитектура encoder-decoder. Сверточные сети также применяются для определения эмоций [11], состояния наркотического опьянения [12] и классификации уровня стресса водителя [13]. VAE [14] и GAN [15] архитектуры используются для генерации синтетических данных ЭКГ.

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

Рекуррентные нейронные сети - тип нейронных сетей, предназначенный для работы с последовательностями. В RNN выходные данные предыдущего шага используются в качестве входных данных для следующего, таким образом, путем итеративного обновления состояний они способны запоминать информацию в последовательном порядке. Благодаря такой возможности, RNN сети кроме временных рядов также применяются, например, в задаче обработки естественного языка, поскольку способны находить взаимосвязь между токенами и, таким образом, понимают контекст [16]. Данные ЭКГ, по своей сути являются числовыми последовательности, поэтому, выбор рекуррентных нейронных сетей является логическим и обоснованным как для нахождения временных зависимостей, так и для обработки входных данных различной длины. В [17] авторы используют небольшие сети долгой краткосрочной памяти, которые решают задачу классификации непрерывно в режиме реального времени на носимых устройствах. В [18] используется механизм внимания в двунаправленной рекуррентной нейронной сети для интерпретации результатов при помощи визуализации весов.

Наряду с рекуррентными нейронными сетями для анализа временных рядов также используются сверточные нейронные сети. CNN представляют собой класс нейронных сетей, которые отлично зарекомендовали себя в решении задач классификации изображений после того, как AlexNet [19] в 2012 году победила в соревновании ImageNet [22], что поспособствовало применению нейронных сетей вместо классических методов компьютерного зрения. Сверточная нейронная сеть состоит из нескольких сверточных слоев, слоев нормализации, нелинейности (ReLU), пулинга и полносвязного слоя в конце. Современное поколение популярного оборудования для глубокого обучения, в основном, выполняется на видеокартах Nvidia, которые, в свою очередь, используют CUDA ядра и оптимизированы для работы с параллельными вычислениями. В отличие от рекуррентных нейронных сетей, в которых вычисления происходят последовательно, CNN требуют меньших вычислительных затрат и намного быстрее обучаются за счет параллельности.

В задачах с данными ЭКГ также используются сверточные нейронные сети, как 1D, так и 2D CNN. Одномерные сверточные нейронные сети работают, применяя ядра по временным измерениям ЭКГ, в то время как двумерные сверточные сети работают с преобразованными двумерными данными ЭКГ, например, с 2D спектрограммами [20] либо с одноканальными изображениями [21]. В таком случае, предварительно обученные на наборе данных ImageNet сверточные нейронные сети, например ResNet [23], могут быть переучены на набор данных ЭКГ. Предварительно необученные нейронные сети также применяются в задачах классификации типа ударов сердца. Например, в [21] авторы предложили использовать 2D CNN, которая принимает на вход преобразованные в оттенках серого изображения каждого сердечного удара, а на выходе классифицирует удар сердца на 8 классов. Авторы сравнивают свою архитектуру с популярными архитектурами, как AlexNet [19] и VGG [24], которые уступают ей по качеству.

Однако основным недостатком двумерных сверточных нейронных сетей является предобработка одномерных входных данных в двумерные изображения. Кроме того, полученные 2D изображения больше чем на 75% состоят из белого цвета, т.е. тензоры содержат нули, но участвуют в обработке, и, тем самым, увеличивается количество операций с плавающей точкой (FLOPs). Такие сети могут быть улучшены за счет использования 1D сверток.

В одной из таких работ [25] авторы предложили 34-х слойную архитектуру одномерной сверточной нейронной сети, которая состоит из 16 модифицированных ResNet блоков [23]. Длина фильтра каждого слоя свертки - 16, и каждый слой имеет 64k фильтров, где k начинается с 1 и увеличивается каждый четвертый блок. Кроме того, каждый 2-й блок сжимает входные данные в 2 раза. В другой работе [26] используется значительно меньшая сверточная нейронная сеть, которая, благодаря своему размеру, может быть непосредственно внедрена на носимые устройства для мониторинга сердцебиения в режиме реального времени. Наконец, в [14] авторы используют одномерные свертки в VAE архитектуре для генерации синтетических данных ЭКГ.

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

3 Данные

3.1 Систематика наборов данных ЭКГ

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

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

· Рисунок 4. Сбор данных ЭКГ [3]

· Количество отведений - количество измеряемых разностей потенциалов. Чем больше отведений, тем больше отклонений можно наблюдать. Так, например, инфаркт миокарда может быть обнаружен только грудными отведениями (от V1 до V4). Электрокардиограмма, собранная при помощи медицинского оборудования (Рис.5.), обычно имеет 12 или 15 отведений, в то время как носимая электроника обычно собирает данные по одному отведению (Рис. 6), например, умный браслет собирает данные по отведению MLII, так как носится на руке. Тем не менее, суточные ЭКГ мониторы способны собирать данные и по 12 отведениям, но такие устройства невозможно отнести к потребительскому сектору и к категории носимой электроники как таковой.

Рисунок 5. ЭКГ (15 отведений), собранная при помощи медицинского оборудования

Рисунок 6. Пример ЭКГ, собранной с носимой электроники. PhysioNet Computing in Cardiology

Challenge 2017 [6]

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

· Разметка - разметка является ключевым фактором в использовании того или иного набора данных для решения задачи. Так, например, в электрокардиограмме могут быть размечены начальные, пиковые и конечные маркеры зубцов ЭКГ (P, PQ, QRS, ST, T, U), разметка самого сердечного удара (Normal, PVC, PAB, RBB, LBB, APB, AFW, VEB). Основной сложностью в разметке медицинских данных заключается в том, что их могут размечать только эксперты в своей области.

Таблица 1. Наиболее часто используемые наборы данных [3].

Shenda Hong at el. в обзоре работ, связанных с обработкой ЭКГ сигналов (Таблица 1.), приводят используемые в исследованиях наборы данных, наиболее частым из которых является MIT-BIH Arrhythmia Database.

Как показано в Таблице 1, не существует единых стандартов в процедуре сбора данных. В разных исследованиях использовалось различное количество отведений, длительностей, источников исходных данных и т.д., что затрудняет справедливое сравнение результатов между различными наборами данных. Кроме того, сложно получить качественные данные и аннотации, поэтому многие современные работы до сих пор используют базу данных аритмии MIT-BIH, которая была собрана более 40 лет назад.

Таким образом, основной особенностью MIT-BIH Arrhythmia Database является то, что ЭКГ записи длительные (30 минут) и размечены на большое количество классов, что дает возможность исследователям сосредоточиться на решении задач классификации конкретных типов аритмий. Кроме того, данный набор данных используется чаще по сравнению с остальными. В отличие от второго по популярности набора данных [6], в котором 30 секундные электрокардиограммы размечены на 4 класса, в наборе данных MIT-BIH размечен каждый удар. Именно поэтому, в выпускной квалификационной работе все исследования и эксперименты проводились на этом наборе данных.

3.2 MIT-BIH Arrhythmia Database

Набор данных состоит из 48 получасовых записей ЭКГ от 47 пациентов медицинского учреждения Beth Israel Deaconess. Каждая последовательность данных имеет разрешение 11 бит с частотой дискретизации 360 Гц и с разметкой каждого сердечного удара. Отведения - MLII для каждой последовательности, а также V4 или V5. Исходные данные представлены в WFDB формате и находятся в отрытом доступе.

3.3 Предобработка данных

Рисунок 7. Пример чтения исходных данных

Рисунок 8. Пример чтения разметки

Из рисунков выше видно, что ЭКГ данные представлены следующим образом:

· 30 минутная последовательность в отведениях MLII и V4/V5

· Метка (класс) каждого удара в соответствии с Q - пиком. Т.е. тип аритмии помечается во время пика зубца Q каждого импульса ЭКГ.

Стоит отметить, что данные представлены в сыром виде, и в таком формате не могут быть обработаны нейронной сетью, так как на одной электрокардиограмме представлены разные типы сердечных сокращений - нормальные и аномальные, размеченные соответствующим образом. Поэтому исходные данные необходимо обработать для будущих исследований. В выпускной квалификационной работе рассматриваются различные варианты сверточных нейронных сетей - 1D и 2D. До этого уже упоминалось, что поскольку не существует единых стандартов сбора и интерпретации ЭКГ данных, предобработка данных является важным фактором для справедливой оценки полученных результатов. Таким образом, данные были обработаны в соответствии с тем, как это описано в научных работах.

Так, например, в [21] для генерации 2D изображений, используя набор данных MIT-BIH, авторы используют следующий подход:

Таким образом, входное изображения генерируется путем исключения 20 сигналов ЭКГ из предыдущего и следующего от центральных пиковых сигналов Q-волны.

В выпускной квалификационной работе этот подход был реализован (Приложение 1.) при помощи таких библиотек, как matplotlib и OpenCV, в результате применения которого были получены изображения в оттенках серого размера 128x128. Примеры полученных изображений представлены на Рис. 9.

Рисунок 9. Пример сгенерированных изображений в оттенках серого. Класс - A. Тип - I.

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

Рисунок 10. Пример сгенерированных данных изображений в оттенках серого. Класс - A. Тип - II.

На Рис. 10 представлено применение генерации данных относительно пика.

Помимо генерации двумерных данных, написанный код сохраняет данные в одномерном виде - в формате .npy (Numpy). Универсальность кода также достигается за счет того, что можно осуществить выбор типа генерируемых данных (I или II) и, более того, переиспользовать (изменить размер изображения, длину, количество ЭКГ сигналов до и после, либо количество ЭКГ сигналов от центра ), изменив несколько строчек кода (Приложение 1), что дает возможность исследователям как воспроизвести, так и переделать под себя процесс генерации данных.

1. # Choose from peak to peak or centered

2. # mode = [20, 20]

3. mode = 128

4.  

5. image_size = 128

6. output_dir = '../data'

7.   

8. # fig size / image size

9. figsize = (image_size / dpi, image_size / dpi)

10. image_size = (image_size, image_size)

Кроме того, в ВКР реализована мультипоточная версия, при помощи которой достигается значительное уменьшение временных затрат, требуемых на создание набора данных (Приложение 2).

3.4 EDA

EDA - exploratory data analysis - представляет собой анализ данных, нахождение закономерностей и аномалий, а также использование инструментов визуализации.

Рисунок 11. Таблица извлеченных данных

Итак, после извлечения данных из исходного набора их можно объединить в единый Pandas DataFrame. Как видно на Рис. 11, получены следующие поля: идентификатор пациента, тип отведения, класс, имя файла (.npy/.png) и путь.

Поскольку каждая ЭКГ запись имеет отведение MLII, было решено использовать именно его. Кроме того, отведение MLII - электрод, расположенный на руке, что оправдывает использование данных этого отведения, поскольку носимые устройства, как правило, тоже находятся на руке. Кроме того, для справедливой оценки результатов были выбраны те же классы, которые использовали Tae Joon Jun et al в своей работе [21], а именно:

1. N - Normal

2. V - PVC (Premature ventricular contraction)

3. \ - PAB (Paced beat)

4. R - RBB (Right bundle branch)

5. L - LBB (Left bundle branch)

6. A - APB (Atrial premature beat)

7. ! - AFW (Ventricular flutter wave)

8. E - VEB (Ventricular escape beat)

Рисунок 12. Фильтрация набора данных по отведению и набором классов

Таким образом, отфильтрованный набор данных содержит больше 100 000 экземпляров, а именно:

N - 74780, L - 8074, R - 7258, V - 7123, \ - 3620, A - 2546, ! - 472, E - 106

Стоит отметить, что данные ЭКГ сильно несбалансированные, что неудивительно, поскольку большинство ударов не являются аномальными, и большинство заболеваний встречаются редко и только в специальных условиях (сердечной нагрузке и т.д.).

Рисунок 13. Распределение классов

3.5 Тренировочная и валидационная выборки

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

Рисунок 14. Распределение тренировочного и валидационного набора данных

Полный код генерации файлов разметки в формате .json указан в Приложении 3.

4 Применение сверточных нейронных сетей к задаче классификации данных ЭКГ

4.1 Подготовка окружения

Решая задачу, используя машинное или глубокое обучение, исследователи настраивают модель, т.к. выбранный метод обычно зависит от гиперпараметров и используемых данных. Общий подход заключается в реализации решения и оценки его качества. Затем цель состоит в том, чтобы превзойти это решение, изменяя параметры, такие как тип модели, оптимизаторы, функции потерь, размер батча, входные данные и т.д. Часто, после проведения нескольких экспериментов без логирования определение гиперпараметров наилучшего решения становится невозможным. Многие исследователи, например Andrew Ng, используют электронные таблицы для регистрации своих экспериментов. К сожалению, не все изменения вносятся в список, поскольку многие из них могут быть незначительными, и, более того, необходимо быть самодисциплинированным. Таким образом, в решении задачи было решено придерживаться следующих правил:

· Использование конфигурационных файлов

· Python скрипты вместо Jupyter ноутбуков

· Система контроля версий, в которой каждая ветка является отдельным экспериментом

· Визуализация с использованием TensorBoard

· Google таблицы с условным форматированием для систематизации результатов

· Принцип training / inference / pipeline

· CI для возможности воспроизведения тренировок

Все необходимые зависимости описаны в Приложении 8. Их можно установить, используя pip3, входящий в Python 3.

4.2 Эксперименты

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

· Pranav Rajpurkar et al. [25]

· XUEXIANG XU et al. [26]

· V. V. Kuznetsov V. A. Moskalenko N. Yu. Zolotykh [14]

· Tae Joon Jun et al. [21]

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

· AlexNet

· VGG

· ResNet

· EfficientNet

· MobileNetV2

· ShuffleNet

Во всех экспериментах используется фреймворк автоматического дифференцирования - PyTorch. Также были приняты попытки в реализации нового решения в задаче классификации сердечных ударов. В качестве метрики используется доля правильных ответов - accuracy. В качестве функции потерь используется кросс-энтропия:

Исходный код чтения данных доступен в Приложении 6.

4.3 2D CNN

Первым подходом к решению задача была имплементация архитектуры сети, предложенной в [21].

Рисунок 15. ECG arrhythmia classification using a 2-D convolutional neural network [21]

Реализация сети на PyTorch принимает следующий вид:

1. class HeartNet(nn.Module):

2.     def __init__(self, num_classes=7):

3.         super(HeartNet, self).__init__()

4.         self.features = nn.Sequential(

5.             nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1),

6.             nn.ELU(inplace=True),

7.             nn.BatchNorm2d(64, eps=0.001),

8.             nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1),

9.             nn.ELU(inplace=True),

10.             nn.BatchNorm2d(64, eps=0.001),

11.             nn.MaxPool2d(kernel_size=2, stride=2),

12.             nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),

13.             nn.ELU(inplace=True),

14.             nn.BatchNorm2d(128, eps=0.001),

15.             nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1),

16.             nn.ELU(inplace=True),

17.             nn.BatchNorm2d(128, eps=0.001),

18.             nn.MaxPool2d(kernel_size=2, stride=2),

19.             nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1),

20.             nn.ELU(inplace=True),

21.             nn.BatchNorm2d(256, eps=0.001),

22.             nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),

23.             nn.ELU(inplace=True),

24.             nn.BatchNorm2d(256, eps=0.001),

25.             nn.MaxPool2d(kernel_size=2, stride=2)

26.         )

27.         self.classifier = nn.Sequential(

28.             nn.Linear(16 * 16 * 256, 2048),

29.             nn.ELU(inplace=True),

30.             nn.BatchNorm1d(2048, eps=0.001),

31.             nn.Dropout(0.5),

32.             nn.Linear(2048, num_classes)

33.         )

34.     def forward(self, x):

35.         x = self.features(x)

36.         x = x.view(x.size(0), 16 * 16 * 256)

37.         x = self.classifier(x)

38.         return x

Рисунок 16. Imbalanced data sampling

Уже упоминалось, что данные ЭКГ являются несбалансированными, поэтому были применены такие техники обучения, как imbalanced sampling (Рис 16.) и применение весов к кросс энтропии.

Однако, улучшить результат применением данных техник не удалось, и наивысшее значение доли правильных ответов было достигнуто без них.

Параметры и результаты:

· Model - [21]

· Batch size - 128

· Optimizer - Adam

· Learning rate - 0.001 (0.95 decay каждые 1000 итераций)

· Accuracy - 0,9920

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

В каждом из экспериментов применялись следующие параметры:

· Batch size - 128

· Optimizer - Adam

· Learning rate - 0.001

В результате были получены следующие результаты по каждой из примененных к задаче моделей (метрика accuracy):

· AlexNet - 0,9888

· ResNet18 - 0,9925

· VGG16 - 0,9931

· EfficientNetB3 - 0,9930

· EfficientNetB4 - 0,9935

· ShuffleNet - 0,9927

· MobileNetV2 - 0,9934

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

4.4 1D CNN

Несмотря на то, что задача решается методами двумерных сверточных сетей, намного интереснее решать ее одномерными, т.к. они требуют на вход данные значительно меньшего размера. Одной из таких сетей является сеть, предложенная Pranav Rajpurkar et al. в [25].

Рисунок 17. Cardiologist-Level Arrhythmia Detection with Convolutional Neural Networks [25]

Сверточная нейронная сеть состоит из 16 модифицированных ResNet блоков. Размер фильтра каждого слоя свертки - 16, и каждый слой имеет 64k фильтров, где k начинается с 1 и увеличивается каждый четвертый блок. Кроме того, каждый 2-й блок сжимает входные данные в 2 раза. Отличие от оригинального ResNet блока в том, что авторы добавляют Max Pooling в Residual connection и Dropout. В выпускной квалификационной работе сеть была заимплементирована без dropout слоя (Приложение 4)

Параметры и результаты:

· Model - [25]

· Batch size - 128

· Optimizer - Adam

· Learning rate - 0.001

· Accuracy - 0,9827

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

Поэтому, логическим продолжением было использование одномерной сверточной сети, которая была применена к набору данных MIT-BIH Arrhythmia Database. Xuexiang Xu et al. в работе [26] 2020 года используют наборы данных, входная длина которых равна 300 для решения задачи классификации на 5 типов аритмий.

Реализация сети на PyTorch:

1. class HeartNetIEEE(nn.Module):

2.     def __init__(self, num_classes=8):

3.         super().__init__()

4.         self.features = nn.Sequential(

5.             nn.Conv1d(1, 64, kernel_size=5),

6.             nn.ReLU(inplace=True),

7.             nn.Conv1d(64, 64, kernel_size=5),

8.             nn.ReLU(inplace=True),

9.             nn.MaxPool1d(2),

10.             nn.Conv1d(64, 128, kernel_size=3),

11.             nn.ReLU(inplace=True),

12.             nn.Conv1d(128, 128, kernel_size=3),

13.             nn.ReLU(inplace=True),

14.             nn.MaxPool1d(2)

15.         )

16.  

17.         self.classifier = nn.Sequential(

18.             nn.Linear(128 * 28, 256),

19.             nn.Linear(256, 128),

20.             nn.Linear(128, num_classes)

21.         )

22.  

23.     def forward(self, x):

24.         x = self.features(x)

25.         x = x.view(x.size(0), 128 * 28)

26.         x = self.classifier(x)

27.         return x

Рисунок 18. ECG Heartbeat Classification Using Convolutional Neural Networks [26]

Параметры и результаты:

· Model - [26]

· Batch size - 128

· Optimizer - Adam

· Learning rate - 0.001

· Accuracy - 0,9864

Итоговый результат был улучшен, однако он был все еще хуже двумерных сверточных нейронных сетей.

Еще одной попыткой в решении задачи стала реализация Encoder части из [14].

Рисунок 19. Encoder - Electrocardiogram Generation and Feature Extraction Using a Variational Autoencoder [14]

Реализация сети на PyTorch:

1. class ZolotyhNet(nn.Module):

2.     def __init__(self, num_classes=8):

3.         super().__init__()

4.         self.features_up = nn.Sequential(

5.             nn.Conv1d(1, 8, kernel_size=3, padding=1),

6.             nn.BatchNorm1d(8),

7.             nn.ReLU(inplace=True),

8.             nn.MaxPool1d(2),

9.             nn.Conv1d(8, 16, kernel_size=3, padding=1),

10.             nn.BatchNorm1d(16),

11.             nn.ReLU(inplace=True),

12.             nn.MaxPool1d(2),

13.             nn.Conv1d(16, 32, kernel_size=3, padding=1),

14.             nn.BatchNorm1d(32),

15.             nn.ReLU(inplace=True),

16.             nn.MaxPool1d(2),

17.             nn.Conv1d(32, 32, kernel_size=3, padding=1),

18.             nn.BatchNorm1d(32),

19.             nn.ReLU(inplace=True),

20.             nn.MaxPool1d(2),

21.             nn.Conv1d(32, 1, kernel_size=3, padding=1),

22.             Flatten(),

23.         )

24.         self.features_down = nn.Sequential(

25.             Flatten(),

26.             nn.Linear(128,64),

27.             nn.BatchNorm1d(64),

28.             nn.ReLU(inplace=True),

29.             nn.Linear(64, 16),

30.             nn.BatchNorm1d(16),

31.             nn.ReLU(inplace=True),

32.             nn.Linear(16, 8)

33.         )

34.         self.classifier = nn.Linear(8, num_classes)

35.  

36.     def forward(self, x):

37.         out_up = self.features_up(x)

38.         out_down = self.features_down(x)

39.         out_middle = out_up + out_down

40.  

41.         out = self.classifier(out_middle)

42.  

43.         return out

Параметры и результаты:

· Model - [14]

· Batch size - 128

· Optimizer - Adam

· Learning rate - 0.001

· Accuracy - 0,9886

Эта сеть показала наивысший результат среди остальных одномерных сверточных нейронных сетей.

4.5 Реализация нового решения EcgResNet34

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

Финальным решением стала модификация модели ResNet-34. Несмотря на то, что решение, предложенное Pranav Rajpurkar et al. [25] не показало высоких результатов, идея модифицировать ResNet показалась достаточно перспективной. В своей имплементации авторы используют недоступный в открытом доступе набор данных и используют последовательности большей длины, они сжимают входные данные в раз, что не подходит для размера последовательностей небольшой длины, как в MIT-BIH Arrhythmia Database. Кроме того, авторы статьи добавляют пулинг, который в выпускной квалификационной работе был заменен сверточным слоем со страйдом 2. Размер фильтра каждой свертки - 17. В первом блоке количество выходных каналов 64, далее 5 блоков с 128 фильтрами, затем 5 блоков с 256 фильтрами и, наконец, 5 блоков с количеством выходных каналов равным 512. Архитектура модифицированного ResNet блока изображена на Рис 20. В финальной части сверточной нейронной сети применяется AveragePooling и полносвязный слой на 8 классов. Финальная архитектура представлена на Рис 21.

Рисунок 20. Модифицированный ResNet

Параметры и результаты:

· Model - Novel EcgResNet34

· Batch size - 128

· Optimizer - Adam

· Learning rate - 0.001

· Accuracy - 0,9938

Precision / recall per class

N - 0.994670 / 0.998262

L - 0.998758 / 0.996283

V - 0.990099 / 0.983146

\ - 1.000000 / 1.000000

R - 0.994505 / 0.997245

A - 0.957447 / 0.882353

! - 0.955556 / 0.914894

E - 1.000000 / 1.000000

Рисунок 21. Предложенная в ВКР архитектура сверточной нейронной сети

Таким образом, с использованием архитектуры, предложенной в выпускной квалификационной работе, удалось добиться наилучшего результата, как для 1D, так и для 2D моделей. Ниже, на Рис 22. Изображена матрица ошибок наилучшего решения.

Рисунок 22. Матрица ошибок

4.6 Выводы

В выпускной квалификационной работе было реализовано несколько архитектур из последних статей, связанных с классификацией аритмий, а также сделан ряд экспериментов с использованием популярных для решения задач классификации изображений сверточных нейронных сетей. В результате была реализована новая архитектура сверточной нейронный сети, показавшая наивысшее значение целевой метрики на валидационном наборе данных - 99,38%. Все выполненные эксперименты представлены на Рис. 23.

Рисунок 23. Проделанные эксперименты, параметры запуска и результаты

5 Особенности выпускной квалификационной работы

Одной из целей выпускной квалификационной работы было поддержание исследований в области анализа данных ЭКГ, поэтому было уделено особое внимание реализации используемых моделей. Так, был создан репозиторий, доступный по адресу https://github.com/lxdv/ecg-classification, в котором указана инструкция по запуску всех используемых в ВКР решений, от скачивания набора данных, до запуска тренировки, валидации и тестирования. Исходный код каждого доступен в ветках experiments/exp-<>, а таблица с экспериментами доступна по адресу

https://docs.google.com/spreadsheets/d/159OjSlXuItvngeQwBxC5NaQbU9PjaMN4mY--bX26m1o

В репозитории поддерживается парадигма конфигурационных файлов

· train.py --config configs/training/<config>.json

· inference.py -config configs/inference/config.json

· pipeline.py --config configs/pipelines/config/json

1. {

2.   "exp_name":"EcgResNet34",

3.   "type": "Trainer1D",

4.   "device": "cpu",

5.   "model": "EcgResNet34",

6.  

7.   "train_json": "data/train.json",

8.   "val_json": "data/val.json",

9.   "mapping_json": "data/class-mapper.json",

10.   "num_classes": 8,

11.  

12.   "batch_size": 128,

13.   "optim": "Adam",

14.   "optim_params":

15.   {

16.     "lr": 1e-3

17.   },

18.  

19.   "num_workers": 3,

20.   "exp_dir" : "experiments/",

21.  

22.   "model_path": 0,

23.   "epochs": 1

24. }

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

1. nameEcgResNet34

2.  

3. on:

4.   push:

5.     branches[ dev, feature/actions-ci ]

6.   pull_request:

7.     branches[ master ]

8.  

9. jobs:

10.   Train:

11.     runs-onubuntu-16.04

12.     steps:

13.       - usesactions/checkout@v2

14.       - nameSet up Python 3.7

15.         usesactions/setup-python@v1

16.         with:

17.           python-version3.7

18.       - nameInstall dependencies

19.         run: |

20.          python -m pip install -r requirements.txt

21.       - nameGenerate data files

22.         run: |

23.          python dataset-generation-pool.py

24.         working-directory:

25.          ./scripts

26.       - nameGenerate 1D annotation files

27.         run: |

28.          python annotation-generation-1d.py

29.         working-directory:

30.          ./scripts

31.       - nameRunning training

32.         run: |

33.          python train.py --config configs/training/EcgResNet34.json

Кроме того, во все решения интегрировано логирование с использованием TensorBoard (Рис 24).

Рисунок 24. Примеры визуализации функции потерь и целевой метрики с использованием TensorBoard

6 Автоматический анализ электрокардиограммы

В выпускной квалификационной работе был реализован прототип анализа электрокардиограммы, т.е. возможность применить лучшее решение к ЭКГ в формате WFDB - программа сделает все необходимое - найдет каждый сердечный удар, выполнит по ним классификацию и выдаст результат в удобном для человека формате - HTML страницы, которая может быть открыта любым браузером. Пример результирующего файла представлен на Рис 25.

На Рис 25. в рамке указано настоящее значение, а над ним предсказанное. Получение результатов достигается при помощи использования библиотеки plotly (Приложение 7). Для удобства визуализация неаномальных ударов была выключена. Таким образом, итоговая визуализация изображена на рисунках ниже, а используемый код представлен в Приложении 5.

Рисунок 26. Прототип работы программы

Рисунок 27. Прототип работы программы

Рисунок 28. Прототип работы программы

Рисунок 29. Прототип работы программы

Заключение

Целью выпускной квалификационной работы была реализация алгоритма автоматической классификации аритмий с использованием сверточных нейронных сетей. Эксперименты показали, что использование нейронных сетей в задаче возможно и, более того, является перспективным выбором в решении задачи классификации болезней, связанных с аномальной работой сердца. В работе было проведено сравнение существующих архитектур, представлено новое решение и разработана программа, способная производить автоматический анализ кардиограммы и находить аномальные сердечные удары. Весь исходный код проделанной работы доступен в отрытом доступе, что позволяет исследователям ознакомиться с представленной работой и интегрировать автоматический анализ электрокардиограмм в свой бизнес или исследовательский продукт. Итоговый результат доли правильных ответов (accuracy) на валидационном наборе данных MIT-BIH Arrhythmia Database составляет 99,38%, что является наилучшим по сравнению с другими современными подходами решения задачи.

Список литературы

[1] World Health Organization (2017). Cardiovascular diseases (CVDs). http://www.who.int/mediacentre/factsheets/fs317/en/ Accessed 18 Apr 2018

[2] Nikolic, G., Bishop, R., Singh, J., 1982. Sudden death recorded during holter monitoring. Circulation 66, 218-225.

[3] Hong S. et al. Opportunities and Challenges in Deep Learning Methods on Electrocardiogram Data: A Systematic Review //arXiv preprint arXiv:2001.01550. - 2019.

[4] Hong, S., Zhou, Y., Wu, M., Shang, J., Wang, Q., Li, H., Xie, J., 2019c. Combining deep neural networks and engineered features for cardiac arrhythmia detection from ecg recordings. Physiological measurement 40, 054009.

[5] Hong, S., Wu, M., Zhou, Y., Wang, Q., Shang, J., Li, H., Xie, J., 2017. Encase: An ensemble classifier for ecg classification using expert features and deep neural networks, in: 2017 Computing in Cardiology (CinC), IEEE. pp. 1-4.

[6] Clifford, G.D., Liu, C., Moody, B., Li-wei, H.L., Silva, I., Li, Q., Johnson, A., Mark, R.G., 2017. Af classification from a short single lead ecg recording: the physionet/computing in cardiology challenge 2017, in: 2017 Computing in Cardiology (CinC), IEEE. pp. 1-4.

[7] Alena I. Kalyakulina, Igor I. Yusipov, Victor A. Moskalenko, Alexander V. Nikolskiy, Artem A. Kozlov, Konstantin A. Kosonogov, Nikolay Yu. Zolotykh, Mikhail V. Ivanchenko New ECG Delineation Database. arXiv:1809.03393

[8] Li, K., Pan, W., Li, Y., Jiang, Q., Liu, G., 2018a. A method to detect sleep apnea based on deep neural network and hidden markov model using single-lead ecg signal. Neurocomputing 294, 94-101

[9] Attia, Z.I., Sugrue, A., Asirvatham, S.J., Ackerman, M.J., Kapa, S., Friedman, P.A., Noseworthy, P.A., 2018b. Noninvasive assessment of dofetilide plasma concentration using a deep learning (neural network) analysis of the surface electrocardiogram: A proof of concept study. PloS one 13, e0201059.

[10] Fotiadou, E., Konopczyсski, T., Hesser, J.W., Vullings, R., 2020. End-to-end trained cnn encoder-decoder network for fetal ecg signal denoising. Physiological Measurement.

[11] Santamaria-Granados, L., Munoz-Organero, M., RamirezShenda Hong et al.: Preprint submitted to Elsevier Page 14 of 16 Opportunities and Challenges of Deep Learning for ECG Data Gonzalez, G., Abdulhay, E., Arunkumar, N., 2018. Using deep convolutional neural network for emotion detection on a physiological signal dataset (amigos). IEEE Access 7, 57-67.

[12] Attia, Z.I., Sugrue, A., Asirvatham, S.J., Ackerman, M.J., Kapa, S., Friedman, P.A., Noseworthy, P.A., 2018b. Noninvasive assessment of dofetilide plasma concentration using a deep learning (neural network) analysis of the surface electrocardiogram: A proof of concept study. PloS one 13, e0201059.

[13] Rastgoo, M.N., Nakisa, B., Maire, F., Rakotonirainy, A., Chandran, V., 2019. Automatic driver stress level classification using multimodal deep learning. Expert Systems with Applications 138, 112793.

[14] Kuznetsov V. V., Moskalenko V. A., Zolotykh N. Y. Electrocardiogram Generation and Feature Extraction Using a Variational Autoencoder //arXiv preprint arXiv:2002.00254. - 2020.


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.