背景介绍
调研发现,物联网在传统工业中一般采用云-边-端的架构,其应用模式逐渐固化。其中云平台主要进行数据的存储;边缘端作为大脑,不仅能够给底层设备下发控制指令,还可以对智能传感器发送的数据进行特征提取,并将结果反馈给云平台。边缘网关可以作为一款可自由裁剪的微型电脑,能够安装Linux系统,执行各种复杂指令,具体的框架如下图所示:
附1:边缘网关在实际中具有广泛的应用,主要的优势体现在:1、将嵌入式设备中涉及的复杂计算移植到边缘端,有效的解决了硬件消耗等问题;2、将区域内的信息进行收集、汇总、融合,后续通过智能算法提取出关键信息(联邦学习等),具有更好的安全性;3、解决了嵌入式设备与云端通信延迟过高的问题,在自动驾驶等领域具有广泛的应用。
附2:物联网的核心为如何利用数据背后的价值:在力学领域应用时,能够直接将有限元软件嵌入到边缘端,通过传感器获取模型关键参数,然后在边缘端进行分析计算,得到最后特征并上传到云平台,该方式能够应用于火焰温度测量,流速测量等场景。
系统框架
本项目利用开源数据集Human Activity Recognition database进行训练,最终通过加速度信号识别穿戴者的运动状态,后续和同学一起成功部署到边缘网关~
数据结构
Human Activity Recognition database总共选取了30 名志愿者,年龄范围在19-48岁年龄段。测试过程中每个人在腰部佩戴智能手机(嵌入式惯性传感器)进行六项活动,原始数据的采样频率为 50Hz,具体格式如下所示:
代码语言:javascript复制33,Jogging,49105962326000,-0.6946377,12.680544,0.50395286;
......
其中,33表示为设备编号,Jogging表示为志愿者的状态,分别为:'Downstairs', 'Jogging', 'Sitting', 'Standing', 'Upstairs', 'Walking';“49105962326000”为时间戳;“--0.6946377,12.680544,0.50395286”分别为X、Y、Z方向的加速度。
通过data = pd.read_csv()对数据进行读取,具体的数据格式为:
代码语言:javascript复制Convoluted data shape: (10981, 180, 3)
Labels shape: (10981, 6)
X train size: 7686
X test size: 3295
y train size: 7686
y test size: 3295
环境搭建
本项目采用ECS云服务器,具体配置为:ubuntu_20系统,2GB内存,40GB存储空间,系统安装有python环境,利用tensorflow深度学习框架进行模型训练。其中,环境搭建的具体过程为:
代码语言:javascript复制wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
(base) root@mayuanliang:~/har-recognition# conda -V
conda 4.12.0
conda update -n base -c defaults conda
conda create -n hri python=3.6
conda activate hri
pip install matplotlib==1.5.3
pip install seaborn==0.8.1
pip install numpy==1.14
pip install pandas==0.20.3
pip install scikit-learn==0.19.1
pip install tensorflow==1.5.0
(hri) root@mayuanliang:~/har-recognition# python
Python 3.6.15 | packaged by conda-forge | (default, Dec 3 2021, 18:49:41)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'1.5.0'
程序算法
模型训练完成后,我们采用saver.save()命令将所有的变量和网络结构保存下来,具体代码为:
代码语言:javascript复制saver = tf.train.Saver()
saver.save(sess, "/root/har-recognition/classificator")
运行完毕后,文件夹中会出现checkpoint、classificator.data-00000-of-00001、classificator.index和classificator.meta 4个文件。
结果展示
实际项目应用中,我们能够直接加载模型文件,对嵌入式硬件上传到数据进行实时预测,具体程序代码为:
代码语言:javascript复制with tf.Session() as sess:
new_saver = tf.train.import_meta_graph('/root/har-recognition/classificator.meta')
new_saver.restore(sess, '/root/har-recognition/classificator')
graph = tf.get_default_graph()
X = graph.get_operation_by_name('X').outputs[0]
y = graph.get_operation_by_name('y').outputs[0]
y_pred_softmax = graph.get_operation_by_name('y_pred_softmax').outputs[0]
predictions = sess.run([y_pred_softmax], feed_dict={X: X_test})
print("predict:", predictions)
程序输出的结果为:
代码语言:javascript复制predict: [array([[1.1652751e-03, 4.1641928e-03, 9.9202007e-01, 1.2657455e-03,
1.1365779e-03, 2.4814304e-04]], dtype=float32)]