Как стать автором
Обновить
242.24
FirstVDS
Виртуальные серверы в ДЦ в Москве

Второе чувство: разработка ИИ-носа

Время на прочтение10 мин
Количество просмотров3.6K
Автор оригинала: Benjamin Cabé
Шли долгие майские выходные 2020 года. Я, как и многие другие представители рода людского, сидел дома. Из-за пандемии у меня было свободное время, которое я тратил на улучшение моего рецепта хлеба. А несколькими днями ранее я заказал газоанализатор (Рис. A, под катом). Я полагал, что он идеально подойдёт для того, чтобы помочь мне наблюдать за хлебной закваской. У меня была надежда на то, что эта штука позволит мне идеально рассчитать время начала выпечки хлеба.



А потом я ещё обо всём поразмышлял. «Конечно, это отличный повод наконец начать разбираться в машинном обучении, о котором все сейчас говорят. Но… действительно ли мне это надо: печь десятки булок хлеба и собирать достаточно большой набор тренировочных данных, который позволит обучить искусственный интеллект нахождению взаимосвязи между запахом закваски и вкусовыми качествами готовой выпечки? Да и мука, кстати, в наши дни товар довольно-таки дефицитный».


Рис. A

Именно так я через несколько дней пришёл к идее создания самодельного универсального «машинного носа». Такого, который может распознать практически любой запах, узнавать который его научили. Это устройство основано на TinyML-нейронной сети, которую я обучил с использованием бесплатного онлайнового инструмента Edge Impulse, а потом загрузил на Arduino-совместимый микроконтроллер.

В ходе работы над этим проектом я узнал много нового, причём не только из сферы машинного обучения. Например, я спроектировал мою первую модель для 3D-печати и освоил основы газодинамики (воздушные потоки в моём устройстве, на самом деле, не вполне оптимальны). Я впервые сам создал нечто с нуля, и мне не терпится об этом рассказать. Ниже приведён пошаговый план, следуя которому можно построить такой же ИИ-нос, который сделал я.

Материалы и инструменты


Материалы


  • Wio Terminal — устройство, в котором микроконтроллер объединён с LCD-дисплеем (Seeed Studio, код товара 102991299).
  • Многоканальный газоанализатор Grove Multichannel Gas Sensor v2 (Seeed Studio, код товара 101020820). Предназначен для измерения концентраций следующих веществ в воздухе: двуокись азота (NO2, Nitrogen dioxide), окись углерода (CO, Carbon monoxide), этанол (C2H5OH, Ethyl alcohol), летучие органические соединения (VOC, Volatile organic compounds).
  • Корпус в виде носа, напечатанный на 3D-принтере. Загрузить файл модели можно здесь.
  • Плата Grove MOSFET (Seeed Studio, код товара 103020008).
  • Кабель — 4-проводной переходник c Grove-разъёма на Male-пины (Seeed Studio, код товара 110990210).
  • Вентилятор 25x25x10 мм, 5 В постоянного тока (например, такой как NMB Technologies 02510SS).
  • Защитная сетка для вентилятора 25x25 мм (Sunon FG-2).
  • Угловой кабель USB Type C (необязательно).
  • Плата расширения Wio Terminal Battery Chassis (необязательно), (Seeed Studio, код товара 103990564).
  • Винты, гайки и шайбы M2 и M3.
  • Соединительные провода для макетных плат, 100 мм (2).

Инструменты


  • 3D-принтер.
  • Компьютер с подключением к интернету (нужен только при подготовке устройства к работе, в ходе работы ИИ-носа не используется).

Создание искусственного носа


1. Подготовка компонентов



Рис. B

Файлы для 3D-печати корпуса в виде носа (Рис. B) можно найти здесь. А если хотите, можете взять свой Miniaturizer 3000, слетать на остров Пасхи и сделать уменьшенную копию одного из каменных истуканов.


Рис. C

На самом деле, для того, чтобы создать искусственный нос, делать для него интересный корпус необязательно. А вот без вышеперечисленных электронных компонентов (Рис. C) вам, совершенно точно, не обойтись. Собрать устройство довольно легко, достаточно соединить всё несколькими проводами. Пайка тут не используется.

2. Соединение электронных компонентов


Мозгом нашего носа будет Wio Terminal — Arduino-совместимая платформа, обладающая множеством интересных возможностей и вычислительной мощностью, достаточной для анализа запахов в реальном времени. Для обеспечения работы ИИ, основанного на TinyML, в любом случае нужны не такие уж и большие вычислительные ресурсы. Wio Terminal обладает встроенным LCD-дисплеем, а это значит, что мы можем, благодаря особой библиотеке (довольно хорошо продуманной!), создать привлекательный пользовательский интерфейс для нашего устройства. Подробности об этом смотрите здесь.

