APP下载

基于长短时记忆神经网络硬件加速的燃爆状态监测应用

2021-10-27吴宇尘陈向东陈欣鹏陈一健

物联网技术 2021年10期
关键词:甲烷运算气体

吴宇尘,陈向东,丁 星,陈欣鹏,李 皋,陈一健

(1.西南交通大学 信息科学与技术学院,四川 成都 610031;2.西南石油大学 油气藏地质及开发工程国家重点实验室,四川 成都 610500;3.西南石油大学 石油与天然气工程学院,四川 成都 610500)

0 引 言

长短时记忆神经网络由于其输入输出具有时序特性,被广泛应用于处理序列学习的应用中[1]。LSTM作为循环神经网络的变种,其模型也能同RNN一样把上一时间序列的信息综合输入到当前时间序列的神经元中,故在处理语音语义分析、图像字幕生成等时序特征明显的任务时能够达到良好的性能[2]。可燃气体燃爆状态分类应用的输入输出数据具有明显的时序特征,因此该应用能够出色地发挥出LSTM神经网络的时间关联性,使得燃爆状态的分类具有较好的抗干扰能力和较高的准确率。

现阶段LSTM神经网络的硬件实现方法有GPU(Graphics Processing Unit, GPU)、ASIC(Application Specific Integrated Circuit, ASIC)、FPGA(Field-Programable Gate Array, FPGA)三种。GPU具有并行计算效率高、易编程的特点,但是GPU的功耗高,不适用于边缘计算和推理加速。ASIC在各方面性能表现优秀,但是流片成本高、流片后修改难度大。FPGA的开发时间、灵活性、功耗适中,较适用于推理加速[3]。

研究表明,基于FPGA实现的LSTM神经网络与基于GPU实现的LSTM神经网络相比,存在灵活性、通用性较差的问题[4-5]。当改变应用场景或修改网络配置时只能重新修改电路结构。本文使用的片上系统(System on Chip, SoC)对LSTM神经网络进行异构运算,为提高通用性和灵活性带来了新方法。

本文采用从机采集,MATLAB离线训练,SoC软件端预处理,SoC硬件端在线预测的方式,实现了一个可灵活配置参数的LSTM神经网络,可被应用于气体燃爆状态监测中。此系统能使气体燃爆状态监测应用具有更加良好的实时性,仅通过9.6 μs的运算便能得到燃爆分类结果。

1 系统结构

可燃气体的燃爆状态监测系统结构如图1所示,包含从机数据采集端和数据处理端两大部分。

图1 监测系统结构

从机数据采集端通过恒压脉冲电桥、可调电压电桥等方法实现甲烷传感器在高浓度下的防损坏功能[6]。同时让温度、湿度等参数加入到环境中的甲烷浓度计算过程。最后把甲烷、二氧化碳、氧气三种气体的浓度值经过归一化处理之后,把气体数据传输给SoC数据处理端。

SoC数据处理端是基于Artix-XC7A100T系列FPGA搭建,并在FPGA中构建了以Cortex-M3系列32位工控处理器IP为核心的SoC。该SoC中的各处理器、外设、LSTM协处理器通过AXI总线协议(Advanced Extensible Interface,AXI)连接。输入数据经过通信接口后会进行定点化和FIR滤波(Finite Impulse Response, FIR)处理。之后由数据预处理模块将数据通过AXI协议传输给处理器软件部分,并由软件部分缓存。在软件部分给LSTM神经网络硬件加速器配置好权值和偏置后,即可开始一次硬件加速计算。计算得到的LSTM网络分类结果可通过OLED显示并借助串口输出。

2 LSTM神经网络硬件加速

2.1 LSTM神经网络结构

LSTM神经网络的核心思想在于使用记忆单元状态、遗忘门等不同于常规RNN的结构,抑制反向传输时梯度消失的问题。此结构可以改善反向传输的梯度被近时间序列信息主导,使得远时间序列的信息难以传达的问题[7-8]。LSTM神经网络单元结构如图2所示。

图2 LSTM神经网络单元结构

LSTM为了避免信息损失和输入无用信息,通过使用显式的加法或减法来更改LSTM的状态,可以达到控制不同信息流通量的目的。输入门、输出门、遗忘门、候选门能够对可燃气体的实时浓度值xt、上个时间序列的输出ht-1以及当前时间序列的输出ht进行流通量控制,使得LSTM单元能够协调且有效地获取信息。

