Разверните структуру рассуждений TinyMaix в RT-Thread, чтобы расширить возможности MCU возможностями искусственного интеллекта.
Разверните структуру рассуждений TinyMaix в RT-Thread, чтобы расширить возможности MCU возможностями искусственного интеллекта.

обзор

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

Расцвет искусственного интеллекта в MCU

MCU AI означает искусственный интеллект на микроконтроллерах. Он внедряет модели машинного обучения и глубокого обучения в мощные микроконтроллеры с ограниченными ресурсами для достижения интеллектуального принятия решений и восприятия. Вот некоторые ключевые аспекты MCU AI:

  • Низкое энергопотребление: Микроконтроллеры обычно питаются от батареи.,Поэтому низкое энергопотребление имеет решающее значение. AIМодель нуждается в оптимизации,запускать на микроконтроллере,при этом минимизируя потребление энергии.
  • В реальном времени: Микроконтроллеры часто используются в системах управления реального времени.,Поэтому AIМодель необходимо выполнить в очень сжатые сроки.,для реагирования на насущные потребности.
  • Восприятие и принятие решений: MCU ИИ может дать устройствам возможность воспринимать окружающую среду, анализировать данные и принимать решения. Это особенно полезно для автономных роботов, интеллектуальных датчиков и систем автоматического управления.
Приложения MCU AI

MCU AI может применяться в самых разных областях, вот несколько примеров:

  • Умные устройства Интернета вещей: Искусственный интеллект на микроконтроллерах может сделать устройства Интернета вещей более умными, например, устройства «умный дом», «умное освещение» и «умные» дверные замки. Они могут изучать предпочтения пользователя и автоматически адаптироваться к различным средам.
  • Автономные роботы: ИИ на микроконтроллерах позволяет автономным роботам, таким как роботы-уборщики и дроны, избегать препятствий, планировать пути и выполнять задачи.
  • Медицинское оборудование:В медицинских устройствах MCU ИИ можно использовать для мониторинга жизненно важных показателей пациентов, обеспечивая раннее оповещение и лучший уход за пациентами.
  • Промышленная автоматизация: Искусственный интеллект на микроконтроллерах можно использовать в промышленных роботах, автоматизированных производственных линиях и системах контроля качества для повышения эффективности и качества.

авторНачните глубже вникать во встроенныеAIэто поле,Но прежде чем учиться, сначала поймите, как им пользоваться.,беги вставай. В этой статье рассказывается о том, как пересадить рамку вывода TinyMaix в RT-THREAD и запустить ее.

TinyMaix

TinyMaix: это проект, завершенный Sipeed за два выходных свободного времени. Это легкая библиотека машинного обучения с открытым исходным кодом, специально разработанная для микроконтроллеров и сверхлегких нейронных сетей для микроконтроллеров. Библиотека вывода TinyML позволяет выполнять легкое глубокое обучение. модели на любом микроконтроллере. Ссылка на открытый исходный код TinyMaix: https://github.com/sipeed/tinymaix.

Ключевые особенности TinyMaix
  • Основной код занимает менее 400 строк (tm_layers.c+tm_model.c+arch_cpu.h), а сегмент кода (.text) — менее 3 КБ.
  • Низкое потребление памяти, даже Arduino ATmega328 (32 КБ флэш-памяти, 2 КБ оперативной памяти) может работать с mnist (распознаванием рукописных цифр) на основе TinyMaix.
  • поддерживать INT8/FP32/FP16 Модель,экспериментально поддерживать FP8 Модель,поддерживать keras h5 или tflite Модель Конвертировать
  • Поддержка Специальная оптимизация инструкций для нескольких архитектур чипов: ARM SIMD/NEON/MVEI, RV32P, RV64V
  • Удобный для пользователя, просто загрузите/запустите Модель~
  • поддерживать Полностью статический Память Конфигурация(Незачем malloc )
  • Вскореподдерживать MaixHub Онлайн-обучение модели
