Ювелирная работа, или Как мы разрабатывали Умное кольцо Sber (часть 1). ai.. ai. gigachat.. ai. gigachat. qemu.. ai. gigachat. qemu. Блог компании SberDevices.. ai. gigachat. qemu. Блог компании SberDevices. Гаджеты.. ai. gigachat. qemu. Блог компании SberDevices. Гаджеты. здоровье.. ai. gigachat. qemu. Блог компании SberDevices. Гаджеты. здоровье. медицина.. ai. gigachat. qemu. Блог компании SberDevices. Гаджеты. здоровье. медицина. Носимая электроника.. ai. gigachat. qemu. Блог компании SberDevices. Гаджеты. здоровье. медицина. Носимая электроника. Производство и разработка электроники.. ai. gigachat. qemu. Блог компании SberDevices. Гаджеты. здоровье. медицина. Носимая электроника. Производство и разработка электроники. Софт.. ai. gigachat. qemu. Блог компании SberDevices. Гаджеты. здоровье. медицина. Носимая электроника. Производство и разработка электроники. Софт. умные устройства.
Ювелирная работа, или Как мы разрабатывали Умное кольцо Sber (часть 1) - 1

Салют, Хабр!

Мы официально запустили продажи Умного кольца Sber — устройства, которое помогает владельцу следить за показателями своего организма, вовремя замечать отклонения и улучшать свою жизнь.

Это первый продукт Sber в сегменте носимой электроники и, в частности, wellness-электроники, поэтому его разработка оказалась особенно ответственной. Мы проводили собственные полисомнографические исследования, чтобы настроить и проверить алгоритмы, отвечающие за сон. В расширенном бета-тестировании проверяли качество алгоритмов и их визуальную интерпретацию. Дорабатывали GigaChat для более персонализированных рекомендаций и бесконечно рефакторили код.

Эта статья посвящена разработке software и firmware устройства, полисомнографии, нашему внезапному дебюту в сайзкодинге на C++/C, обучению и дообучению модели GigaChat (а в следующей расскажем о «железе» кольца и его производстве).

Исследования, алгоритмы и валидация данных

Умное кольцо Sber обеспечивает пользователя двумя типами показателей:

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

  • Комплексные, которые на основе данных с датчиков оценивают ML-алгоритмы: фазы сна и пробуждения, качество сна, уровень стресса и ресурс — общее состояние организма и его запас сил.

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

Чтобы решить задачу, прежде всего требовался большой массив данных о сне. Поэтому в плане разработки появилась полисомнография — комплексное исследование сна с измерением всех физиологических параметров организма. Участники спали в клинике, окутанные датчиками, с Умным кольцом Sber на пальце (и в собственных пижамах, которые рекомендуется приносить на исследование).

Любишь кольцо разрабатывать — люби и на полисомнографию ходить. Команда разработки на исследовании

Любишь кольцо разрабатывать — люби и на полисомнографию ходить. Команда разработки на исследовании

На момент запуска мы с научными партнёрами — клиникой Медси и клиникой Управления по делам президента — провели 150 полисомнографических исследований и собрали более 1000 часов данных. Полисомнография обеспечила нас эталонными данными о сне с заключениями врачей, которые мы с интервалами по 30 секунд сравнивали с метриками с кольца, обработанными алгоритмами, одновременно обучая свой ML-алгоритм и настраивая его точность.

Вверху — результат модели, внизу — данные с полисомнографии

Вверху — результат модели, внизу — данные с полисомнографии

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

Оценка качества сна учитывает:

  • общую длительность сна и длительность его фаз;

  • суммарную длительность awakes — пробуждений;

  • эффективность сна — отношение его продолжительности  к общему времени лежа в кровати;

  • возраст пользователя; 

  • время засыпания и стабильность сна;

  • тайминг.

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

Для валидации данных полисомнографии нам также потребовалось эмулировать работу SoC, включая таймеры, GPIO и UART. Два месяца мы дорабатывали эмулятор, взяв за основу QEMU Cortex-m4. В неё помещалась прошивка кольца с урезанным функционалом — минус все микроконтроллеры, кроме основного. По QEMU UART можно было передавать пакеты «сырых» данных с кольца, на котором была установлена специальная прошивка, и прогонять эти данные через всевозможные алгоритмы.

