目前的位置: 首页 实验室新闻 正文

TinyMaix on Zephyr: 在Zephyr RTOS上部署TinyMaix推理框架


轻量级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的关键特性

  1. 核心代码少于400行(tm_layers.c + tm_model.c + arch_cpu.h),代码段(.text)少于3KB。

  2. 低内存消耗,甚至Arduino ATmega328(32KB Flash,2KB RAM)都能运行TinyMaix进行手写数字识别(MNIST)。

  3. 支持INT8/FP32/FP16模型,实验性支持FP8模型,支持Keras H5或TFLite模型转换。

  4. 支持多种芯片架构的专用指令优化:ARM SIMD/NEON/MVEI,RV32P,RV64V等。

  5. 用户接口友好,只需加载和运行模型。

  6. 支持全静态内存配置(无需malloc)。

    238B


三、将TinyMaix移植到Zephyr

Zephyr内核的编译系统是一个以应用程序为中心的系统,应用程序驱动内核源码树的初始化和编译过程,最终生成一个单一的二进制文件。以下是我们在Zephyr上移植TinyMaix的步骤:

3235


  1. 项目文件夹结构调整:在Zephyr的samples文件夹中创建一个新项目,将TinyMaix中的模型和相关代码放入其中,与Zephyr一起编译,生成包含Zephyr+TinyMaix+MNIST的可执行文件。

  2. 接口适配: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__);

  3. 浮点数输出处理: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);

  4. 计时宏定义适配:为了精准调试,适配了计时宏定义。

    #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开发板

  1. MNIST模型(手写数字识别):

    30F93

    识别效果图:


    11FA4

  2. CIFAR-10模型(图像分类):

    135FE

    识别效果图:


    17749

  3. KWS模型(音频识别):


    199F

    识别效果图:

    C8DC

五、总结

湖南大学嵌入式实验室采用TinyMaix轻量级神经网络推理库、Zephyr RTOS以及STM32H743开发板,通过修改框架配置文件、宏定义、API接口并创建设备树,成功实现了AI模型在MCU上的部署。这展示了TinyMaix与Zephyr RTOS在边缘计算中的强大潜力,特别是在资源受限的嵌入式设备上的高效应用,为物联网、边缘计算等领域的智能设备开发奠定了基础。

上一条:EtherCAT for Zephyr:Zephyr RTOS对工业以太网EtherCAT的支持及在ZVM虚拟化环境下的实现 下一条:CCF全国嵌入式系统大会2024联合JSA、Sustainable Computing、JCSC专题征文

关闭

嵌入式与网络计算湖南省重点实验室
版权所有 © 2023 湖南大学