热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

EMQX+CNN在AIoT中的融合应用

提起物联网(IoT)和人工智能(AI),人们并不陌生。作为当今时代十分热门的科技概念,它们其实都

提起物联网(IoT)和人工智能(AI),人们并不陌生。作为当今时代十分热门的科技概念,它们其实都与「数据」有关:IoT 解决了数据从哪里来,AI 则解决了数据去往何方、用于何处。一个将两者结合的新概念「AIoT」也应运而生:IoT 通过万物连接与通信为 AI 提供海量数据,AI 则通过对数据的不断学习与分析,将其转化为有效信息,为实际领域提供效用

在本文中,我们将提出 AIoT 的一个简单融合应用:利用 物联网消息中间件 EMQ X Broker 收集液压系统温度传感器数据,并将其转发到一维 卷积神经网络 (1D CNN) ,利用这一 AI 深度学习的代表算法预测液压系统冷却器状态。

在一维卷积神经网络上,时间将被看做一个空间纬度,每个输出时间步都是利用输入序列在时间维度上的一小段得到的,为此我们可以利用该特性实现时序数据的预测。我们将使用 Python 代码模拟温度传感器时序数据,通过 MQTT 协议 传输到 EMQ X Broker,并利用其灵活的规则引擎将数据转发到 webhook,依据输入的温度传感器时序数据实现当前液压系统冷却器的状态预测。

数据集准备

在本文中我们将使用 UCI 机器学习与智能系统中心提供的 液压系统状态监测数据集,该数据集是在液压试验台上实验获得。该试验台由一级工作回路和二级冷却过滤回路组成,二级冷却过滤回路通过油箱相连。该系统周期性地重复负载循环 (60秒) ,通过改变四个液压元件(冷却器、阀门、泵和蓄能器)的状态,获取压力、体积流量和温度等过程值。

  • 在该数据集中,TS1.txt, TS2.txt, TS3.txt, TS4.txt 分别为 4 个液压系统的冷却器温度传感器以 60 秒一个周期所获取到的温度数据,第一个周期传感器温度数据如下图:

    在这里插入图片描述

  • profile.txt 第一列表示当前周期内液压系统冷却器状态

    • 3:接近故障 (close to total failure)
    • 20:低效率 (reduced efficiency)
    • 100:全效率 (full efficiency)

模型训练

我们将使用一维卷积神经网络(1D CNN) 来实现模型训练,1D CNN 可以很好地应用于温度传感器数据的时间序列分析。在本文中我们使用 这篇文章 中描述的顺序模型来构建一维卷积神经网络,并适当调整数据集以提高预测准确度。

  • 一维卷积神经网络模型构建

    num_sensors = 4
    TIME_PERIODS = 60
    BATCH_SIZE = 16
    EPOCHS = 10
    model_m = Sequential()
    model_m.add(Conv1D(100, 6, activation='relu', input_shape=(TIME_PERIODS, num_sensors)))
    model_m.add(Conv1D(100, 6, activation='relu'))
    model_m.add(MaxPooling1D(3))
    model_m.add(Conv1D(160, 6, activation='relu'))
    model_m.add(Conv1D(160, 6, activation='relu'))
    model_m.add(GlobalAveragePooling1D(name='G_A_P_1D'))
    model_m.add(Dropout(0.5))
    model_m.add(Dense(3, activation='softmax'))
    print(model_m.summary())
    model_m.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    history = model_m.fit(X_train, y_train, batch_size=BATCH_SIZE, epochs=EPOCHS, validation_split=0.2, verbose=2)

  • 模型分类指标的报告

    从报告中可以看出通过温度数据预测冷却器状态 3 (接近故障),20 (低效率),100 (全效率) 准确率分别为 95%,80%,89%。

    在这里插入图片描述


模拟数据输入