Забегая вперёд: в ходе бета-теста выяснилось, что полисомнография — самое точное комплексное исследование сна — обладает одним минусом. Мы вдруг заметили, что кольцо недостаточно точно фиксирует awakes, то есть пробуждения во время сна. До этого проблему не удалось обнаружить из-за специфики полисомнографии. В ходе исследования на человеке закреплено множество датчиков. Ему неудобно, и, засыпая, он то и дело просыпается опять. Соответственно, график пробуждений на полисомнографии не соответствует графику в реальности.

Вверху — awakes на полисомнографии (ПСГ), внизу — при домашнем сне. Можно заметить, что в ходе ПСГ человек регулярно просыпается вечером и ночью, а дома пробуждения в основном приходятся на утро

Вверху — awakes на полисомнографии (ПСГ), внизу — при домашнем сне. Можно заметить, что в ходе ПСГ человек регулярно просыпается вечером и ночью, а дома пробуждения в основном приходятся на утро

Пришлось добавить дополнительный алгоритм, который уточняет данные ML-модели именно в разрезе пробуждений. Он потребовал сбора данных ценой спокойного сна команды разработки. По ночам они вставали, фиксировали в тетрадке пробуждение и ложились обратно (плюс записывали свою активность до и после сна). Затем эти данные сравнивались с показателями их Умных колец Sber. Это позволило валидировать данные с датчиков, которые показывают, что человек проснулся. Мы также дополнительно проводили эксперименты с домашними ПСГ — вручали испытуемым медицинские приборы, с которыми они спали дома, чтобы использовать данные для дообучения модели.

Кроме того, в рамках исследований стресса наши партнёры из ННГУ провели 60 медицинских исследований, изучая реакцию организма на специально созданные контролируемые нагрузки. В частности, применялись два метода:

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

  • метод Струппа. Когнитивно-психологический тест: испытуемому показывают карточки, где название цвета написано другим цветом. Его задача — называть цвет, которым написано слово.

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

Почти сайзкодинг, энергоэффективность и сихронизации 

В разработке software кольца ключевыми для нас оказались три характеристики. Во-первых, оно небольшое — всего 5 граммов. Во-вторых, оно мониторит показатели самочувствия владельца круглосуточно (в нём можно и нужно спать, принимать душ, заниматься спортом). В-третьих, согласно продуктовым требованиям его можно не заряжать до семи дней. Соответственно, в разработке приходилось постоянно учитывать:

  • Эффективность использования памяти. Данные, логи, системные и пользовательские метрики хранятся локально в кольце.

  • Энергоэффективность. Реализация возможностей кольца должна как можно меньше разряжать устройство. 

Память кольца — 1 Мб flash и 256 Кб оперативной памяти процессора (RAM), плюс дополнительная флэшка на 4 Мб для хранения показателей самочувствия как владельца, так и самого кольца. Для примера, у нас сейчас свободно 10% RAM и 8 Кб данных на флэшке.

Реализовав примерно 60-70% от планируемого, мы упёрлись в ограничение объёма памяти, а оно, в свою очередь, создало максимально жёсткие требования по соотношению полезности кода к его объёму. Каждая новая фича, которую реализовывала команда, требовала улучшения алгоритмов… без повышения энергопотребления и с минимальным потреблением памяти.

С этого момента команда разработки параллельно с разработкой занималась беспрерывным рефакторингом. Мы прибегали к:

—  улучшению архитектуры;

— переходу на другой формат сохранения и передачи данных;  

—  переиспользованию кода;  

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

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

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

PPG-сенсор позволяет отслеживать пульс и насыщение крови кислородом. В него входят три LED-светодиода зелёного, красного и инфракрасного диапазонов и два фотодиода, принимающих отражённое излучение от светодиодов. Принцип работы PPG основан на измерении объёма крови в мелких сосудах (капиллярах) и артериях в зависимости от фазы сердечного цикла; когда сосуды наполняются кровью, это влияет на количество поглощённого и отражённого света.

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

