[异常检测]Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised

本文主要是介绍[异常检测]Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源码地址:https://github.com/donggong1/memae-anomaly-detection

问题提出

''It has been observed that sometimes the autoencoder “generalizes” so well that it can also reconstruct anomalies well, leading to the miss detection of anomalies ‘’

“The assumption that anomaly incurs higher reconstruction error might be somehow questionable since there are no training samples for anomalies and the reconstruction behavior for anomaly inputs should be unpredictable."

当前基于reconstruction error的方法,因为ae存在的泛化性能,导致anomaly data也可能具有较小的重构损失,检测效果较差。

问题解决

  • 通过memory机制改善autoencoder

在训练过程中利用训练样本更新一个memory bank,该memory bank用来表示normal样本的prototype。测试过程中,memory bank固定,对某一个测试样本搜索一些prototypes并加权求和,代表该测试样本,并进行重构误差计算。(因为是利用normal prototype进行重构,因此对于异常样本,重构损失肯定会增加

  • attention based memory addressing来寻找most relevant items in memory bank
  • hard shrinkage operator to induce sparsity of memory addressing weights

模型结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-80zIWhcX-1631793091790)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916185940401.png)]

  • encoder
    f e : X → Z z = f e ( x ; θ e ) f_e : X \rightarrow Z \\ z = f_e(x;\theta_e) fe:XZz=fe(x;θe)
    z既是x的表征,同时也作为query,在memory bank中搜索最相关的prototype

  • decoder
    x ^ = f d ( z ^ ; θ d ) \hat{x}=f_d(\hat{z};\theta_d) x^=fd(z^;θd)
    其中 z ^ \hat{z} z^是相关prototype经过加权求和所得的表征。

  • memory module

    包含了memory bank用来存储prototype和一个attention-based addressing operator用来计算权重。

    M ∈ R N × C M \in R^{N \times C } MRN×C表示memory bank,也就是保留有N个prototypes,则
    z ^ = ∑ i N w i m i \hat{z} = \sum_i^Nw_im_i z^=iNwimi
    其中权重由encode z经过attention获得:

    利用memory item与query(z)的相似度求权重:
    w i = e x p ( d ( z , m i ) ) ∑ i N e x p ( d ( z , m j ) ) w_i = \frac{exp(d(z,m_i))}{\sum_i^Nexp(d(z,m_j))} wi=iNexp(d(z,mj))exp(d(z,mi))
    其中相似度度量是通过余弦相似度获得。

论文中提到这样的memory module带来的优势如下:

  • 在训练阶段,模型限制retrieve的memory items尽可能少,以此来有效利用memory items,使得prototype最具有代表性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xKo3RVCi-1631793091792)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916192722800.png)]

论文展示了模型中的prototype解码之后的图片,可以看到较能代表训练数据

  • 在测试阶段,模型对normal样本可以正常reconstruct,但是对于异常样本,因为memory construct的表征 z ^ \hat{z} z^是正常数据的加权求和,因此重构得到的图片也会接近训练样本,导致重构误差较大。如下图,可以看到当输入一个异常样本,重构的图片在提出的模型下会很接近正常样本。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHUrIBB8-1631793091793)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916193046517.png)]

  • hard shrinkage for sparse addressing

    文章中提到,如果对memory的权重没有限制的话,一个较复杂的加权和仍然可能使得异常样本重构误差较小,因此期望限制所利用的memory items,利用hard shrinkage operation来增加w的稀疏性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MyMTJH1v-1631793091794)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916193938004.png)]

​ 这样的非连续操无法进行反向传播,因此考虑利用一个Relu激活函数:

在这里插入图片描述

​ 实际的操作将阈值设定为[1/N , 3/N]之间,再对操作后的权重进行归一化。

​ 在训练过程中,除了这样一个hard shrinkage操作,论文还提出可以最小化 w ^ i \hat{w}_i w^i的熵,以此来提升其稀疏性。
E ( w ^ ) = ∑ i T − w i ^ l o g ( w i ^ ) E(\hat{w}) = \sum_i^T-\hat{w_i}log(\hat{w_i}) E(w^)=iTwi^log(wi^)
​ 整体损失函数如下,前一部分为重构损失(L2范数)
L = 1 T ∑ t T ( R ( x , x ^ ) + α E ( w ^ ) ) L = \frac{1}{T}\sum_t^T(R(x,\hat{x})+\alpha E(\hat{w})) L=T1tT(R(x,x^)+αE(w^))

实验部分

论文的实验对图像、视频以及文本类数据进行了大量的实验,实验结果如下:

  • 图像

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7drcUZun-1631793091796)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916194843613.png)]

  • 视频

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MTWJgi4y-1631793091796)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916194922229.png)]

  • 文本(KDDCUP)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcscjCDT-1631793091797)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916194957397.png)]

这篇关于[异常检测]Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742997

相关文章

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

Docker启动异常

报错信息: failed to start daemon: Error initializing network controller: error creating default "bridge" network: cannot create network b8fd8c684f0ba865d4a13d36e5282fd694bbd37b243c7ec6c9cd29416db98d4b (d

Deep Learning复习笔记0

Key Concept: Embedding: learned dense, continuous, low-dimensional representations of object 【将难以表示的对象(如图片,文本等)用连续的低维度的方式表示】 RNN: Recurrent Neural Network -> for processing sequential data (time se

基于深度学习的轮廓检测

基于深度学习的轮廓检测 轮廓检测是计算机视觉中的一项关键任务,旨在识别图像中物体的边界或轮廓。传统的轮廓检测方法如Canny边缘检测和Sobel算子依赖于梯度计算和阈值分割。而基于深度学习的方法通过训练神经网络来自动学习图像中的轮廓特征,能够在复杂背景和噪声条件下实现更精确和鲁棒的检测效果。 深度学习在轮廓检测中的优势 自动特征提取:深度学习模型能够自动从数据中学习多层次的特征表示,而不需要

自动驾驶---Perception之Lidar点云3D检测

1 背景         Lidar点云技术的出现是基于摄影测量技术的发展、计算机及高新技术的推动以及全球定位系统和惯性导航系统的发展,使得通过激光束获取高精度的三维数据成为可能。随着技术的不断进步和应用领域的拓展,Lidar点云技术将在测绘、遥感、环境监测、机器人等领域发挥越来越重要的作用。         目前全球范围内纯视觉方案的车企主要包括特斯拉和集越,在达到同等性能的前提下,纯视觉方

Retrieval-Augmented Generation for Large Language Models A Survey

Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 文章目录 Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 Abstract背景介绍 RAG概述原始RAG先进RAG预检索过程后检索过程 模块化RAGMo

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查字符串值合法性 确认字符串格式 优化代码逻辑 增加输入验证和错误处理 总结 博主v:XiaoMing_Java 问题分析 javax.manag

Java内存泄漏检测和分析介绍

在Java中,内存泄漏检测和分析是一个重要的任务,可以通过以下几种方式进行:   1. 使用VisualVM VisualVM是一个可视化工具,可以监控、分析Java应用程序的内存消耗。它可以显示堆内存、垃圾收集、线程等信息,并且可以对内存泄漏进行分析。 2. 使用Eclipse Memory Analyzer Eclipse Memory Analyzer(MAT)是一个强大的工具,可