随机智能手机的普及,在日常生活中,大多数人在做任何事情的时候,都会随身携带手机。如果开启手机中的传感器,当用户运动时,就可以采集大量的用户信息,根据这些信息,就可以判断当前用户的运动模式,如行走、上楼梯、下楼梯、坐、站立、躺下等等。基于这些运动模式,设计不同的场景,为健身类或运动类应用(APP)增加一些有趣功能。

在智能手机中,常见的位置信息传感器就是加速度传感器(Accelerometer)和陀螺仪(Gyroscope)。

  • 加速度传感器:用于测量手机移动速度的变化和位置的变化;
  • 陀螺仪:用于测试手机移动方向的变化和旋转速度的变化;

本文主要根据手机的传感器数据,训练深度学习模型,用于预测用户的运动模式。

技术方案:

  • DL:DeepConvLSTM
  • Keras:2.1.5
  • TensorFlow:1.4.0

本文源码:https://github.com/SpikeKing/MachineLearningDemos/tree/master/motion_detector


数据

本例的数据来源于UCI(即UC Irvine,加州大学欧文分校)。数据由年龄在19-48岁之间的30位志愿者,智能手机固定于他们的腰部,执行六项动作,即行走、上楼梯、下楼梯、坐、站立、躺下,同时在手机中存储传感器(加速度传感器和陀螺仪)的三维(XYZ轴)数据。传感器的频率被设置为50HZ(即每秒50次记录)。对于所输出传感器的维度数据,进行噪声过滤(Noise Filter),以2.56秒的固定窗口滑动,同时窗口之间包含50%的重叠,即每个窗口的数据维度是128(2.56*50)维,根据不同的运动类别,将数据进行标注。传感器含有三类:身体(Body)的加速度传感器、整体(Total)的加速度传感器、陀螺仪。

以下是根据数据绘制的运动曲线,站立(红色)、坐(绿色)、躺下(橙色)的振幅较小,而行走(蓝色)、上楼梯(紫色)、下楼梯(黑色)的振幅较大。

以下是在行走(Walking)中,三类传感器的三个轴,共9维数据的运动曲线:

以下是在坐(Sitting)中的运动曲线:

通过观察可知,不同运动模式的传感器数据曲线拥有一定的差异性,但是有些运动模式的差异性并不明显,如行走、上楼梯、下楼梯之间;相同运动模式的传感器数据曲线也各不相同。

在数据源中,70%的数据作为训练数据,30%的数据作为测试数据,生成训练数据的志愿者与生成测试数据的不同,以保证数据的严谨性,符合在实际应用中预测未知用户动作的准则。

UCI数据源


模型

模型是基于深度学习的DeepConvLSTM算法,算法融合了卷积(Convolution)和LSTM操作,既可以学习样本的空间属性,也可以学习时间属性。在卷积操作中,通过将信号与卷积核相乘,过滤波形信号,保留高层信息。在LSTM操作中,通过记忆或遗忘前序信息,发现信号之间的时序关系。

DeepConvLSTM算法的框架,如下:

将每类传感器(身体加速度、整体加速度、陀螺仪)的3个坐标轴(XYZ)数据,合并成一个数据矩阵,即(128, 3)维,作为输入数据,每类传感器均创建1个DeepConvLSTM模型,共3个模型。通过3次卷积操作和3次LSTM操作,将数据抽象为128维的LSTM输出向量。

在CNN的卷积单元中,通过卷积(1x1卷积核)、BN、MaxPooling(2维chihua)、Dropout的组合操作,连续3组,最后一组执行Dropout。通过MaxPooling的降维操作(2^3=8),将128维的数据转为为16维的高层特征。

在RNN的时序单元中,通过LSTM操作,隐含层神经元数设置为128个,连续三次,将16维的卷积特征转换为128维的时序特征,再执行Dropout操作。

最后,将3个传感器的3个模型输出,合并(Merge)为一个输入,即128*3=384,再执行Dropout、全连接(Dense)、BN等操作,最后使用Softmax激活函数,输出6个类别的概率。

选择概率较大的类别,作为最终预测的运动模式。


效果

在第48层中,即Concatenate层,将3个传感器的LSTM输出合并(Merge)成1个输入,不同类别的特征,效果也不同,如:

训练参数:

epochs = 100
batch_size = 256
kernel_size = 3
pool_size = 2
dropout_rate = 0.15
n_classes = 6
复制代码

最终效果,在测试集中,准确率约为95%左右:

loss: 0.0131 - acc: 0.9962 - val_loss: 0.1332 - val_acc: 0.9535
val_f1:  0.953794 — val_precision:  0.958533 — val_recall  0.949101
复制代码

如果继续调整参数,还可以提升准确率。

通过深度学习算法训练的用户动作识别模型,可以应用于移动端进行场景检测,包含行走、上楼梯、下楼梯、坐、站立、躺下等六种动作。同时,95%的准确率已经满足大多数产品的需求。

By C. L. Wang @ 美图云事业部

参考:Merge versus merge、visualization、DeepConvLSTM、 multiclass one-hot

