Быстрое обнаружение Covid-19 на рентгеновских снимках с помощью Raspberry Pi +15


AliExpress RU&CIS

Системы обнаружения Covid-19 на рентгеновских снимках выдают быстрые результаты, в частности информацию о том, насколько серьёзно лёгкие поражены вирусом Covid-19. Традиционные системы обнаружения Covid-19 обладают тем недостатком, что для формирования отчётов им требуется довольно длительное время, в то время как инфицированный человек нуждается в немедленной помощи. Кроме того, после каждого использования всех подобных систем обнаружения вируса часть деталей приходится утилизировать, что в некоторых случаях может приводить к их дефициту. К старту курса о машинном и глубоком обучении мы перевели статью о том, как эта проблема решается при помощи Raspberry Pi, кроме того, материал знакомит читателей с онлайн-платформой EDGE Impulse.


Наша система обнаружения Covid-19 на рентгеновских снимках требует лишь однократной установки и связки с рентгеновским аппаратом, после чего может работать сколько угодно времени. Она способна определять состояние инфицирования лёгких значительно быстрее традиционных систем. Такого результата можно достичь двумя способами: с помощью библиотеки Python или посредством создания и тренировки ML-модели. В этой статье мы расскажем, как создать и обучить модель. В скором времени мы опубликуем статьи о других методах, в которых используется предварительно обученная модель.

Что для этого нужно 

Решение задачи начнём с подбора компонентов.

Вместо HDMI-дисплея можно работать с дисплеем ноутбука, любым монитором или телевизором. Потребуется также рентгеновский снимок лёгких.

Предварительные требования

На Raspberry Pi должна быть установлена последняя версия ОС Raspbian. Также необходимо подготовить наборы данных для рентгеновских снимков лёгких, инфицированных и не инфицированных Covid-19. Такие снимки можно получить на сайте kaggle — онлайн-ресурсе, где размещены рентгеновские снимки инфицированных пациентов, предоставленные сообществом экспертов и врачей. Аналогичные данные приведены на портале GitHub. Загрузим наборы данных рентгеновских снимков здоровых лёгких и лёгких, инфицированных Covid-19. 

Теперь выберем платформу для создания ML-модели и обучим её обнаруживать на рентгеновских снимках инфицированные вирусом лёгкие. Здесь у нас есть разные варианты, например TensorFlow, PyTorch или онлайн-платформы: SensiML, Apache Spark, EDGE Impulse и так далее. Я выбрал EDGE Impulse.

В интерфейсе Edge Impulse переходим в меню создания проекта. Система спросит, как мы намереваемся использовать проект. Поскольку мы будем работать с проектом для создания ML-модели обработки изображений, выберем вариант, связанный с работой с изображениями.

Затем система спросит, как нужно классифицировать изображение (классификация одного или многих объектов). Здесь можно выбрать любой вариант. Я выбрал классификацию одного объекта (рис. 2). Щелчком мыши выберем только что созданный проект. Здесь система предложит указать, как его необходимо использовать. Выберем пункт Connect a development board (Подключение макетной платы). Через эту плату данные будут загружаться в проект (рис. 3).

1. Создание проекта
1. Создание проекта
2. Выбор типа для классификации
2. Выбор типа для классификации
3. Подключение макетной платы
3. Подключение макетной платы

Установка на Raspberry Pi 

Откроем окно терминала и с помощью приведённых ниже команд установим на Raspberry Pi зависимость для EDGE_Impulse:

curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
sudo apt install -y gcc g++ make build-essential nodejs sox gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps
npm config set user root && sudo npm install edge-impulse-linux -g --unsafe-perm

После установки запускаем Edge_Impulse командой edge-impulse-linux. Нам будет предложено ввести адрес электронной почты и пароль для EDGE Impulse. Вводим требуемые данные и входим в систему (рис. 4).

4. Вход в систему с помощью адреса электронной почты и пароля
4. Вход в систему с помощью адреса электронной почты и пароля

Система попросит выбрать проект, к которому должно быть подключено устройство. Указываем название проекта (в моём случае это COVID-19 Detector) (рис. 5).

5. Выбор проекта
5. Выбор проекта

Подготовка набора данных 

Система выдаст URL-адрес для загрузки набора данных. Есть два варианта загрузки наборов данных рентгеновских снимков: либо через камеру Raspberry Pi (поместив рентгеновские снимки в кадр камеры), либо загрузив файлы фотографий средствами ПК/Raspberry Pi (рис. 6). Я рекомендую второй вариант. 

