Learning Memory-guided Normality for Anomaly Detection 论文阅读

news2024/11/28 4:51:07

Learning Memory-guided Normality for Anomaly Detection

  • 摘要
  • 1.介绍
  • 2.相关工作
  • 3.方法
    • 3.1网络架构
      • 3.1.1 Encoder and decoder
      • 3.1.2 Memory
    • 3.2. Training loss
    • 3.3. Abnormality score
  • 4.实验
  • 5.总结
  • 总结&代码复现:

文章信息:

在这里插入图片描述

发表于:cvpr2020
原文:https://arxiv.org/abs/2003.13228
代码:https://github.com/cvlab-yonsei/MNAD

摘要

我们致力于解决异常检测的问题,即在视频序列中检测异常事件。基于卷积神经网络(CNNs)的异常检测方法通常利用代理任务,比如重建输入视频帧,以在训练时学习描述正常情况的模型,而不在训练时接触异常样本,并在测试时利用重建误差来量化异常的程度。这些方法的主要缺点是它们未明确考虑正常模式的多样性,而CNNs强大的表示能力允许其重建异常视频帧。为了解决这个问题,我们提出了一种无监督学习方法来进行异常检测,明确考虑了正常模式的多样性,同时减小了CNNs的表示能力。为此,我们建议使用一个具有新的更新方案的memory module,其中memory module中的项目记录正常数据的典型模式。我们还提出了新颖的特征紧凑性和分离性损失来训练memory module,增强了memory module项目和从正常数据中深度学习特征的判别能力。在标准基准测试上的实验结果表明,我们的方法的效果和效率是显著的,优于当前领域的最新技术。

1.介绍

针对视频序列中异常事件的无监督学习方法,并探讨了现有方法的挑战和局限性。主要观点和贡献如下:

挑战与现有方法的局限性:

  • 异常事件的定义在不同情境下有所不同,手动标注异常事件是一项耗时的任务。
  • 收集异常数据集需要大量努力,因为在真实场景中很少发生异常事件。
  • 基于卷积神经网络(CNNs)的方法利用代理任务进行异常检测,如重建输入帧或预测未来帧,但这些方法并不直接检测异常。

提出的方法:

  • 引入了一个无监督学习方法,考虑正常模式的多样性,假设单一的典型特征无法表示正常数据的各种模式。
  • 提出了一种memory module,其中每个memory module项对应于正常模式的典型特征,用于减小CNNs的表示能力。
  • 引入了特征紧凑性和分离性损失,用于训练memory module,确保memory module项的多样性和判别能力。
  • 提出了一种新的memory module更新策略,以防止在测试时记录异常样本的特征。

实验结果:

在标准基准测试上,包括UCSD Ped2、CUHK Avenue和ShanghaiTech等,实验证明了方法的有效性和效率。
与现有技术水平相比,提出的方法表现出色,成为无监督视频序列异常检测领域的最新技术。
主要贡献:

  • 提出使用多个原型来表示正常视频帧的多样性模式,引入了一个记录正常数据典型模式的memory module。
  • 引入了特征紧凑性和分离性损失,以训练memory module并增强memory module项的多样性和判别能力。
  • 在无监督视频序列异常检测方面取得了新的技术水平,提供了详尽的实验分析和消融研究。

2.相关工作

传统方法与CNNs:

  • 传统的异常检测方法通常利用重构模型,如卷积自编码器(Conv-AE)、3D Conv-AE、循环神经网络(RNN)和生成对抗网络(GAN)等,但由于CNNs的表示能力,它们往往会用正常样本的组合来重构异常样本。
  • 预测性或判别性模型的引入,如Deep SVDD,尝试通过将正常数据映射到超球体中心,将异常样本排除在球体外,取得了一定效果。

作者提出的方法

  • 减小了CNNs的表示能力,通过使用memory module中的项目的组合来重建或预测视频帧,而不是直接使用编码器中的CNN特征,从而考虑了正常数据的各种模式。
  • 与DeepCascade等方法相比,该方法通过memory module项明确记录正常模式,而不仅仅是检测正常图像的各个区域。
  • 与Gong等人提出的Memory-augmented Autoencoder(MemAE)相比,该方法更好地使用CNNs作为映射函数,通过特征紧凑性和分离性损失显式分离memory module项,记录多样性和判别力较强的正常模式。
  • 与MemAE相比,该方法使用更少的memory module项(10 vs 2,000),同时在测试时更新memory module,具有更好的性能。

memory module网络:

  • 文中提到了传统的长短时记忆(LSTM)和引入全局记忆的memory module网络,用于处理顺序数据中的长期依赖性。

作者的方法

  • 也利用了memory module,但采用了不同的更新策略,通过记录各种正常数据模式并考虑每个memory module项作为原型特征。

