admin管理员组

文章数量:1579086

文章目录

  • 1 概述
    • 1.1 题目
    • 1.2 摘要
    • 1.3 代码
    • 1.4 引用
  • 2 方法
    • 2.1 初始模块 (Inception module)
    • 2.2 外观卷积自编码器 (Conv-AE)
    • 2.3 动作预测U-Net
    • 2.4 额外的动作相关目标函数
    • 2.5 异常检测
  • 3 实验
    • 3.1 数据集
    • 3.2 性能评估
    • 3.3 参数设置
    • 3.4 实验结果

1 概述

1.1 题目

2019:外观-运动一致性的视频序列异常检测 (Anomaly detection in video sequence with appearance-motion correspondence)

1.2 摘要

多重事件的存在增大了监控视频异常检测的难度,本文提出一个深度卷积网络来学习目标外观 (如行人、背景,以及数等) 与其相应动作的一致性 (Correspondence):

  1. 模型被设计为共享相同编码器的重建网络图像翻译模型的组合。前者确定出现在视频帧中的最重要的结构,而后者将运动模板与这些结构相关联;
  2. 训练阶段仅使用正常事件的视频,测试时用于评估未知输入的帧级分数。

1.3 代码

Tensorflowhttps://github/nguyetn89/Anomaly_detection_ICCV2019

1.4 引用

@inproceedings{Nguyen:2019:12731283,
author      =	{Trong-Nguyen Nguyen and Jean Meunier},
title       =	{Anomaly detection in video sequence with appearance-motion correspondence},
booktitle   =	{{CVPR}},
pages       =	{1273--1283},
year        =	{2019}
}

2 方法

图1是算法架构的可视化,其包含两个处理流:

  1. 第一个流:在正常事件上习得共同外观空间结构的卷积自编码器 (Convolutional autoencoder, Conv-AE);
  2. 第二个流:确定每个输入模式与其对应的运动之间的关联,该运动由 3 3 3通道的光流 ( x y xy xy位移和幅度) 表示。

U-Net上的跳跃连接对于图像翻译很有用,因为它直接将低级特征 (例如边缘、图像补丁) 从原始域转换到解码域。外观流中没有使用这种连接,因为网络可能会让输入信息通过这些连接,而不是通过瓶颈 (Bottleneck) 强调底层属性。

模型不使用任何全连接层,理论上可以在任何分辨率的图像上工作。为了简化模型及保留扩展性,输入层的大小固定为 128 × 192 × 3 128\times192\times3 128×192×3,图像大小设置为 1 : 1.5 1:1.5 1:1.5而不是 1 : 1 1:1 1:1是为了以保留监控视频中对象的外观。


  图1:模型架构:括号中为通道数;输入输出形状相同,即 128 × 192 × 3 128\times192\times3 128×192×3;左边:共同编码器;右上:外观解码器;右下:动作解码器;在下一个反卷积之前,每个连接都沿着通道轴执行;模型的输入为单个视频帧 I t I_t It,两个解码器的输出分别是重构帧 I ^ t \hat{I}_t I^t和预测 I t I_t It I t + 1 I_{t+1} It+1之间动作的光流 F ^ t \hat{F}_t F^t

2.1 初始模块 (Inception module)

初始模块最初的目的是为了让CNN自动决定某些层中过滤器 (Filter) 大小。并行执行许多具有不同过滤分辨率的卷积操作,然后将获得的特征图沿通道轴连接起来。本文使用该模块的解释如下:网络中包含一个带瓶颈的的编解码结构,而一个非常深的架构可能会消除有助于解码的特征;相反,浅层网络冒着丢失高级抽象的风险。因此,初始模块用于让模型选择合适的卷积操作

这项工作的重点是从固定位置获取的监控视频。在输入层之后给定一个具有预定义感受野 (即过滤器大小) 的卷积层,对于在不同距离捕获的同一对象,信息抽象将是不同的。该属性会传播到下一层,因此期望模型通过输入层之后的初始模块来尽早确定低级特征

  1. 删除初始模块中的最大池化,因为输入是常规视频帧而不是特征图的集合;
  2. 初始模块包含 4 4 4个具备不同过滤器大小的卷积流,即 1 × 1 1\times1 1×1 3 × 3 3\times3 3×3 5 × 5 5\times5 5×5,以及 7 × 7 7\times7 7×7。大于 1 × 1 1\times1 1×1的过滤层都被分解为具有较小感受野的层序列,以降低计算成本。

