基于边缘侧的体态识别实例

背景介绍

  近年来,国内一直大力发展数字经济,从共享单车到新能源汽车,其主要推动力在于硬件性能的不断提升,软件系统的不断优化,带动了物联网行业不断的向前发展。物联网想要真正赋能实体经济,需要多个学科之间相互协调,整个过程中存在巨量的市场,也存在一些小众领域,能吃一些残羹剩饭。
基于边缘侧的体态识别实例_第1张图片

图1 物联网嵌入式系统的架构

  传统的系统架构为:通过网关将嵌入式硬件采集的数据上传到物联网云平台,整个过程中需要占用的硬件资源比较多,系统的实时性比较差。近年来,随着人工智能算法的不断发展,出现了各种轻量化的神经网络模型,能够支持数据边缘侧进行实时处理(特征提取),并将结果反馈到云平台。

机器学习算法

  调研发现,传感器采集的数据大多属于时序数据,工程师能够通过算法对信息规律地分析和挖掘,实现对未来事件的准确预测,相关成果广泛应用于人体运动状态预测、依据ECG信号识别人体生理状态、污染物浓度预测、机械设备寿命预测、地基变形规律预测以及股票的涨跌预测等。

  传统的时间序列预测主要基于统计学方法,通过数学模型描述数据背后的耦合关系,主要包含:指数平滑法、移动平均(MA)、 自回归(AR)等。然而很多实际场景中很难建立准确的数学模型(ECG生理信号等),因此,近些年为了解决该问题,发展出RNN以及LSTM等机器学习算法,具体原理如下所示:
基于边缘侧的体态识别实例_第2张图片

图2 LSTM网络模型结构

  LSTM内部主要包含三个门(遗忘门、输入门和输出门)和记忆单元 (Memory Cell)两块,其中,遗忘门、输入门和输出门的数学表达式为:
f t = σ ( W h f ∗ h t − 1 + W x f ∗ x t + b f ) i t = σ ( W h i ∗ h t − 1 + W x i ∗ x t + b i ) o t = σ ( W h o ∗ h t − 1 + W x o ∗ x t + b o ) \begin{array}{l}{f_t} = \sigma ({W_{hf}}*{h_{t - 1}} + {W_{xf}}*{x_t} + {b_f})\\{i_t} = \sigma ({W_{hi}}*{h_{t - 1}} + {W_{xi}}*{x_t} + {b_i})\\{o_t} = \sigma ({W_{ho}}*{h_{t - 1}} + {W_{xo}}*{x_t} + {b_o})\end{array} ft=σ(Whfht1+Wxfxt+bf)it=σ(Whiht1+Wxixt+bi)ot=σ(Whoht1+Wxoxt+bo)

单元状态的更新函数为:
C t = f t ∗ C t − 1 + i t ∗ C ~ t C ~ t = tanh ⁡ ( W h c ∗ h t − 1 + W x c ∗ x t + b c ) \begin{array}{l}{C_t} = {f_t}*{C_{t - 1}} + {i_t}*{{\tilde C}_t}\\{{\tilde C}_t} = \tanh ({W_{hc}}*{h_{t - 1}} + {W_{xc}}*{x_t} + {b_c})\end{array} Ct=ftCt1+itC~tC~t=tanh(Whcht1+Wxcxt+bc)

系统的输出为:
h t = o t ∗ tanh ⁡ ( C t ) {h_t} = {o_t}*\tanh ({C_t}) ht=ottanh(Ct)  附1:AR模型:当前值是前 p 时刻序列的线性组合,核心本质属于线性拟合,通过求解矩阵方程组获取拟合拟合参数;
  附2:LSTM的数学模型跟力学涉及的材料本构极为相似,在什么时候有限元解是唯一的,什么时候是无解的,最后可以用数学上不动点原理来解答。

应用实例

  智能可穿戴设备在生活中具有广泛的应用,能够自动采集人体的状态数据。本项目中建立了LSTM模型,后续导入智能手机获取的加速度信号进行训练,判断穿戴者的状态(坐下、站立、走动、跑步以及跳动)。本项目采用6组时序数据作为训练集,每组数据包含X、Y、Z方向的加速度信号,具体过程如下所示:

基于边缘侧的体态识别实例_第3张图片

图3 LSTM网络训练过程

  后续将LSTM模型封装为函数,直接部署到网关中,本项目采用的网关硬件参数为: 4核心;内存:512M;存储容量:4g ;支持sd卡;

clear all;clc
filename = 'data.txt'; 
datatable = importdata(filename); 
changdu=50;
traindata=zeros(3,changdu);

for i=1:length(datatable)
    temp=tiqu(datatable{i,1});
    if i<(changdu+1)
        traindata(1,i)=temp(1,1);
        traindata(2,i)=temp(1,2);
        traindata(3,i)=temp(1,3);
    end    
    if i>changdu
        traindata=circshift(traindata,-1,2);
        traindata(1,changdu)=temp(1,1);
        traindata(2,changdu)=temp(1,2);
        traindata(3,changdu)=temp(1,3);
    end
    ypre=acceleration(traindata);    
end

你可能感兴趣的:(联远智维期间工作内容,物联网,lstm,边缘计算,深度学习)