Базовые зависимости TinyMaix

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

Язык кода:javascript
копировать
#define TM_ARCH_CPU                 (0) //default, pure cpu compute
#define TM_ARCH_ARM_SIMD            (1) //ARM Cortex M4/M7, etc.
#define TM_ARCH_ARM_NEON            (2) //ARM Cortex A7, etc.
#define TM_ARCH_ARM_MVEI            (3) //ARMv8.1: M55, etc.
#define TM_ARCH_RV32P               (4) //T-head E907, etc.
#define TM_ARCH_RV64V               (5) //T-head C906,C910, etc.
#define TM_ARCH_CSKYV2              (6) //cskyv2 with dsp core
#define TM_ARCH_X86_SSE2            (7) //x86 sse2

Для микроконтроллеров серии ARM-Cortex могут поддерживаться чистые вычисления ЦП и SIMD-вычисления. Часть вычислений ЦП не имеет особых зависимостей (все коды вычислений реализованы в стандарте C). В части SIMD некоторые расчетные коды реализованы с использованием встроенной сборки языка C. ЦП должен поддерживать соответствующие инструкции ассемблера для нормальной компиляции и работы.

Выбор уровня TinyMaix

TinyMaix в настоящее время поддерживает два уровня: 1. Выберите минимальный код и буфер. 2. Выберите скорость, для которой требуется больше кода и буфера.

Язык кода:javascript
копировать
#define TM_OPT0                     (0) //default, least code and buf
#define TM_OPT1                     (1) //opt for speed, need more code and buf
#define TM_OPT2                     (2) //TODO
Количественная оценка TinyMaix

TinyMaix поддерживает квантование с разной разрядностью:

Язык кода:javascript
копировать
#define  TM_MDL_INT8    0
#define  TM_MDL_INT16   1
#define  TM_MDL_FP32    2
#define  TM_MDL_FP16    3
#define  TM_MDL_FP8_143 4 //experimental
#define  TM_MDL_FP8_152 5 //experimental
Основной API TinyMaix

Основной API, предоставляемый платформой TinyMaix приложениям верхнего уровня, в основном находится в файле tinymaix.h в хранилище кода, где:

  1. API модели содержит четыре: Загрузка модели.,Модель Удалить,предварительная обработка,рассуждения.
Язык кода:javascript
копировать
/******************************* MODEL FUNCTION ************************************/
tm_err_t tm_load  (tm_mdl_t* mdl, const uint8_t* bin, uint8_t*buf, tm_cb_t cb, tm_mat_t* in);   //load model
void     tm_unload(tm_mdl_t* mdl);                                      //remove model
tm_err_t tm_preprocess(tm_mdl_t* mdl, tm_pp_t pp_type, tm_mat_t* in, tm_mat_t* out);            //preprocess input data
tm_err_t tm_run   (tm_mdl_t* mdl, tm_mat_t* in, tm_mat_t* out);         //run model
  1. Статистическая функция: используется для вывода информации о промежуточном слое модели.
Язык кода:javascript
копировать
/******************************* STAT FUNCTION ************************************/
#if TM_ENABLE_STAT
tm_err_t tm_stat(tm_mdlbin_t* mdl);                    //stat model
#endif
  1. Вспомогательные функции, включая преобразование между FP32 и uint8.
Язык кода:javascript
копировать
/******************************* UTILS FUNCTION ************************************/
uint8_t TM_WEAK tm_fp32to8(float fp32);
float TM_WEAK tm_fp8to32(uint8_t fp8);

Модель здесь обычно представляет собой модель формата TinyMaix, созданную путем преобразования сценария предварительно обученной модели;

