Привет, Хабр!

Меня зовут Лиза Неустроева, я студентка четвёртого курса Физтех-школы прикладной математики и информатики МФТИ. Учась на Физтехе, я заинтересовалась машинным обучением. Мне было и остаётся интересным узнавать, как методы искусственного интеллекта применяются в биологии и медицине. Поэтому я была очень рада, когда попала на стажировку в центр медицины Sber AI Lab и получила возможность участвовать в прикладных исследованиях.

Мне хотелось разобраться с методами бесконтактной оценки медицинских параметров, т. е. буквально по видеопотоку с камеры определять, какой у человека пульс! Исследовать и реализовывать настолько амбициозные проекты всегда проще с экспертами в предметной области. Для нас такими проводниками были коллеги из СамГМУ. Их усилиями подготовлен уникальный датасет, который содержит видеозаписи людей и их фотоплетизмограммы (ниже я напишу, что это и почему это очень важно), а также сопутствующую информацию медицинского характера. Я подробнее расскажу про эти данные и покажу первые результаты простых моделей, с которыми будем сравнивать более продвинутые ML-методы.

Надеюсь, что всем ML-исследователям, и особенно тем, кто увлекается компьютерным зрением, будет интересно поэкспериментировать с этим датасетом и сравнить результаты с нашими бейзлайнами.

Про фотоплетизмограммы

Немного терминологии: rPPG — это remote photoplethysmography или, по-русски, бесконтактная фотоплетизмография. Изначально, плетизмография — это метод регистрации изменения объёма органа в результате его наполнения кровью или воздухом. Результат такого измерения называется плетизмограммой, но иногда говорят просто «пульсовая волна». С помощью пульсовой волны можно сделать выводы о сердечном ритме, частоте дыхания, эластичности стенок сосудов и других медицинских параметрах. В частности, пульсовая волна скоррелирована с ЭКГ-сигналом (см. рис. 1).

Рис. 1. Слева: ЭКГ-сигнал и фотоплетизмограмма. Справа: процесс снятия фотоплетизмограммы.
Рис. 1. Слева: ЭКГ-сигнал и фотоплетизмограмма. Справа: процесс снятия фотоплетизмограммы.

Фотоплетизмография — вариация этого метода, в котором пульсовая волна считывается оптическим способом, то есть регистрируются малые изменения цвета кожи. Кстати, с точки зрения греческого языка название очень логичное, потому что «фото» — это свет, «плетизмос» — наполнение, а «графо» — писать.

Обычно фотоплетизмограмму получают, используя специальный прибор, например многофункциональный пульсоксиметр (на рис. 1 справа). В последнее время развиваются и бесконтактные методы, объединённые названием rPPG. Оказывается, чтобы определить пульсацию крови не обязательно просвечивать ткани: современные камеры, причём даже не профессиональные, а камеры смартфонов, способны улавливать возникающие из-за цикла кровообращения периодические изменения цвета кожи или мельчайшие движения головы (про второй подход есть статья на Хабре). Остаётся обнаружить и аккуратно проанализировать эти изменения и извлечь пульсовую волну. Это не так-то просто, но очень важно. Решение этой задачи потенциально может помочь в телемедицинской диагностике: если извлечь из видео пульсовую волну, то по ней можно определить производные медицинские параметры, что поможет дистанционно консультирующему врачу больше узнать о здоровье пациента. Часть информации пациент сможет получить даже без обращения к врачу: например, с помощью автономного медицинского ассистента.

Как работать с фотоплетизмограммами?

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

Для разработки и оценки методов определения PPG, а также для разработки моделей удалённой диагностики нужны данные! Уже существуют несколько релевантных датасетов, например:

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

Multi-Camera Dataset for rPPG (или MCD rPPG) предлагает записи о 600 испытуемых, что делает данные существенно более разнообразными, чем в предыдущих датасетах. К тому же видео снимались с трёх различных ракурсов и с использованием разных камер. Такое разнообразие позволит обученным на MCD rPPG моделям работать с видео, снятыми в разных условиях на разные устройства. Также в датасете содержатся сопутствующие медицинские параметры, что позволяет решать не только задачу восстановления фотоплетизмограммы по видео, но и другие задачи удалённой диагностики.

Хочу познакомить вас с этим датасетом и предложить базовые обученные нами модели:

  • предсказывающие медицинские параметры отдельно по каждому кадру,

  • предсказывающие медицинские параметры по отрывку видео,

  • восстанавливающие PPG.

Датасет доступен по ссылке, а код всех экспериментов доступен в репозитории. Поехали!

Про датасет MCD-rPPG

