边缘网关及智能算法

2022-10-31 12:24:49 浏览数 (1)

背景介绍

调研发现,物联网在传统工业中一般采用云-边-端的架构,其应用模式逐渐固化。其中云平台主要进行数据的存储;边缘端作为大脑,不仅能够给底层设备下发控制指令,还可以对智能传感器发送的数据进行特征提取,并将结果反馈给云平台。边缘网关可以作为一款可自由裁剪的微型电脑,能够安装Linux系统,执行各种复杂指令,具体的框架如下图所示:

图1 网关的系统架构图1 网关的系统架构

附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)]        

0 人点赞