输入门it的表达式如式(3)所示,代表此时的传感器信息和前时的输出是否参与或哪些参与到记忆单元ct的计算中:

遗忘门ft的表达式如式(4)所示,代表前时的记忆单元输出信息ct-1是否参与或哪些参与到此时记忆单元输出ct的计算中:

输出门ot的表达式如式(5)所示,代表此时的传感器信息和前时的输出是否参与或哪些参与到此时的输出ht的计算中:

隐层输出ht由单元状态和输出门共同决定,其表达式如式(6)所示:

2.2 数据预处理

在气体的燃爆过程中,氧气、二氧化碳、甲烷等气体的浓度范围差异较大,且单位不统一。为了降低输入参数差异巨大对LSTM网络带来的误差,在从机采集端对数据采用归一化运算。

在FPGA功能模块的设计中,为确保硬件电路的可重用性良好、面积速度功耗表现良好,所有数据的计算和传输均使用定点数作为载体。故在SoC中的软件端对从机输入数据实行浮点数定点数转换函数计算。文献[10]通过分析验证表明,16位定点数能够实现精度较好的神经网络数据格式。该定点数格式由1 bit符号位、3 bit整数位、12 bit小数位构成[11]。

在与文献[12]相同的实验环境下,共采集10 013组样本,每组样本中有6种数据,分别为甲烷浓度、二氧化碳浓度、氧气浓度、甲烷浓度变化量、二氧化碳浓度变化量、氧气浓度变化量。每8组样本设置为一个序列,并归类随机打乱后70%的序列为训练集,未打乱的30%序列为测试集。对实验环境的气体分类为正常状态、泄漏中状态、泄漏后状态、燃烧中状态、燃烧后状态[11]。

2.3 LSTM神经网络训练与仿真

在MATLAB中编写脚本训练LSTM神经网络时,首先初始化随机种子数、学习率以及训练步数,然后设置时间序列长度为8,最后选用26个隐层节点、6个输入层节点和5个输出层节点,使目标损失函数最小化。

训练完毕之后,使用测试集的分类结果绘制混淆矩阵,作为网络性能的参考。测试集分类结果的混淆矩阵如图3所示。

图3 混淆矩阵

横纵坐标分别表示燃爆状态分类的实际结果和仿真预测结果,从Ⅰ到V分别为燃烧后、燃烧中、泄漏后、泄漏中和正常状态。绿色矩形框内上方的数字为正确预测数,下方为样本比例;红色框内为错误预测数和样本比例。行末框内的绿色数字为精准率,列末框内的绿色数字为召回率,行末、列末框内的红色数字为错误率。

仿真结果表明:在模拟环境中进行5分类燃爆状态仿真时,神经网络的分类正确率为96.9%。

3 LSTM神经网络的硬件实现

3.1 LSTM神经网络控制时序

LSTM网络隐层单元中各门的输出可进行并行计算加速,而Element-Wise的输出只能由串行运算得到,所以通过FPGA对该模块使用流水线结构进行加速可以充分发挥FPGA并行硬件加速的优势[13]。

但在LSTM神经网络算法流程中,需要同时接收第t时刻的输入xt和第t-1时刻的输出ht-1,这样并不利于流水线的运行[14],所以在本设计中使用了分片计算的方法,使得流水线执行效率上升,不再有等待上一时刻计算结果的空闲状态。

LSTM模块一次性读入2个数据串,分时载入数据串A和B进行运算,当A在t=1时刻进行运算时,B在t=0时刻的结果刚好可以得出,并作为B在t=1时刻的输入值。

图4显示了计算获得ht和ct的总体时序。首先SoC软件端通过AXI总线发送输入数据串A和B的值xtA和xtB到LSTM加速器模块并存储到其内部寄存器。随后SoC软件端再通过AXI总线发送开始信号,此时LSTM加速器开始2次完整的计算,即数据串A和B的数据轮换分时进入计算单元进行计算。

图4 LSTM神经网络控制时序