Тем не менее, полученное значение оказалось слишком приблизительным. Поэтому пришлось провести дополнительный тест SNR (signal-to-noise ratio). Что было сделано:

  • подготовили специальную прошивку, в которой мы по bluetooth могли управлять мощностью светодиодов и эквивалентным сопротивлением, установленным на АЦП;

  • поместили печатную плату с этими компонентами (PCBA) с вышеупомянутой прошивкой в светонепроницаемый ящик, внутри которого установили на определённом расстоянии от PCBA специальную полоску белого цвета;

  • измеряли уровень SNR методом отключения сигнала — сначала измерение уровня сигнала на фотодетекторе без свечения фотодиода, потом с ним.

Так удалось подобрать значения мощности светодиодов, которые позволили попасть в норматив по энергопотреблению и вместе с тем качественно улучшить сигнал. К примеру, SNR на зелёном светодиоде повысился с 70 Дб до 83.

Ювелирная работа, или Как мы разрабатывали Умное кольцо Sber (часть 1) - 5

Первые три — графики зависимости SNR от мощности и времени экспозиции при зафиксированном значении резистора на АЦП для красного, инфракрасного и зелёного светодиодов. Внизу справа зависимость SNR от мощности зелёного светодиода и резистора на АЦП при зафиксированном значении времени экспозиции.

Ещё одним вызовом для энергоэффективности кольца стала настройка синхронизации между данными акселерометра (ACC) и PPG-сенсора на уровне прошивки. Изначально мы использовали программное прерывание для генерации тактирующего сигнала для датчиков, но это существенно повышало энергопотребление кольца. Тогда мы решили использовать часовой (RTC) генератор микроконтроллера с кварцевым резонатором на 32 кГц для генерации сигнала синхронизации уже по аппаратному прерыванию, что позволило «замедлять» микроконтроллер между периодами сбора данных сенсорами и таким образом экономить энергию. Считанные данные собираются в блоки длительностью в 1 секунду реального времени и подаются в алгоритмы. 

Как итог, синхронизация данных позволила дополнительно улучшить работу всех алгоритмов, основанных на данных ACC и PPG. Например, пульс в покое стал считаться с точностью до 1 bpm по сравнению с референсными значениями, улучшилось качество определения начала и конца сна.

Баги, их фиксы и вычисления с плавающей точкой

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

Например, на некоторых кольцах мы получили баг: в процессе разработки начал зависать сам bluetooth-стек. Из-за редкости возникновения не удавалось поймать этот баг на PCBA в режиме отладки. Единственное, что мы могли сделать — ждать возникновения проблемы на большой выборке пользователей. После проявления пользователю необходимо было ждать 10 дней, когда оно полностью разрядится. Заряжаясь, оно с нуля запускало прошивку, и мы могли решать проблему. 

Что дело в bluetooth, было понятно сразу: хотя к кольцу нельзя было подключиться, остальные алгоритмы работали — кольцо продолжало считать метрики и следить за зарядом. Часть проблемы удалось решить обновлением операционной системы — nrf Connect SDK от Nordic использовал довольно старый релиз, с тех пор были обнаружены и исправлены многие ошибки. Но ошибка, пусть и стала намного реже воспроизводиться, по-прежнему возникала.

В итоге мы запустили ферму из PCBA, на которых постоянно подключались/ отключались от них по BLE. Удалось воспроизвести баг — добавив много-много логов, локализовали проблему.

Zephyr RTOS аллоцирует память на BLE-буферы. Вместе с тем очистка этих буферов в OS была реализована не особенно корректно. Соответственно, в определённых условиях все буферы занимались, а новые не появлялись. Контрибьютеры Zephyr вносили изменения в функционал многопоточного управления буферами памяти до тех пор, пока не решено было переехать из выделенных потоков в системный workqueue. В Zephyr был проведён соответствующий рефакторинг, который затрагивал большое количества кода для работы с bluetooth-стеком. Переносить весь этот функционал не решились с учётом объёмов необходимых после тестов. Поэтому мы максимально аккуратно дополнили освобождение буферов в тех местах, которые считали необходимыми. Проблема перестала воспроизводиться вовсе.

В начале бета-тестирования кольца появился, пожалуй, самый неприятный баг за всё время разработки: оно зависало. Причём исключительно ночью, когда владелец спал в кольце. Соответственно мы не могли посмотреть логи. Дело в том, что основной механизм при отладке в команде firmware — просмотр UART/RTT логов в режиме реального времени, но для этого необходима «полоска». Крепить полоску к специальной плате, а плату к ноутбуку ночью для отслеживания сна не представлялось возможным. 

