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

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

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

В этой серии публикаций я расскажу обо всех аспектах проекта в том порядке, в котором я их исследовал:

0. запустить минимальную нейронную сеть на Arduino
1. управлять двигателем на автомобиле
2. прочитать все датчики
3. понимать команды с пульта
4. автомобильная нейронная сеть
5. связать все вместе

Если хотите, можете купить такой же комплект за 70 долларов, как и я. Он содержит все, что вам нужно для проведения того же эксперимента. Весь код доступен в специальном публичном репозитории Github. Я организовал папки в том же порядке, что и в этой серии.

Найти библиотеку, способную работать на Arduino, было легко. Arduino может запускать код на C ++ или C, и после нескольких минут исследования GitHub я нашел идеального кандидата: Tinn.

Tinn (Tiny Neural Network) - это библиотека нейронных сетей, не зависящая от 200 строк, написанная на C99.

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

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

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

Как видите, выходные данные нейронной сети соответствуют набору обучающих данных.

Теперь давайте запустим его на Arduino. Для этого вам необходимо импортировать файлы Tinn.c и Tinn.h в Arduino IDE, включив библиотеку как внешний C. Затем вы можете использовать ее без каких-либо изменений. Далее код для отображения на последовательном терминале предсказания нейронной сети с учетом обучающего ввода.

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

Теперь мы загрузили наш проект. Мы можем обучить нейронную сеть на компьютере, а затем запустить ее на Arduino. Надеюсь увидеть вас в следующем посте, где мы разберемся, как управлять моторами автомобиля.