在本文中我们将模拟生产环境下冷却器温度传感器数据上报,为此我们将使用 Python 代码读取数据集中温度数据,并通过 MQTT 协议上报到 EMQ X Broker。

在下面代码中我们首先使用 pandas 读取数据集中温度数据 (‘TS1.txt’, ‘TS2.txt’, ‘TS3.txt’, ‘TS4.txt’),并对数据做简单处理,然后将数据每秒上报到 EMQ X Broker。

import json
import timeimport pandas as pd
from paho.mqtt import client as mqtt_clientbroker = '127.0.0.1'
port = 1883
topic = "/1dcnn"
client_id = f'1dcnn-client'def connect_mqtt():def on_connect(client, userdata, flags, rc):if rc == 0:print("Connected to MQTT Broker!")else:print("Failed to connect, return code %d\n", rc)client = mqtt_client.Client(client_id)client.on_connect = on_connectclient.connect(broker, port)return clientdef load_data():names = ['TS1.txt', 'TS2.txt', 'TS3.txt', 'TS4.txt']df = pd.DataFrame()for name in names:data_file = f'./dataset/{name}'read_df = pd.read_csv(data_file, sep='\t', header=None)df = df.append(read_df)df = df.sort_index()df_values = df.valuesdf = df_values.reshape(-1, 4, len(df.columns))data = df.transpose(0, 2, 1)return datadef publish(client):data = load_data()for x_data in data[-10:]:for y_data in x_data:t_1, t_2, t_3, t_4 = tuple(y_data)msg = {'t1': round(t_1, 3),'t2': round(t_2, 3),'t3': round(t_3, 3),'t4': round(t_4, 3)}time.sleep(1)result = client.publish(topic, json.dumps(msg))# result: [0, 1]status = result[0]if status == 0:print(f"Send `{msg}` to topic `{topic}`")else:print(f"Failed to send message to topic {topic}")def run():client = connect_mqtt()client.loop_start()publish(client)if __name__ == '__main__':run()

故障预测

在本文中我们将使用 EMQ X Broker 规则引擎将温度传感器数据转发到 webhook,并通过温度传感器采集的数据,实现对冷却器状态预测。

  1. Webhook 代码编写

    import asyncio
    import jsonimport numpy as np
    import uvicorn
    from keras.models import load_model
    from sklearn.preprocessing import StandardScaler
    from starlette.applications import Starlette
    from starlette.background import BackgroundTask
    from starlette.responses import JSONResponseapp = Starlette()
    queue = asyncio.Queue()
    model = load_model('./1d-cnn.h5')@app.on_event('startup')
    async def on_startup():print('startup webhook')@app.route('/webhook', methods=['POST'])
    async def webhook(request):request_dict = await request.json()payload = request_dict['payload']data = json.loads(payload)values = list(data.values())if queue.qsize() == 60:items = clear_queue(queue)task = BackgroundTask(predictive, data=items)else:task = Nonequeue.put_nowait(values)record = {'status': 'success'}return JSONResponse(record, status_code=201, background=task)async def predictive(data):y_label = {0: 3,1: 20,2: 100}y_status = {3: 'close to total failure',20: 'reduced efficiency',100: 'full efficiency'}x_test = np.array(data)scaler = StandardScaler()x_test = scaler.fit_transform(x_test.reshape(-1, x_test.shape[-1])).reshape(x_test.shape)x_test = x_test.reshape(-1, x_test.shape[0], x_test.shape[1])results = model.predict(x_test)msg = "Current cooler state probability: "for i, probability in enumerate(results[0]):status = y_status[y_label[i]]msg += f"{probability * 100:.2f}% {status}({y_label[i]}), "print(msg)def clear_queue(q):items = []while not q.empty():items.append(q.get_nowait())return itemsif __name__ == '__main__':uvicorn.run(app,host='127.0.0.1',port=8080,loop='uvloop',log_level='warning')

  2. EMQ X Broker 资源创建

    访问 EMQ X Dashboard,登录用户名和密码为 admin, public,点击左侧菜单栏规则 -> 资源,创建资源。

    在这里插入图片描述

  3. EMQ X Broker 规则创建

    在这里插入图片描述


