• 正文
  • 相关推荐
申请入驻 产业图谱

STM32F103部署分类神经网络用于运动姿态识别

09/26 15:30
541
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

前言

上一期我们在STM32F103中利用NanoEdge AI实现了震动数据异常检测。将MPU6500的三轴加速度数据实现了正常数据和异常数据的区分,并简单的进行了测试。

1、数据导入

首先我们打开NanoEdge AI,创建新的项目,类型选择使用分类并且配置项目信息包括传感器类型、项目名称、项目描述和目标芯片

在第二步骤中按照指定格式导入数据,本Demo中利用串口进行上传,可视化界面中可以清晰的看见数据波动。

分别导入不同运动状态的加速度计数据,并对不同的数据进行命名,每一组相同名称的命名都会被自动归为同一类,并且NanoEdge AI会自动提取频率特征。

将四种分类数据进行训练并等待训练结束,最后得到一个准确率百分百,RAM和Flash都极低的模型可供使用。

2、端上模型验证

 

当我们训练好模型后(没有完全完成也行)可以选择训练完的模型在端上进行验证,通数据导入步骤类似,数据通过串口上传来验证模型。

保存模型后,在压缩包中总共有三个关键文件,libneai.a是模型源码的静态库文件,knowledge.h是用来存放初始化内容数组的头文件,NanoedgeAI.h提供用户调用API内容。

将libneai.a添加到库文件中,并且把对应的路径添加到设置中。

3、API分析

/**? ?*?@brief? Initialization must be called at the beginning to load the knowledge.?? ?* ? ? ? ? This buffer is defined in the header file knowledge.h provided in the .zip file? ?*?@retval?NEAI_OK in case of success.? ?*/??enum?neai_state?neai_classification_init(constfloat knowledge_buffer[]);
/**? ?*?@brief? This function returns the class identified? ?*?@param? data_input[] [IN]: Signal to be classified AXIS_NUMBER * DATA_INPUT_USER? ?*?@param? output_buffer[] [OUT]: Contains the probabilities for all classes? ?*?@param? *id_class [OUT]: Variable that contains the class ID with the highest probabilities? ?*?@retval?NEAI_OK in case of success.? ?*/??enum?neai_state?neai_classification(float?data_input[],?float?output_buffer[], uint16_t *id_class);

相较于异常检测模型,分类模型只有两个函数:初始化和使用函数。

neai_classification_init(knowledge);//NanoEdge AI初始化

初始化函数使用knowledge数组作为参数,这个数组的定义在kownledge.h文件中,可以直接使用。

neai_classification(Data,Output, &predict);

分类函数有三个参数:Input,Output还有predict组成:

Output存放各个类别的置信值,它的长度应该是分类数量+1,其中包含了未识别对象,predict的值是Output中置信值最高的索引。

4、总结

NanoEdge AI的优势无疑是强大的,他让简单的神经网络网络部署流程门槛变得很低,极高的准确率和很小的RAM、FLASH占用无疑是在低功耗、低成本的MCU上部署模型的上选之策。

神经网络带来的便利性显而易见,相比于传统方案中对数据做各种分析,结合,使用NanoEdge仅仅需要做的只是上传数据和部署模型,大大的便利了识别的准确性和工作量也避免出现人工识别数据过于主观的缺点,甚至说只要数据集合适就能有非常合适的模型用来实现功能。

相关推荐