2.2 外观卷积自编码器 (Conv-AE)

Conv-AE在正常视频中习得共同外观模板,以检测输入视频中的异常。该子网络包含编码器和不含跳跃连接的解码器,其中编码器由一系列包含了卷积、批量归一化、leaky-ReLU的块组成。第一个块 (初始模块后) 不包含归一化。降低特征图的分辨率使用的是跨步卷积 (Strided convolution),而非池化层。这种参数化操作有望支持网络找到一种信息丰富的方式来对特征图的空间分辨率下采样,并在解码阶段学习进一步的上采样。

解码器由一系列分辨率逐渐增加的块堆叠,同时减少了每个反卷积层后的特征图数量。每个块ReLUctant之间添加了 p d r o p = 0.3 p_{drop}=0.3 pdrop=0.3的丢弃层,以缓解过拟合。

Conv-AE用于学习正常事件的外观,因此考虑输入图像 I I I和重构 I ^ \hat{I} I^之间的 l 2 l_2 l2距离,即模型致力于在每个像素上习得图像的相近强度
L i n t ( I , I ^ ) = ∥ I − I ^ ∥ 2 2 (1) \tag{1} \mathcal{L}_{int}(I,\hat{I})=\|I-\hat{I}\|_2^2 Lint(I,I^)=II^22(1)仅使用 l 2 l_2 l2损失的一个缺点是输出中的模糊 (Blur),因此添加了一个试图保留原始梯度 (即锐度) 的约束:
L g r a d ( I , I ^ ) = ∑ d ∈ { x , y } ∥   ∣ g d ( I ) ∣   −   ∣ g d ( I ^ ) ∣   ∥ 1 (2) \tag{2} \mathcal{L}_{grad}(I,\hat{I})=\sum_{d\in\{x,y\}}\left\|\ |g_{d}(I)|\ -\ | g_d(\hat{I}) |\ \right\|_1 Lgrad(I,I^)=d{x,y}  gd(I)  gd(I^)  1(2)其中 g d g_d gd表示沿着 d d d轴的图像梯度。外观Conv-AE的损失函数最终制定为:
L a p p e ( I , I ^ ) = L i n t ( I , I ^ ) + L g r a d ( I , I ^ ) (3) \tag{3} \mathcal{L}_{appe}(I,\hat{I})=\mathcal{L}_{int}(I,\hat{I})+\mathcal{L}_{grad}(I,\hat{I}) Lappe(I,I^)=Lint(I,I^)+Lgrad(I,I^)(3)

2.3 动作预测U-Net

典型物体的异常运动类似于奇怪的物体结构,也适用于提供视频帧的评估。编码器中的每个块都是为了强调训练帧内常见对象的空间抽象。因此,U-Net专注于学习这些模式和相应运动之间的关联。这项工作中使用的地面实况光流是由预训练的FlowNet2估计。与相关模型相比,FlowNet2输出的光流不仅更加平滑,而且保留了边界更清晰的运动不连续性。预计运动流将典型运动与常见外观对象相关联,同时忽略静态背景图案。

U-Net的解码器结构与除去跳跃连接后的Conv-AE的解码器结构一致。这些连接将把从更高抽象层次上采样的特征图与包含低层次细节的特征图结合起来。在编码器中使用leaky-ReLU 激活也会保持微弱的响应,这可能为解码器中的翻译提供信息。为了在学习运动关联时减少此类异常值的影响,应用 l 1 l_1 l1距离损失
L f l o w ( F t , F ^ t ) = ∥ F t − F ^ t ∥ 1 (4) \tag{4} \mathcal{L}_{flow}(F_t,\hat{F}_t)=\|F_t-\hat{F}_t\|_1 Lflow(Ft,F^t)=FtF^t1(4)其中 F t F_t Ft是评估两个连续帧 I t I_t It I t + 1 I_{t+1} It+1获得的真实光流, F ^ t \hat{F}_t F^t是给定 I t I_t It下U-Net的输出。总之,这个流试图预测视频中出现对象的即时运动

2.4 额外的动作相关目标函数

L f l o w \mathcal{L}_{flow} Lflow外,添加了一个惩罚预测光流潜在分布的损失,使其与真实情况相似。GAN最初的动机是允许CNN学习模式的一个隐含分布。模型包含一个从噪声中生成虚假样本的生成器,以及从真实模式中判别这些输出的鉴别器。许多修正版本被相继提出,有研究表明,与仅使用基于距离的损失相比,使用GAN损失可以提供更好的结果,我们将这种策略用作附加的目标函数。

