пятница, 14 мая 2021 г.

Создание приложения TinyML с помощью TF Micro и SensiML.

Создание приложения TinyML с помощью TF Micro и SensiML.

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

 К счастью, оборудование сейчас приближается к тому моменту, когда аналитика в реальном времени становится возможной. Безумно думать об этом, но процессор Arm Cortex-M4 может выполнять больше БПФ в секунду, чем процессор Pentium 4, при этом потребляя на порядки меньше энергии. Аналогичный выигрыш в мощности / производительности был достигнут в датчиках и беспроводной связи. TinyML позволяет нам использовать преимущества этих достижений в области оборудования для создания всевозможных новых приложений, которые раньше были просто невозможны. 

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

 Итак, что нужно для создания приложения TinyML?

 Создание приложения TinyML затрагивает набор навыков, начиная от аппаратной инженерии, встроенного программирования, разработки программного обеспечения, машинного обучения, науки о данных и знания предметной области о приложении, которое вы создаете. Шаги, необходимые для создания приложения, можно разбить на четыре части:

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

Это руководство проведет вас через все этапы, и к концу вы создадите оптимизированное для ребер приложение TinyML для Arduino Nano 33 BLE Sense, которое способно распознавать различные боксерские удары в реальном времени с помощью датчика гироскопа и акселерометра. данные от бортового датчика IMU.

Что вам нужно для начала

Мы будем использовать SensiML Analytics Toolkit для сбора и аннотирования данных датчиков, создания конвейера предварительной обработки датчиков и создания микропрограмм. Мы будем использовать TensorFlow для обучения нашей модели машинного обучения и TensorFlow Lite Micro для логических выводов. Перед тем, как начать, мы рекомендуем подписаться на SensiML Community Edition, чтобы получить доступ к SensiML Analytics Toolkit.


Программное обеспечение

     Мы будем использовать SensiML Open Gateway, приложение Python с открытым исходным кодом для потоковой передачи данных с пограничных устройств.
     Мы будем использовать лабораторию захвата данных SensiML (Windows 10) для записи и маркировки данных датчика.
     Мы будем использовать Google Colab для обучения нашей модели с помощью TensorFlow Lite для микроконтроллеров.
     Мы будем использовать SensiML Analytics Studio для автономной проверки и генерации кода прошивки.
     Мы будем использовать Visual Studio Code с расширением Platform IO для прошивки прошивки.

Аппаратное обеспечение

    Arduino Nano 33 BLE Sense
    Надстройка для литий-ионного рюкзака Adafruit (необязательно)
    Литий-ионный полимерный аккумулятор (3,7 В 100 мАч)
    Чехол Zebra Byte
    Перчатка и двусторонняя лента

Arduino Nano 33 BLE Sense имеет микроконтроллер Arm Cortex-M4, работающий на частоте 64 МГц, с 1 МБ флэш-памяти и 256 КБ ОЗУ. Если вы привыкли работать с облаком / мобильными устройствами, это может показаться крошечным, но многие приложения могут работать в такой среде с ограниченными ресурсами.

Nano 33 BLE Sense также имеет множество встроенных датчиков, которые можно использовать в ваших приложениях TinyML. В этом уроке мы используем датчик движения, который представляет собой 9-осевой IMU (акселерометр, гироскоп, магнитометр).

Для беспроводного питания мы использовали литий-ионный аккумулятор Adafruit. Если у вас нет аккумуляторной батареи, вы все равно можете пройти через это руководство, используя подходящий длинный кабель micro USB для питания платы. Хотя собирать данные о жестах не так весело, когда вы подключены к сети. На изображениях ниже показано подключение аккумулятора к Nano 33 BLE Sense.

Создание вашего набора данных

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

Для этого проекта мы собираемся собрать данные для 5 различных жестов, а также некоторые данные для отрицательных случаев, которые мы обозначим как «Неизвестно». 5 жестов бокса, для которых мы собираемся собирать данные: Jab, Overhand, Cross, Hook и Uppercut.


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


