【无标题】

异常检测

异常检测是机器状态监测的同义词。早期发现异常可以进行预防性维护,避免生产损失。理想情况下,一个工业4.0工厂将从零开始,使用新的生产机器和资本投资,但在现实中,这些设备通常使用几十年。一种基于NTAG SmartSensor和具有机器学习功能的MCU的小型和轻型传感标签,提供了一种将感知和记录功能添加到现有机器的方法,在正常操作期间不会干扰或干扰。

使用TensorFlow Lite的i.MX RT应用程序

  1. 介绍

异常检测是一种用于识别异常行为(与大多数数据点显著不同的数据点)的方法。异常通常与某些类型的问题、故障或罕见事件(财务欺诈、传感器故障、运行状况问题、垃圾邮件检测)相关,这使得问题从业务角度来看非常有趣。

这个应用程序展示了如何使用神经网络来搜索处于固定位置的传感器中的异常。这种方法可以应用于更复杂的问题,如检测不可见的下降[1],机器声音异常[2],异常运动[3],或制造系统错误[4]。在传感器数据中搜索异常行为是一个无监督学习一类问题,您只知道一个类,并试图搜索该类之外的异常。各种经典和深度机器学习算法都可以应用于这个问题。一类支持向量机(OC-SVM)和高斯混合模型(GMM)是常见的机器学习算法,成功地应用于异常检测问题。然而,它们在复杂的多维数据上的性能不是最优的。

深度学习方法对于识别数据[5]中的异常非常有效,并且在更复杂和有噪声的数据上表现出了比SVM[2]等常见机器学习技术更好的性能。

自动编码器在检测异常方面非常有用。自动编码器是一种学习预测输入的前馈神经网络。输入被简化为核心特征(编码),然后重新创建(解码)。实际输入和计算输出之间的误差称为重构误差。网络从未看到的数据(异常)预计将显示更高的重构误差。

利用重构误差阈值检测异常。
2.需求
2.1. 硬件需求
•EVKB-IMXRT1050或EVK-IMXRT1060
•FRDM-STBC-AGM01传感器屏蔽
2.2.软件需求
•MCUXpresso IDE v11.3.0(也支持IAR和Keil)
•带有requirements.txt文件中列出的所需包的Python 3
-创建一个新的anaconda环境(这是可选的)

conda create -n adt pip
activate adt

-安装在adt_train文件夹中的requirements.txt文件中列出的所需Python库。你可以使用下面的命令来安装:

pip install -r requirements.txt

2.3. 安装
异常检测应用程序是eIQ TensorFlow Lite 2.3库的一部分。使用NXP MCUXpresso SDK Builder时,选择EVKB-IMXRT1050-AGM01或EVK-IMXRT1060, AGM01和eIQ组件。在MCUXpresso IDE中加载库时,导入tensorflow_lite_adt示例。建议在“项目选项”中选择“UART”(图1)。

【无标题】_第1张图片

图1. 从MCUXpresso IDE中导入的SDK示例中选择异常检测项目

3.项目结构

该项目分为两部分:

a) C/C++源代码,用于生成用于训练的传感器数据并运行推断(搜索传感器读数中的异常)

b) 用于模型培训的Python脚本

在MCUXpresso IDE中,源代码文件在source文件夹和adt_model.tflite, adt_train.py, 和requirements.txt文件在doc文件夹中。
4. 模型训练
该项目包括整个机器学习工作流(如图2所示),它使您能够训练自己的模型并使用不同的设置(更改传感器、输入数据或模型大小)进行实验。
整个机器学习工作流由几个步骤组成(如图2所示)。在第一步中,收集传感器数据。您可以从所有可用的传感器收集训练和测试数据,并决定在培训阶段使用哪些传感器。预处理后的训练数据用来训练一个预定义的模型。如果测试数据可用,可以进行目视评估(参见4.5节“评估”)。您可以使用模型参数进行实验,并使用不同的参数对模型进行多次训练,直到您对结果感到满意。最后,最终的模型被转移到板上。所有步骤在4.1 - 4.6节中详细描述。
除数据收集外,工作流由Python训练脚本adt_train.py执行,该脚本位于tensorflow_lite_adt示例的adt_train文件夹中。
【无标题】_第2张图片

图2. 机器学习工作流程

4.1. 数据收集

数据收集是C/C++应用程序的一部分,它将原始传感器数据打印到标准输出。

4.1.1. 设置输入数据参数

异常检测应用程序检测传感器读数中的异常。目前,该应用程序支持陀螺仪(FXAS21002)、加速度计和磁力计(FXOS8700CQ)。两个传感器放置在FRDM-STBC-AGM01传感器屏蔽上。三轴加速度计和陀螺仪读数用于应用程序。

几个连续的测量值被平化为一个矢量(图3),并最终由应用程序在它们被输入到模型之前进行预处理。连续采样的数量由adt_train.py文件中的PATCH_SIZE变量给出,并生成到parameters.h文件中。注意,输入层的大小是一个维度向量,等于NUM_CHANELS*PATCH_SIZE。

【无标题】_第3张图片