首先进行数据串A在第t个时刻的运算。在数据输入前,需要将数据串A在t-1时刻的输出ht-1A读取1次。在这之后,隐层的4个MAC模块分别同时开始运行遗忘门、输入门、输出门、记忆单元操作以及激活函数,此操作共延迟9+H个时钟周期。同时将数据串A在上一时刻记忆单元的输出ct-1A取出,用于Element-Wise运算。在取出ct-1A的下一个时钟周期,开始计算在H个时钟周期延迟之后计算得到全部H个隐层节点的ctA,再经过3个时钟周期的激活函数运算得到tanh(ct)。此时MAC运算得到的otA,经过5个时钟周期的Buffer延迟之后输出,进行ht的计算,htA=otA*tanh(ctA)。最后将数据串A在t时刻的值htA和ctA保存。此时,便完成了一次数据串A于第t时刻的全部隐层单元htA的输出计算。

在第10+H个时钟周期时,开始一次数据串B在第t时刻的计算,即重复一次数据串A在第t时刻的计算操作,最终计算得到htB。

在第19+2×H个时钟周期后,开始一次数据串A的第t+1时刻的计算,首先把上一次计算的结果htA取出,之后再重复上文描述的操作,最终计算得到ht+1A。

3.2 详细设计

3.2.1 MAC模块

在LSTM神经网络结构中,运算量最大且耗时最多的模块是乘累加模块(MAC)。为降低硬件资源消耗,增加时钟频率,提高加速性能,计算模块采用16 bit定点数进行输入、输出[3]。

MAC模块的设计如图5所示,其功能为输入含有32个元素的[xt:ht-1]向量,经过乘累加计算后得到在第t时刻第n个隐层单元的输出ht(n)。也能够根据SoC软件端的指令修改存储wn,bn的RAM。

图5 MAC模块

MAC模块在初始化时首先接收节点数量信息,如果flag_32=1,则代表X+H<32,即隐层+输入层节点小于32个,MAC模块计算一次后的结果直接输出。如果flag_32=0,则代表X+H<64,MAC模块计算4次后的结果相加后再输出。写入wn,bn时,需要分时写入X+H个节点的32个权值RAM和1个偏置值RAM,如果X+H<32,那么未使用到的节点RAM赋值为0即可。最后,输出经LIMIT模块,限制输出值符合激活函数模块输入规范,使其大于-8且小于8,并转化为16 bit定点数,延迟1个时钟后输出。

3.2.2 激活函数模块

LSTM单元包含tanh激活函数和Sigmoid激活函数,本文的2种激活函数模块均使用表驱动线性插值法实现[15-16]。

tanh模块的电路结构如图6所示。由于tanh函数图像为中心对称,为节省ROM空间,所以输出分为2段,一段为直接输出,另一段为取反后输出。模块的输入值经绝对值换算后,其低9位作为ROM的输入地址,随后使用表驱动线性插值法计算分段函数,并延迟1个时钟后输出。

图6 tanh模块

Sigmoid模块的实现方法和电路结构类似于tanh模块。

3.2.3 Element-Wise模块

在得到各门的输出后,需要在Element-Wise模块中依次按元素相乘,得到输出ht和ct。

Element-Wise模块的电路结构如图7所示。

图7 Element-Wise模块

3.3 资源消耗及吞吐量

在计算吞吐量的过程中,定点数的四则运算操作以及激活函数运算操作都被算作进行了一次操作。假设LSTM神经网络中输入层的规模为X,隐藏层的规模为H,那么在模块的运算中,矩阵的相应元素与向量相乘的操作次数为(X+H)*(H*4),此外,向量的每一列都需要累加其乘法运算的中间值,因此累加阶段的操作数为(X+H-1)*(H*4)。Element-Wise阶段的操作数为(H*4),激活函数共有5个模块在使用,故激活函数的操作总数为(H*5)[1]。表1显示了当X=1,H=31时,各部分运算所需的计算次数。

表1 LSTM模块浮点运算次数

由控制时序图可知,经过9.6 μs的计算,LSTM加速器模块可算出16次结果,故本设计吞吐量为13.7 GOP/s。表2显示了与其他设计相比,LSTM加速器模块的频率、功耗、吞吐量和能效比差别。

表2 不同LSTM结构的性能比较

对比文献[17]和文献[18]的设计,本文的设计能够在同一制程的FPGA中,做到更高的频率和能效比。对比文献[19]中更高制程的FPGA设计,能够达到相似的频率和能效比。

4 实验验证

4.1 LSTM神经网络燃爆状态分类测试

