查看: 3295|回复: 0

在RT1010上实现基于深度学习的电机缺相检测【视频】

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3918

    主题

    7536

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39903
    最后登录
    2025-8-19
    发表于 2019-11-7 10:00:01 | 显示全部楼层 |阅读模式
    紧跟上期的文章春风《1美金的RT1010,搞定PMSM无位置传感器FOC+GUI显示触控》,(此处手动点赞我们优秀的工程师,欢迎大家捧场),本期小编所带来的是那篇介绍的姊妹作,这是深度学习在RT1010上应用的小试牛刀,相信不久的将来,会有更多的人工智能应用在我们的RT1010平台上涌现。
    当然,这也缺少不了大家的集思广益,充分释放RT1010的强大算力,让深度学习在RT1010上遍地开花。
    70.png

    好了,回到我们本期的主题。首先,为了防止喧宾夺主,我们有必要重申一下,我们今天的C位主咖当然还是我们的RT1010,一颗主频高达500mhz,身价却不到一美金的跨界MCU,不知道广大群众的票圈是否已经被我们的RT新星刷屏了,反正小编的票圈是已经被这颗新星霸榜了。
    在本期的文章中,我们会继续加入一些新元素到我们的明星平台,引入人工智能对电机进行异常检测(此处的异常特指电机缺相而导致的异常),相信人工智能与RT1010的结合,会使得RT1010绽放更多的光彩,爆发小宇宙,习得终极奥义。

    71.png

    异常检测可能并没有人脸识别那样众人皆知,但这其实也是深度学习的一个重要的应用领域,尤其适合应用在MCU系统中。异常检测的范围也很广泛,像设备故障、器件老化、危重急症、事故的检测和预警都是异常检测的用武之地。
    在开始介绍我们的异常检测方案前,我们先来介绍一下本期参演异常检测的男主角:异常检测领域的一位大咖:autoencoder,中文名——自编码器, 简称AE,是在1986年首次提出的。
    简单说来,AE可以从数据中“去粗取精,去伪存真”:它是一种有损数据压缩,或者说是数据编码的方法。实现上,AE使用了一个神经网络来产生一个高维输入的低维表示,其与主成分分析(PCA)类似,但是AE引入非线性激活函数克服了PCA线性的限制。
    (掌声欢迎AE大咖出场......)

    AE是一种无监督学习模型,主要体现在训练数据上没有打任何标签。这使得基于AE的异常检测模型有个很“妖”的特点:只需要正常状态下的数据去训练就能检测异常!AE在它的发展历程中也有很多种分支和改进。
    那么,这个AE到底是怎么用在异常检测上的呢,就让小编为大家娓娓道来,悉数道尽个中真谛。话不多说,开整!
    AE包含两个主要部分,encoder(编码器)和decoder(解码器)。encoder的作用是用来发现给定数据的压缩方式,decoder用来根据压缩信息重建原始输入。训练的时候,decoder作为灭霸一样的存在,手握无限宝石,逼迫encoder选择最有信息量的特征,以保存在压缩向量中,即中间的code层,以使解码后复原的数据和输入的数据尽量相似。


    以下图为例,原始数据的维度是10,encoder和decoder分别有两层,中间的code层就是压缩编码的结果,其中共有3个节点,也就是说原始数据被压缩到了3维。Decoder随后根据降维后的数据重建原始数据,重新得到10维的输出。AE的训练目标是使输出尽量接近输入数据。在这一过程中,AE实际上也起到了降噪的作用。

    72.png

    在AE长达三十多年的发展历程中,出现过不少变种,也成功应用到了各自的领域。比如给数据加噪声以增加学习鲁棒性的DAE (Denoising AE),通过升高中间表达的维度以抑制神经元输出范围的Sparse AE,添加特殊惩罚项以避免对数据“过敏”的Contractive AE,以及可以估算均值和标准差的Variational AE等。不过对于本文演示的异常检测主题,我们只是用了上图最朴素的AE结构。
    73.png

    掀开了AE的神秘面纱之后,让我们开始聊聊Ta和异常检测是怎样成为好基友好丽友的,异常检测(anomaly detection)通常分为有监督和无监督两种情形。我们的情况就是在无监督的情况下,此时没有异常的样本用来学习。


    这里有个重要的隐含假设是同类数据是服从相同的分布的,而异常数据点,往往会服从与之不同的分布。那么,根据正常数据训练出来的AE,能够将正常样本重建还原,但遇到异常样本后“复原”的结果却往往面目全非了,用AE的术语就是“重建误差”很大。进行判别时,如果样本的特征均为数值变量,我们可以用MSE或是MAE来衡量重建误差。当重建误差大于某个阈值时,将其标记为异常值。


    AE的这一无监督学习的思想可以说是精髓所在。因为异常情况一般是罕见的,大量存在的都是正常数据,可以说信手拈来,但是异常数据往往可遇不可求,更没人愿意只是为了得到数据而弄坏设备/制造事故。


    在我们的缺相检测演示中,缺少一相并不会损坏电机,并且演示时也需要切断一相。但更实际的应用中异常的出现却免不了伴随着损坏甚至伤害。


        (说到这儿,小编喝了口水......)



    原理部分到此就结束了,读到这里的观众朋友们都是真爱啊,感谢大家的捧场。相信读到这里,大家已经对于异常检测不再陌生了,也对于AE有了很多的了解。那就让我们趁热打铁,揭下最后一层面纱,基于AutoEncoder的电机缺相异常检测的实现流程,首先我们所设计的模型结构如下:

    74.png

    模型输入为n维电机三相电流向量,网络包含两层(中间层隐去),其中encoder层包含两个全连接层(dense),输出维度为4,即将输入压缩为4维向量。Decoder层接收4维向量作为输入,还原输入向量。之后,通过keras工具进行模型的训练,得到最终的模型文件。


    这个模型文件是在PC上用的,要想搬到MCU上,还需要量化并转换成可兼容单片机C/C++工程的呈现形式,才能部署在MCU上。这部分工作,我们使用的是自己开发的一套工具集,“NNCU ---- NN toolkit for mCU”。我们同时也制作了这个工具的测试版本放在网上供感兴趣的小伙伴们免费使用,网址如下:https://pan.baidu.com/s/1eQADEHg8UVhTsZWT_lRRgw,里面还包含了一份万余字中文手把手用户指南。


    我们的NNCU工具功能完整,并且是为了在MCU上应用AI而生,还配备了GUI交互界面。使用时,只需要选择模型文件导入(我们所支持的模型格式包括ONNX以及keras所导出的h5模型)即可生成可以直接放到MCU运行的c代码,方便快捷。同时,NNCU工具集成了模型量化的功能,可对模型大小进行压缩,在基本保证模型精度的同时,可降低75%的模型大小。


    本文所提到的异常检测模型,正是有了NNCU工具的加持,才能够快速的导出量化后模型的C代码,以使得快速验证模型成为可能,加快了项目开发进度。同时,为了方便模型验证,我们DIY了一块电机转接板,以控制电机相电流的通断,在异常发生时,通过点亮小灯以模拟异常报警,提示异常。


    实际运行视频如下:



    本文的模型大小:只有1kB左右,模型运行时间:<20us。

    至此,本期基于深度学习的电机缺相检测在RT1010上的应用就告一段落了,有兴趣的小伙伴们可以自行搭建环境进行测试,咱们下期见!

    作者:许鹏&宝木山石                                文章出处:恩智浦MCU加油站
    qiandao qiandao
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-20 05:58 , Processed in 0.075760 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表