0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

测评分享 | 如何在先楫HPM6750上运行轻量级AI推理框架TinyMaix

先楫半导体HPMicro 2022-12-12 17:57 次阅读

3f2eb1e6-78ab-11ed-b116-dac502259ad0.png本期内容由先楫开发者社区大咖@xusiwei1236分享基于先楫HPM6750的轻量级AI推理框架,赶紧来瞧瞧~

一、TinyMaix是什么?
TinyMaix是国内sipeed团队开发一个轻量级AI推理框架,官方介绍如下: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-VRelease 6.40 Build 2022102501.51567Windows x64
2014-2022 SEGGER Microcontroller GmbH 1997-2022 Rowley Associates Ltd.
segger-cc: version 15.0.0segger-ld: version 4.36.0segger-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:builtusingtheversion15.0.0sourcedistribution

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函数相冲突的目的。PS:这里为了简便,并没有把TinyMaix放到hpm_sdk的middleware目录,实际项目中使用的话最好将TinyMaix放到middleware目录。另外,还需要修改`tm_port.h文件:

diff --git a/include/tm_port.h b/include/tm_port.hindex 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 have FPU, may speed up 1/3, but decrease accuracy-#define TM_LOCAL_MATH (0) //use local math func (like exp()) to avoid libm+#define TM_LOCAL_MATH (1) //use local math func (like exp()) to avoid 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();#defineTM_DBGT_START()_start=TM_GET_US();

2.2.3 编译运行HPM6750项目的生成命令:

generate_project -b hpm6750evkmini -t flash_xip -f

HPM6750项目的编译、运行,具体可以开发环境搭建文章,链接见本文末尾。手写数字识别(mnist模型),运行后,串口输出结果如下:3f91d53c-78ab-11ed-b116-dac502259ad0.png

三、基准测试

下面是TinyMaix四种常用的基准测试模型的基准测试,四个模型分别为:

  • mnist——手写数字识别模型,输入28x28x1
  • cifar——10分类模型,输入32x32x3
  • vww——人体检测二分类模型,输入96x96x3,输出有无人
  • mbnet——1000分类模型,输入128x128x3


3.1 场景1: TM_MDL_INT8 + TM_OPT0

3fee72a6-78ab-11ed-b116-dac502259ad0.png
3.2 场景2: TM_MDL_INT8 + TM_OPT1400c7b34-78ab-11ed-b116-dac502259ad0.png
3.3 场景3: TM_MDL_FP32 + TM_OPT0403c1a2e-78ab-11ed-b116-dac502259ad0.png

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),确保编译器可以生成浮点数操作指令。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    87

    文章

    29611

    浏览量

    267902
  • 先楫半导体
    +关注

    关注

    10

    文章

    214

    浏览量

    2044
收藏 人收藏

    评论

    相关推荐

    HPM6750 Bootloader设计

    我正在做一个hpm6750evk2的bootloader。设计很简单,boot工程代码只做跳转到1M后的APP工程代码处,APP工程就是做的一个点灯的程序而已,boot、APP工程都是跑
    发表于 10-23 18:59

    国产芯运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

    本篇测评由优秀测评者“短笛君”提供。本文将介绍基于米尔电子MYD-YD9360商显板(米尔基于芯驰D9360国产开发板)的TinyMaxi轻量级的神经网络推理库方案测试。 算力测试
    发表于 08-09 18:26

    国产芯运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

    D9360国产开发板)的TinyMaxi轻量级的神经网络推理库方案测试。 算力测试 TinyMaix 是面向单片机的超轻量级的神经网络推理
    发表于 08-07 18:06

    国产芯运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

    TinyMaix是面向单片机的超轻量级的神经网络推理库,即TinyML推理库,可以让你在任意单片机上运行
    的头像 发表于 07-05 08:02 1795次阅读
    国产芯<b class='flag-5'>上</b><b class='flag-5'>运行</b>TinyMaxi<b class='flag-5'>轻量级</b>的神经网络<b class='flag-5'>推理</b>库-米尔基于芯驰D9国产商显板

    【Vision Board创客营连载体验】TinyMaix进行手写数字识别

    1 TinyMaix简介 TinyMaix是国内sipeed团队开发一个轻量级AI推理框架
    发表于 06-15 08:40

    半导体 hpm_sdk v1.5.0 正式发布

    半导体 hpm_sdk v1.5.0 正式发布!功能升级更强大 版本更新概况 新支持的IDE IAR Embedded Workbench for RISC-V (测试版本3.20.1) 新增
    发表于 04-08 11:14

    基于先HPM5300 RISC-V内核MCU的HPM5361EVK开发板测评效果(二)

    HPM5361EVK是基于先HPM5300系列高性能RISC-V内核MCU的一款开发板。
    的头像 发表于 03-12 10:30 2508次阅读
    基于先<b class='flag-5'>楫</b><b class='flag-5'>HPM</b>5300 RISC-V内核MCU的<b class='flag-5'>HPM</b>5361EVK开发板<b class='flag-5'>测评</b>效果(二)

    HPM5361EVK开发板,网友测评效果(二)

    上海先半导体举办的HPM5361EVK开发板试用活动圆满结束,广大工程师和爱好者们踊跃参与此次试用并提交报告。经过先半导体专家组评选,一共产生6名优秀获奖者。感谢媒体平台电子工程世界(简称
    的头像 发表于 03-12 08:16 1551次阅读
    先<b class='flag-5'>楫</b><b class='flag-5'>HPM</b>5361EVK开发板,网友<b class='flag-5'>测评</b>效果(二)

    【先HPM5361EVK开发板试用体验】(原创)5.手把手实战AI机械臂

    HPM5361EVK开发板。现在开始设计实战AI机械臂的程序。 代码结构 由于编写一个完整的用先HPM5361EVK开发板控制三组四自由度机械臂,并加入红外线传感器、机器视觉和Ch
    发表于 02-06 10:28

    【先HPM5361EVK开发板试用体验】TinyMaix进行手写数字识别

    1 TinyMaix简介 TinyMaix是国内sipeed团队开发一个轻量级AI推理框架
    发表于 01-02 23:34

    【先HPM5361EVK开发板试用体验】先HPM5361EVK开发板初体验

    收到先HPM5361EVK开发板,被先HPM5361EVK开发板的做工和电路板设计惊艳到了,首先是黑色的板子布线设计合理,元件布局整齐,同时提供了更多的io及外部接口,方便大家功能
    发表于 12-24 22:58

    【先HPM5361EVK开发板试用体验】认识和了解先HPM5361EVK开发板

    ,拆开第一眼看到先HPM5361EVK开发板,黑色的多层主板主控芯片和其它元件排列整齐,做工非常精细,元件布局合理,元件标识清晰,提供的io接口和调试接口非常丰富。 先
    发表于 12-24 22:39

    【先HPM5361EVK开发板试用体验】:4、TinyML测试(1)

    1、TinyML简介 TinyML是指在边缘设备运行的机器学习模型,通常是在资源受限的嵌入式系统运行轻量级模型。这些设备可以是智能手机
    发表于 12-22 10:12

    RT_thread studio中如何配置先辑的hpm_math数学库?

    hpm6750不知道如何在RTThread studio中使用hpm_math中的数学库,想要使用libdspf.a,但是不知道如何配置
    发表于 12-06 18:32

    【先HPM5361EVK开发板试用体验】-- HPM5361初体验

    cortex-m7级别的芯片国产一直有传说未见身影,奈何只能接受国外品牌漫长的交期和一次次的涨价。 有幸大概在2022年意外接触到了先半导体的HPM6750,看到了价格和性能(高主频,高DMIPS)着实
    发表于 11-29 11:26