Передача данных датчика с Nano 33 через BLE

Первая задача проекта TinyML часто состоит в том, чтобы выяснить, как получить данные с датчика. В зависимости от ваших потребностей вы можете выбрать Wi-Fi, BLE, последовательный или LoRaWAN. В качестве альтернативы вы можете найти хранение данных на внутренней SD-карте и последующую передачу файлов - лучший способ сбора данных. В этом руководстве мы воспользуемся встроенным радиомодулем BLE для потоковой передачи данных датчиков от Nano 33 BLE Sense.

Мы собираемся использовать открытый шлюз SensiML, работающий на нашем компьютере, для получения данных датчиков. Чтобы загрузить и запустить шлюз, откройте терминал и выполните следующие команды:

git clone https://github.com/sensiml/open-gateway

cd open-gateway
pip3 install -r requirements.txt
python3 app.py
 

 Теперь шлюз должен работать на вашем компьютере.

Затем нам нужно подключить сервер шлюза к Nano 33 BLE Sense. Убедитесь, что вы установили прошивку для сбора данных на свой Nano 33. Эта прошивка реализует спецификацию Simple Streaming Interface, которая создает две темы, используемые для потоковой передачи данных. Тема / config возвращает JSON с описанием данных датчика, а тема / stream передает необработанные данные датчика в виде байтового массива значений Int16.

Чтобы настроить шлюз для подключения к датчику:

     Перейдите на адрес шлюза в вашем браузере (по умолчанию localhost: 5555)
     Щелкните вкладку "Главная"
     Установить режим устройства: сбор данных
     Установить тип подключения: BLE
     Нажмите кнопку «Сканировать» и выберите устройство с именем Nano 33 DCL.
     Нажмите кнопку Подключиться к устройству.

 

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

Настройка проекта лаборатории сбора данных

Теперь, когда мы можем передавать данные в потоковом режиме, следующим шагом будет запись и маркировка жестов бокса. Для этого мы будем использовать лабораторию сбора данных SensiML. Если вы еще этого не сделали, загрузите и установите Data Capture Lab для записи данных датчиков.

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

     Загрузите и распакуйте демонстрационный проект Boxing Glove Gestures
     Откройте лабораторию сбора данных
     Нажмите Загрузить проект.
     Нажмите Обзор, чтобы открыть окно проводника файлов.
     Перейдите в папку демонстрации жестов боксерских перчаток, которую вы только что разархивировали, и выберите файл «Жесты боксерских перчаток Demo.dclproj».
     Нажмите Загрузить

Подключение к шлюзу

После загрузки проекта вы можете начать сбор данных с датчиков. В этом руководстве мы будем передавать данные в лабораторию сбора данных со шлюза через TCP / IP. Чтобы подключиться к Nano 33 BLE Sense из лаборатории сбора данных через шлюз:

     Открыть демонстрацию жестов боксерских перчаток Project
     Нажмите Switch Modes -> Capture Mode.
     Выберите способ подключения: Wi-Fi
     Нажмите кнопку "Найти устройства".
     Введите IP-адрес вашего шлюза и порт, на котором работает сервер (обычно 127.0.0.1:5555)
     Нажмите "Добавить устройство".
     Выберите только что добавленное устройство
     Нажмите кнопку Подключить


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


Сбор данных датчика жестов бокса

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

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

    Выберите «Jab» в раскрывающемся списке «Ярлык» на экране «Свойства захвата». (это будет имя файла)
    Выберите метаданные, которые отражают контекст (предмет, перчатка, опыт и т. Д.)
    Затем нажмите кнопку «Начать запись», чтобы начать запись данных датчика.
    Выполните несколько жестов «джеба».
    По завершении нажмите кнопку «Остановить запись».

После того, как вы нажмете кнопку «Остановить запись», захваченные данные будут сохранены локально и синхронизированы с облачным проектом. Вы можете просмотреть файл, перейдя в Project Explorer и дважды щелкнув только что созданный файл.
GIF показывает мужской бокс, пока программа собирает данные