Для каждого из шестисот испытуемых были сделаны два измерения: до и после нагрузки (например, пятнадцати приседаний за тридцать секунд). Каждому измерению соответствует трёхминутное видео, одновременно снятое с трёх разных ракурсов, то есть три ролика (см. рис. 2), синхронизированная с ними фотоплетизмограмма и отдельно записанный ЭКГ-сигнал, всего 3600 записей. Видео записывались в разное время суток в разных помещениях и при различном освещении, чтобы данные были более разнообразными, а обученные на них модели — более устойчивыми и подходящими для использования в разных условиях. Ещё на каждом видео за испытуемыми стоят часы: они нужны для того, чтобы как можно точнее синхронизировать ролики с фотоплетизмограммами.

Рис. 2. Ракурсы съемки.
Рис. 2. Ракурсы съемки.

Ещё для каждого испытуемого известны:

  • пол (gender);

  • возраст (age);

  • рост (height);

  • вес (weight);

  • уровень стресса (stress);

  • уровень гемоглобина (hemoglobin);

  • уровень гликированного гемоглобина (glycated_hemogloin);

  • уровень холестерина (cholesterol).

Отдельно до и после нагрузки измерялись:

  • нижнее или диастолическое артериальное давление (lower_ap);

  • верхнее или систолическое артериальное давление (upper_ap);

  • пульс (pulse);

  • сатурация (saturation);

  • частота вдохов (respiratory);

  • эластичность стенок сосудов (rigidity).

Сразу скажу, что для всех дальнейших моделей использовали ИМТ (индекс массы тела) вместо отдельных параметров роста и веса. Это показатель, измеряющийся по формуле:

ИМТ = \text{вес (кг)}/(\text{рост (м)})^2

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

Для начала проведём Exploratory Data Analysis (EDA) и посмотрим на распределение параметров в данных.

Во-первых, кто они, эти испытуемые? А точнее, какие у них демографические характеристики? Треть испытуемых — мужчины, остальные — женщины.

Рис. 3. Распределение возраста испытуемых.
Рис. 3. Распределение возраста испытуемых.

90% респондентов не старше 24 лет, оставшиеся 10% — от 25 до 83 лет.

Во-вторых, посмотрим на распределение их ИМТ и сравним его со средним по России по данным за 2018.

Рис. 4. Распределение ИМТ испытуемых
Рис. 4. Распределение ИМТ испытуемых

Наши респонденты несколько худее среднестатистического россиянина, может, многие из них студенты :)

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

Рис. 5. Измерения до и после нагрузки.
Рис. 5. Измерения до и после нагрузки.

Здесь всё ожидаемо: давление повышается, частота вдохов и пульс увеличиваются. Ещё повышается температура, увеличивается эластичность стенок сосудов и уменьшается сатурация. Температура и сатурация — очень низковариабельные параметры, то есть их значения сконцентрированы в узком диапазоне: в случае температуры — около 36,6, в случае сатурации — около 97. Это нормальные параметры для большинства здоровых людей, которыми в основном являются и наши испытуемые. При этом значение сатурации не может сильно отклоняться от этого значения: по определению она не может быть больше 100, а значение 94 уже считается низким — при COVID-19 в таком случае рекомендуют вызвать врача.

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

Для определения уровня стресса использовалась шкала психологического тестирования PSM-25 (Лемура-Тесье-Филлиона). Испытуемые отвечали на 25 вопросов о наличии физических проявлений стресса: чувстве напряжённости, проблемах с дыханием и других. Каждый вопрос оценивался от 1 до 8 баллов, затем суммарный балл делили на 25. В итоге получалось число в диапазоне от 0 до 8 — чем больше результат, тем в более стрессовом состоянии находится человек.

Рис. 6. Однократные изменения.
Рис. 6. Однократные изменения.

Каждый из этих параметров важно определять для дистанционной медицинской диагностики. Кроме, может быть, пола и возраста, потому что их пациенты обычно и сами знают ?. А ещё многие из параметров сложно определять по снимку лица или по видео: есть разные исследования на эту тему, но они пока не позволяют добиться точных результатов. Так, например, в статье 2023 года верхнее давление определяется с погрешностью 12,35 мм. рт. ст., а нижнее — с погрешностью 9,54 мм. рт. ст.. Задача определения уровня гемоглобина пока решается только классификационно (анемия или норма), а не численно. Нам и вам, всем заинтересованным в этой теме, есть куда продвигаться!

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

Нулевой пункт такой: случайно разделим датасет по испытуемым на две части в соотношении 80:20, рассчитаем медиану значений целевого параметра по обучающей части и вычислим ошибку на меньшей. В качестве функции ошибки будем использовать MAE (Mean Absolute Error). Повторим такую процедуру 100 раз и усредним ошибку, а также найдём её среднее отклонение.

