Архитектура облачной системы обнаружения на основе машинного обучения X-Ray COVID

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

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

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

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

Пользовательская история

Система должна обеспечивать функциональные возможности, чтобы пользователь (врач) мог входить в систему, регистрироваться и искать пациентов, используя идентификатор или их фамилии, заполнять диагностическую форму с указанием симптомов, температуры тела и очень краткой истории болезни, а также наконец, загрузите рентгеновское изображение в формате DICOM или JPG. Затем, через несколько секунд, пользователь получает диагностику, в которой указывается, есть ли у пациента COVID, какое-либо другое заболевание легких или он здоров. Этот результат получен в результате процесса классификации машинного обучения, который анализирует пиксели рентгеновских изображений и присваивает каждому изображению класс.

Модули и технологии

Три основных модуля предоставляют функциональные возможности для реализации этой пользовательской истории, а именно: 1) веб-приложение, 2) серверная часть и 3) контейнер для анализа изображений. В качестве поставщика облачных услуг был выбран AWS.

Веб-приложение

Это пользовательский интерфейс, написанный с использованием React.js; он был размещен для тестирования в surge.sh. Несмотря на то, что он еще не выпущен, производственный код был развернут в корзине AWS S3 с использованием CloudFront для обслуживания статического контента.

Веб-приложение использует общедоступный API, аутентифицированный с помощью веб-токена JSON (JWT), для связи с серверной частью.

Бэкэнд

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

Веб-сервер можно рассматривать как координатора всей системы. Он получает запросы API, аутентифицирует пользователей, а также читает и записывает в базу данных. Веб-сервер был размещен в Heroku и написан с использованием фреймворка Laravel. Функциональность событий Laravel использовалась для запуска ресурсоемких задач анализа изображений. Изображения отправляются на веб-сервер с использованием кодировки base64, затем они временно сохраняются в AWS S3. Внутренний сервис подключается к AWS с помощью AWS PHP SDK. После сохранения изображения его относительный URL-адрес корзины сохраняется в базе данных, и инициируется событие загрузки изображения. Прослушиватель, прикрепленный к этому событию, ставит задачу в очередь AWS SQS. Задача включает путь к хранилищу образа AWS S3, локальный идентификатор образа и диагностику, с которой он связан. По завершении анализа изображения оно публикуется в теме AWS SNS. Затем веб-сервер получает сообщение и сохраняет результат анализа изображения в базе данных, чтобы веб-приложение могло получить его с помощью конечной точки API.

Контейнер анализа изображений (IAC)

Это сердце системы обнаружения, и она размещалась в экземпляре t3.medium AWS EC2, поскольку у нее был хороший компромисс между виртуальными ЦП (2), памятью (4 ГБ) и ценой.

Был создан пользовательский образ Docker и создан контейнер для размещения кода и моделей TensorFlow. Для управления заданиями анализа с использованием AWS SQS и SNS использовался подход «вытягивание/выталкивание» следующим образом.

  1. IAC опрашивает SQS, чтобы получить пакет задач. Каждый элемент в пакете содержит изображение как ссылку на объект S3. IAC извлекает изображение из S3 и выполняет анализ с использованием модели Tensorflow.
  2. После завершения анализа получается вектор с результатом классификации, который загружается в виде объекта JSON в SNS, который управляет процессом доставки обратно на веб-сервер.
  3. HTTP POST с новым результатом отправляется на веб-сервер, который сохраняет результат, связанный с соответствующим изображением.

Уроки выучены

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

  1. На взаимодействие с пользователем влияет, если пользователю приходится ждать в сети обработки результата после загрузки изображения. Это может быть хуже, если есть другие задания, ожидающие обработки IAC.
  2. Время истечения POST-сообщений Heroku составляет 30 секунд. Таким образом, если задача требует больше времени, чем это количество времени, веб-сервер вернет клиенту ошибку HTTP.
  3. Если что-то пойдет не так в процессе анализа изображения, задание может быть безвозвратно утеряно, если оно где-то не сохранено.

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

  • После загрузки изображения клиенту немедленно возвращается HTTP-ответ, подтверждающий, что изображение было получено и что оно анализируется.
  • Очередь SQS можно настроить для доставки только определенного количества заданий в IAC, что предотвращает проблемы с памятью и перегрузку, поскольку нагрузка распределяется на длительный период. Наконец, SQS делает процесс более отказоустойчивым.
  • Если по какой-то причине IAC выйдет из строя, задания останутся в очереди необработанными. Когда IAC снова заработает, задания будут взяты с того места, где они были оставлены, без какой-либо потери информации.

Выводы

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