Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测

本文主要是介绍Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

又是一篇在自编码器框架中研究使用记忆模块的论文,可以看做19年的iccv的论文的衍生,在我的博客中对19年iccv这篇论文也做了简单介绍。韩国人写的,应该是吧,这名字听起来就像。

摘要abstract

我们解决异常检测的问题,即检测视频序列中的异常事件。基于卷积神经网络的异常检测方法通常利用代理任务(如重建输入视频帧)来学习描述正常情况的模型,而在训练时看不到异常样本,并在测试时使用重建误差来量化异常的程度。这些方法的主要缺点是没有明确考虑正常模式的多样性,而CNNs强大的表示能力允许重建异常的视频帧。为了解决这个问题,我们提出了一种无监督学习的异常检测方法,该方法明确考虑了正常模式的多样性,同时降低了神经网络的表示能力。为此,我们建议使用具有新更新方案的存储器模块,其中存储器中的项目记录正常数据的原型模式。我们还提出了新的特征紧凑性和分离损失来训练记忆,提高了记忆项目和从正常数据中深入学习的特征的辨别能力。在标准基准上的实验结果证明了我们方法的有效性和效率,优于现有技术。

Introduction

在视频序列中检测异常事件的问题,例如人行道上的车辆,在过去十年中引起了极大的关注,这对监视和故障检测系统尤为重要。这是极具挑战性的,原因有很多:首先,根据情况对异常事件有不同的判断。也就是说,同样的活动可能是正常的,也可能是不正常的(例如,在厨房或公园里拿刀)。在这种情况下,手工注释异常事件是一项繁重的工作。其次,收集异常数据集需要大量的工作,因为在现实生活中异常事件很少发生。因此,异常检测通常被认为是一个无监督的学习问题,旨在学习在没有异常样本的情况下描述正态性的模型。在测试时,没有被模型描述的事件和活动被认为是异常。使用无监督学习方法对视频序列的正态性建模有很多尝试。在训练时,给定正常的视频帧作为输入,他们通常提取特征表示并尝试重新构造输入。然后将重构误差较大的视频帧在测试时作为异常处理。这是假设异常样本不能很好地重构,因为模型在训练过程中从未看到过它们。最近基于卷积神经网络(CNNs)的方法利用了自编码器(AE)[1,17]。cnn强大的表示能力允许提取更好的特征表示。另一方面,来自异常帧的CNN特征很可能通过结合正常帧的特征来重构[22,8]。在这种情况下,异常帧具有较低的重构误差,通常,当大部分异常帧是正常的时候(例如,公园里的行人)。为了减少cnn的容量,引入了一种视频预测框架[22],该框架将预测的未来帧与其ground truth之间的差异最小化。这些方法的缺点[1,17,22]是它们不能直接检测异常[35]。相反,他们利用代理任务进行异常检测,例如,重建输入帧[1,17]或预测未来帧[22],以提取一般特征表示而不是普通模式。为了克服这一问题,Deep SVDD[35]利用单类分类目标将正常数据映射到超球面。具体来说,它最小化了超球体的体积,这样正常的样本就会被紧密地映射到球体的中心。虽然单一的球体中心代表了正常数据的普遍特征,但这并没有考虑正常样本的各种模式。

我们提出了一种无监督学习的方法来检测视频序列中的异常,考虑到正常模式的多样性。我们假设单个原型特征不足以代表正常数据的各种模式。也就是说,在正常视频帧的特征空间中存在多个原型(即特征的模式或质心)(图1)。为了实现这一想法,我们提出了一种用于异常检测的存储模块,其中单个项目对应于正常模式的原型特征。我们使用存储项中的原型特征来表示视频帧,减少了cnn的容量。为了减少CNN特征的类内变化,我们提出了一个特征紧凑性损失,将正常视频帧的特征映射到记忆中最近的项目,并鼓励它们接近。简单地更新记忆项和提取CNN特征交替交替地给出一个退化的解决方案,其中所有的项都是相似的,因此所有的特征都紧密地映射在嵌入空间中。为了解决这个问题,我们提出了特征分离损失。它使每个特征与其最近的条目之间的距离最小,同时使特征与第二最近的条目之间的差异最大,分离记忆中的单个条目,增强特征与记忆条目的辨别能力。我们还引入了一种更新策略来防止在测试时存储异常样本的特征。为此,我们建议用一个加权的常规分数来衡量视频帧中存在多少异常,这样只有当帧被确定为正常帧时,条目才会更新。在包括UCSD Ped2[21]、中大大道[24]和上海科技[26]在内的标准基准上的实验结果,证明了我们的方法的有效性和效率,超越了目前的技术水平。

我们建议使用多个原型来代表正常视频帧的不同模式,用于无监督异常检测。为此,我们引入了一种存储模块,在内存中的项目上记录正常数据的原型模式。•我们提出特征紧凑性和分离性损失训练记忆,确保多样性和辨别能力的记忆项目。本文还提出了一种新的内存更新方案,适用于测试时同时存在正常和异常样本的情况。•我们在视频序列的无监督异常检测标准基准上实现了一种新的技术状态。我们也提供广泛的消融研究的实验分析。我们的代码和模型可以在网上找到:https:// cvlab.yonsei.ac.kr/projects/MNAD

主要贡献:

  • 提出使用多个原型来表示正常视频帧的各种模式,以进行无监督的异常检测。为此,我们引入了一个存储模块,用于记录存储器中项目的正常数据的原型模式。
  • 提出了特征紧致性和分离性损失来训练记忆,保证了记忆项的多样性和区分性。我们还提出了一种新的内存更新方案,在测试时同时存在正常和异常样本的情况下。
  • 在视频序列中无监督异常检测的标准基准方面取得了新的进展。我们还提供了广泛的实验分析与交融研究。

问题:

对比19年上一篇的文章,他的实验其实并不充分,只在视频数据集上进行了验证,因此,模型的泛化性值得考虑。

另外,这篇文章的实现对比了19年那篇存储器挖坑的文章虽然最后效果比他好,但是其实策略是不同的,19年文章用的是重构误差的方式,这篇文章利用重构误差的方法在结果中没有比过,利用预测未来帧的方式才获得了好的结果,这点也值得考虑。其他以后想到再说。

conclusion

我们引入了一种无监督学习方法来检测视频序列中的异常,该方法利用多个原型来考虑正常数据的各种模式。为此,我们建议使用存储模块将原型模式记录到内存中的项目中。我们已经证明,使用特征紧致性和分离性损失来训练记忆可以将项目分开,从而实现对记忆的稀疏访问。在异常样本和正常样本同时存在的情况下,提出了一种新的内存更新方案,大大提高了异常检测的性能。对标准基准的广泛实验评估表明,我们的模型比最先进的模型性能更好。

 

 

 

这篇关于Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2