先楫HPM6750上运行TinyMaix轻量级AI推理框架详细测评
基于先楫HPM6750移植轻量级AI推理框架TinyMaix,使用HPMSDK裸机环境,通过目录规划、源码修改和编译运行完成移植。基准测试涵盖mnist、cifar10等模型,在INT8和FP32模式下验证运行效果。注意事项包括堆大小调整和RISC-VISA设置。
本期内容由先楫开发者社区大咖@xusiwei1236分享基于先楫HPM6750的轻量级AI推理框架,快来一起了解吧~
一、TinyMaix是什么?
TinyMaix是由国内sipeed团队开发的一款超轻量级神经网络推理库,专为单片机等资源受限设备设计。官方介绍如下:TinyMaix 是面向单片机的超轻量级神经网络推理库,即 TinyML 推理库,可以让你在任意单片机上运行轻量级深度学习模型。即使在 Arduino ATmega328 (32KB Flash, 2KB RAM) 上,也能基于 TinyMaix 实现手写数字识别。TinyMaix官网提供了详细说明,可在本文末尾的参考链接中找到。
二、TinyMaix移植
本节将介绍如何将TinyMaix成功移植到HPM6750开发板上,具体步骤如下:
2.1 开发环境搭建
先楫官方提供了SDK开发环境和RT-Thread开发环境两种方案,搭建方法均可在官方开发板用户手册(HPM6750EVKMINI USER GUIDE.pdf 或 HPM6750EVK USER GUIDE.pdf)中找到,也可参考我此前发布的帖子(详见文末参考链接)。鉴于TinyMaix针对已支持MCU的基准测试均基于裸机,因此此处选用HPM SDK开发环境。此外,基于裸机的移植在RTOS环境下通常也能正常运行。因此,对于MCU芯片的计算类开源项目移植(例如本案例中的TinyMaix),建议优先采用裸机方案。
使用的HPM SDK版本为0.14.0,SEGGER Embedded Studio版本信息如下:
- SEGGER Embedded Studio for RISC-V
- Release 6.40 Build 2022102501.51567
- Windows x64
- 2014-2022 SEGGER Microcontroller GmbH
- 1997-2022 Rowley Associates Ltd.
- segger-cc: version 15.0.0
- segger-ld: version 4.36.0
- segger-rtl: version 4.20.0
- GCC/BINUTILS: built using the GNU RISC-V Toolchain version GCC 12.20/Binutils 2.39 source distribution
- Clang/LLVM: built using the version 15.0.0 source distribution
2.2 TinyMaix移植步骤
由于TinyMaix本身的源代码文件数量不多,整个移植过程相对简洁。整体上分为三个主要阶段:
- 目录规划
- 修改源码
- 编译运行
下面详细介绍每一步操作。
2.2.1 目录规划
考虑到TinyMaix和hpm_sdk均使用CMake构建,为了尽量减少对TinyMaix的侵入性修改,这里采用的策略是——增加一个中间层。具体做法是将HPM6750平台的CMakeLists.txt文件放置在TinyMaix源码目录的上一层,结构如下:
hpm_sdk/app/
├── CMakeLists.txt # HPM6750平台的CMakeLists.txt
├── src
│ └── benchmark.c
└── TinyMaix/ # TinyMaix源码目录
2.2.2 修改源码
以下是src/benchmark.c文件的内容:
#include
#include "board.h"
#define MODEL_MNIST 1
#define MODEL_CIFAR10 2
#define MODEL_VWW 3
#define MODEL_MBNET 4
#define CONFIG_MODEL MODEL_CIFAR10 // 修改这一行切换 测试程序
#define main benchmark_main
#if (CONFIG_MODEL == MODEL_MNIST)
#include "mnist/main.c"
#elif (CONFIG_MODEL == MODEL_CIFAR10)
#include "cifar10/main.c"
#elif (CONFIG_MODEL == MODEL_VWW)
#include "vww/main.c"
#elif (CONFIG_MODEL == MODEL_MBNET)
#include "mbnet/label.c"
#include "mbnet/main.c"
#endif
#undef main
int main(void)
{
board_init();
printf("benchmark start...\n");
benchmark_main(0, NULL);
__asm__("wfi");
return 0;
}
为了不直接拷贝基准测试代码,简化整体结构,这里采用了一种不太常见但有效的方式:直接通过 #include 引用某个 .c 文件;在 #include "xxx/main.c" 之前,定义宏 #define main benchmark_main,之后取消该宏定义;这样既将TinyMaix原有的测试代码作为 benchmark.c 的一部分,又避免了与当前 main 函数冲突。
小提示: 为了简便起见,这里并未将TinyMaix放入hpm_sdk的middleware目录;在实际项目中使用时,建议将其放置到middleware目录下以便管理。
此外,还需要修改 tm_port.h 文件,具体差异如下:
diff --git a/include/tm_port.h b/include/tm_port.h
index 357fc6b..5d1768c 100644
--- a/include/tm_port.h
+++ b/include/tm_port.h
@@ -31,7 +31,7 @@ limitations under the License.
#define TM_OPT_LEVEL TM_OPT0
#define TM_MDL_TYPE TM_MDL_INT8
#define TM_FASTSCALE (0) //enable if your chip don't ha ve FPU, may speed up 1/3, but decrease accuracy
-#define TM_LOCAL_MATH (0) //use local math func (like exp()) to a void libm
+#define TM_LOCAL_MATH (1) //use local math func (like exp()) to a void libm
#define TM_ENABLE_STAT (1) //enable mdl stat functions
#define TM_MAX_CSIZE (1000) //max channel num //used if INT8 mdl //cost TM_MAX_CSIZE*4 Byte
#define TM_MAX_KSIZE (5*5) //max kernel_size //cost TM_MAX_KSIZE*4 Byte
@@ -49,9 +49,10 @@ limitations under the License.
#define TM_DBGL() TM_PRINTF("###L%d\n",__LINE__);
/******************************* DBG TIME CONFIG ************************************/
-#include
-#include
-#define TM_GET_US() ((uint32_t)((uint64_t)clock()*1000000/CLOCKS_PER_SEC))
+#include "board.h"
+#define TM_GET_US() (uint32_t)(HPM_MCHTMR->MTIME * 1000000uLL / clock_get_frequency(clock_mchtmr0))
#define TM_DBGT_INIT() uint32_t _start,_finish;float _time;_start=TM_GET_US();
#define TM_DBGT_START() _start=TM_GET_US();
2.2.3 编译运行
HPM6750项目的生成命令如下:
generate_project -b hpm6750evkmini -t flash_xip -f
关于HPM6750项目的编译与运行,具体可参考开发环境搭建文章(链接见文末)。手写数字识别(mnist模型)运行后,串口输出结果如下:
三、基准测试
以下是对TinyMaix四种常用基准测试模型的测试结果,四个模型分别为:
- mnist —— 手写数字识别模型,输入尺寸28x28x1
- cifar —— 10分类模型,输入尺寸32x32x3
- vww —— 人体检测二分类模型,输入尺寸96x96x3,输出判断有无行人
- mbnet —— 1000分类模型,输入尺寸128x128x3
3.1 场景1: TM_MDL_INT8 + TM_OPT0