总结:在视频序列异常检测方面提出了一种新颖的思路,通过memory module和特定的训练损失,成功地捕捉了正常模式的多样性和判别力,相较于现有方法表现更为优越。

3.方法

在这里插入图片描述
见图2:我们用于重建视频帧的框架概述。我们的模型主要由三个部分组成:一个编码器,一个memory module和一个解码器。编码器从时间t的输入视频帧 I t I_t It中提取尺寸为H×W×C的查询映射 q t q_t qt。memory module使用尺寸为1×1×C的查询 q t k q^k_t qtk,执行读取和更新尺寸为1×1×C的项 p m p_m pm,其中项和查询的数量分别为M和K,而K = H×W。查询映射 q t q_t qt与聚合的(即读取的)项 p ^ t \widehat{p}_t p t进行串联。然后,解码器将它们输入以重建视频帧 I ^ t \widehat{I}_t I t。对于预测任务,我们输入连续的四个视频帧来预测第五帧。)

我们的模型主要由三个组件组成:一个编码器,一个memory module,以及一个解码器。编码器接收正常的视频帧并提取查询特征。这些特征然后用于检索memory module项中的典型正常模式,并更新memory module。我们将查询特征和memory module项的聚合(即读取)馈送给解码器,以重建输入视频帧。我们使用端到端的重建、特征紧凑性和特征分离性损失对模型进行训练。在测试时,我们使用加权正则分数以防止memory module被异常视频帧更新。我们计算输入帧及其重建之间的差异,以及查询特征与memory module中最近项之间的距离,以量化视频帧中异常的程度。

3.1网络架构

3.1.1 Encoder and decoder

我们利用了广泛用于重建和未来帧预测任务的U-Net架构[34],以从输入视频帧中提取特征表示并用这些特征重建帧。不同的是,我们在编码器中移除了最后的批量归一化层[12]和ReLU层[18],因为ReLU会截断负值,从而限制了多样性的特征表示。我们相反地添加了一个L2归一化层,使特征具有共同的尺度。U-Net架构中的跳跃连接可能无法从视频帧中提取出用于重建任务的有用特征,我们的模型可能会学习复制输入以进行重建。因此,我们在重建任务中移除了跳跃连接,但在预测未来帧时保留了它们。我们用 I t I_t It q t q_t qt分别表示时间t时的视频帧和对应的来自编码器的特征(即查询)。编码器接收视频帧 I t I_t It并生成大小为H × W × C的查询映射 q t q_t qt,其中H、W、C分别为高度、宽度和通道数。我们用 q t k q^k_t qtk R C R^C RC(k = 1,… K),其中K = H × W,表示查询映射 q t q_t qt中大小为1 × 1 × C的个别查询。然后,将这些查询输入到memory module以读取memory module中的项或更新项,使其记录典型的正常模式。memory module的详细描述将在以下部分中提供。解码器接收查询和检索到的memory module项,并重建视频帧 I ^ t \widehat{I}_t I t

3.1.2 Memory

memory module包含记录正常数据的各种原型模式的M个项目。我们用 p m p_m pm R C R^C RC(m=1,…,M)表示存储器中的项。存储器执行读取和更新项目。
Read
在这里插入图片描述

为了读取项目,我们计算每个查询 q t k q^k_t qtk和所有记忆项目 p m p_m pm之间的余弦相似性,得到大小为M×K的二维相关图。然后,我们沿着垂直方向应用softmax函数,并获得匹配概率 w t k , M w^{k,M}_t wtk,M,如公式1所示:
在这里插入图片描述