Чтобы вручную загрузить с ПК наборы данных, то есть изображения рентгеновских снимков, выберем эти наборы в качестве тестовых и тренировочных изображений. Выбрав наборы, загрузим их для обучения и установим метки [в оригинале level, крайне вероятна сложная опечатка — label, о пороге принятия решений речь идёт далее] для классификации изображений. Здесь я устанавливаю метку Covid-19 infected (Covid-инфицированные лёгкие) и Normal Lungs (Здоровые лёгкие) (рис. 8). Далее загружаем рентгеновские снимки здоровых лёгких и лёгких, инфицированных Covid-19.

6. Получение URL-адреса для создания модели
6. Получение URL-адреса для создания модели
7. Загрузка набора данных с использованием камеры Raspberry Pi для модели
7. Загрузка набора данных с использованием камеры Raspberry Pi для модели

 

8. Загрузка данных из файла изображения
8. Загрузка данных из файла изображения

Если вы не успели загрузить изображения в соответствующие категории, с помощью функции Edit (Редактирование) можно позже добавить и/или обозначить их как "Инфицированное лёгкое" или "Здоровое лёгкое". Размечая набор данных, пожалуйста, будьте осторожны. Если пометить рентгеновские снимки здоровых лёгких как Covid-инфицированные, модель будет обучена неправильно, и её точность будет снижена. Перед первоначальной загрузкой наборов данных (с веб-сайта) необходимо создать две отдельные папки: одну — для тренировочных, другую — для тестовых наборов данных. В обеих папках создадим ещё две папки с названиями Infected lung X-ray (Рентген инфицированных лёгких) и Normal lung X-ray (Рентген здоровых лёгких) соответственно. Загрузим отдельно изображения из обеих папок и после загрузки распределим их по соответствующим категориям (рис. 9). 

9. Установка уровня для рентгеновского снимка наборов данных для тренировки модели
9. Установка уровня для рентгеновского снимка наборов данных для тренировки модели

Повторим те же шаги, загружая рентгеновские изображения инфицированных и здоровых лёгких для тестовых наборов данных. Опция загрузки изображений для тестовых наборов данных находится рядом с опцией тренировки (рис. 10).

10. Вкладка тренировочных данных
10. Вкладка тренировочных данных

Тренируем модель

После загрузки рентгеновских снимков инфицированных и неинфицированных наборов данных модель готова к тренировке. Переходим на вкладку Impulse design, выбираем пункт Create Impulse и жмём кнопку Create Impulse (см. рис. 11). Затем добавляем блок обработки и блок обучения (рис. 12, 13).

11. Создание Impulse
11. Создание Impulse
12. Выбор блока обработки
12. Выбор блока обработки
13. Блок обучения.
13. Блок обучения.

После добавления блоков обработки и обучения необходимо определить параметры [в оригинале the parameter в единственном числе — опечатка]. Для этого нужно получить характеристики рентгеновского снимка и сохранить их (рис. 14, 15). Затем переходим к новой опции тренировки ML-модели. Для этого в экспертном или обычном режиме Keras выбираем тренировку создаваемой ML-модели. В нашем случае выбираем обычный режим. В этом режиме можно задать количество циклов обучения. При увеличении количества циклов обучения точность работы модели увеличится, так как она пройдёт через различные циклы обучения, но при этом также увеличится время, необходимое для обучения ML-модели. Здесь можно задать такие параметры, как порог принятия решений и скорость обучения, значения которых влияют на точность и время работы модели. 

15. 3D-визуализация признаков модели
15. 3D-визуализация признаков модели
16. Генерация параметра
16. Генерация параметра
17. Настройка и создание Ml-модели
17. Настройка и создание Ml-модели

В оригинале надпись к рисунку 15 — Feathers graph for ML model., вероятнее всего Features graph for ML model, то есть визуализация пространства признаков модели в трёхмерном пространстве.

Тестирование 

Теперь натренированная модель готова к тестированию. Протестировать модель мы можем с уже загруженным рентгеновским снимком, на котором модель попытается обнаружить инфекцию Covid-19 в лёгких.

18. Обнаружение инфекции по рентгеновскому снимку во время тестирования
18. Обнаружение инфекции по рентгеновскому снимку во время тестирования
19. Классификация снимка для проверки точности модели
19. Классификация снимка для проверки точности модели

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

Теперь наша ML-модель готова к развёртыванию. Развернуть созданную ML-модель для обнаружения инфекции вируса Covid-19 на рентгеновском снимке лёгкого можно многими способами и на разном оборудовании. Поскольку мы используем Linux, выбираем Linux. Затем открываем окно терминала и запускаем программу.

edge-impulse-runner-linux