为证明LSTM神经网络能对可燃气体燃爆状态进行准确的分类,故在模拟环境中使用从机采集端采集气体的变化数据,使用SoC处理端对燃爆状态进行分类。最后通过MATLAB搭建的脚本对这些数据进行性能评估。

图8所示为硬件系统实物。从机采集端在容积为10 L的密闭箱体内,SoC处理端在此密闭箱体外。

图8 硬件系统实物

图9所示为密闭箱体中模拟泄漏的测试组数据。纵坐标为气体浓度数据归一化后的数值,横坐标为数据的时间编号,紫色标签为实际燃爆状态编号。

图9 归一化后的泄漏测试组数据

实验开始前,使箱体内的气体与空气交换,保证实验开始时箱体内的气体与外界的空气含量接近,以模拟可燃气体的正常状态Ⅴ。向密闭箱体中持续注入99%浓度的甲烷气体以模拟可燃气体的泄漏中状态Ⅳ,此时二氧化碳浓度几乎不变,甲烷浓度迅速上升,由于氧气被甲烷挤出箱体,所以检测到的氧气浓度值下降。停止注入气体并静置箱体中的气体一段时间,以模拟可燃气体的泄漏后状态Ⅲ,此时二氧化碳、甲烷和氧气浓度值保持不变。最后将箱体中的气体与空气交换,燃爆状态重新归为正常状态Ⅴ。

图10所示为密闭箱体中模拟燃烧的测试组数据。实验开始前使箱体内的气体与空气交换,保证实验开始时箱体内的气体与外界的空气含量接近,以模拟可燃气体的正常状态Ⅴ。然后在密闭箱体中持续点燃打火机以模拟可燃气体的燃烧状态Ⅱ,此时氧气浓度下降,二氧化碳浓度上升,由于燃烧反应并不能完全燃烧掉打火机喷射的甲烷气体,所以甲烷浓度略微上升。停止点燃打火机并静置以模拟可燃气体的燃烧后状态Ⅰ,此时二氧化碳、甲烷和氧气浓度保持不变。最后将箱体中的气体与空气交换,燃爆状态重新归为正常状态Ⅴ。

图10 归一化后的燃烧测试组数据

4.2 实验结果

图11所示为依据箱内气体变化而实时产生的泄漏状态分类信息,图12所示为燃烧状态分类信息。蓝色圆圈标点为实际燃爆分类,红色星型标点为硬件LSTM神经网络输出的燃爆分类。实验结果表明,在模拟可燃气体泄漏和燃烧的环境中,硬件LSTM网络对燃爆状态分类准确率达96.2%。错误分类大部分分布在状态切换后的最初一段时间。出现这种情况的原因可能是传感器响应时间不同而导致的分类滞后。

图11 泄漏实验分类结果

图12 燃烧实验分类结果

LSTM神经网络的燃爆状态监测系统,因其时间序列的特性,在网络训练时会赋予气体变化趋势信息更大的权重,赋予当前气体输入数值更小的权重。因此LSTM神经网络对温漂较大的气体传感器具有较好的抗温度干扰能力,可以克服BP神经网络在同样气体浓度、不同温度下分类结果不同的问题。在相同的实验环境中,使用硬件LSTM神经网络对可燃气体燃爆状态分类的准确率[11]约比BP神经网络提升了2%。

5 结 语

本文提出了一种应用于可燃气体燃爆状态分析的LSTM神经网络硬件加速系统[11]。该系统基于FPGA搭建了Cortex-M3系列工控处理器IP与LSTM硬件加速器构成的SoC。LSTM硬件加速器采用深度流水线优化的硬件设计,使得LSTM神经网络的运算速度和运算功耗相比其他文献的设计具有较大提升。对比BP神经网络模型和LSTM神经网络模型对可燃气体的燃爆状态分类效果,可以发现LSTM神经网络在气体燃爆状态分类应用中具有更好的抗干扰能力和更高的准确率。

猜你喜欢

甲烷运算气体
重视运算与推理,解决数列求和题
二维定常Chaplygin气体绕直楔流动
液氧甲烷发动机
非等熵Chaplygin气体测度值解存在性
论煤炭运输之甲烷爆炸
有趣的运算
吃气体,长大个
Gas from human waste
拨云去“误”学乘除运算
铝合金三元气体保护焊焊接接头金相