分享好友 最新动态首页 最新动态分类 切换频道
CUBEAI详细使用教程(STM32运行神经网络)---以手写识别为例
2024-12-27 01:55



CUBEAI(Cube Artificial Intelligence)是一种人工智能(AI)中间件,旨在为嵌入式系统提供高效、灵活的神经网络推理能力。该中间件的设计目标是在资源有限的嵌入式设备上实现深度学习推理,从而为物联网(IoT)设备、嵌入式系统和边缘计算场景提供强大的人工智能支持。

创建项目选择能运行神经网络的MCU,STM32F4以上系列的都支持部署神经网络。

  1. 权重参数:存放在Flash中
  2. 激活值:存在MCU自带的SRAM中,也可以使用外部的SD卡或者外接SRAM进行存储。需要用户自己定义
  3. 输入输出数据:存放在SRAM中需要用户自己定义。如下图所示

“激活”缓冲区是一个简单的连续内存映射缓冲区,放置在一个读写内存段中。它由AI客户端拥有和分配。它被传递给网络实例(参见ai_init()函数),并在执行推理期间用作私有堆(或工作缓冲区)来存储中间结果。在两次运行之间,应用程序可以使用相关的内存段。其大小AIDATA_ACTIVATIONS_SIZE是在代码生成期间定义的,对应于报告的内存度量。
Weights”缓冲区是一个简单的连续内存映射缓冲区(或多个内存映射缓冲区与——split-weights选项)。它通常放置在一个非易失和只读的内存设备中。总长度AI
DATA_WEIGHTS_SIZE是在代码生成期间定义的,对应于报告的ROM度量。
“输出”和“输入”缓冲区也必须放在读写内存映射缓冲区中。默认情况下,它们由AI客户端拥有和提供。它们的大小依赖于模型,称为生成时间(AI
_IN/OUT_SIZE_BYTES)。它们也可以位于“激活”缓冲区中。

ai_error ai__create(ai_handle* network, const ai_buffer* network_config);
参数
1.network:神经网络句柄
2.Network_config参数是一个特定的网络配置缓冲区(不透明结构),编码为ai_buffer。它是由代码生成器生成的,应用程序不应该修改它。当前,该对象总是空的,可以传递NULL,但最好传递AI_NETWORK_DATA_CONFIG(见_data.h文件)。以上是官方文档的解释我们自己设置为NULL就可以
功能 这个强制函数是应用程序创建c模型实例时必须调用的早期函数。如果ai_handle对象被更新,并且它引用了一个上下文(不透明对象),该上下文应该被传递给其他函数。

ai_bool ai_(name)_init(ai_handle network, const ai_network_params* params);
参数
1.network:神经网络句柄
2.Params参数是一个结构体(ai_network_params类型),它允许传递权重和激活缓冲区的引用(数组格式)。也就是激活缓冲区的地址官网上面的案例直接传递激活缓冲区的地址就可以,权重是自动生成的不用管。
返回值 初始化正确还是错误
功能 这个强制函数用于应用程序初始化内部运行时数据结构,并设置激活缓冲区和权重缓冲区。

ai_error ai__create_and_init(ai_handle* network,
const ai_handle activations[], const ai_handle weights[]);
参数
1.network:神经网络句柄
2.const ai_handle activations[]:激活图存储地址
返回值 初始化正确还是错误
功能 结合了上面两个函数的功能,一般直接使用这个函数就可以

应用案例:进行创建和初始化网络模型

 
 

ai_i32 ai__run(ai_handle network, const ai_buffer* input, ai_buffer* output);
> 参数
1.network:神经网络句柄
2.ai_buffer* input:输入数据地址
3.ai_buffer* output:输出数据地址
返回值 返回值是n_batches >= 1时处理的输入张量的数量。如果<=0,应该使用ai_network_get_error()函数来知道错误
功能 根据输入数据,运行神经网络

根据示例代码可知,自己需要修改的地方主要有三点。
1、定义网络句柄、输入、输出和激活缓冲区数据buf 和管理输入和输出数据的指针。
2、获取和处理数据并进行推理。如果是图像分类任务,图像数据可能是来自摄像头模块获取。其他任务例如运动检测任务,数据可能会来自六轴加速度传感器。
3、对输出数据进行后处理。对于分类任务,模型输出结果是每个类别的概率,有时我们要输出准确率最高的类别就要写一个求最大值的函数

 
 
 
 
 