В следующем видео рассказывается о сборе данных с датчиков.


Аннотирование данных датчика

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

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

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

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

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

     Выберите файл в Project Explorer
     Нажмите кнопку "Определить сегменты".
     Алгоритм сегментации будет запущен для захвата, и найденные им сегменты будут добавлены в файл.

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

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

     Выберите один или несколько сегментов на графике
     Нажмите кнопку Изменить или (Ctrl + E)
     Укажите, какая метка связана с этим событием
     Повторите шаги 1-3 для всех сегментов захвата.
     Нажмите кнопку "Сохранить".


Построение модели TinyML

Мы собираемся использовать Google Colab для обучения нашей модели машинного обучения, используя данные, которые мы собрали из Nano 33 BLE Sense в предыдущем разделе. Colab предоставляет блокнот Jupyter, который позволяет нам запускать обучение TensorFlow в веб-браузере. Откройте блокнот Google Colab и следуйте инструкциям, чтобы обучить свою модель.
Автономная проверка модели

После сохранения модели перейдите в Analytic Studio, чтобы выполнить автономную проверку. Чтобы проверить модель на любом из файлов захваченных данных

     Откройте демонстрационный проект «Жесты боксерских перчаток» на вкладке «Сводка».

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


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

Развертывание и тестирование Nano 33 BLE Sense
Скачивание модели в виде прошивки

Теперь, когда вы проверили модель в автономном режиме, пора посмотреть, как она работает на краю. Для этого мы загружаем и прошиваем модель в Nano 33 BLE Sense.

     Перейдите на вкладку Download Model в Analytics Studio.
     Выберите HW Platform: Arduino CortexM4
     Выберите Формат: Библиотека
     Нажмите кнопку "Загрузить".
     Скомпилированный файл библиотеки должен загрузиться на ваш компьютер.

Прошивка прошивки

После загрузки библиотеки мы соберем и загрузим прошивку в Nano 33 BLE Sense. Для этого шага вам понадобится прошивка Nano 33 Knowledge Pack. Для компиляции прошивки мы используем код Visual Studio с плагином Platform IO. Чтобы скомпилировать вашу модель и прошить Nano 33 BLE Sense с помощью этой прошивки:

     Откройте свой терминал и запустите

git clone https://github.com/sensiml/nano33_knowledge_pack/

 

Разархивируйте загруженный пакет знаний.
В папке вы найдете следующие каталоги:

knowledgepack_project /

libsensiml /
Скопируйте файлы из libsensiml в nano33_knowledge_pack / lib / sensiml. Вы перезапишете файлы, включенные в репозиторий.
Скопируйте файлы из knowledgepack_project в nano33_knowledge_pack / src /

Перейдите на вкладку расширения ввода-вывода платформы в VS Code
Подключите Nano 33 BLE Sense к компьютеру с помощью кабеля micro USB.
Щелкните Загрузить и контролировать под nano33ble_with_tensorflow на вкладке PlatformI / O.

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


Просмотр результатов классификации

Чтобы увидеть результаты классификации в режиме реального времени, подключитесь к устройству через BLE с помощью Android TestApp или SensiML Open Gateway. При поиске устройств устройство будет отображаться с именем Nano33 SensiML KP. Мы обучили две модели, одну для левой перчатки и одну для правой перчатки. Вы можете увидеть демонстрацию работы обеих моделей одновременно в следующем видео.


Заключение

Мы надеемся, что этот блог предоставил вам инструменты, необходимые для начала создания сквозного приложения TinyML с использованием TensorFlow Lite для микроконтроллеров и набора инструментов SensiML Analytics. Для получения дополнительных руководств и примеров приложений TinyML ознакомьтесь с примерами приложений в нашей документации. Следуйте за нами в LinkedIn или свяжитесь с нами, нам нравится слышать обо всех удивительных приложениях TinyML, над которыми работает сообщество!


https://blog.tensorflow.org/2021/05/building-tinyml-application-with-tf-micro-and-sensiml.html

Комментариев нет:

Отправить комментарий