LSM6DSV16X基于MLC智能笔动作识别.3--MEMS Studio训练数据
- 概述
- 视频教学
- 样品申请
- 源码下载
- 硬件准备
- 选择MEMS
- 导入数据
- 配置窗口长度和量程
- 配置滤波器
- 选择特征数据
- 设备树生成
- 决策树生成
- 参考程序
- 转换UCF文件
概述
MEMS-Studio是一套完整的桌面软件解决方案,专为开发嵌入式AI功能、评估嵌入式库、分析数据,以及为整个MEMS传感器产品组合设计无代码算法而设计。这款独特的软件解决方案提供了多功能的开发环境,支持评估和编程所有MEMS传感器,此外还推出了新一代解决方案,以扩展Unico-GUI、Unicleo-GUI和AlgoBuilder等成熟应用程序的功能。
最近在弄ST的课程,需要样片的可以加qun申请:6_15061293 。
MEMS-Studio可简化在STM32微控制器上使用图形界面实现概念验证的过程,无需编写代码。此解决方案支持配置传感器和嵌入式AI(机器学习和神经网络),可充分利用机器学习内核 (MLC)、ISPU的神经网络以及有限状态机 (FSM)。它会重复使用嵌入式软件库,将多种功能组合到一个项目中,并使用绘图和显示功能实时可视化数据。
MEMS-Studio提供以下用户体验:
● 针对MEMS产品组合中运动、环境和红外传感器进行评估
● 配置和测试传感器内的各项功能,如有限状态机 (FSM)、机器学习内核 (MLC) 和智能传感器处理单元 (ISPU)
● 实时和离线数据分析
● 无代码图形化算法设计
视频教学
https://www.bilibili.com/video/BV1624VeAEAG/
LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据
样品申请
https://www.wjx.top/vm/OhcKxJk.aspx#
源码下载
硬件准备
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32H503CB,陀螺仪为LSM6DSV16X,磁力计为LIS2MDL。
选择MEMS
使用 MEMS Studio 的 MLC(Machine Learning Core)进行训练, “Sensor” 字段选择要配置的传感器 。
导入数据
点击“Browse”选择采集到的数据,给该类数据命名后下载。
将所有采集到的数据都导入进去,下载成功如图所示。
配置窗口长度和量程
MLC ODR(输出数据速率):已设置为 240Hz,这是 MLC 处理数据的速率。
时间窗口长度(Window length):设置的窗口长度为 60,表示 MLC 每 60个样本计算一次统计特征。
加速度计(Accelerometer):
● 量程(Full Scale):设置为 ±2g,表示能够测量的最大加速度为 ±2g。
● ODR(数据速率):设置为 480Hz,表示加速度计的采样频率为 480Hz。
陀螺仪(Gyroscope):
● 量程(Full Scale):设置为 ±125 dps,表示最大旋转速度为 ±125 度/秒。
● ODR(数据速率):设置为 480Hz,表示陀螺仪的采样频率为 480Hz。
配置滤波器
● filter_1:应用于 HP_Acc_XYZ,表示这是一个 高通滤波器(HP,High-Pass Filter),用于对加速度计的 X、Y、Z 轴的三维数据进行滤波。
● HP_Acc_XYZ:此滤波器将过滤掉加速度数据中低频成分,保留高频部分。这可能是为了消除像重力这样的低频信号干扰,保留运动的快速变化部分。
● filter_2:应用于 HP_Gyr_XYZ,这是一个 高通滤波器,用于对陀螺仪的 X、Y、Z 轴数据进行滤波。
● HP_Gyr_XYZ:此滤波器将过滤掉陀螺仪数据中的低频部分,保留高频的旋转变化信息,适合检测快速旋转或角速度的变化。
● filter_3:应用于 HP_Acc_V2,也是一个 高通滤波器,用于处理加速度矢量平方值(即组合了 X、Y 和 Z 轴的加速度数据)。
● HP_Acc_V2:此滤波器将对加速度矢量平方值的低频信号进行过滤,保留高频部分,帮助识别运动的剧烈变化。
● filter_4:应用于 HP_Gyr_V2,是一个 高通滤波器,用于处理陀螺仪矢量平方值(即组合了 X、Y 和 Z 轴的角速度数据)。
● HP_Gyr_V2:此滤波器将对陀螺仪矢量平方值的低频部分进行过滤,保留高频部分,帮助识别旋转运动中的快速变化。
选择特征数据
MLC(Machine Learning Core) 的 特征选择(Features Selection) 区域可以为传感器数据选择要计算的统计特征,并将其作为机器学习的输入。
MEAN:均值,表示在给定的时间窗口内计算的传感器数据的平均值。
VARIANCE:方差,表示数据的分散程度,反映数据在给定时间窗口内的变化。
ENERGY(能量): 计算信号在给定时间窗口内的总能量。它反映了信号强度,通常用于识别较强或较弱的活动。
PEAK_TO_PEAK(峰峰值):峰峰值特征计算的是信号在给定时间窗口内的最大值和最小值之间的差异。这个特征可以帮助检测信号的最大振幅,是评估运动强度和突发变化的有力指标。
设备树生成
生成的设备树文件为 arff 文件。
决策树生成
点击 “Generate Decision Tree” 按钮以生成决策树。这个按钮基于之前通过 ARFF 文件加载的数据和特征生成了一个分类模型(决策树),用于识别不同的动作或状态。
Kappa 统计量 是一种用于衡量分类器在考虑偶然因素时的准确性度量。这里显示为 0.307479,虽然分类准确度高,但 Kappa 值可能表明结果受到数据分布或样本量的影响。
● 0.81 - 1.00:几乎完美的分类一致性。
● 0.61 - 0.80:很好的分类一致性。
● 0.41 - 0.60:中等分类一致性。
● 0.21 - 0.40:较低的分类一致性。
● 0.00 - 0.20:几乎没有一致性(接近随机猜测)。
查看分析信息。
F1_MEAN_on_ACC_X <= 0.0360312
| F1_MEAN_on_ACC_X <= -0.88916: other (65.0)
| F1_MEAN_on_ACC_X > -0.88916: Steady (52.0)
F1_MEAN_on_ACC_X > 0.0360312
| F7_ENERGY_on_GY_X <= 0.241577: Idle (62.0)
| F7_ENERGY_on_GY_X > 0.241577: Writing (68.0)
Number of Leaves : 4
Size of the tree : 7
class:
=> Idle, Writing, other, Steady,
features:
=> F1_MEAN_on_ACC_X, F2_MEAN_on_ACC_Y, F3_MEAN_on_ACC_Z, F4_MEAN_on_ACC_V2, F5_VAR_on_ACC_V2, F6_VAR_on_GY_V2, F7_ENERGY_on_GY_X, F8_ENERGY_on_GY_Y, F9_ENERGY_on_GY_Z, F10_ENERGY_on_GY_V2, F11_PeakToPeak_on_ACC_V2, F12_PeakToPeak_on_GY_V2,
Mean absolute error 1
Root mean squared error 1
======= Whole data training with Confidence Factor: 0.9 =========
===== Confusion Matrix =====
Idle Writing other Steady <-- classified as
Idle 62 0 0 0
Writing 0 68 0 0
other 0 0 65 0
Steady 0 0 0 52
Total Number of Instances : 247
Correctly Classified Instances : 247
Incorrectly Classified Instances : 0
Kappa Statistic: 0.252373
Accuracy: 100%
Report : precision recall support
Idle 1 1 62
Writing 1 1 68
other 1 1 65
Steady 1 1 52
avg/total 1 1 247
根节点判断条件:
● F1_MEAN_on_ACC_X <= 0.0360312:
○ 如果 X 轴加速度的均值小于或等于 0.0360312:
■ 如果 F1_MEAN_on_ACC_X <= -0.88916,则分类为 other(65 个样本)。
■ 如果 F1_MEAN_on_ACC_X > -0.88916,则分类为 Steady(52 个样本)。
○ 如果 X 轴加速度的均值大于 0.0360312:
■ 如果 F7_ENERGY_on_GY_X <= 0.241577,则分类为 Idle(62 个样本)。
■ 如果 F7_ENERGY_on_GY_X > 0.241577,则分类为 Writing(68 个样本)。
● 混淆矩阵 显示模型在每一类的分类结果:
○ Idle:62 个样本被正确分类。
○ Writing:68 个样本被正确分类。
○ other:65 个样本被正确分类。
○ Steady:52 个样本被正确分类。
● Kappa Statistic:0.252373。尽管分类准确度为 100%,但 Kappa 值较低,表明不同类别之间可能存在某些重叠或类别分布不均衡。
该决策树模型在当前的小型数据集上表现良好,分类准确度为 100%,没有任何错误分类的实例。然而,Kappa 统计量(0.252373) 表明类别之间可能存在数据不平衡,导致模型虽然能够准确分类,但泛化能力可能较差。
参考程序
https://github.com/STMicroelectronics/STMems_Machine_Learning_Core/tree/master/application_examples/lsm6dsv16x
转换UCF文件
类输出值可以根据自己的需求修改,然后点击“Generate Config File”生成ucf文件。
将得到的UCF文件存放到LSM6DSV16X的程序中。
在初始化中添加MLC检测功能。
for( uint32_t i=0; i<(sizeof(lsm6dsv16x_activity_recognition) /
sizeof(ucf_line_t) ); i++ )
{
lsm6dsv16x_write_reg(&dev_ctx, lsm6dsv16x_activity_recognition[i].address,
(uint8_t *)&lsm6dsv16x_activity_recognition[i].data, 1);
}
在主函数中获取状态值,查询类的输出值,编译程序。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
lsm6dsv16x_mlc_handler();
if (event_catched != 0)
{
printf("event_catched=%d",event_catched);
// 握(0) 拍(1) 挥(2) 拍(3) 静(4) 止(5)
switch(event_catched)
{
case 2:
event_catched = 0;
printf("闲置(Idle)\r\n");
break;
case 4:
event_catched = 0;
printf("书写(Writing)\r\n");
break;
case 8:
event_catched = 0;
printf("其他(other)\r\n");
break;
case 12:
event_catched = 0;
printf("静止(Steady)\r\n");
break;
default:break;
}
event_catched = 0;
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
演示
静止状态如下。
闲置状态如下,手抓笔静止。
书写状态如下,移动笔进行识别判定。
其他如下,笔倒置。