MAE = \frac{1}{n} \sum_{i=1}^n |\hat{y}_i - y_i|, y_i \text{ - истинные значения } \hat{y}_i \text{ - предсказанные.}

МАЕ

Среднее отклонение

Возраст

4,39

0,69

ИМТ

3,28

0,25

Нижнее АД

7,42

0,37

Верхнее АД

13,61

0,64

Сатурация

0,87

0,05

Температура

0,09

0,01

Уровень стресса

1,14

0,07

Гемоглобин

1,34

0,07

Гликированный гемоглобин

0,42

0,05

Холестерин

0,65

0,04

Частота вдохов

1,40

0,12

Эластичность стенок сосудов

2,21

0,12

ЧСС

15,04

0,60

Температура и сатурация достаточно точно предсказываются уже даже таким образом: ошибка составляет менее 1 % от максимального значения. Это говорит о том, что значения этих параметров на датасете не очень разнообразны. Перейдём к более сложным моделям!

Модели, работающие с отдельными кадрами

Все описанные ниже модели будем учить, используя данные о 80% пациентов, а результаты будем измерять на отложенной выборке из оставшихся 20%. То есть в обучающей выборке будет 2880 видео, а в тестовой — 720. Затем для каждого видео из обучающей части случайным образом выберем 20 кадров, чтобы на этапе обучения каждый раз давать модели один случайный из них. Из каждого видео тестовой выборки случайным образом выберем один кадр, и именно он каждый раз будет подаваться модели для тестирования.

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

Рис. 7. Обработка кадров.
Рис. 7. Обработка кадров.

Немного технических подробностей. На подготовленных таким образом данных мы воспользовались классическим приёмом transfer learning:

  1. Сначала взяли известную модель (энкодер), инициализированную весами, полученными обучением на большом датасете.

  2. Затем оторвали ей голову, заменили последний слой (это линейный слой классификатора) двумя линейными слоями с функцией активации ReLU между ними.

  3. Полученную модель дообучили на целевой задаче.

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

Рис. 8. Идея transfer learning.
Рис. 8. Идея transfer learning.

Ниже приведу результаты для части моделей, но отмечу, что план экспериментов был гораздо шире: подбирали оптимальные гиперпараметры и архитектуру нейросети, экспериментировали со способом обучения, способом инициализации весов и количеством обучаемых параметров. А именно, варьировали скорость обучения (learning rate), функцию потерь (Mean Squared Error или MAE), способ инициализации весов энкодера (случайным образом или из предобученной модели), количество обучаемых параметров («размороженных» слоёв и порядок, в котором эти слои «размораживаются»).

Следуя лучшим практикам компьютерного зрения, пробовали несколько архитектур: ResNet50, ViT, Swin, предобученные на датасете ImageNet, отсюда, а также RexNet150 и EfficientNet_b2 из репозитория HSEmotion. Особенность двух последних моделей заключается в том, что они были специально обучены на датасетах лиц, поэтому должны хорошо подходить нашей задаче.

Посмотрим на результаты. Для анализа качества определения пола мы использовали метрики accuracy и F1 (в качестве положительного класса выбраны женщины).

accuracy = \frac{|\text{количество правильно классифицированных объектов}|}{\text{|количество объектов|}}F1 = 2\cdot \frac{precision \cdot recall}{precision + recall}

model

accuracy

F1

ResNet50

0,952

0,961

Swin

0,957

0,964

ReXNet150

0,989

0,991

ViT

0,951

0,960

EfficientNet_b2

0,979

0,983

Все модели показали отличные результаты, они определяют пол почти идеально! Модели, которые были специально предобучены на лицах, справляются немного лучше других. Теперь посмотрим на результаты как для набора моделей, которые определяют один параметр за раз, так и для набора моделей, которые определяют сразу все параметры. Проанализируем работу двух архитектур: RexNet150 и ViT. Этот выбор не случаен: во-первых, они показали результаты немного лучше, чем остальные модели, во-вторых, они являются представителями двух классов современных моделей, борющихся за первенство в разных задачах компьютерного зрения: RexNet150 — свёрточная сеть, а ViT — трансформер.

Наивный бейзлайн

ReXNet150

ViT

ReXNet150 (все параметры)

ViT
(все параметры)

Возраст

4,386

1,689

1,669

1,921

4,461

ИМТ

3,277

2,516

2,534

2,454

2,803

Нижнее АД

4,723

8,581

8,146

8,013

7,870

Верхнее АД

13,606

14,049

13,788

13,178

13,299

Сатурация

0,872

1,814