TinyMaix портирован на RT-Thread

  1. Портированная на RT-Thread TinyMaix, рабочая нагрузка на самом деле меньше,В основном он адаптируется к файлу tm_port.h.
  2. Конфигурация RT-Thread заключается в установке некоторых параметров через Kconfig, поэтому для настройки я изменил тип оборудования, уровень выбора и тип квантования на Kconfig.
Язык кода:javascript
копировать
#define TM_ARCH                     R_TINYMAIX_USING_ARCK_TYPE
#define TM_OPT_LEVEL                R_TINYMAIX_USING_OPTION_LEVEL
#define TM_MDL_TYPE                 R_TINYMAIX_USING_MODULE_TYPE
  1. TinyMaix необходимо подключить к платформе онлайн.,Память,Печать и т. д. интерфейс,Поэтому мы модифицируем соответствующее определение макроса,Адаптируйте его к платформе RT-Thread.
Язык кода:javascript
копировать
#define TM_INLINE                   rt_inline
#define TM_WEAK                     rt_weak

#define tm_malloc(x)                rt_malloc(x)
#define tm_free(x)                  rt_free(x)

#define TM_PRINTF(...)              rt_kprintf(__VA_ARGS__)
  1. Отладка TinyMaix зависит от точного времени,Нам нужно адаптировать несколько соответствующих макроопределений,Потому что система RT-Thread не обеспечивает интерфейс микросекундного уровня.,Только миллисекунды интерфейса,Поэтому я сделал простую адаптацию.
Язык кода:javascript
копировать
#define TM_GET_US()                rt_tick_get_millisecond() / 1000;

#define TM_DBGT_INIT()              uint32_t _start,_finish;\
                                    float _time;\
                                    _start = TM_GET_US();

#define TM_DBGT_START()             _start = TM_GET_US();

#define TM_DBGT(x)                  {\
                                        _finish=TM_GET_US();\
                                        _time = (float)(_finish-_start) / 1.0;\
                                        TM_PRINTF("===%s use %.3f ms\n", (x), _time);\
                                        _start=TM_GET_US();\
                                    }
  1. TinyMaix предоставляет несколько экземпляров,Такие как: cifar10,mnist,vwwetc.,RT-Threadподдержка ввода командной строки,Например, вы можете запустить их через командную строку,Нам нужно изменить имя файла и имя интерфейса.
  • Мы изменили файл main.c в трех экземплярах cifar10, mnist и vww в примерах на имена соответствующих экземпляров: cifar10.c, mnist.c, vww.c.
  • Измените функцию main в cifar10.c, mnist.c, vww.c, указав соответствующее имя экземпляра.
Язык кода:javascript
копировать
int cifar10(int argc, char** argv)

int mnist(int argc, char** argv)

int vww(int argc, char** argv)
  • Экспортируйте интерфейс экземпляра в командную строку.
Язык кода:javascript
копировать
MSH_CMD_EXPORT(cifar10, TinyMaix cifar10 example);

MSH_CMD_EXPORT(mnist, TinyMaix mnist example);

MSH_CMD_EXPORT(vww, TinyMaix vww example);

Эффект операции TinyMaix

Рабочая среда примера: STM32F401RE, ядро ​​M4, тактовая частота: 84 МГц, ОЗУ: 96 КБ, Flash: 512 КБ.

  1. Пример cifar10, обнаружение классификации, идентификация изображения как птицы:
  1. Мнист пример, распознавание номера, на картинке цифра 2:
  1. Например, определите, есть ли кто-нибудь или нет, и есть ли кто-то на картинке:

Подвести итог

  1. TinyMaixавтор Уже сделал одинRT-Threadпакет программного обеспечения:r-tinymaix。Можно найти вRT-ThreadВы можете убедиться в этом, добавив программный пакет в проект.。
  2. Ссылка на открытый исходный код для r-tinymaix:https://github.com/RiceChen0/r-tinymaix
  3. TinyMaix великолепен, он может дать обычному микроконтроллеру возможности ИИ и снизить стоимость встроенного ИИ.
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose