本帖最后由 一路向北lm 于 2025-4-3 15:35 编辑
创建项目选择STM32N6570-DK,理论上STM32F4以上系列的都支持部署神经网络,选择芯片时勾选AI使能,等待支持包安装完成;
选择AI工具包,选择最近的CUBEAI工具包。最新的是10.0版本的,不同版本的生成的代码有些会不一样,有的模型老版本可以部署新版本就不行了,挺让人头疼的;
利用CUBEAI工具分析模型,这里并没有选择去优化压缩,因为模型本来就很小。CUBEAI提供的是一种无数据压缩,压缩效率并不是很高,也会损失精度。
网络结构利用Netron这个网址可以将模型进行可视化, 模型结构如下图所示。 模型如何在单片机上进行存储: 权重参数:存放在Flash中 激活值:存在MCU自带的SRAM中,也可以使用外部的SD卡或者外接SRAM进行存储。需要用户自己定义。 输入输出数据:存放在SRAM中需要用户自己定义 CUBEAI模型推理库不开源只开放了一些API接口,因此我们必须了解一些常用的API使用方法 1.ai_(name)_create() 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文件)。 2.ai_(name)_init ai_bool ai_(name)_init(ai_handle network, const ai_network_params* params); 参数: 1.network:神经网络句柄 2.Params参数是一个结构体(ai_network_params类型),它允许传递权重和激活缓冲区的引用(数组格式)。也就是激活缓冲区的地址,官网上面的案例直接传递激活缓冲区的地址就可以,权重是自动生成的不用管。 返回值: 初始化正确还是错误 3.ai_(name)_create_and_init() ai_error ai__create_and_init(ai_handle* network, const ai_handle activations[], const ai_handle weights[]); 参数: 1.network:神经网络句柄 2.const ai_handle activations[]:激活图存储地址 返回值: 初始化正确还是错误
|