主要内容

智能手机部署的人体活动识别Simulink模型

这个例子展示了如何准备一个Simulink®模型,该模型基于智能手机传感器信号对人类活动进行分类,用于代码生成和智能手机部署。该示例提供了两个可以部署到Android™设备和iOS设备的Simulink模型。在目标设备上安装所需的支持包后,需要对分类模型进行训练,并将Simulink模型部署到设备上。

负载样例数据集

加载humanactivity数据集。

负载humanactivity

humanactivity数据集包含24075个对人类五种不同身体活动的观察:坐、站、走、跑和跳舞。每次观测都有60个从智能手机加速度计传感器测量的加速度数据中提取的特征。数据集包含以下变量:

  • actid—响应向量,以整数形式表示活动id。1、2、3、4、5分别表示坐、站、走、跑、跳

  • actnames—整数形式的活动id对应的活动名称

  • 的壮举- 60个特征的特征矩阵,24075个观测

  • featlabels—60个特性的标签

Sensor HAR(人体活动识别)应用程序[1]被用来创建humanactivity数据集。在用这个应用程序测量原始加速数据时,人们把智能手机放在口袋里,这样智能手机就会倒过来,屏幕对着自己。然后,该软件对测量的原始数据进行相应的校准,从校准的数据中提取出60个特征。关于校准和特征提取的详细信息,请参见[2]而且[3],分别。后面描述的Simulink模型也使用原始加速度数据,包括校准和特征提取的块。

准备数据

本例使用90%的观察结果来训练一个对五种人类活动类型进行分类的模型,使用10%的观察结果来验证训练过的模型。使用cvpartition(统计和机器学习工具箱)为测试集指定10%的坚持值。