基于DeepConvLSTM的传感器信号分类相关推荐

  1. 基于MXL90614设计温度传感器

    摘要:提供了一种基于数字式红外传感器MLX90615的多点红外测温方法.STM32微处理器通过SMBus总线协议与MLX90615进行通信,首先分别对每个MLX90615地址进行修改,确保其地址编号在 ...

  2. 基于激光视觉传感器的工业机器人焊缝跟踪系统的优缺点

    一.总体项目情况概述 开发发那科工业机器人和上位机之间的通讯功能并完成测试. 开发发那科工业机器人和焊缝跟踪传感器的位置标定功能并完成测试. 开发焊接实时跟踪的图像预处理功能并完成测试. 开发常用焊缝 ...

  3. 基于DS18B20数字温度传感器的温度计设计

    基于DS18B20数字温度传感器的温度计设计 本报告为哈尔滨工业大学电子与信息工程学院大二学期微机原理课程的课设报告.请注意,本文所述代码均在Quartus II 13.0程序内使用汇编语言运行. 一 ...

  4. 安卓基于Frida HOOK传感器 实现虚拟运动跑步

    安卓基于Frida HOOK传感器 实现虚拟运动跑步 (本文运行环境:WIN10 + Pythom 3.6) 众所周知,安卓HOOK是十分厉害的的,所以有一天,我突发奇想能不能动态HOOK安卓的传感器 ...

  5. 【基于Arduino APDS9960 传感器的手势控制非接触式电梯】

    基于Arduino APDS9960 传感器的手势控制非接触式电梯 前言 所需组件 APDS9960 RGB & 手势传感器 电路原理图 代码说明 测试手势控制的非接触式升降机 完整代码 前言 ...

  6. 基于可穿戴传感器和深度卷积神经网络运动状态进行下半身监控算法

    最近加拿大温哥华市西蒙弗雷泽大学机电系统工程与工程科学学院Menrva研究小组,发明了一种传感器装置可以实时监控下半身运动状态. 介绍 跑步是一项比较容易受伤运动,先前已经对跑步者进行了不同运动学参数 ...

  7. 基于微波雷达传感器的智能安全车门锁,微波雷达感应模组技术

    基于微波雷达传感器的智能安全车门锁,为了解决由于人们的粗心而不正当的使用车门所造成的事故问题,通过微波雷达感应模组对周围物体进行感应检测. 在危险发生前做出判断,通过蜂鸣器的鸣叫声对车内人员进行提醒和 ...

  8. 【项目实战-MATLAB】:基于CNN的心音信号分类

    心脏听诊是先天性心脏病(简称:先心病,CHD)初诊和筛查的主要手段.本项目对先心病心音信号进行分析和分类识别研究,提出了一种基于卷积神经网络的先心病分类算法.本文算法基于临床采集的已确诊先心病心音信号 ...

  9. matlab两轮自平衡小车,(2-3合刊) 基于MEMS惯性传感器的两轮自平衡小车设计

    摘要:着重分析了两轮自平衡小车的设计原理与控制算法,采用卡尔曼滤波算法融合陀螺仪与加速度计信号,得到系统姿态倾角与角速度最优估计值,通过双闭环数字PID 算法实现系统的自平衡控制.设计了以MPU-60 ...

最新文章

  1. 海思3536:osdrv编译过程中报错及解决方法
  2. jemeter多场景混合案例_Jmeter多业务混合场景如何设置各业务所占并发比例
  3. WebRTC的现状和未来:专访W3C WebRTC Chair Bernard Aboba(上)
  4. yy直播没声音html,驱动技巧:解决YY语音中麦克风无声或者有噪音的问题
  5. Oracle技术之索引与Null值对于Hints及执行计划的影响
  6. not found for dependency: expected at least 1 bean which qualifies as autowire
  7. vue学习-路由router
  8. 交叉火力dsp手机调音软件_万能dsp调音软件
  9. 在线class文件反编译java
  10. Go语言自学系列 | go常用命令
  11. solidword入门使用
  12. ChemDraw19激活中文版下载化学绘图软件教程
  13. 解题笔记(15)——几个栈和递归的问题
  14. 一个对付小孩便秘的指南,让麻麻不再当催屎员
  15. 科技云报道:“奇袭”混合云,青云QingCloud站上C位
  16. 如何使用python下载B站视频
  17. 读书笔记∣元数据:用数据的数据管理你的世界 Ch.3-4
  18. python制作九宫图
  19. 浮点运算/半精度,单精度,双精度/浮点和定点
  20. java 解析 json 索引对象_怎么获取json对象的属性和值

热门文章

  1. Android 第十四课 使用LitePal添加数据(更新数据)
  2. shields 徽标_符号,标志,文字标记:徽标类型的综合指南
  3. 整整4个月了,尽全力组织了源码共读活动~
  4. 手把手教你接入前端热门抓包神器 - whistle
  5. Android Studio中解决jar包重复依赖导致的代码编译错误
  6. 博鳌直击 | 区块链在互联网金融中扮演怎样的角色?
  7. Jmeter-3.0的源码导入eclipse并执行
  8. 使用vh来制作高度自适应页面和元素垂直居中
  9. 有关EnableQ在线问卷调查引擎的记者访谈记录
  10. 利用Asp.net中的AJAX制作网页上自动选取开始日期及结束日期的用户自定义控件...