У Wio Terminal имеются удобные Grove-разъёмы, используемые в изделиях Seeed, но на базе этой платформы можно делать и проекты, которые выглядят аккуратнее, чем те, где компоненты подключаются к внешним разъёмам. А именно, речь идёт о слоте расширения, который совместим с Raspberry Pi и находится на задней части платы. Его использование для подключения различных датчиков и управляющих устройств позволяет скрыть все соединения внутри корпуса.


Рис. D

Газоанализатор подключён к интерфейсу I²C, а MOSFET (используемый для включения и выключения вентилятора, позволяющего устройству «вдыхать воздух») подключён к цифровому выходу D0. При сборке электронных компонентов устройства следуйте схеме, приведённой на Рис. D.

3. Сборка носа



Рис. E

Для того чтобы прикрепить Wio Terminal и вентилятор к задней части корпуса носа, нужно воспользоваться винтами M2 с шайбами и гайками (Рис. E).

Обратите внимание на то, что при установке вентилятора надо ориентироваться на направление вращения его лопастей и/или на обозначение направления создаваемого им потока воздуха. Но вы вполне можете ненадолго запитать его от линии 5 В, для того чтобы лишний раз убедиться в том, что благодаря вентилятору нос будет вдыхать, а не выдыхать воздух!


Рис. F

Плату многоканального газоанализатора нужно вдвинуть в соответствующее место корпуса, расположив так, чтобы датчики были бы направлены туда, где находятся ноздри (Рис. F).

4. Прошивка мозга


Как вы понимаете, мы говорим тут о Wio Terminal, а не о вашем мозге! Быстрее всего выяснить то, на что способен наш интеллектуальный нос, можно, воспользовавшись базовой моделью, которую я обучил простым вещам вроде распознавания запаха кофе.

Загляните сюда и скачайте готовую к использованию прошивку (firmware.uf2). Подключите Wio Terminal к компьютеру, используя USB-кабель, и войдите в режим загрузчика, дважды быстро переключив выключатель питания Wio. После этого устройство будет видно на компьютере как внешний USB-диск, на него можно будет скопировать файл прошивки, который вы только что скачали.

Если вы предпочитаете компилировать прошивки самостоятельно или, что скорее всего так и будет, решите развернуть на Wio совсем другую ИИ-модель, вам для компиляции и загрузки на устройство обновлённого кода понадобится лишь PlatrormIO. А перед этим, следуя инструкциям, приведённым в разделе «Обучение искусственного носа новым фокусам», нужно будет переучить модель.

Начинаем нюхать!


После успешного завершения копирования прошивки Wio Terminal автоматически перезагрузится и запустится в режиме обучения (Training mode), после чего покажет, в реальном времени график, визуализирующий сведения о различных газах, выявленных искусственным носом (Рис. 2 ниже).

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

Шпаргалка по пользовательскому интерфейсу


  • Джойстик (5-позиционный переключатель). Нажмите джойстик для переключения между режимами получения вывода (для показа текущего результата анализа) и обучения (показ необработанных сведений с датчиков). Нажатия джойстика влево и вправо позволяют переключаться между различными экранами приложения.
  • Верхняя левая кнопка. Она может называться «Button 1» или «Key A». С её помощью можно включать и выключать вентилятор.

Как работает газоанализатор?


Существуют газоанализаторы различных видов. Но чаще всего при их изготовлении используется полупроводниковая структура MOS (Metal Oxide Semiconductor, металл оксид полупроводник), которая при нагревании начинает вступать в реакцию с газами, содержащимися в воздухе, что приводит к изменению её сопротивления.

С этого момента нас меньше всего беспокоят вопросы химии, так как всё, что нужно для измерения сопротивления (и, следовательно, концентрации газа) — это старый добрый делитель напряжения. А датчики, используемые в нашем проекте, оснащены даже собственным микроконтроллером, который берёт на себя решение подобных вопросов, выдавая результаты измерений в цифровой форме, прочитать которые можно, воспользовавшись интерфейсом I²C.

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

Более того, нужно некоторое время на прогрев датчиков. Только после этого их показатели можно счесть точными. Поэтому, к сожалению, если включить устройство всего на пару секунд и попытаться что-то проанализировать, результаты, вероятнее всего, окажутся неудовлетворительными.

Больше датчиков — больше запахов


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

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

Чую грядущие улучшения


