[视频异常检测]Dynamic Distinction Learning: Adaptive Pseudo Anomalies for Video Anomaly Detection 论文阅读
文章信息:
原文链接:https://arxiv.org/abs/2404.04986
源码:https://github.com/demetrislappas/DDL.git
发表于:2024 CVPR
Abstract
我们引入了动态区分学习(DDL)用于视频异常检测,这是一种结合了伪异常、动态异常加权和区分损失函数的新型视频异常检测方法,以提高检测准确性。通过在伪异常上进行训练,我们的方法能够适应正常和异常行为的变化性,而无需固定的异常阈值。我们的模型在Ped2、Avenue和ShanghaiTech数据集上展现了卓越的性能,其中为每个场景定制了单独的模型。这些成就突显了DDL在推进异常检测方面的有效性,为视频监控挑战提供了可扩展和可适应的解决方案。
1. Introduction
异常检测在视频监控领域至关重要,算法通过大量的视频片段进行扫描,以识别与正常活动或事件不符的活动或事件,无论是未经授权的侵入、异常行为还是安全漏洞。在视频分析中,它的应用跨越了多个行业领域,支撑着安全协议、确保公共安全,并提升了运营效率。视频异常检测系统在实时或事后标记偏离正常的情况的能力,使组织能够迅速、明智地采取行动来降低风险。
然而,在视频中区分普通情况和非凡情况的任务异常艰巨。视频异常检测通常属于无监督学习领域,这是由于标记异常的数据稀缺,以及对可能的异常事件进行编目的不切实际性。异常的不可预测性进一步增加了复杂性,使得基于“正常”行为训练的模型难以有效地泛化和识别异常值。这种困难在视频数据中构成异常的具体定义具有上下文敏感性时尤为突出,因为这种定义可能在不同的环境中有很大的变化。在训练期间缺乏足够的异常行为示例的情况下,系统往往难以准确地辨别异常事件,导致高数量的误报或漏检。
传统方法对这一挑战的应对依赖于神经网络架构,如自编码器和UNet。这些模型被训练成通过学习以最小损失压缩然后重构输入数据来重新创建“正常性”。其基本假设是,通过变得擅长重构正常性,这些网络在面对异常时会自然而然地遇到困难,从而实现其检测。然而,这里存在一个问题——这些系统不一定学习到正常和异常样本之间的明确区别,只是希望异常会对重构过程构成更大的挑战。
为了解决这一困境,各种方法在训练阶段引入了伪异常,让模型尝试“异常”,以促进学习。然而,这些策略经常忽视了一个关键方面:即“正确水平”的伪异常的量化。也就是说,伪异常应该有多异常,才能代表真实的异常?如果太小,伪异常与正常数据相似度太高;如果太高,模型可能无法识别真正的、更微妙的异常。
在我们的工作中,创新不仅体现在引入了伪异常,还在于对动态异常权重 σ ( ℓ ) σ(ℓ) σ(ℓ)的策略性引入。这种适应性至关重要,使得我们的模型能够灵活地发现有效学习的异常强度的最佳阈值。与被限制在预先确定的静态水平的伪异常不同——这可能会使模型过度拟合于人为的怪癖—— σ ( ℓ ) σ(ℓ) σ(ℓ)的动态性赋予了模型调整这一阈值的自主权。通过这样做,模型被训练成能够区分正常和异常模式,而不是被锚定在用户定义的任何特定异常水平上。
我们的工作还引入了“差异损失”,与 σ ( ℓ ) σ(ℓ) σ(ℓ)相辅相成,旨在提高模型的区分能力。差异损失鼓励模型重建伪异常帧,使其更接近正常状态,而不是输入的异常状态。
在接下来的章节中,我们深入探讨了我们关于视频异常检测的动态区分学习(DDL)的核心研究。我们首先在第2章提供了相关工作的简要概述。第3章详细介绍了方法论,描述了DDL框架及其组成部分。第4章描述了用于评估的数据集,导致了第5章通过定量结果展示我们的研究发现。在我们的最后一章,第6章,我们提供了消融研究,突出了我们的工作所带来的改进。
2. Related Work
在视频数据中进行异常检测的挑战被常态行为在数据集中的盛行所加剧,导致对非异常示例存在固有偏见。无监督学习,特别是通过使用自编码器(AEs),已经成为首选解决方案。AEs利用输入和重构输出之间的差异来识别异常,其操作原理是,不熟悉的异常输入将导致重构误差显著增加。然而,准确重建正常样本以区分它们与异常样本的挑战仍然存在,UNets及其跳跃连接提供了部分解决方案,通过提高重建保真度,尽管增加了对潜在空间进行异常检测的依赖的复杂性。
最近的进展探索了视频异常检测的时间维度,采用了自编码器(AEs)和UNets来重构序列或预测后续帧,其假设是异常会破坏模型基于一系列正常帧准确预测未来帧的能力。整合了Transformer和注意力机制旨在更有效地捕捉视频数据的时间特征,使自编码器和UNets能够通过专注于帧之间的关系来识别异常。光流被用于增强与运动相关的异常检测,通过捕捉连续帧之间的像素运动来提供紧凑而丰富的时间变化表示。
为了提高自编码器(AEs)和UNets的性能,一些研究引入了监督学习技术、生成对抗网络(GANs)和目标检测,以改进正常和异常样本之间的区别。特别地,GANs创建了一个生成对抗性对立关系,增强了模型重建输出与原始输入无法区分的能力。目标检测将异常检测过程集中在重要的帧对象上,尽管受到检测模型范围和准确性的限制。记忆模块也被提出,通过参考正常样本来防止异常重建,这表明增强模型复杂性是通向更有效异常检测的途径。
数据集中正常和异常样本之间的不平衡,促使了引入伪异常的创新方法的发展。这些方法旨在增强基于重建的模型区分正常和异常样本的能力,提高精度。生成伪异常的技术各不相同,一些策略涉及使用外部数据集将异常注入到正常样本的数据集中。这可能涉及利用注意机制来识别并转移第三方数据集的关键特征到正常样本,从而创建伪异常,或者利用外部数据向模型的潜在空间引入噪音。其他方法考虑了更具创造性的方法,利用模型的先前状态生成质量较低的重建,这些重建将被表示为异常样本。更传统的方法在训练过程中尝试通过直接提供人为定义的异常行为来引发异常,比如颠倒输入帧的顺序。最近的伪异常方法试图通过注入一系列人为定义的异常来获得更好的结果,包括通过颠倒视频帧的顺序、跳过帧、添加噪音、融合帧或合并随机补丁等方式来操作视频帧。无论异常的具体性质是什么(跳过帧、重复帧、引入外部形状等),卷积层核都将其视为向量表示的异常集合——噪音。尽管这些方法有效,但它们依赖于手动干预来模拟异常,需要主观确定引入的异常程度,引发了一个问题:“什么程度的噪音被视为异常?”
在这种背景下,我们的研究引入了一种复杂的方法,不仅融入了动态异常加权的概念,还提出了一种新颖的区分损失函数。这种方法旨在通过提供一种更精细的机制来区分正常和异常事件,从而推动异常检测领域的发展,因此进入了我们在第三节中概述的提出方法的详细解释。
3. Methodology
图1. 动态差异学习(DDL)架构:该图展示了DDL模型的工作流程,包括对象检测和跟踪、随机对象遮罩、伪异常创建、我们的C3DSU模型和差异损失计算。该架构描述了如何创建伪异常,然后将它们与其正常对应部分一起通过模型。该图还提供了差异损失计算的可视化描述,显示了模型如何最小化分子并最大化分母。
动态区分学习(DDL)架构如图1所示。考虑一系列正常视频帧,表示为张量 X ∈ R c × T × H × W X\in\mathbb{R}^{c\times T\times H\times W} X∈Rc×T×H×W,其中 c c c 是通道数, T T T 是帧数(必须是奇数,因为我们将重建中间帧), H H H 和 W W W 分别是帧的高度和宽度。为了在序列上模拟异常,我们将模型通过目标检测和跟踪模型,然后经过随机对象遮罩处理,该处理选择跨所有帧的随机跟踪对象并返回一系列二值掩码 M ∈ { 0 , 1 } c × T × H × W M\in\{0,1\}^{c\times T\times H\times W} M∈{0,1}c×T×H×W,用于界定伪异常出现的帧区域。同时,我们还引入一个噪声张量 A ∈ R c × T × H × W A\in\mathbb{R}^{c\times T\times H\times W} A∈Rc×T×H×W,它是均匀随机生成的。
我们还定义了一个可训练参数 ℓ ∈ R \ell\in\mathbb{R} ℓ∈R,通过 sigmoid 函数 σ ( ℓ ) ∈ ( 0 , 1 ) \sigma(\ell)\in(0,1) σ(ℓ)∈(0,1) 进行处理,以表示异常权重。我们选择了 sigmoid 函数来将可训练参数限制在 0 到 1 1 1 之间的值,以表示受到的异常影响的百分比。正常帧序列 X X X、掩码 M M M、噪声张量 A A A 和异常权重 σ ( ℓ ) \sigma(\ell) σ(ℓ) 被传递到伪异常创建器中,以制造伪异常 X A X_A XA。
正常帧序列 X X X 和伪异常 X A X_A XA 都通过重构模型进行传递,并使用重构损失和区分损失的线性组合进行校准。区分损失对异常权重进行了重要的校准,这是一种设计用于使异常权重收敛到表示能够被检测到的最小异常的损失函数。异常权重 σ ( ℓ ) \sigma(\ell) σ(ℓ) 的可调性使得模型能够动态校准训练数据中存在的异常程度,确保在识别正常模式和检测偏差之间实现有效的平衡。这对于防止模型对微妙异常变得麻木不仁或对轻微的不规则性反应过度是至关重要的,从而在整个训练过程中保持对异常构成的细微表示。
3.1. Pseudo Anomaly Creator
我们在视频序列中制造伪异常的方法始于对每一帧应用目标检测和跟踪,然后从跟踪到的目标集中随机选择一个对象进行遮罩。我们使用目标跟踪来确保在时间窗口 T T T 内的所有帧中始终遮罩相同的对象。这些遮罩,记为 M M M,对于定义异常模拟的区域至关重要,确保异常在对象周围以上下文方式集成。
图2. 伪异常创建过程:该图展示了在视频帧中生成伪异常的逐步过程。它首先接收正常输入帧、掩蔽帧和动态学习的异常权重,然后应用由异常权重调节的噪声张量。
在识别和遮罩对象之后,我们通过伪异常创建器进行伪异常的创建,这是一个两步噪声集成过程,如图
2.
\color{red}{2.}
2. 所示。首先,我们使用动态学习的异常权重
σ
(
ℓ
)
\sigma(\ell)
σ(ℓ),通过线性组合将原始输入帧
X
X
X 与噪声张量
A
A
A 混合,生成噪声注入帧
X
A
ˉ
X_{\bar{A}}
XAˉ。这种混合通过以下方程实现,确保噪声和原始内容的比例集成:
这里,逐元素乘法(·)有助于精确控制噪声添加的程度,允许变化的失真水平,这些水平直接受到训练阶段演变的异常权重的影响。
接下来的阶段涉及形成伪异常帧,
X
A
X_A
XA。这些帧是通过将嵌入噪声的帧
X
A
ˉ
X_{\bar{A}}
XAˉ严格叠加到原始输入帧
X
X
X上而产生的,叠加范围严格受到对象掩码
M
M
M定义的边界的限制。这个过程的数学表示如下:
通过这种方法,我们确保噪声(代表潜在的异常)有选择地应用于感兴趣的区域——即帧内检测到的对象。这种方法不仅保持了引入异常的上下文相关性,还通过利用噪声组成的变化性模拟了各种异常模式;我们在补充资料的第7.2节中对此进行了详细阐述。通过专注于对象区域,我们的方法旨在创建逼真且相关的异常,增强模型检测和从这些虚构的不规则性中学习的能力,这些异常被设计成模拟各种异常行为和外观,包括未见过的形状和不常见的运动模糊。
3.2. Reconstruction Model Definition
我们定义一个重建模型 f = E ◦ D f = \mathcal{E}◦D f=E◦D,其中 E \mathcal{E} E和 D D D分别代表某个深度学习架构的编码器和解码器部分。架构的选择是灵活的,可以包括但不限于自动编码器(AutoEncoders)、UNet结构或其他适用于视频重建的卷积神经网络。
在实践中,我们采用了一个2D UNet模型的改进版本,通过在跳跃连接之间集成3D卷积层,专门用于分析时间数据。我们将这种架构称为 C o n ν 3 D S k i p U N e t Con\nu3DSkipUNet Conν3DSkipUNet(C3DSU或 f f f在本文中的上下文中);我们架构的更多细节可以在补充材料的第7.3节中找到。该模型接收类似 X X X的输入,并返回重建的输出 f ( X ) ∈ R c × t × H × W f(X)\in\mathbb{R}^{c\times t\times H\times W} f(X)∈Rc×t×H×W,其中 t t t表示 T T T中的中间帧;也就是说,该模型接收一个奇数帧序列作为输入,并返回重建的中间帧。
3.3. Loss Function
我们定义了一个损失函数
L
\mathcal{L}
L,它将标准的重建损失与我们的新颖的区分损失整合在一起,以调节模型对异常的敏感性。
其中,
λ
λ
λ是一个超参数,调节区分损失相对于重建损失的影响。这种调整对于确保模型有效地平衡学习重建正常帧和将它们与伪异常帧区分开来至关重要。
3.3.1 Reconstruction Loss
第一个函数是标准重构损失:
这里,
X
t
X^t
Xt是
X
X
X的中间帧。这个损失函数鼓励模型精确重建正常的输入帧,从而学习正常帧的分布。
3.3.2 Distinction Loss
区分损失是我们模型中的第二个损失函数,旨在调整正常帧和它们的伪异常对应物之间的区别。这种区分对于模型有效地识别和确定异常非常重要。区分损失函数通过以下数学公式表达:
在这里,
P
P
P 用于惩罚原始正常帧
X
t
X^t
Xt 与模型对伪异常帧
X
A
t
X_A^t
XAt 在被掩码的异常区域内的重建之间的差异。术语
N
N
N 捕获了当模型尝试在这些相同区域内重建伪异常帧时的重建误差。参数
ϵ
\epsilon
ϵ 是一个小常数,用于防止除以零,从而确保数值稳定性。
这个损失函数的核心在于促使模型更倾向于将伪异常帧转换回它们的正常状态。简单来说,当模型遇到一个异常帧时,期望的结果是,其重建的输出更接近于一个正常帧,而不是保留异常特征。虽然这对于任何标准的重建模型来说都是一个期望的结果,但是区分损失明确地训练模型以达到这个结果,这一点在补充材料中的第 7.4 节中的图 7 和图 8 中有所体现。
区分损失函数 Ldist 的基本思路是促进重建过程将伪异常帧拉向正常帧,而不是拉向自身。这通过试图减少 P P P——正常帧与从伪异常输入重建的帧之间的差异——以及增加 N N N——伪异常帧与其重建之间的差异来实现。通过这样做,模型受到激励去区分正常帧和异常帧,从而增强了其异常检测能力。这种方法与我们的竞争对手 [2, 3] 采用的方法相反,后者侧重于最大化伪异常输入与其重建之间的差异。这种策略通常会导致重建图像中出现异常补丁,这是我们的模型没有观察到的副作用。相比之下,区分损失的目标是将伪异常转化为与正常相似。区分损失的视觉表示可以在图 1 中看到。
对于模型的重建函数 f f f,理想情况是在保持正常区域高度保真的同时,将异常区域转化为正常状态。这种能力体现在 P P P 和 N N N 的动态中:
- 较低的 P P P 表明即使在提供伪异常输入时,模型也能够熟练地重建帧的正常方面。
- 较高的 N N N 表明模型不仅仅是复制伪异常帧中存在的异常特征,而是被挑战去重建这些特征,反映了输入和输出之间的差异。
σ ( ℓ ) σ(ℓ) σ(ℓ),即异常加权因子,对于区分损失的影响至关重要。
- 当 σ ( ℓ ) σ(ℓ) σ(ℓ)接近零时,噪声对 XA 的影响被最小化,导致 X A X_A XA几乎与 $X $相同。这在区分正常和异常帧之间提出了挑战,因为 P P P 和 N N N 变得相似,推动 L d i s t ≈ 1 \mathcal{L}_{dist} ≈ 1 Ldist≈1。这可以在图 3 (a) 中进行可视化。
- 另一方面,当
σ
(
ℓ
)
σ(ℓ)
σ(ℓ)趋近于一时,异常区域被替换为几乎完全类似于噪声的内容。然后,模型面临着几乎不可能的挑战,即重建异常区域,从而使得区分损失变得多余,如图 3 (b) 所示。
图3. (a)描述了一个情景,其中 σ ( ℓ ) σ(ℓ) σ(ℓ)接近零,导致与原始帧的最小偏差,并且由于缺乏显著噪声,挑战了模型区分正常区域和异常区域的能力。(b)说明了相反的极端情况,其中 σ ( ℓ ) σ(ℓ) σ(ℓ)接近1,导致异常区域被过度扭曲,主要由噪声主导,这会挑战模型的重建能力,并削弱区分损失的有效性。
然而,找到 σ ( ℓ ) σ(ℓ) σ(ℓ)的合适平衡至关重要:它应该足够低,以便模型 f f f 能够从伪异常帧中重建正常性,但不能太低,以至于伪异常帧与正常帧过于相似;导致区分损失接近 1。在训练过程中通过反向传播调整 σ ( ℓ ) σ(ℓ) σ(ℓ),使模型能够迭代地找到最佳平衡,从而最大化其在异常检测中的能力,旨在将最小可辨识的异常与正常状态区分开来。
3.4. Inference
在推理阶段,与训练相关的组件,特别是异常权重、目标检测和跟踪以及伪异常创建器,都不会被使用。推理阶段的流程简化为通过传统的重建方法进行。该过程包括在每个视频上应用一个滑动窗口,然后将一系列视频帧直接提交到重建模型中,该模型然后处理这些帧以输出中间帧的重建版本。
4. Datasets
- Ped2
- CUHK Avenue
- ShanghaiTech
5. Results
6. Ablation Studies
主要是使用了两种不同的重建架构,然后使用静态的 σ ( ℓ ) σ(ℓ) σ(ℓ)对比了一下作者提出的动态 σ ( ℓ ) σ(ℓ) σ(ℓ),静态的 σ ( ℓ ) σ(ℓ) σ(ℓ)设置为0.5。
7. Conclusion
总的来说,动态差异学习代表着视频异常检测领域的重大进步。其能够动态地适应和学习伪异常,并结合差异损失函数,为准确识别视频数据中的异常事件提供了一个强大的框架。
阅读总结
代码还没公布,论文好像也没说 σ ( ℓ ) σ(ℓ) σ(ℓ)是经过什么得到的,只知道这个0-1的值是会变得。方法很简单,就是动态的学习模型能够承受多少正常的数据的扰动才算做异常。
不过我感觉这个 σ ( ℓ ) σ(ℓ) σ(ℓ)最终会收敛到一个值的话,那和静态的调参,手动调 σ ( ℓ ) σ(ℓ) σ(ℓ)得出的结果应该也是一样的吧,作者的附录材料有张ped2数据集 σ ( ℓ ) σ(ℓ) σ(ℓ)变化的图
σ
(
ℓ
)
σ(ℓ)
σ(ℓ)本来就是0-1之间,那我手动调100次感觉也能得到结果哈哈。
只不过作者用一次训练得到了。
个然感觉这篇论文亮点并不大。