Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Как обучить алгоритм для обнаружения и предотвращения ранней слепоты

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

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

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

Для этого алгоритма мы разделили классы на пять разных наборов данных:

Как и в случае со многими общедоступными наборами данных, необходимо было выполнить некоторую очистку и маркировку данных.

Чтобы защитить личность пациентов, каждому изображению в наборе данных просто присвоили id_code и диагноз от 0 до 5, где 0 - самая низкая степень серьезности из-за отсутствия DR, а 5 - наихудшая, или пролиферативная DR.

Чтобы загрузить данные в Edge Impulse, необходимо было выполнить некоторое разбиение образов. Учитывая простой характер разделения данных, я решил написать сценарий VBA для чтения id_code изображения из Excel, захвата связанного изображения и помещения его в соответствующую папку. Ссылка на скрипт для перемещения этих файлов находится здесь. Для тех, кто лучше знает Python или другой язык сценариев, есть много способов сделать это, которые могут быть даже проще.

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

Edge Impulse имеет возможность автоматически разделять данные на данные обучения или тестирования с разделением 80/20. Однако я вручную добавил около 500 изображений из разных классов в тестовый набор данных.

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

Отсюда я пошел обучать нейронную сеть. Поиграясь с настройками нейронной сети, я показал наилучшую точность около 74%. Неплохо, но в некоторых крайних случаях модель застревала. Например, тяжелая DR иногда классифицируется как легкая DR. Модель не была очень точной по мере продвижения DR, как вы можете видеть на скриншоте ниже.

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

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

В голове у меня есть несколько изменений или улучшений, которые я мог бы внести в модель, которые могут сделать конечный результат более точным с точки зрения диагностики серьезности аварийного восстановления:

Поиграйте с количеством слоев в нейронной сети (NN), а также с отсевами.

С точки зрения развертывания, эта обученная модель имела больший объем памяти, занимая примерно 306 КБ флэш-памяти и 236 КБ ОЗУ. В зависимости от устройства, выбранного для запуска логического вывода, время, необходимое для предоставления результата логического вывода, составляло от 0,8 до 6 секунд при тестировании на Cortex-M4 на 80 МГц или Cortex-M7 на 216 МГц. Однако, учитывая, что этот конечный продукт должен будет делать изображения, я ожидаю, что потребуется что-то вроде возможностей обработки Cortex-M7 или выше.

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

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


Встроенный

  1. Как титан был открыт и использован людьми?
  2. Облако и как оно меняет мир ИТ
  3. Четыре типа кибератак и как их предотвратить
  4. Как предотвратить распространенные проблемы с тяжелой техникой и оборудованием
  5. Что такое сварочная пористость и как ее предотвратить?
  6. Что такое ржавчина и как предотвратить ржавчину? Полное руководство
  7. Основные причины сбоев машины и способы их предотвращения
  8. Что такое интероперабельность и как моя компания может ее достичь?
  9. Ловушки машинной охраны и как их предотвратить
  10. Как обнаружить утечки и устранить их