По данным Всемирной организации здравоохранения (ВОЗ), сердечно-сосудистые заболевания
(ССЗ) являются сегодня причиной смерти номер один. В 2017 году во всем мире от сердечно-сосудистых заболеваний умерло более 17,7 миллиона человек, что составляет около 31% всех смертей, и более 75% этих смертей приходится на страны с низким и средним уровнем доходов. Аритмия - это типичный тип сердечно-сосудистых заболеваний, который относится к любым нерегулярным отклонениям от нормального сердечного ритма. Существует несколько типов аритмии, включая фибрилляцию предсердий, преждевременное сокращение, фибрилляцию желудочков и тахикардию. Хотя однократное аритмическое сердцебиение может не иметь серьезного влияния на жизнь, продолжительное аритмическое сердцебиение может привести к летальному исходу. Например, длительные сокращения преждевременных сокращений желудочков (ЖЭ) иногда переходят в ритмы желудочковой тахикардии (ЖТ) или фибрилляции желудочков (ФЖ), которые могут немедленно привести к сердечной недостаточности. Таким образом, важно периодически контролировать сердечный ритм, чтобы контролировать и предотвращать сердечно-сосудистые заболевания. Электрокардиограмма (ЭКГ) - это неинвазивный медицинский инструмент, который отображает ритм и состояние сердца. Поэтому автоматическое определение нерегулярного сердечного ритма по сигналам ЭКГ является важной задачей в области кардиологии.

В этом посте я реализовал эту статью https://arxiv.org/pdf/1804.06812.pdf, в которой мы классифицируем ЭКГ на семь категорий, одна из которых является нормальной, а другие шесть - различными типами аритмии с использованием глубокого двухмерного анализа. CNN с изображениями ЭКГ в оттенках серого. Благодаря преобразованию одномерных сигналов ЭКГ в двумерные изображения ЭКГ фильтрация шума и выделение признаков больше не требуются. Это важно, поскольку некоторые биения ЭКГ игнорируются при фильтрации шума и выделении признаков. Кроме того, тренировочные данные могут быть увеличены за счет увеличения изображений ЭКГ, что приводит к более высокой точности классификации. Увеличение данных трудно применить к 1-мерным сигналам, поскольку искажение 1-го сигнала ЭКГ может снизить производительность классификатора. Однако добавление к двумерным изображениям ЭКГ различных методов обрезки помогает модели CNN тренироваться с разными точками обзора отдельных изображений ЭКГ. Использование изображения ЭКГ в качестве входных данных для классификации аритмий ЭКГ также дает преимущества с точки зрения надежности.

Получение данных

Я использовал базу данных аритмий MIT-BIH для обучения и тестирования модели CNN, как уже упоминалось в статье. База данных по аритмии MIT-BIH содержит 48 получасовых выдержек из двухканальных амбулаторных записей ЭКГ, полученных от 47 субъектов, изучаемых лабораторией аритмии БиГ в период с 1975 по 1979 год. Для каждой записи есть три файла: 1. Файл аннотации 2. Сигналы файл 3. Заголовочный файл.

В этой реализации я использовал сигналы lead2. Функция get_records () в приведенном ниже фрагменте кода создает список всех записей в наборе данных. Функция beat_annotations () находит индексы ударов, принадлежащих определенной категории (в приведенном ниже коде я нашел индексы нормальных ударов). Функция segmentation () используется для сегментирования долей каждой категории.

Метод

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

Я преобразовал сигналы ЭКГ в изображения ЭКГ, нанеся на график каждое сокращение ЭКГ. Впервые я обнаружил R-пики в сигналах ЭКГ с помощью модуля Python Biosppy. После того, как R-пики были найдены, чтобы сегментировать биение, я взял текущий R-пик и последний R-пик, взял половину расстояния между ними и включил эти сигналы в текущий ритм. Точно так же я проделал это со следующей долей.

Чтобы преобразовать эти сегментированные сигналы в изображения, я использовал Matplotlib и OpenCV. Поскольку в сигналах ЭКГ цвета не имеют значения, я преобразовал их в изображения в градациях серого.

Увеличение объема данных

Увеличение данных означает увеличение количества точек данных. Что касается изображений, это может означать увеличение количества изображений в наборе данных. Мы можем достичь как высокой специфичности, так и чувствительности, увеличивая и уравновешивая входные данные. Я увеличил шесть сокращений аритмии ЭКГ (PVC, PAB, RBB, LBB, APC, VEB) с помощью девяти различных методов обрезки: слева вверху, по центру вверху, справа вверху, по центру слева, по центру, по центру справа, слева внизу, по центру внизу и справа внизу. Каждый метод кадрирования дает два из трех размеров изображения ЭКГ, то есть 96 x 96. Затем эти увеличенные изображения изменяются до исходного размера, который составляет 128 x 128.

Архитектура модели CNN

Архитектура модели CNN такая же, как и в этой статье: https://arxiv.org/pdf/1804.06812.pdf. Использовалась 11-слойная модель. Основная структура модели очень похожа на VGGNet. Модель CNN использует инициализацию Xavier для всех уровней. Для функции активации они использовали экспоненциальные линейные единицы (ELU) в отличие от ReLU, который использовался в VGGNet.

Проверка

Для проверки я использовал train_test_split skLearn, чтобы разделить набор для обучения и тестирования. В обучающей выборке было 352295 изображений, а в тестовой - 44041 изображение. Эта модель достигла точности 99,31 на данном тестовом наборе.

Развертывание модели

Я развернул модель на моем локальном сервере, благодаря этому репозиторию Github. В этом веб-приложении мы можем выбрать сегментированные удары ЭКГ или файл CSV с необработанными сигналами ЭКГ, чтобы получить соответствующий результат. Вот несколько скриншотов приложения.

После выбора файла CSV и нажатия кнопки «Прогнозировать» для каждого сегментированного удара мы получаем класс, к которому он принадлежит, а также диапазон выборки. Например: в первом сокращении, которое находится в диапазоне от номера образца 175 до образца номер 235, результатом будет преждевременное сокращение желудочков.

Ссылки

  1. Https://arxiv.org/pdf/1804.06812.pdf
  2. Https://github.com/mtobeiyf/keras-flask-deploy-webapp
  3. Https://www.physionet.org/physiobank/database/mitdb/

Ссылка на репозиторий Github

Спасибо за чтение. Хлопайте в ладоши, если вам понравилось.