测试


  1. 启动 Webhook

    python3 webhook.py

    在这里插入图片描述

  2. 启动 EMQ X Broker

    ./bin/emqx start

在这里插入图片描述

  1. 模拟数据输入

    python publish.py

在这里插入图片描述

  1. 查看液压系统冷却器状态预测结果

    从下图中我们可以看出前五个周期内,通过输入传感器温度预测出当前冷却器状态为接近故障(close to total failure),这与数据集中给出的冷却器状态一致。

在这里插入图片描述

  1. 分别调整输入数据,查看不同温度下冷却器状态预测结果,并和数据集中实验结果做对比

    • 输入前十个周期内温度传感器数据,查看预测结果并与实验台收集的结果做对比

      修改 publish.py 文件中: for x_data in data: -> for x_data in data[:10]:

    在这里插入图片描述

    从上图中我们可以看到预测结果与试验台收集结果一致

    • 选择数据集中状态为 3 接近故障(close to total failure),20 低效率(reduced efficiency) 的数据作为输入,查看预测结果并与实验台收集的结果做对比

      修改 publish.py 文件中: for x_data in data: -> for x_data in data[728:737]:

    在这里插入图片描述

    从上图中我们可以看到预测结果与实验台收集结果有一定误差,这也验证了模型分类指标的报告中预测准确性概率。

    • 输入后十个周期内温度传感器数据,查看预测结果并与实验台收集的结果做对比

      修改 publish.py 文件中: for x_data in data: -> for x_data in data[-10:]:

      在这里插入图片描述

      从上图中我们可以看到预测结果与试验台收集结果大致一致,但还是存在一定偏差


总结

至此我们实现了传感器数据上报,利用 EMQ X 规则引擎实现数据转发,并使用一维卷积神经网络 (1D CNN) 实现了液压系统冷却器故障预测。

在工业各个领域,不论是机械、电子、钢铁,还是制造、橡胶、纺织、化工、食品,液压传动技术都已成为一项基本应用技术。随着现代工业的不断发展,液压系统逐渐向高性能、高精度演进,其可靠性就变得至关重要,液压系统故障的检测与诊断也因此越来越受到重视。利用 AI 与深度学习,通过 IoT 大数据采集与分析对液压系统的状态进行监控,从而实现故障预测,是 AIoT 为传统工业领域带来的新的可能。

而在各领域对液压系统故障预测的实际应用中,为了利用 AI 作出更加精准的预测,需要采集量级更高的时序数据加以分析训练。因此,需要选用性能指标突出且高度稳定可靠的消息中间件以进行海量数据的接入与传输。EMQ X Broker 作为一款高并发低延时,支持分布式集群架构的开源 MQTT 消息服务器,支持单机百万连接,无疑可满足该应用场景以及其他更多物联网应用下的数据传输需求

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.io/cn/blog/emqx-and-1d-cnn-in-aiot


推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 老牌医药收割AI红利:先投个15亿美元抢中国人才
    萧箫发自凹非寺量子位报道|公众号QbitAI没想到,一场大会把我的“刻板印象”攻破了。2021世界人工智能大会现场,能看见不少熟悉的身影, ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 分享2款网站程序源码/主题等后门检测工具
    本文介绍了2款用于检测网站程序源码和主题中是否存在后门的工具,分别是WebShellkiller和D盾_Web查杀。WebShellkiller是一款支持webshell和暗链扫描的工具,采用多重检测引擎和智能检测模型,能够更精准地检测出已知和未知的后门文件。D盾_Web查杀则使用自行研发的代码分析引擎,能够分析更为隐藏的WebShell后门行为。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
author-avatar
小辉0110_737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有