Есть много такого, что я, создавая корпус для ИИ-носа, хотел бы сделать. В частности, теперь я понимаю, что использование для этого программы Blender, а не специального CAD-продукта — это, вероятно, плохая идея. Нос выглядит хорошо, Blender способен создавать замечательные 3D-рендеры, но доработка модели в нём оказывается неоправданно сложной.

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

Вот ещё одно важное возможное улучшение. Можно воспользоваться встроенным в Wio модулем Wi-Fi для того, чтобы превратить нос в подключённое к интернету беспроводное устройство. Подобное устройство может оказаться очень кстати для мониторинга труднодоступных или удалённых от точки сбора данных мест. Например, это может быть контроль пространства над навесным потолком или наблюдение за состоянием воздуха в офисных туалетах для определения того, не пора ли в них сделать уборку.

В результате к тому моменту, как вы это прочтёте, в моём GitHub-репозитории, скорее всего, появятся инструкции, касающиеся того, как в реальном времени загружать на какую-нибудь IoT-платформу сведения о запахах, распознанных устройством. Я, кроме того, планирую сделать так, чтобы можно было бы удалённо, без необходимости физического присутствия человека, обновлять ИИ-часть носа.

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

А что вы можете об этом сказать? Может, в воздухе уже витает аромат улучшений, которые вы способны внести в его конструкцию?

Самодельное средство от аносмии?


Аносмией называют временную или постоянную потерю способности чувствовать запахи. Среди жителей США, возраст которых превышает 40 лет, около 3% страдают от полной аносмии, а 23% сообщают о неких изменениях в их способности воспринимать запахи. Сюда можно добавить и симптомы Covid-19, что даст нам ещё больше людей, обонятельная часть жизни которых каким-то образом нарушена.


С тех пор, как я начал рассказывать о своём проекте, постоянно слышал десятки историй тех, кто страдает от аносмии. Прокисло ли молоко в бутылке? Надо ли искупать собаку? Нужно ли мне в душ? Многие просто не могут ответить на такие вот обычные повседневные вопросы. И хотя недорогой самодельный электронный нос, скорее всего, в обозримом будущем не заменит нос человека, он, вполне вероятно, может стать хорошим компаньоном для тех, кто страдает от аносмии.

Обучение искусственного носа новым фокусам в Edge Impulse


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

В 75-м выпуске журнала Make Элен Ли рассказала о TinyML и об Edge Impulse — об отличном инструменте, который невероятно упрощает разработку ИИ-моделей для устройств с ограниченными вычислительными возможностями, например, для микроконтроллеров.

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


Рис. 1

Шаг №1


Перейдите на этот сайт и создайте клон моего базового проекта Edge Impulse в своей учётной записи (Рис. 1.). Это позволит вам расширить исходный набор данных собственными классами запахов или даже полностью заменить его чем-то своим.


Рис. 2

Шаг №2


Подключите искусственный нос к компьютеру по USB и проверьте, чтобы устройство находилось в режиме обучения (Рис. 2).

Шаг №3


Установите на компьютере инструменты командной строки Edge Impulse и запустите средство перенаправления данных, используя следующую команду:

edge-impulse-data-forwarder --frequency 10

Шаг №4


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


Рис. 3

Шаг №5


Дайте названия данным, поступающим с отдельных датчиков (Nitrogen dioxide, Carbon monoxide, Ethyl alcohol и Volatile organic compounds).

Шаг №6


Теперь устройство должно быть видно в разделе Data Acquisition (Получение данных) проекта Edge Impulse. Примите и промаркируйте столько образцов запахов того, что хотите различать, сколько сочтёте нужным.

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


Рис. 4

Шаг №7


Переучите модель с использованием новых данных, воспользовавшись инструментом Retrain Model (Переучивание модели). Если результаты работы вашей модели (Рис. 4) вас не устраивают — соберите больше исходных данных, а потом снова переучите модель.

Шаг №8


И, наконец, воспользуйтесь командой Deployment (Развёртывание) для экспорта проекта в виде Arduino-библиотеки. Это позволит вам загрузить ZIP-файл, содержащий только что обученную нейронную сеть. Замените папку lib/ei-artificial_nose-arduino в исходных материалах прошивки носа содержимым этого ZIP-файла.

Шаг №9


Используйте команду pio run для перекомпиляции прошивки и загрузите её на Wio Terminal. Теперь ваш искусственный нос переучен и готов к восприятию новых запахов.

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


— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS
Доступно до 31 декабря 2021 г.
Теги:
Хабы:
Всего голосов 33: ↑32 и ↓1+31
Комментарии1

Публикации

Информация

Сайт
firstvds.ru
Дата регистрации
Дата основания
Численность
51–100 человек
Местоположение
Россия
Представитель
FirstJohn