对于每个查询 q t k q^k_t qtk,我们通过具有相应权重 w t k , M w^{k,M}_t wtk,M的项目 p m p_m pm的加权平均来读取存储器,并获得特征 p ^ t k \widehat{p}_t^k p tk R C R^C RC
如公式2所示:
在这里插入图片描述
使用所有项而不仅仅是最接近的项,使得我们的模型能够理解多样的正常模式,考虑到整体的正常特征。换句话说,我们用memory module中的项 p m p_m pm的组合来表示查询 q t k q^k_t qtk。我们对各个查询应用读取运算符,得到一个转换后的特征图 p ^ t k \widehat{p}_t^k p tk R H × W × C R^{H×W×C} RH×W×C(即,聚合的项)。我们沿着通道维度将其与查询映射 q t q_t qt连接在一起,并将它们输入到解码器。这使解码器能够使用memory module中的正常模式重建输入帧,减小了CNNs的表示能力,同时理解了正常性。
Update
对于每个memory module项,我们通过使用公式(1)中的匹配概率,选择声明该项是最近项的所有查询。注意,可以将多个查询分配给memory module中的单个项。请参见例如第4.3节中的图5。我们用 U m t U^t_m Umt表示与memory module中第m项对应的查询的索引集合。我们仅使用由集合 U t m U^m_t Utm索引的查询来更新该项,更新方式如下:
在这里插入图片描述
其中f(·)是L2范数。通过使用查询的加权平均值,而不是简单地将它们相加,我们可以更集中地关注靠近该项的查询。为此,我们计算类似于(1)的匹配概率 v t k , m v^{k,m}_t vtk,m,但通过对大小为M×K的相关图在水平方向上应用softmax函数进行,如公式4所示:
在这里插入图片描述
将其重新归一化,以考虑由集合 U t m U^m_t Utm索引的查询,方法如下:
在这里插入图片描述
我们在训练和测试时都更新记录原型特征的memory module项,因为训练集和测试集中的正常模式可能不同,并且可能会因各种因素而变化,例如光照和遮挡。由于在测试时同时存在正常和异常帧,我们建议使用加权的正则分数,以防止memory module项记录异常帧中的模式。给定视频帧 I t I_t It,我们使用 I t I_t It I ^ t \widehat{I}_t I t之间的加权重建误差作为正则分数 ϵ t \epsilon_t ϵt
在这里插入图片描述
其中权重函数 W i j ( ⋅ ) W_{ij}(·) Wij为:
在这里插入图片描述
i和j是空间索引。当得分 ϵ t \epsilon_t ϵt高于阈值 γ \gamma γ时,我们将帧 I t I_t It视为异常样本,不将其用于更新memory module项。请注意,我们仅在更新memory module时使用此分数。权重函数允许更多地关注具有大重建误差的区域,因为异常活动通常出现在视频帧的小部分内。

3.2. Training loss

损失函数共分为三个部分:
在这里插入图片描述
分别是重构损失、特征聚合损失、特征分离损失。
重构损失:
在这里插入图片描述
聚合损失:
在这里插入图片描述

p p p_p pp为与 q t k q_t^k qtk最相近的项,让他们越近越好

分离损失:
在这里插入图片描述
p n p_n pn为与 q t k q_t^k qtk第二相近的项,让他们有差距 α \alpha α,目的是为了不同的 p p p之间是不同的。

3.3. Abnormality score

共两个组成部分,一部分是Memory moudle的loss:
在这里插入图片描述
一部分是重构的损失:
在这里插入图片描述
合起来的分数评估就是:
在这里插入图片描述
在这,作者对异常分数做了归一化:
在这里插入图片描述

4.实验

在这里插入图片描述

5.总结

我们引入了一种无监督学习方法来检测视频序列中的异常,该方法利用多个原型来考虑正常数据的各种模式。

为此,我们建议使用memory module模块将原型模式记录到memory module中的项目中。我们已经证明,使用特征紧凑性和分离性损失来训练memory module可以分离项目,从而实现对memory module的稀疏访问。

我们还提出了一种新的memory module更新方案,当正常和异常样本都存在时,它显著提高了异常检测的性能。对标准基准的广泛实验评估表明,我们的模型优于现有技术。

总结&代码复现:

主要是一个ae+memory的结构,作者提出了一个新的memory更新策略。
Learning Normal Dynamics in Videos with Meta Prototype Network这篇论文和这个是很像的,应该在这个代码的基础上进行修改创新的。

复现:
这篇论文的代码拿来就可以用,比较友好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我最喜欢的白版应用,AI加持的新功能开源!强烈推荐

Excalidraw 把他们的文本到图表的功能开源了 Excalidraw是一个虚拟白板应用,专门用于绘制类似手绘的图表。它提供了一个无限的、基于画布的白板,具有手绘风格,支持多种功能。 之前我分享的:72张PNG,图解机器学习 里面…

Linux的IO模型——非阻塞IO

非阻塞IO就是当用户recvfrom时,如果内核数据没有准备好,那么就直接返回结果,而不是阻塞用户进程,让其一直等待。 我们可以发现,非阻塞IO模型中,用户进程在第一个阶段是非阻塞,第二个阶段是阻塞状…

Oracle(2-11)RMAN Backups

文章目录 一、基础知识1、RMAN Backup Concepts RMAN备份概念2、RMAN Backup Modes RMAN备份的类型3、Backup File Types 备份文件类型4、RMAN Backup Destinations RMAN备份目标5、Backup Constraints 备份约束6、Recovery Manager Backups 恢复管理器备份7、Characteristics …

黑苹果配置清单

手里的MacBookPro已经快沦为电子垃圾了,平时用MacOS比较多,Window用的比较少,而苹果电脑的价格不管是MacBookPro还是MacMini丐版的便宜但是面对现在Window动不动就64g内存的情况就显得微不足道了,高配的价格直接把我劝退&#xff…

iphone/安卓手机如何使用burp抓包