本文中,生成器图1中的整个网络,而鉴别器对预测的光流进行分类,如图2。注意推理阶段不使用鉴别器。尽管最近的研究采用了最小二乘GAN并在检测异常视频帧方面取得了最先进的性能,但本文模型遵循典型的条件GAN (cGAN),其中视频帧及其对应的光流被输入到鉴别器中。原因有下:

  1. cGAN在理论上避免了vanilla GAN中的模式崩溃问题,因为标签被输入到了鉴别器中。该模型有望有效地学习训练样本的分布;
  2. cGAN适用于图像翻译CNN。


  图2:鉴别器结构。输入是视频帧及其光流 (预测或者真实的)

最后,对抗性损失直接在判别器中包含激活特征图的最后一层计算。该计算并不使用卷积层将先前的特征通道折叠成 2D图。本模型和其他两个模型的常识是结构惩罚,其根据图像块而不是整个图像执行分类。但是,本文在特征级别严格限制补丁,以便每个特征图都必须尝试提供分类结果。这种设计的灵感来自,有研究表明每个卷积通道都关注特定的语义模式。

给定视频帧 I I I及其来自FlowNet2的光流 F F F图1中的网络,即生成器 G G G输出重构帧 I ^ \hat{I} I^和预测光流 F ^ \hat{F} F^,而鉴别器评估 I I I相应光流是真实光流 F F F的概率。GAN的目标函数包含两个损失函数:
L D ( I , F , F ^ ) = 1 2 ∑ x , y , c − log ⁡ D ( I , F ) x , y , c + 1 2 ∑ x , y , c − log ⁡ [ 1 − D ( I , F ^ ) x , y , c ] (5) \tag{5} \begin{aligned} \mathcal{L_D}(I,F,\hat{F})= &\frac{1}{2}\sum_{x,y,c}-\log\mathcal{D}(I,F)_{x,y,c}\\ +&\frac{1}{2}\sum_{x,y,c}-\log[1-\mathcal{D}(I,\hat{F})_{x,y,c}] \end{aligned} LD(I,F,F^)=+21x,y,clogD(I,F)x,y,c21x,y,clog[1D(I,F^)x,y,c](5) L G ( I , I ^ , F , F ^ ) = λ G ∑ x , y , c − log ⁡ D ( I , F ^ ) x , y , c + λ a L a p p e ( I , I ^ ) + λ f L f l o w ( F , F ^ ) (6) \tag{6} \begin{aligned} \mathcal{L_G}(I,\hat{I},F,\hat{F})= &\lambda_\mathcal{G}\sum_{x,y,c}-\log\mathcal{D}(I,\hat{F})_{x,y,c}\\ +&\lambda_a\mathcal{L}_{appe}(I,\hat{I})+\lambda_{f}\mathcal{L}_{flow}(F,\hat{F}) \end{aligned} LG(I,I^,F,F^)=+λGx,y,clogD(I,F^)x,y,cλaLappe(I,I^)+λfLflow(F,F^)(6)其中 x , y , c x,y,c x,y,c分别表示鉴别器 D \mathcal{D} D输出特征图的空间位置和通道,以及 λ \lambda λ是权衡参数。GAN交替优化两个损失,实验中设置 λ G = 0.25 \lambda_\mathcal{G}=0.25 λG=0.25 λ a = 1 \lambda_a=1 λa=1,以及 λ f \lambda_f λfGAN的目的是增加动作预测的效率

2.5 异常检测