rng (“默认”%的再现性分区= cvpartition (actid,“坚持”, 0.10);trainingInds =培训(分区);训练集的%索引XTrain =壮举(trainingInds:);YTrain = actid (trainingInds);testInds =测试(分区);测试集的%索引XTest =壮举(testInds:);欧美= actid (testInds);

转换特征矩阵XTrain响应向量YTrain将训练数据集加载到Classification Learner应用程序中。

tTrain = array2table([XTrain YTrain]);

为表的每一列指定变量名。

tTrain.Properties.VariableNames = [featlabels '“活动”];

使用分类学习者应用程序训练增强的树集成

使用分类学习者应用程序训练分类模型。打开分类学习者应用程序,输入classificationLearner在命令行。或者,单击应用程序选项卡,并单击控件右侧的箭头应用程序节开画廊。然后,在机器学习和深度学习,点击分类学习者

分类学习者选项卡,文件部分中,点击新会话并选择从工作空间

在“从工作区新建会话”对话框中,单击数据集变量,然后选择表tTrain.分类学习者检测预测因子和来自表的响应。

slexHAR-import-dialog.png

默认选项是5倍交叉验证,以防止过拟合。点击开始会议.分类学习者加载数据集并绘制前两个特征的散点图。

slexHAR-scatter-plot.png

分类学习者选项卡中,单击右侧的箭头模型节开画廊。然后,在集成分类器,点击提高了树

HARDeploymentExample3.png

该模型总结TAB显示提升的树集成模型的默认设置。

slexHAR-hyperparameters.png

分类学习者选项卡,火车部分中,点击火车都并选择选择火车.当培训完成后,模型窗格显示5倍,交叉验证的分类精度。

HARDeploymentExample5.png

分类学习者选项卡,出口部分中,点击出口模式,然后选择出口紧凑的模型.点击好吧在对话框中。结构trainedModel出现在MATLAB®工作区中。这个领域ClassificationEnsembletrainedModel包含紧凑模型。从结构中提取经过训练的模型。

classificationEnsemble = trainedModel.ClassificationEnsemble;

在命令行训练增强树集合

或者,您可以在命令行中训练相同的分类模型。

模板= templateTree (“MaxNumSplits”, 20岁,“复制”,真正的);classificationEnsemble = fitcensemble (XTrain YTrain,...“方法”“AdaBoostM2”...“NumLearningCycles”30岁的...“学习者”模板,...“LearnRate”, 0.1,...“类名”, (1;2;3;4;5);

执行5次交叉验证classificationEnsemble并计算验证精度。

partitionedModel = crossval (classificationEnsemble,“KFold”5);validationAccuracy = 1-kfoldLoss (partitionedModel)
validationAccuracy = 0.9833

根据测试数据评估性能

评估测试数据集的性能。

testAccuracy =第一(classificationEnsemble XTest、欧美)
testAccuracy = 0.9759

经过训练的模型对测试数据集中97.59%的人类活动进行了正确分类。该结果证实了训练模型对训练数据集没有过拟合。

注意,根据您的操作系统,精度值可能略有不同。

保存训练模型

对于包含分类模型对象的代码生成,请使用saveLearnerForCoder(统计和机器学习工具箱)而且loadLearnerForCoder(统计和机器学习工具箱)

使用保存训练过的模型saveLearnerForCoder(统计和机器学习工具箱)

saveLearnerForCoder (classificationEnsemble“EnsembleModel.mat”);

功能块predictActivity在Simulink模型中加载训练过的模型loadLearnerForCoder(统计和机器学习工具箱)并利用训练后的模型对新数据进行分类。

将Simulink模型部署到设备

现在您已经准备好了一个分类模型,您可以打开Simulink模型,这取决于您拥有的智能手机的类型,并将模型部署到您的设备上。注意,Simulink模型需要EnsembleModel.mat文件和校准矩阵文件slexHARAndroidCalibrationMatrix.matslexHARiOSCalibrationMatrix.mat.如果您单击位于此页右上角部分的按钮,并在MATLAB中打开此示例,那么MATLAB将打开包含这些校准矩阵文件的示例文件夹。

类型slexHARAndroidExample打开Simulink模型用于Android部署。

类型slexHARiOSExample打开用于iOS部署的Simulink模型。您可以在Mac OS平台上打开该模型。

这两个Simulink模型基于智能手机传感器测量的加速数据对人类活动进行分类。模型包括以下模块:

  • 加速度计块从设备上的加速度计传感器接收原始加速度数据。

  • 校准块是一个MATLAB函数块,用于校准原始加速度数据。该块使用的是slexHARAndroidCalibrationMatrix.mat文件或slexHARiOSCalibrationMatrix.mat文件。如果单击位于此页右上角部分的按钮,并在MATLAB中打开此示例,那么MATLAB将打开包含这些文件的示例文件夹。

  • 显示模块Acc XAcc Y,Acc Z连接到校准块和显示设备上每个轴的校准数据点。

  • 每一个缓冲块,X缓冲Y缓冲,Z缓冲,缓冲加速度计轴的32个样本,缓冲帧之间的12个重叠样本。在收集了20个样本后,每个缓冲Block将20个样本与前一帧中的12个样本连接起来,并将总共32个样本传递给extractFeatures块。每一个缓冲Block每0.1秒接收一个输入样本,每2秒输出一个包含32个样本的缓冲帧。

  • extractFeatures块是一个MATLAB函数块,从32个加速度计样本的缓冲帧中提取60个特征。该功能块使用DSP系统工具箱™和信号处理工具箱™。

  • predictActivity模块是一个MATLAB函数模块,它从EnsembleModel.mat文件的使用loadLearnerForCoder(统计和机器学习工具箱)并利用提取的特征对用户活动进行分类。输出为1 ~ 5之间的整数,分别对应“Sitting”、“Standing”、“Walking”、“Running”和“Dancing”。

  • 预测活动块显示设备上分类的用户活动值。

  • 视频输出子系统使用多端口开关块选择相应的用户活动图像数据显示在设备上。的转换为RGB块将选定的图像分解为单独的RGB向量,并将图像传递给活动展示块。

要将Simulink模型部署到您的设备上,请遵循下面的步骤在Android设备上运行模型在苹果iOS设备上运行模型(苹果iOS设备的Simulink支持包).在您的设备上运行模型,按照前面描述的收集训练数据的方式放置设备,并尝试这五个活动。模型相应地显示分类的活动。

slexHARAndroidExample.png

为了确保模型的准确性,您需要按照收集训练数据时所描述的方式放置设备。如果你想把你的设备放在不同的位置或方向上,那么就用你自己的方式收集数据,并用你的数据来训练分类模型。

模型的精确度可能不同于测试数据集的精确度(testaccuracy),取决于设备。为了改进模型,可以考虑使用额外的传感器并更新校准矩阵。此外,您可以使用audio Toolbox™向输出子系统添加另一个用于音频反馈的输出块。使用ThingSpeak™写块将分类活动和加速数据从您的设备发布到物联网。有关详细信息,请参见https://thingspeak.com/。

参考文献

[1] El Helou, A.传感器HAR识别App. MathWorks文件交换//www.ru-cchi.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app

[2] STMicroelectronics, AN4508“低g三轴加速度计的参数及校正。2014。

[3] El Helou, A.传感器数据分析。MathWorks文件交换//www.ru-cchi.com/matlabcentral/fileexchange/54139-sensor-data-analytics-french-webinar-code

Baidu
map