图3. 将原始数据转换为输入向量
缺省情况下,PATCH_SIZE为5。由于采用了5个连续的测量值进行异常检测,因此模型的输入是一个30维向量。

4.1.2.运行数据收集

打开tensorflow_lite_adt示例。在adt.cpp中,将DATA_COLLECT变量设置为true,然后运行示例。默认情况下,收集1000个样本。这个数字是实验性设置的,您可以通过更改SAMPLE_NUM变量来更改它。数据被打印到外部控制台。复制输出并保存到一个文件。建议使用SmarTTY终端。

第一步是收集“好的”传感器数据。将带传感器的电路板放在一个稳定的表面。收集训练数据时不要摇动传感器。您可以使用表面震动重复数据收集,以验证模型。

4.2. 预处理

原始数据通常在输入到模型之前进行预处理(可以对数据进行过滤,计算数据的统计数据,或者应用傅里叶变换)。要独立于传感器位置检测异常(加速度计受重力影响),需要导出原始传感器数据(计算两个连续读数的差值),然后将加速度计数据除以10,使其与陀螺仪数据具有相同的数量级。

4.3.神经网络模型

使用自动编码器检测异常。自动编码器在main函数中定义(在adt_train.py脚本中),由一个输入层和四个完全连接的隐藏层组成。前两隐藏层编码;输入被映射到高级特征,然后映射到低级特征。最后两层解码;对底层特征进行解码,最终在输出层重新生成输入。然而,层的大小是相对任意的,您可以用它来试验以获得最准确的结果。

默认情况下,30维输入被编码为16 (ENCODING_DIM)高级特征,然后编码为8 (ENCODING_DIM/2)低级特征。然后这些特征被解码为一个8维(ENCODING_DIM)隐藏层,并重新创建输出。网络如图4所示。
【无标题】_第4张图片

图4. Autoencoder模型

每一层都由tanh函数(激活函数在[6]中解释)激活,因为输入和输出层包含负值。此外,在训练过程中添加L1正则化器(解释为[7]或[8]),生成稀疏性自编码器。

4.4. 模型训练
对模型进行1000个epoch (EPOCH_NUM)的训练,批大小为10个样本(BATCH_SIZE)。这些值是实验性地设置的,可以直接在adt_train.py脚本中更改。
4.5. 评估
如果将包含验证数据的文件作为validation_data输入参数传递给Python训练脚本,则训练脚本提供了对验证数据的可视化评估。它绘制验证数据的重构错误。图4显示了验证数据的重构错误。验证数据由放置在稳定表面上的板采集,每50个样本(从第250个样本开始)表面振动一次。因为输入数据是一个连续5次测量的patch,震动每10个patch发生一次(如图5所示)。低于阈值的重构误差为黑色,高于阈值的重构误差为红色。
【无标题】_第5张图片

4.6.部署

Python训练脚本adt_train.py将训练过的模型转换为一个tflite文件,并创建一个十六进制转储(二进制tflite文件的表示形式,以数组的形式存储在C头文件中)。十六进制转储头文件存储为adt_model.h。将adt_model.h头文件和parameters.h文件复制到tensorflow_lite_adt项目中。管道如图6所示。
【无标题】_第6张图片

图6. 从实施的角度进行培训
5. 推理

推理使用训练过的神经网络,计算来自传感器的实时输入的重构误差。对重构错误应用一个阈值。所有超过这个阈值的数据都被认为是异常的。阈值是训练数据平均重构误差的三倍,由训练脚本写入parameters.h。您可以在adt_train.py(第92行)中更改比例。您可以直接通过重写parameters.h中的threshold变量来修改阈值。

打开tensorflow_lite_adt示例,确保它使用了在上一步生成的新创建的adt_model.h和parameters.h文件,将DATA_COLLECT变量设置为false,然后运行示例。对于每5个传感器测量值,它会打印推断时间、重构误差和“检测到的异常!!”",如果检测到异常行为。打开一个终端窗口,查看类似如下的输出:

Anomaly Detection example using a TensorFlow Lite model. 
Threshold value 4.80 
INFO: Initialized TensorFlow Lite runtime. 
(116 us) 27911.50 anomaly detected!! 
(62 us) 452.91 anomaly detected!! 
(58 us) 1.89 
(57 us) 2.11 
(51 us) 2.45 
(54 us) 2.3 
(46 us) 1.7 
(48 us) 3.59 
(45 us) 2.21 
(46 us) 1.34 
(44 us) 2.11 
(50 us) 12.96 anomaly detected!! 
(44 us) 18.15 anomaly detected!! 
(46 us) 9.76 anomaly detected!! 
(47 us) 8.67 anomaly detected!! 
(47 us) 3.8 
(46 us) 4.11 

推断实现细节如图7所示.

【无标题】_第7张图片

图7. 从实现的角度进行推断

  1. 总结

使用自动编码器在传感器数据中实现异常行为的检测器。自动编码器以无监督的方式学习传感器的正常行为,并在发生异常时发出警报。这种方法可以应用于广泛的问题,如看不见的下落或运动检测。

你可能感兴趣的:(NXP芯片,人工智能,深度学习,arm)