代码来自https://github.com/colin2135/STM32G070_AI_TEST.git 大家可以去star一下。感谢作者的开源。作者使用的是STM32G0系列的单片机,我是使用的是STM32F7和正点原子的H5mini,F4系列的都可以。目前还没有尝试F1系列的单片机。

二、代码实现
1、定义网络句柄、输入、输出和激活缓冲区数据buf 和管理输入和输出数据的指针。

 

2、获取和处理数据
通过串口获取数据

 

处理数据,通过上位机发送的数据是8位数据,由于模型参数是32位浮点数因此输入数据要转换成32位浮点数

 

神经网络推理

 

3、对输出数据进行后处理
将输出结果和最大值通过串口进行发送

 

3.whlie(1)代码

 

完整代码

最新文章
华为MatePad Paper初体验
昨天刚收到官网首发的第一款电纸书MatePad Paper,使用了一个晚上,第一时间把个人的使用感受发给大家,供大家购买参考。一、好处:1、护眼,看书感觉像纸张一样的质感。阅读效果确实比我很多年以前买过的6英寸的阅读器效果好多了,尤其是
项目文档管理软件
在当今信息时代,项目文档管理对于企业的运营和项目管理起着至关重要的作用。随着企业越来越依赖项目来推动创新和增长,高效的项目文档管理成为项目成功的关键因素之一。因此,选择一款适合自己企业需求的项目文档管理软件是至关重要的决策
精准策略解码,高效优化百度推广方案,全面提升广告效能
深入解析优化百度推广方案,关键在于精准定位关键词、合理设置出价和创意,定期调整优化策略。通过分析数据,挖掘潜在客户需求,提高广告投放效果。结合百度平台特色,利用智能推广工具,实现高效。优化百度推广方案需持续关注数据变化,灵
揭秘12月第2周武侯人气楼盘榜单!这些楼盘为何备受关注?
热度排名楼盘名地址价格1新绿启境一环路南三段16号省体育馆旁40000元/平方米2科华388南二环科华旁王府井对侧28000元/平方米3保利天悦航空路与高攀路交汇处18000元/平方米起4尊邸中环路(火车南站东路15号,城南驿站旁)25000元/平方米5会所
惠州SEO博客,推动本地企业互联网营销新格局
惠州SEO博客专注于本地SEO领域,致力于帮助企业提升网络营销效果,开启互联网营销新篇章。随着互联网的飞速发展,搜索引擎优化(SEO)已经成为企业提升网络知名度、扩大市场份额的重要手段,在众多城市中,惠州作为广东省的重要城市,其SEO
最新Android 4.2 搭建开发环境
1.下载JDK         JDK即Java Development Kit(Java开发工具包),包括JAVA运行环境,基础类库和JAVA工具,是JAVA运行的基础。 网址:http://www.oracle.com/technetwork/java/javase/downlo
竞价推广的监测与分析工具推荐
在如今竞争激烈的市场环境中,企业需要采取各种手段来提升品牌知名度和销售额。而竞价推广,作为一种有效的网络营销方式,受到了越来越多企业的关注和应用。然而,竞价推广的成功并非一蹴而就,需要不断进行监测和分析,以便更好地优化广告
迈向标准化新时代:工信部成立人工智能标准化技术委员会的深远影响
近日,工信部在其官方网站上公布了成立人工智能标准化技术委员会的消息,这一重要举措标志着中国在人工智能领域的标准化建设进入了一个全新的阶段。该委员会的成立不仅意味着行业标准的拟定和修订将更加科学和系统,也预示着未来人工智能技
谷歌加速器
谷歌加速器app2024官方最新版也叫做OurPlay加速器、谷歌空间、谷歌商店加速器等等,是一款由谷歌官方所推出的手机游戏加速器软件,这款软件采用了简洁直观的操作界面、傻瓜式的操作步骤,相关用户通过这款软件可以对一系列手机游戏进行加速
西藏2024年初级经济师考后资格复核时间:12月16日-20日
西藏2024年度初级经济师考试成绩已发布,考后资格复核时间为12月16日-20日,请考试合格人员在规定时间内进行资格复核。如果担心自己错过证书领取时间,建议大家使用文章顶部的 服务,预约成功后,我们会以短信的形式提醒您证书领取等重要时
相关文章
推荐文章
发表评论
0评