0,946

0,855

0,876

Температура

0,094

0,614

0,128

0,110

0,103

Стресс

1,144

1,198

1,210

1,117

1,156

Гмоглобин

1,342

1,223

1,154

1,110

1,385

Глик. гемоглобин

0,418

0,533

0,526

0,513

0,487

Холестерин

0,647

0,692

0,710

0,629

0,680

Частота вдохов

1,399

1,453

1,488

1,483

1,455

Эласт-ть сосудов

2,210

2,308

2,320

2,284

2,201

Пульс

15,043

16,564

16,121

14,685

15,316

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

Модели по видео

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

Рис. 9. Обработка видео.
Рис. 9. Обработка видео.

Также, как и раньше, мы применяли идею transfer learning, но в этот раз в качестве основы взяли модели, заточенные под работу с трёхмерными входными данными, в частности, с видео. Мы взяли предобученные модели, доступные в PyTorch, а именно MViT (аналог трансформера ViT для работы с видео) и три вариации свёрточной сети 3D ResNet. Эти три вариации различаются размерностями ядер свёрток: в первой ядра трёхмерные, во второй есть как трёхмерные, так и двумерные, а в третьей двумерные свёртки по осям высоты и ширины чередуются с одномерным по оси времени.

Все эти модели обучены для работы с короткими видео по 16 кадров, что при нашей частоте съёмки около 30 кадров/с соответствует отрезку видео длиной в полсекунды. Чтобы агрегировать информацию о большем периоде времени, в репозитории мы также предлагаем модели, в которых вместо 16 последовательных кадров на вход подаются 16 кадров с некоторым шагом, или же большой входной отрезок разбивается на несколько частей, в каждой из которых вычисляется средний кадр и на вход модели предлагаются эти 16 «усреднённых» кадров.

Рис. 10. Усреднение последовательных кадров.
Рис. 10. Усреднение последовательных кадров.

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

Восстановление rPPG

Обратимся к анонсированным в самом начале фотоплетизмограммам: будем решать задачу восстановления пульсовой волны по видео. Можно было бы сравнивать, насколько похожи предсказанная и истинная пульсовая волна, но численный результат имел бы сложно интерпретируемый физический смысл, поэтому поступим иначе. Современные методы анализа временных рядов позволяют очень точно определять частоту сердечных сокращений по пульсовой волне. Будем сравнивать пульс, рассчитанный по настоящей фотоплетизмограмме, с пульсом, рассчитанным по предсказанной фотоплетизмограмме. Для сравнения используем MAE. Для восстановления ЧСС по пульсовой волне будет использоваться алгоритм на основе быстрого преобразования Фурье.

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

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

  1. Фон.

  2. Волосы.

  3. Кожа лица.

  4. Кожа тела.

  5. Одежда.

  6. Другое (аксессуары).

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

Рис. 11. Сегментация изображения.
Рис. 11. Сегментация изображения.

Для обучения алгоритма TS_CAN использовались только полученные видео, но не маски. Гиперпараметры и предобработка использовались те, что предлагаются в rppg-toolbox для других датасетов.

Алгоритм

POS_WANG

POS_WANG по пикселям кожи

LGI

LGI по пикселям кожи

TS_CAN

MAE пульса (уд./мин.)

4,463

2,968

7,368

5,418

2,841

Замечу, что использование сегментации для статистических алгоритмов даёт прирост точности. Этим удалось добиться MAE меньше 3, что соответствует лучшим результатам на аналогичных датасетах (см. таблицу).

Заключение.

Multi-Camera Dataset rPPG выложен в открытый доступ, поэтому предлагаю вам поэкспериментировать с ним в научных, исследовательских или учебных целях. Задача дистанционного определения медицинских параметров трудная, но важная, и потому кажется нам такой интересной. Думаю, что она понравится и вам, и будем вместе развивать методы удалённой диагностики!

Чтобы облегчить начало работы и чтобы было, с чем сравнивать результаты, выкладываю код бейзлайнов. Пока достаточно уверенно решаются только задачи определения пола, возраста и ИМТ, так что в дальнейших исследованиях есть к чему стремиться.

Надеюсь, что в будущем MCD-rPPG поможет сообществу исследователей продвинуться в разработке методов определения медицинских параметров и внесёт свой вклад в развитие телемедицинских сервисов.

Спасибо, что дочитали. Комментарии открыты для ваших вопросов, идей и предложений :)

Комментарии (2)


  1. sv_kozlov
    12.06.2024 13:59

    а методики ИМБП применяли? по Баевскому, по Флейшману?
    не увидел в тексте, что странно.


    1. garrulus Автор
      12.06.2024 13:59

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