3.2 场景2: TM_MDL_INT8 + TM_OPT1

3.3 场景3: TM_MDL_FP32 + TM_OPT0

3.4 注意事项
- 在SEGGER Embedded Studio中,可通过以下路径修改优化等级:Project 'xxx' Options -> Code -> Code Generation -> Optimization Level。
- SEGGER Embedded Studio默认的堆大小为16384字节(16KB),不足以运行vww96和mbnet128模型。可通过菜单 Code -> Runtime Memory Area -> Heap Size 修改配置,例如设置为524288(512KB)即可满足需求。
- 对于FP32模型,需将RISC-V ISA设置从默认的
rv32imac改为rv32gc(Code -> Code Generation -> RIS-V ISA),以确保编译器能生成浮点运算指令。
常见问题 (FAQ)
- 问:移植时提示“undefined reference”错误怎么办?
答:通常是因为未正确包含TinyMaix的源文件或头文件路径。请检查CMakeLists.txt中是否添加了TinyMaix的源文件目录和头文件搜索路径。同时确保tm_port.h中的宏定义(如TM_LOCAL_MATH、TM_GET_US)已按HPM6750平台正确修改。 - 问:运行vww或mbnet模型时程序跑飞或死机?
答:通常由堆内存不足引发。请按上述注意事项将Heap Size设置为至少512KB。若问题依然存在,请检查是否开启了FPU相关编译选项(对于FP32模型需将ISA设为rv32gc)。 - 问:基准测试结果中的时间单位是什么?
答:TinyMaix内部使用微秒(us)计时,输出结果通常为毫秒(ms)或微秒(us),具体可查看源码中的时间打印格式。 - 问:能否在RT-Thread系统上使用TinyMaix?
答:可以。本移植基于裸机,但同样的步骤也适用于RT-Thread等RTOS环境。只需将tm_port.h中的时钟获取函数替换为RT-Thread提供的rt_tick_get()或类似函数即可。
结语
本文详细介绍了将TinyMaix轻量级AI推理框架移植到先楫HPM6750开发板的全过程,涵盖开发环境搭建、目录规划、源码修改、编译运行以及基准测试结果。通过本教程,你可以在HPM6750上轻松运行手写数字识别、图像分类等典型AI模型,为嵌入式AI应用开发筑牢基础。如需进一步了解TinyMaix的更多功能,请访问其官方仓库和文档。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:先楫HPM6750上运行TinyMaix轻量级AI推理框架详细测评要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点腾讯文档AI会议纪要标题应直击执行障碍,用“问题→后果”结构(如“接口文档缺失→后端返工3次”),禁用泛称,字数≤20字,通过自定义提示词触发重写。腾讯文档AI会议纪要功能默认生成的标题常泛泛而谈,比如“项目周会纪要”“部门协调会记录”,无法一眼抓住核心冲突或待解难题,导致后续查阅时找不到重点、推动
国内用户需优化印象AI会议纪要提示词:用“待办事项(负责人+截止时间)”替代“action items”,“会议结论:分三点陈述”替代“key takeaways”,禁用“stakeholder”改写具体部门与人名;强制添加审批栏前缀、分号分层、统一中文日期格式;并加入语音纠错、填充词删除及动词开头
有人用 Cursor 三天搭出了内部数据看板,省下外包报价的三万块;也有人让 AI 生成了 "全套用户管理系统 ",上线后发现数据库地址是 AI 编的,压根连不上。同样是 Vibe Coding,差距在哪?不是模型好不好,是你有没有给 AI 设好边界。这篇文章不讲大道理,直接给你三个可以抄走用的提示词模
Vibe Coding 最经典的一张照片,大概就是走到哪里都要带着自己的电脑。胡彦斌前段时间在小红书发布了一张在路上拿着笔记本电脑的照片,配文说「Vibe Coding 的都懂这个姿势。」我们几乎习惯了用 Agent 就是用电脑,带着安装了 Claude Code、Codex、Cursor、Open
- 日榜
- 周榜
- 月榜
热点快看
