轻量级AI模型具有高效、实时、低功耗、隐私保护以及部署灵活等优势,适用于各种资源受限的设备和应用场景。本文介绍了如何将AI嵌入到MCU(微控制器)中,并在嵌入式边缘系统上部署AI框架。嵌入式实验室的小伙伴们实现了TinyMaix on Zephyr,即采用超轻量级神经网络推理库TinyMaix、实时操作系统Zephyr RTOS以及开发板STM32H743实现了这一目标。
一、TinyMaix简介
TinyMaix是专为微控制器环境量身定制的超轻量级神经网络推理库,被广泛认为是Tiny Machine Learning(TinyML)领域的创新工具。其出现标志着即使在计算能力有限、资源高度受限的单片机平台上,也能实现高效、可靠的深度学习模型推理,极大地拓宽了人工智能技术的应用边界。
TinyMaix的核心价值在于其高度优化的算法与架构设计,确保即便是最基础的单片机系统也能进行神经网络运算。这意味着设备不仅可以进行实时的数据处理和智能决策,还能够以极低的功耗运行,这对于物联网设备、可穿戴设备、传感器节点等对续航能力有严格要求的应用场景尤为重要。
TinyMaix开源代码链接:TinyMaix[https://github.com/sipeed/tinymaix]
二、TinyMaix的关键特性
核心代码少于400行(tm_layers.c + tm_model.c + arch_cpu.h),代码段(.text)少于3KB。
低内存消耗,甚至Arduino ATmega328(32KB Flash,2KB RAM)都能运行TinyMaix进行手写数字识别(MNIST)。
支持INT8/FP32/FP16模型,实验性支持FP8模型,支持Keras H5或TFLite模型转换。
支持多种芯片架构的专用指令优化:ARM SIMD/NEON/MVEI,RV32P,RV64V等。
用户接口友好,只需加载和运行模型。
支持全静态内存配置(无需malloc)。
三、将TinyMaix移植到Zephyr
Zephyr内核的编译系统是一个以应用程序为中心的系统,应用程序驱动内核源码树的初始化和编译过程,最终生成一个单一的二进制文件。以下是我们在Zephyr上移植TinyMaix的步骤:
项目文件夹结构调整:在Zephyr的samples文件夹中创建一个新项目,将TinyMaix中的模型和相关代码放入其中,与Zephyr一起编译,生成包含Zephyr+TinyMaix+MNIST的可执行文件。
接口适配:TinyMaix需要对接平台内联、内存、打印等接口。我们通过修改宏定义将其适配到Zephyr平台的接口上。
#define TM_PRINTF(...) printk(__VA_ARGS__)
#define TM_DBG(...) TM_PRINTF("###L%d:”,__LINE__);TM_PRINTF(__VA_ARGS__);
#define TM DBGL( ) TM_PRINTF(“###L%d\N”,__LINE__);
浮点数输出处理:Zephyr的printk()函数不直接支持浮点数输出。我们通过将浮点数转换为一系列整数来实现浮点数的输出。
float test=maxp;
int tmp,tmp1,tmp2,tmp3;
tmp = (int)test;
tmp1=(int)((test-tmp)*10)%10;
tmp2=(int)((test-tmp)*100)%10;
tmp3=(int)((test-tmp)*1000)%10;
printf("prob %d.%d%d%d\r\n",tmp,tmp1,tmp2,tmp3);
计时宏定义适配:为了精准调试,适配了计时宏定义。
#include “../../../include/zephyr/kernel.h”
#define TM_GET_US( ) k_uptime_get_32();
#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)/1000;TM_PRINTF("===%s use”(x));int tmp=(int)_time;int tmp1=(int)((_time-tmp)*10)%10;int tmp2=(int)((time-tmp)*100)%10;int tmp3=(int)((_time-tmp)*1000)%10;printf("_start=TM_GET_US();}
四、TinyMaix运行效果展示
运行环境:STM32H743IIT6开发板
MNIST模型(手写数字识别):
识别效果图:
CIFAR-10模型(图像分类):
识别效果图:
KWS模型(音频识别):
识别效果图:
五、总结
湖南大学嵌入式实验室采用TinyMaix轻量级神经网络推理库、Zephyr RTOS以及STM32H743开发板,通过修改框架配置文件、宏定义、API接口并创建设备树,成功实现了AI模型在MCU上的部署。这展示了TinyMaix与Zephyr RTOS在边缘计算中的强大潜力,特别是在资源受限的嵌入式设备上的高效应用,为物联网、边缘计算等领域的智能设备开发奠定了基础。