095、ESP-DL的异常检测案例

📅 2026/7/24 17:24:23
095、ESP-DL的异常检测案例
095、ESP-DL的异常检测案例昨晚调试到凌晨三点,板子上的LED突然开始有规律地闪烁——不是代码里写的那个闪烁模式,而是一种诡异的、像心跳一样的节奏。我盯着逻辑分析仪上的波形看了十分钟,才意识到ESP-DL的异常检测模型真的把那个“异常”抓出来了。这感觉就像你养了一条狗,它突然对着空气狂吠,你以为它疯了,结果发现是煤气泄漏。从一次“假报警”说起事情是这样的。客户要求用ESP32-S3做一个工业电机振动监测,正常运行时频谱特征很稳定,一旦轴承磨损就会出现特定频段的能量偏移。我一开始用的是简单的阈值判断,结果现场环境噪声一上来,误报率直接飙到40%。后来翻ESP-DL的文档,发现它内置了基于自编码器的异常检测方案,但官方例程只给了MNIST的手写数字异常检测——工业场景下谁关心数字写得好不好看?我踩的第一个坑是数据预处理。ESP-DL要求输入是固定长度的浮点数组,但振动传感器采集的是时域信号,直接丢进去模型根本学不到东西。正确的做法是先做FFT转频域,再归一化到[-1,1]区间。这里有个细节:归一化系数不能直接用全局最大最小值,得用正常工况下的统计值,否则模型会把正常的高幅值振动也判成异常。模型构建:别被“自编码器”吓到自编码器的本质就是个压缩-解压游戏。编码器把128维的频谱特征压缩到16维的瓶颈层,解码器再把它还原成128维。训练时只喂正常数据,模型学会的是“正常样本长这样”。推理时计算输入和输出的重构误差,误差大了就是异常。ESP-DL的模型定义用C++写,和Python的Keras风格很像但语法更啰嗦。下面是我实际跑通