Для решения проблемы мы ввели дополнительные способы сбора отладочной информации — сделали хранилище логов в энергонезависимой памяти, стали передавать логи по BLE (что серьёзно сказывалось на энергопотреблении), добавили сохранение дампа оперативной памяти как при обнаружении каких-либо проблем в работе операционной системы, так и при каждой перезагрузке кольца. Воспроизвести баг днём не удавалось. Логи для дебага хранились в специальном хранилище на кольце, которого хватало примерно на несколько недель ношения устройства. Но просмотр получаемых логов не давал никакого результата: в момент зависания как будто все переставало работать. 

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

Как спит тестировщик кольца

Как спит тестировщик кольца

Разумеется, дело было собственно в ночном времени и конкретно во сне. Проблема оказалась в одновременной работе с FPU из нескольких потоков, а зависание происходило во время переключения между ними. Одним из алгоритмов, активно использующих вычисления с плавающей точкой, был алгоритм расчёта сна. Поэтому проблема и проявлялась, когда пользователь спал. 

Часть алгоритмов пришлось переписать на целочисленные расчёты, сон остался на расчётах с плавающей точкой. И всё сразу прошло.

Обучение GigaChat, дообучение и промпт

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

Ювелирная работа, или Как мы разрабатывали Умное кольцо Sber (часть 1) - 7

В приложении владельцу Умного кольца Sber доступны как его личные показатели, так и персонализированные рекомендации от GigaChat. При этом персональный помощник получает физиологические метрики и интерпретирует их сам плюс алгоритмы отдают ему оценки комплексных метрик.

Реализовать продвинутого помощника получилось за счёт специальной подготовки GigaChat в медицинском домене. Модель обучили и дообучили на медицинских данных, собранных с помощью специалистов-медиков из разных областей медицины. Всего в обучении использовалось более 70 Гб претрейна по 72 врачебным специальностям, в который вошли все актуальные медицинские пособия и клинические рекомендации.

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

Тестирование проходило как на теоретических данных, так и на практических, использовался навык AI работать с изображениями, реальные медицинские кейсы. Дополнительно стоит отметить, что в общем-то дообучение GigaChat и проверка его на медицинских экзаменах и ранее. В 2024 году он успешно прошёл тестирование, которые проходят люди-терапевты для аккредитации по специальности «Лечебное дело»; в феврале этого года сдал экзамен по специальности «Кардиология».

Формулируя промпт, которым руководствуется помощник с искусственным интеллектом GigaChat при общении, мы заложили в него несколько разумных ограничений. Так, он (закономерно) не рекомендует лекарства, БАДы, медицинские процедуры и методы диагностики. Ему нельзя интерпретировать данные как диагноз. Словом, GigaChat в приложении Умного кольца Sber должен стать помощником по вопросам ЗОЖ, который вдобавок знает показатели вашего организма.

В процессе разработки устройства вышла вторая версия модели — GigaChat 2.0 Max — которая дополнительно улучшила качество ответов.

Заключение

Мы начали разрабатывать Умное кольцо Sber как устройство, которое мониторит и анализирует показатели организма, а пока совершенствовали его — пришли к комплексному wellbeing-продукту. Оно отслеживает не только сами метрики, но и тренды: приложение сообщит, если по данным кольца состояние пользователя за последние семь дней стабильно отклоняется от нормального, и даст детальный отчет. Из оповещения можно перейти в сервис СберЗдоровье и оперативно записаться на консультацию специалиста. Искусственный интеллект GigaChat в удобном приложении даёт рекомендации с опорой одновременно на свои медицинские знания и показатели организма владельца. Словом, получилась полновесное отечественное носимое устройство, которое систематически помогает пользователю менять свой образ жизни к лучшему.

***

В подготовке статьи участвовали: Никита Дранишников, Михаил Базик, Станислав Унмут, Максим Потапов, Владимир Кондратенко, Роман Гуркин, Саид Насрулаев, Маркос Легра Санчес

Автор: valentina-p

Источник

Rambler's Top100