模型旨在为视频帧提供一个正常性分数。在相关研究中,这些分数通常是衡量基本事实与重建/预测输出之间相似性。 CNN方法中使用了两个常见的分数:1) L p L_p Lp距离;以及2)峰值信噪比 (Peak signal to noise ratio, PSNR)。每个视频的正常性通过比较其得分和一个阈值来获得。很明显,由于对所有像素位置的求和或平均操作,可能会遗漏发生在小图像区域内的异常事件。因此提出了一个仅考虑小区块而非完整帧的分数评估策略
{ S I ( P ) = 1 ∣ P ∣ ∑ i , j ∈ P ( I i , j − I ^ i , j ) 2 S F ( P ) = 1 ∣ P ∣ ∑ i , j ∈ P ( F i , j − F ^ i , j ) 2 (7) \tag{7} \left\{ \begin{aligned} &\mathcal{S}_I(P)=\frac{1}{|P|}\sum_{i,j\in P}(I_{i,j}-\hat{I}_{i,j})^2\\ &\mathcal{S}_F(P)=\frac{1}{|P|}\sum_{i,j\in P}(F_{i,j}-\hat{F}_{i,j})^2 \end{aligned} \right. SI(P)=P1i,jP(Ii,jI^i,j)2SF(P)=P1i,jP(Fi,jF^i,j)2(7)其中 P P P表示一个图像区块,以及 ∣ P ∣ |P| P是区块中像素的数量。

帧级分数计算如下:
S = log ⁡ [ w F S F ( P ~ ) ] + λ S log ⁡ [ w I S I ( P ~ ) ] (8) \tag{8} \mathcal{S}=\log[w_F\mathcal{S}_F(\tilde{P})]+\lambda_\mathcal{S}\log[w_I\mathcal{S}_I(\tilde{P})] S=log[wFSF(P~)]+λSlog[wISI(P~)](8)其中 w G w_G wG w I w_I wI是根据训练数据计算的权重、 λ S \lambda_\mathcal{S} λS是权衡参数,以及 P ~ \tilde{P} P~是所在帧中具有最高 S F \mathcal{S}_F SF的区块,即:
P ~ ← arg max ⁡ P  slides on frame S F ( P ) (9) \tag{9} \tilde{P}\leftarrow\argmax_{P\text{ slides on frame}}\mathcal{S}_{F}(P) P~P slides on frameargmaxSF(P)(9) w F w_F wF w I w_I wI计算如下:
{ w F = [ 1 n ∑ i = 1 n S F i ( P ~ i ) ] − 1 w I = [ 1 n ∑ i = 1 n S I i ( P ~ i ) ] − 1 (10) \tag{10} \left\{ \begin{aligned} &w_F=\left[ \frac{1}{n} \sum_{i=1}^n \mathcal{S}_{F_i}\left( \tilde{P}_i \right) \right]^{-1}\\ &w_I=\left[ \frac{1}{n} \sum_{i=1}^n \mathcal{S}_{I_i}\left( \tilde{P}_i \right) \right]^{-1}\\ \end{aligned} \right. wF=[n1i=1nSFi(P~i)]1wI=[n1i=1nSIi(P~i)]1(10)这有助于在同一尺度上标准化两个分数。实验中 P P P的大小被设置为 16 × 16 16\times16 16×16,区块则由滑动窗口决定。在实际应用中,其可以使用一个过滤器大小 16 × 16 16\times 16 16×16的卷积操作完成。 λ S \lambda_\mathcal{S} λS设置 0.2 0.2 0.2,以使得模型更关注于动作预测的效率。

最终,帧级分数标准化为:
S ^ t = S t max ⁡ ( S 1.. m ) (11) \tag{11} \hat{\mathcal{S}}_t=\frac{\mathcal{S}_t}{\max(\mathcal{S}_{1..m})} S^t=max(S1..m)St(11)其中 m m m是当前视频中帧的数量。从一帧异常事件估计的分数预计会高于正常事件的分数

3 实验

3.1 数据集

  1. CUHK Avenue;
  2. UCSD Ped2;
  3. Subway Entrance Gate and Exit Gate;
  4. Traffic-Belleview and Traffic-Train。

训练集中只包含正常事件,图3示意了以上数据集中的正常和异常帧。

  图3:数据集示意

3.2 性能评估

  1. ROC和AUC:前两个数据集提供了帧级基本事实;
  2. Subway数据集在事件级别进行评估,这需要一些额外操作;
  3. 平均精度 (AP) 和精度-召回 (PR):Traffic数据集。

3.3 参数设置

  1. 光流评估器:FlyingThing3D和ChairsSDHom上训练的FlowNet2;
  2. 优化器:Adam;
  3. 学习率:生成器设置为 2 × 1 0 − 4 2\times10^{-4} 2×104,鉴别器设置为 2 × 1 0 − 5 2\times10^{-5} 2×105

3.4 实验结果

  1. AUC:
  2. 光流:
  3. TP和FA:
  4. 漏检和误报:
  5. AP:
  6. 光流:

本文标签: 论文AnomalyDetectionVideoAppearance