面向定点部署的人体活动识别Simulink模型金宝app
本示例展示了如何准备一个Simulink®模型,该模型基于传感器信号对人金宝app类活动进行分类,用于代码生成和部署到低功耗硬件。该示例提供了一个可以部署到BBC micro:金宝appbit设备的Simulink分类模型。首先,从Add-On Explorer下载并安装Simu金宝applink Coder™金宝appBBC micro:bit支持包。然后训练分类模型,将Simulink模型部署到目标设备上。金宝app
负载样本数据集
加载humanactivity
数据集。
负载humanactivity
的humanactivity
数据集包含24075个对人类五种身体活动的观察:坐、站、走、跑和跳舞。每个观测数据都有60个特征,这些特征是从智能手机加速度计传感器测量的加速度数据中提取出来的。数据集包含以下变量:
actid
—包含整数形式的活动id的响应向量:1、2、3、4、5分别表示坐、站、走、跑、跳actnames
—整数活动id对应的活动名称的壮举
- 24,075个观测值的60个特征矩阵featlabels
—60个特性的标签
Sensor HAR(人体活动识别)应用程序[1]被用来创建humanactivity
数据集。在用这款应用程序测量原始加速度数据时,人们将智能手机放在口袋里,这样智能手机就颠倒了,屏幕正对着自己。然后,软件对测量的原始数据进行相应的校准,并从校准的数据中提取60个特征。关于校准和特征提取的详细信息,请参见[2]而且[3],分别。后面描述金宝app的Simulink模型也使用原始加速度数据,并包括用于校准和特征提取的块。
为了减少定点部署的内存占用,指定在训练的分类器中只使用数据集的前15个特征。
Feat = Feat (:,1:15);Featlabels = Featlabels (1:15);
准备数据
这个例子使用90%的观察数据来训练一个模型,该模型对五种类型的人类活动进行分类,使用10%的观察数据来验证训练好的模型。使用cvpartition
为测试集指定10%的坚持时间。
rng (“默认”)%用于再现性分区= cvpartition(actid,“坚持”, 0.10);
提取训练指标和测试指标。
trainInds =训练(分区);testInds = test(分区);
指定训练和测试数据集。
XTrain = feat(trainInds,:);YTrain = actid(trainInds);XTest = feat(testInds,:);YTest = actid(testInds);
在命令行训练决策树
使用预测器训练拟合的二叉分类决策树XTrain
和类别标签YTrain
.推荐的做法是指定类名。另外,为决策树指定最多20个分支节点。
classificationTree = fitctree(XTrain,YTrain,...“类名”, (1, 2, 3, 4, 5],...“MaxNumSplits”, 20)
classificationTree = classificationTree ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' NumObservations: 21668 Properties, Methods
执行5倍交叉验证classificationTree
并计算验证精度。
partitionedModel = crossval(分类树,“KFold”5);validationAccuracy = 1-kfoldLoss(partitionedModel)
validationAccuracy = 0.9700
或者,您可以使用classification Learner应用程序训练和交叉验证相同的分类模型。有关类似的示例,请参见智能手机部署的人体活动识别Simulink模型金宝app.
根据测试数据评估性能
通过估计测试样本分类误差来确定算法的泛化程度。
testAccuracy = 1-loss(classificationTree,XTest,YTest)
testAccuracy = 0.9617
训练后的模型正确地分类了测试数据集中96.17%的人类活动。这个结果证实了训练后的模型对训练数据集没有过拟合。
请注意,精度值可能会因操作系统的不同而略有不同。
在Simulink模型金宝app中预测
现在您已经准备了一个分类模型,您可以打开Simulink模型。金宝app您可以导入包含决策树的训练分类对象classificationTree
成一个ClassificationTree预测块。您可以从统计和机器学习工具箱™库中添加此块。属性的模型的详细信息ClassificationTree预测块,看使用ClassificationTree预测块预测类标签.在本例中,您将使用Simulink模型金宝appslexHARFixedPointExample
此示例提供。
创建一个大的加速度计数据集ts
作为Simulink模型的输入。金宝app
inData = load(“rawAccData”);Xacc = inData.acc_data;t = 0:size(Xacc,1)-1;ts =时间序列(Xacc,t,“InterpretSingleRowDataAs3D”,真正的);numSteps = numel(t)-1;
打开Simulin金宝appk模型slexHARFixedPointExample
在命令行输入以下命令。请注意,Simulink模型金宝app包括将预处理子系统的必要变量加载到基本工作空间的回调。
slexHARFixedPointExample
的slexHARFixedPointExample
Model包含以下块:
的XBlock(输入端口)连接信号
ts
从工作区进入系统。的缓冲和校准Block包含三个缓冲块:X缓冲,Y缓冲,Z缓冲.每个块缓冲一个加速度计轴的32个样本,缓冲帧之间有12个重叠样本。在采集了各20个样本后缓冲Block将它们与前一帧中的12个样本连接起来,并将总共32个样本传递给预处理块。每一个缓冲Block每0.1秒接收一个输入样本,每2秒输出一个包含32个样本的缓冲帧。
的预处理Block从32个加速度计样本的缓冲帧中提取15个特征。该子系统模块使用DSP系统工具箱™和信号处理工具箱™。
的ClassificationTree预测block是来自统计和机器学习工具箱库的一个库块,它使用提取的特征对人类活动进行分类。输出值为1 ~ 5之间的整数,分别对应“Sitting”、“Standing”、“Walking”、“Running”和“Dancing”。
转换为定点
转换slexHARFixedPointExample
模型转换为定点模型slexHARFixedPointConvertedExample
.然后,部署slexHARFixedPointConvertedExample
到BBC micro:bit板。目标设备没有浮点单元(FPU),执行定点计算比浮点计算更有效。
在slexHARFixedPointExample
模型,右键单击标签端口并选择日志选择信号.然后,打开定点的工具应用程序,从应用程序库中选择它,可从应用程序选项卡。在定点工具中,在新工作流,选择迭代定点转换
.
在迭代定点转换选项卡,在信号公差节中,指定可接受的公差水平(原始值与新设计值之间的差值)标签
信号。分类模型的一个推荐实践是指定0绝对公差。使用此设置,定点分类模型返回的标签必须与浮点模型返回的标签相同。(对于回归模型,可接受的公差可以是非零用户指定的数字。)
然后,回顾示例中的步骤将浮点模型转换为定点模型(定点设计师)学习如何创建一个转换为定点的Simulink模型。金宝app
打开定点Simulink模型金宝appslexHARFixedPointConvertedExample
在命令行输入以下命令。的子系统块包含缓冲和校准,预处理,ClassificationTree预测控件的slexHARFixedPointExample
模型。
slexHARFixedPointConvertedExample
或者,您可以选择优化定点转换
工作流程定点的工具App或在块对话框中手动定义数据类型。有关更多信息,请参见配置带有定点输出的块(定点设计师).
部署到硬件
在命令行中输入以下金宝app命令,打开Simulink模型以部署到BBC micro:bit设备。的slexHARFixedPointDeployExample
模型转换为定点,并具有用于加速度计和目标设备上的显示端口的I/O块。
slexHARFixedPointDeployExample
Simu金宝applink模型slexHARFixedPointDeployExample
根据智能手机传感器测量的加速度数据对人类活动进行分类。该模型包括以下模块:
的加速度计块从设备上的加速度计传感器接收原始加速度数据。
的缓冲和校准,预处理,ClassificationTree预测控件的块与前面显示的相同
slexHARFixedPointExample
模型。的预测活动块在BBC micro:bit设备的5x5 LED矩阵上显示分类的人类活动值。字母“S”、“T”、“W”、“R”和“D”分别代表坐、站、走、跑和跳舞。
要将Simulink模型部署金宝app到您的设备,请执行下面的步骤开始使用BBC micro:bit的Sim金宝appulink编码器支持包金宝app(金宝appSimulink C金宝appoder支持包BBC micro:bit).在您的设备上运行模型,按照前面描述的收集训练数据的方式放置设备,并尝试五个活动。模型相应地显示分类的活动。
为了确保模型的准确性,您必须将设备放置在收集训练数据时所描述的相同位置。如果你想把你的设备放在不同的位置或不同的方向,那么以你自己的方式收集数据,并使用你的数据来训练分类模型。
模型的准确性可能与测试数据集的准确性不同(testAccuracy
),视乎设备而定。为了提高模型的精度,可以考虑使用额外的传感器,如陀螺仪。
参考文献
[1] El Helou, Amine。传感器HAR识别应用程序。MathWorks文件交换//www.tatmou.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app
[2] STMicroelectronics, AN4508使用说明。低重力三轴加速度计的参数和校准。2014。https://www.st.com/resource/en/application_note/dm00119044-parameters-and-calibration-of-a-lowg-3axis-accelerometer-stmicroelectronics.pdf
[3] El Helou, Amine。传感器数据分析。MathWorks文件交换//www.tatmou.com/matlabcentral/fileexchange/54139-sensor-data-analytics-french-webinar-code
另请参阅
fitctree
|crossval
|ClassificationTree预测