iphone 1. 电脑 ipconfig /all 获取电脑网卡ip: 192.168.31.10 2. 电脑burp上面打开设置,proxy,增加一条 192.168.31.10:8080 3. 4. 手机进入设置 -> Wi-Fi -> 找到HTTP代理选项,选择手动,192.168.31.10:8080 …

[Redis]基础入门

Redis入门 一、初识Redis Redis是一种键值型的NoSql数据库。 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值,甚至是json。 NoSql则是相对于传统关系型数据库而言&a…

pthread学习遇到的问题

1.pthread_t 是个类型,指的是线程ID。pthread_create()的时候穿地址进去,线程创建好后就会成为线程ID(即输出型参数) 2.pthread_self() pthread_self()获得是调用这个函数的线程ID (我以为是…

Java异步编程之利器:Guava异步编程实践

第1章:引言 - 为什么要用Guava进行异步编程? 大家好,我是小黑!今天咱们要聊的是Guava在异步编程中的应用。首先,让我们搞清楚为什么要用Guava来处理异步任务。在Java的世界里,异步编程是个老话题了&#x…

信号是怎么搞到电磁波上面去的呢?

在之前的文章中,我们曾多次讲到电磁波的美妙,但是有了电磁波就可以通信了吗? No,我们要把信息加载到电磁波上,这个电磁波就可以作为信息的载体来工作了。可是信号是怎么加载到电磁波上的呢? 今天我们一起…

宝塔上安装mysql遇到的问题

宝塔上安装mysql遇到的问题 文章目录 宝塔上安装mysql遇到的问题一、下载mysql二、启动报错三、设置密码四、解决报错bash未找到命令mysql五、继续修改root密码五、宝塔中设置端口六、使用连接工具连接数据库 一、下载mysql 宝塔软件商店里下载mysql,然后点击启动。…

SpringSecurity6 | 默认用户生成

SpringSecurity6 | 默认用户生成 ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java…

(四) python门面模式

文章目录 4.1 结构型设计模式4.1.1 简介4.1.2 常见的几种结构型设计模式 4.2 理解门面设计模式4.2.1 门面设计模式概述4.2.2 门面设计模式的作用 4.3 UML类图4.3.1 门面4.3.2 系统4.3.3 客户端 4.4 门面模式的代码实现4.4.1 场景:4.4.2 python实现 4.5 原理&#xf…

【C++】动态内存管理——new和delete

这篇文章我们讲一下C的动态内存管理,从一个比较陌生的知识说起,我们知道,一个工程可以创建很多.c文件,我们如果定义一个全局变量,只要用extern声明一下,在每个文件都可以用。而用static修饰的全局变量只能在…

Vue Computed

小满,我的神! 视频链接 // 只读 const plusOne computed(() > count.value 1) // 可读可写 const plusOne computed({get: () > count.value 1,set: (val) > {count.value val - 1} }, { // 用于调试onTrack(e) {debugger},onTrigger(e) …

软件测试基础知识总结

之前有将基础的软件测试知识做了一个总结,但比较潦草,很多内容只是一笔带过,快到年底了,自己也有个写年终知识总结文档的计划,就将基础的理论知识重新整理一番。 有人问我,这些都是能搜索到的知识&#xf…

微信视频无法播放,快速进行格式转换方法

你是否遇到过这样的事情呢,朋友或者家人在电脑上用微信给你发的视频,在自己的微信上点开却无法播放。这种是什么原因造成的呢?是不是需要将这些无法播放的视频转换为微信支持的格式才行,那应该如何转换呢? 不要着急&a…

使用 PyWebCopy 在 Python 中克隆网页

更多资料获取 📚 个人网站:ipengtao.com PyWebCopy 是一个用于克隆网页内容的 Python 库,它允许用户从指定的 URL 复制整个网页并保存到本地。本文将介绍 PyWebCopy 的基本用法,以及如何克隆网页并保存网页内容到本地文件夹。 安…

QTableView用代码设置选中状态

背景: 个人笔记,欢迎探讨。 目的是实现用代码设置表格中的选中状态,比如选中某个单元格,或某行,某列。实际上只要能完成选中单元格,行和列都是单元格的集合,道理一样。 QTableWidget比QTable…

常用汇编指令集

寄存器 如上是OD展示的寄存器,逐条说明常用的寄存器和标志位含义: EIP:寄存器指向即将要执行的指令的地址(EIP中的地址,就是下一步要执行指令的地址) ESP:里面的内容永远指向堆栈的最顶端 EAX&…

青春挚爱-计算机

为什么选择计算机? 看到这个问题,不禁把镜头遥向十几年前的某个片刻。 一、梦想的种子 首先信仰技术是从小的梦想,比如科学家精神之启蒙,比如勇敢者探索之启蒙。 为什么课本中的科学家可以做到精忠报国,矢志不渝&…