После этого Raspberry Pi начнёт загрузку ML-модели и запустит её. Получаем URL-адрес, по которому можно наблюдать видео с камеры Raspberry Pi в реальном времени. Помещаем рентгеновский снимок лёгкого перед камерой (снимок должен быть хорошо освещён). Модель определяет инфицированное лёгкое и через несколько секунд выдает результаты Covid-теста.

Развёртывание ML-модели обнаружения Covid может быть осуществлено и другими способами. Используя SDK, можно обнаруживать Covid, развёртывая ML-модели на Python. Кроме того, можно загрузить рентгеновский снимок непосредственно в набор тестовых данных, а затем запустить ML-модель в режиме живой классификации — она сработает за считанные секунды.

20. Выбор платы для развёртывания
20. Выбор платы для развёртывания
21. Развёртывание ML-модели в Raspberry Pi
21. Развёртывание ML-модели в Raspberry Pi
22. Обнаружение инфицированного лёгкого по рентгеновскому изображению
22. Обнаружение инфицированного лёгкого по рентгеновскому изображению

 

24. Вывод результатов
24. Вывод результатов
23. Обнаружение инфекции по рентгеновскому снимку
23. Обнаружение инфекции по рентгеновскому снимку
24. Здоровые лёгкие идентифицируются как здоровые
24. Здоровые лёгкие идентифицируются как здоровые
25. Обнаружение вирусной инфекции внутри лёгкого на рентгеновском снимке
25. Обнаружение вирусной инфекции внутри лёгкого на рентгеновском снимке

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

Такое сочетание Raspberry Pi в решении проблемы коронавируса одним людям покажется очевидным, но другим — неожиданным. Область ML сегодня бурно развивается, расширяет сферу влияния, так что впереди нас ждёт ещё много больших и маленьких парадоксов и неожиданностей самого разного рода. Если вы не хотите оставаться в стороне от прогресса ML, то вы можете присмотреться к нашему курсу о машинном и глубоком обучении, который может стать для вас источником новых идей и решений.

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

Другие профессии и курсы




