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

相关文章

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

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