Комментарии (19):

  1. AlexVist
    /#23149450 / +1

    Вместо HDMI-дисплея можно работать с дисплеем ноутбука, любым монитором или телевизором. Потребуется также рентгеновский снимок лёгких.

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

    • ole325
      /#23151112

      это важно если на снимок смотрит врач, а тут все что требуется это младший медицинский персонал прочитать Infected или Normal, после чего направить дальше.

      • AlexVist
        /#23154918

        Это у вас, батенька, какая-то антиутопия в рассуждениях.
        Может а ну их эти снимки вообще! Ведь и врачи у вас уже исключены из процесса вообще! Как и оборудование для того чтобы можно было на снимки смотреть.
        Ладно Собянин и компания вводят везде ИИ для всего. Но думать то своей головой немного нужно.
        А вам очень даже искренне желаю попасть на диагностику и лечение вашей же системы.
        Вот она изречет… А вы потом трепыхайтесь на каталке со словами "Может еще что-то можно сделать?", а вам в ответ "ваш ИИ сказал в морг, значит в морг! Не занимайтесь самолечением!"

        • ole325
          /#23155312

          Антиутопия, это ламповый ренген, или цифровой ренген с разрешением 150х150 точек.
          Тут речь про обработку готового снимка, и если вы не в теме по ренгену даже на 4К мониторе врач, а не мед. сестра, диагноз COVID-19 поставить не может, вообще не может. По этой причине вместо относительно дешевого и распространенной флюрографии, приходится делать КТ, которых в десятки раз меньше по стране.
          Альтернатива ПЦР-тест с точностью около 50%, который не только говорит «здоров» больным, но и «выявляет» ковид у здоровых, приговаривая к 2х недельному отдыху за свой счет.

          • AlexVist
            /#23162004

            Я посмотрел в ваш профиль.
            У меня уже у самого возникли вопросы на сколько вы в теме? Очевидно, что вы не медик.
            Оговорюсь сразу, что я сам успел поработать с медициной в вопросах стерилизации, искусственной почкой, лабораториями, и вообще с нефрологической службой. Естественно как ит-специалист.
            Честно скажу, что ваша уверенность в вопросах медицины и организации процессов или работы персонала граничат с безумством.
            Давайте все же будем исходить, что "Кесарю кесарево, а слесарю слесарево".
            Уясните простую истину, что лечение и диагностика были и без рентгеновских снимков. И главную роль играют не системы, не мониторы, ни оборудование, а специалист-врач. И диагноз ставить должен он! Все остальное — это прикладные инструменты, которые призваны облегчить врачу работу. И ни в коей мере его не заменять.
            К сожалению внедрение описанных вами систем уже приводит к тому, что врачам не позволено спорить с выводами программ. Не важно как это происходит. В основном административно-карательными мерами.
            Я реально и искренне считаю, что вам нужно оказаться пациентом, где такой черный ящик вас "приговорит". А медицинский персонал, даже видя что система ошиблась уже не рискнет оспаривать. А ведь речь будет идти о вашем личном здоровье. Может и жизни.
            Все мы были молодыми и энтузиастами. И хотели изменить мир к лучшему. Но повзрослев понимаем, что для этого нет простых решений. И что для этого нужно проявлять уважение. Особенно, когда касается смежных областей. И особенно в области медицины.
            Ну и raspberry все же не годится для промышленных решений. Тем более в медицине. Никто же не отменял требований к оборудованию.


            Как пример вам из стерилизации. Положено проводить обработку ветошью смоченной в (агрессивное) дезсредство. Далеко не каждое поделие выдержит такую обработку.

            • ole325
              /#23162090

              Откройте хотя бы «Временные методические рекомендации» вер. 9 и прочитайте.
              В вашем понимании врач может заменить и КТ и в ренгене все видит, но это не так.
              По факту вся диагностика это послушать, что вообще никак не выявляет ковид-19, измерить кислород в крови, все что может сделать врач по вызову на дом. А дальше пока температуры 39С не будет, пока кислород не упадет никуда вас не повезут.
              В мае прошлого года из красной зоны у врача +, у контактных ничего не проверяли, результат вся семья слегла. В больницу не берут, на КТ не везут, после этого врач участковый сидел у них и вызывал скорую, сказали выбирайте одного из 4х отвезем на КТ. Еще раз повторю единственный достоверный способ диагностики это КТ, а тут ребята научили ИИ определять по ренгену, хоть с какой то вероятностью больше 50%, врач не определит, т.к. нет рекомендаций и не видно это на ренгене.
              Смысл этой истории на участке иметь не 2000 ОРВИ с подозрением на ковид, и из них направить 20 человек на КТ, а остальные 1980 будут ходить и всех заражать, а направить всех. И уже как минимум половина будет под усиленным присмотром.

              Касательно система приговорит, к чему приговаривает сейчас тест ПЦР? две недели дома, если нет других симптомов. Никто вас без других симптомов лекарствами от ВИЧ лечить не будет. Тут речь про первичную диагностику, и это сильно лучше чем нечего вообще.
              Даже когда ИИ ошибется, и бригада скажет ковида нет, это не значит, что в другом случае вас бы повезли. Пока сами до КТ не дойдете не куда не повезут, если места еще останутся куда везти.

  2. stand_alone_complex
    /#23151114

    А, да? 7 инчей монитор, вебка 2мпх и малина всё что нужно для диагонстики? Интересная теория, зачем только я тогда хранилища на сотни тб под dicom делаю…

  3. Pilat
    /#23151458

    Какой процент ложноположительных и ложноотрицательных результатов?

  4. leon_nikitin
    /#23153156

    Я совсем не медик, но, вроде, как, на рентгеновских снимках можно увидеть, было/есть ли повреждение легких. Т.е., поставить диагноз, например, пневмонии. Про ковидлу снимки ничего не скажут. То, что ковидла могла спровоцировть эту самую пневмонию — это уже другое. Или я не прав?

    • ole325
      /#23155318

      Смысл, что ИИ научился определять именно то, что обычный врач не видит. Пусть хоть с точностью 55-65%, это уже что то, но думаю, там все несколько лучше.

      • leon_nikitin
        /#23155650

        Так а что ОН научился определять «именно»? Ковид? Или что-то другое?
        Медики, кстати, говорят, что вирус ковида так и не был выделен

        • ole325
          /#23162102

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

          • leon_nikitin
            /#23162798

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

            После того, как более-менее вылечился, сделал флюрогрофию у знакомого врача — зав. отделениям по этим самым флюрогрофиям. Она посмотрела снимок и однозначно определила, что у меня была двухсторонняя пневмония. Вот, увидеть последствия пневмнонии (бактериальной, кстати), это я понимаю. А вот по флюрогрофии увидеть вирус — это странно. Опять же, я не медик. Надо, кстати, у нее и спросить.

            • ole325
              /#23163008

              Врач не определит по рентгену именно ковид. А ИИ научился, об этом и статья

              • leon_nikitin
                /#23163102

                но врач и не искал на снимке ковидлу. врач смотрел, была ли пневмнония. зачем на снимке ковид искать?

                • ole325
                  /#23163504

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

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

  5. gorin_da
    /#23169198

    Когда народ уже успокоится со своим панико-вирусом? Во всей этой истории 90% - истерики, а самого вируса - 10%.

    • axe_chita
      /#23169598

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