摘要
本文提出了一种快速可靠的方法,用于显示拥挤场景的视频数据中的异常检测和定位。时间高效的异常本地化是一个持续的挑战,也是本文的主题。我们提出了一种基于立方补丁的方法,其特征在于使用了高级的特征学习方法,该方法以级联的分类器为特征。我们的分类器级联有两个主要阶段。首先,一个轻而深的3D自动编码器用于早期识别“许多”正常立方块。在仔细调整其余感兴趣的候选对象的大小,并在第二阶段使用更复杂,更深入的3D卷积神经网络(CNN)评估这些候选对象之前,该深层网络在第一阶段以小型立方块为基础进行操作。我们将深度自动编码器和CNN分为多个子阶段,作为级联分类器。级联深度网络的浅层(设计为高斯分类器,充当弱的单类分类器)在较深的层上检测到“简单”的常规补丁,例如背景补丁和更复杂的常规补丁。结果表明,所提出的新技术(两个级联分类器的级联)在标准基准上的性能可与当前性能最佳的检测和定位方法相媲美,但在所需的计算时间方面却总体上优于那些。
引言
在智能视频监控中,异常检测与定位是一个具有挑战性的问题。对于视频上下文中的“异常”有各种不同的定义。一般来说,异常与正常事件相反;它指的是很少发生的事件。因此,我们正在寻找基本未知的事件,对于这些事件建模是非常困难的,甚至是不切实际的。通常,最先进的方法基于训练数据学习一个或几个正常事件的参考模型。在测试阶段,根据这些参考模型检查视频数据的补丁或区域。如果被拒绝,一个补丁或区域被认为是表示异常。在拥挤的场景中有各种各样的正常事件。仅用一组特征表示不同的正常事件会导致结果不准确和计算成本高。 参考模型的描述复杂性由“最难”的正常事件定义。
此外,用高维特征建模复杂事件需要许多训练样本来获得良好的性能。这是一个耗时而繁琐的过程。提出一个省时的解决方案似乎很难。为了保证系统的准确性和快捷性,识别特征的选择对系统的性能至关重要。一段时间以来,重点一直是基于底层特征的技术,如梯度直方图(HoG)或光流直方图(HoF)。Yang等人认为手工制作的功能不能很好地代表视频事件。他们建议无监督特征学习。最近,深度学习为计算机视觉的各种任务提供了最先进的结果,如图像分类,目标检测,或活动识别。深度神经网络(DNNs),如卷积神经网络(CNNs),是一个强大的工具,但它们非常慢,特别是作为一个基于补丁的分类器。由于dnn的计算成本,实时扫描视频帧中的补丁是不现实的。
使用上述方法之一解决异常问题可能是不准确和耗时的,原因如下:(1)缺少异常训练样本,(2)所有正常事件用一个特征集表示,(3)所有区域按照唯一的模型处理,没有考虑区域的复杂性,(4)使用手工制作的特征,这些特征不能充分区分斑块,甚至是耗时的。我们提出了一种方法来克服这四个困难,并表明这将导致准确和快速的异常检测。
我们的方法是通过dnn竞争级联来定义的。这个级联分类器结合了两个阶段,一个非常小的自动编码器堆栈和一个CNN。我们遵循特征检测的一般范式,首先以较低的时间复杂度检测兴趣点或关键点(我们的阶段1),然后通过在兴趣点密集提取和建模鉴别斑块来检测异常。只处理感兴趣点的补丁,而不是所有可能的补丁,是实现时间效率的通用关键。每个深层网络都分层(一层一层)地表示输入数据。因此,我们使用不同的表示对正常斑块进行建模,这些表示由等价的中间层生成。基于这些模型,在深层网络的中间层中快速识别出正常的补丁。与级联分类器类似,我们期望在浅层中检测简单的正规斑块,而在更深的层中检测更复杂的正规斑块。
我们称这样的网络为级联深度网络(CDN)。由于CDN的所有层都不包括在检测补丁中,所以它比传统的DNN工作得更快。总之,我们提出了一个具有两个阶段的级联分类器。这两个阶段都配备了一个CDN。因此,我们谈到cdn级联。
图1显示了异常检测和定位的一个例子。首先,一个小的深度神经网络代表一个帧的小块,而一个弱分类器在两步中拒绝许多正常的小块。剩下的补丁被调整成更大的补丁,其中补丁的质心(感兴趣的点)保持在相同的相对位置;这些较大的斑块在深度网络中被弱分类器分四步处理;这里我们拒绝了更多的正常补丁。最后利用高斯分类器对深层网络的深层特征进行异常检测。图中所示的×标记标签在每个步骤中拒绝了补丁。
我们不是第一个考虑在级联中使用DNN的人。我们的工作类似于[7],[8],[9]中报道的用于行人检测的方法,[10]中用于人脸检测的方法。然而,据我们所知,我们是第一个将DNN级联在中间层嵌入分类器的人,目的是根据网络的复杂性来识别不同层的对象。我们的主要贡献如下:
- 我们引入了一种基于dnn的级联分类器,通过使用深度特征和高斯分布对正态斑块进行分层建模,实现快速异常检测。
- 我们的精确度与顶级的方法相当,但是我们在一个普通的CPU上实现了15帧每秒,在一个普通的GPU上实现了130帧每秒。
- 我们提出了一个在时空域定义的视频中提取兴趣点的范例。
我们的工作受益于考虑级联分类器、特征检测器和深度学习的思想。本文的其余部分组织如下。第二节审查有关工作。第三节介绍了所提出的方法:首先是整体框架,然后是级联深度网络结构,级联CNN与CNN的时间复杂度,以及异常分类方案。第四节给出实验结果、比较和分析。第五部分是结论。
相关工作
异常事件的检测与定位是计算机视觉中一个重要而有趣但又繁琐的任务。研究人员为解决方案贡献了超过10年。多年来,各种各样的异常检测方法被引入。最初的方法是研究视频数据[11]、[12]、[13]、[14]、[15]、[16]、[17]、[18]、[19]中物体的轨迹。如果一个物体不遵循学习到的正常轨迹,它就被标记为异常。这些方法不能处理遮挡问题,而且对于拥挤的场景,它们的计算代价也非常昂贵。
为了处理高场景复杂度和遮挡,引入了一些低层次特征,如HoG或HoF。这些方法尝试使用低级特征分布来学习形状和时空关系。
[20]引入了时空异常联合检测器;作者使用混合动态纹理(MDT)建模正常的人群行为。作者认为关于模型的异常值是异常事件。作者使用判别显著性来区分空间异常与正常事件。[31]提供了这项工作的一个扩展版本。
在[23]中,使用本地和低级别特性的多个监视器检测异常事件。[24]提出了一种处理局部时空异常的概率方法。作者使用时空特征和k -最近邻方法来检测视频区域之间的异常。
[25]通过使用像素运动属性对行为进行建模。对于普通事件,训练时空共现矩阵。视频数据用这个矩阵和一个马尔可夫随机场(MRF)表示。然后使用这种表示来检测异常。
[26]采用混合概率PCA (MPPCA)模型表示局部光流模式。然后使用此表示和MRF定义正常模式。
[27]利用提取的时空梯度来训练高斯模型。然后,为了检测异常,作者使用隐马尔科夫模型(HMM)。[28]根据特征定义了视频的异常模式:稀有性、不可预测性和不相关性。基于这些特征,他们用MRF对视频进行建模,以检测异常。在[29]中提出了一种基于社会力(SF)的方法。该方法对异常检测中起关键作用的运动进行建模。
[30]提出了一种层次贝叶斯模型,它结合了低级的视觉特征、简单的“原子”活动和多智能体交互。该模型包括改进的潜在Dirichlet分配(LDA)和采用无监督交互建模的分层Dirichlet过程(HDP)。[32]引入了一个信息结构上下文描述符(SCD)来表示人群;分析人群SCD的时空变化,定位异常区域。[33]提出了一种基于时空定向能量滤波的行为建模方法。作者使用直方图比较方法检测异常。
[34]采用重构方法进行异常检测;如果一个新的观测结果不能用以前的观测结果进行重建,作者就把它标记为异常。在[35]中提出了一个类似的框架,基于学习表示正常事件的字典。
[41]提出了一种上下文感知的异常检测算法,作者利用运动和视频上下文来表示视频数据。在[36]中,提出了一种描述符来同时建模运动和外观,称为运动上下文。异常检测被认为是一个匹配问题。也就是说,如果一个测试补丁与训练的正常补丁不匹配,则认为是一个异常补丁。
目前,事件[35]、[37]的稀疏表示在视频数据中取得了较好的性能。[37]提出了一种基于稀疏表示的高速异常检测方法。这种方法以每秒140- 150帧的速度获得了很高的检测率。
[35]利用从训练数据中学习到的过完备正规基集;在此基础上,引入一种检测异常补丁的稀疏重建代价。在[38]中提出了一种场景解析方法,通过正常的训练来解释框架中前景的所有对象假设。那些不能用正常训练来解释的假说就被认为是不正常的。
[40]介绍了一种学习视频数据中的事件的方法,方法是为视频中的主导事件构造一个层次的代码书。[50]使用稀疏半非负矩阵分解(SSMF)学习像素的局部模式。然后,利用这些像素的局部模式学习概率模型,考虑空间和时间上下文。该方法是完全无监督的,异常检测由学习模型。
[42] [43]中报告的工作基于在自动编码器[45]上学习到的代表性特征集对正常事件进行建模;这些作者使用一类分类器检测异常作为一个离群值相比的目标(即正常)类。在[51]中提出了两种新的基于三次块的异常检测器。检测器使用自编码器重建误差和输入视频的稀疏表示来检测异常。
[29]、[31]、[35]、[36]、[37]、[39]、[40]中报告的方法的异常检测性能已经是合理的,但在准确的异常定位方面还不够。这些方法通常也不能在真实世界的异常问题上实时运行。
提出系统
我们提出并使用了一种dnn的具体设计,通过鉴别特征来分层表示正常补丁。该方法是基于两个dnn的级联分类器。dnn的中间层采用单类高斯分类器。它们被认为是级联分类器的子阶段。两个dnn定义了两个主要阶段,分类器是子阶段。
A.总体框架
图2显示了我们的异常检测器的示意图。如前所述,物体的运动在探测异常事件中起着重要作用。因此,处理时应考虑物体(或补丁)的不规则运动或速度。因此,我们认为所有的patch都是立方的:为了评估一个帧\(I_t\),我们将它划分为大小为\(M ×N\)的窗口,然后一个立方的patch被定义为从帧\(I_t\)到帧\(I_{t−K+1}\)中相同位置的\(K\)个大小为\(M ×N\)的窗口。这些立方体块提供了运动和形状的有用信息,以及局部信号分布在一个块。阶段1能快速检测出大部分正常补丁;剩余的(即“具有挑战性的”)补丁被发送到阶段2。在阶段1中,为了检查视频中的帧,我们将其分割成大小为\(10 × 10 × 5\)的立方块(即没有任何重叠)。
例如,\(250 × 250\)帧可以转换成\(625\)立方的patch, \(200\)帧的短视频可以转换成\(625·200 = 125,000\)个patch。由于异常补丁的数量比正常补丁的数量要少得多(类似于人脸检测中的[10]),所以我们可以将30%的补丁保留为潜在的异常补丁。下一阶段将考虑这些剩余的具有挑战性的补丁。我们将剩余小块的质心标记为兴趣点。我们在一个兴趣点周围提取出9个大小为\(40 × 40 × 20\)的大patch,并将其通过阶段2,以便更准确的检查。为了得到这9个大的立方体patch,我们将一个小patch调整为一个大的patch,然后生成另外8个不同方向的patch,步距为5(距离兴趣点)。参见图2。
使用小补丁检测异常可以获得良好的真阳性性能,但小补丁也会产生许多假阳性[42],[53]。因此,在第一阶段,我们首先快速地剔除许多正常的补丁是合理的,但是,为了防止高的假异常检测率,我们对剩余的补丁再次进行更仔细的处理。本设计同时考虑了精度和速度。这两个阶段都包含一个DNN来表示视频。Sabokrou等人和Xu等人[46],[42]表明(通过自动编码器)特征学习的性能与最先进的方法一样好,甚至更省时。更深层次的特征更具辨别力。他等人[47]证实,网络深度对于提高精度具有高优先级,在宽度或内核大小减少以补偿计算时间增加的情况下也是如此。
因此,与[42]中使用的具有高维特征的浅层自动编码器不同,我们在阶段1中使用了一个小但深度堆栈的自动编码器,在阶段2中使用了一个具有更多类型和层数的CNN。通过分析不同深度地层中生成的地物的性能,我们可以确认浅层特征可以工作得很好,但在较大深度生成的特征性能更好。因此,为了解决异常问题,浅层特征定义了有效的线索,用于快速检测简单的正常补丁,如在背景中。
B.级联深度网络结构
在真实世界的异常问题中,有不同复杂程度的事件。简单的事件可以用背景现象来定义,更复杂的事件可以用动态异常来定义。基于我们的观察(如上一节所述),我们设计了一个级联分类器,其中CNN(或堆栈-自动编码器)的中间层充当级联分类器的子阶段的角色。这意味着我们在早期层检测简单的正常补丁,计算代价较低,而在CNN的末端检测较难的补丁,计算代价较高。为了加快patch的分类速度,我们并没有对中间层中的每个特征使用所有生成的地图,而是使用所有地图的平均值作为所有地图的近似值来表示一个输入patch。
如图3所示为级联CNN的第一子级。我们在10个不同的maps中拥有\(18×18×8\)个特征(即每个斑块由一个大小为\(18×18×8×10\)的特征块表示)。这意味着这10个maps被考虑进行分类,因此每个补丁都用\(18×18×8\)特征表示。换句话说,我们在每个补丁的特征向量上利用平均池化操作来池化每个补丁的所有特征的平均值(不要与空间池化操作混淆)。作为预期的副作用,我们可能会减少所使用特性的功能。但是考虑到我们只是把这个分类器作为一个弱分类器来利用,类似于[42]。
级联堆叠自编码器:堆叠自编码器是一种流行的无监督特征学习方法。本文采用一种两层堆叠式自编码器。它是一个完全连接的神经网络。使用大补丁来训练深度自动编码器并不是有效率的[1]。它甚至可能在测试阶段太慢。因此,只考虑大小为\(10×10×5\)的小块斑块(如图4所示),选择隐藏层数仅为2。我们在每一层之后嵌入一个高斯分类器,方法与我们对级联CNN所做的相同。它们与级联CNN的分类器相同;他们的训练过程是独立于级联堆叠自编码器训练。
级联卷积神经网络:图3显示了本文所使用的级联CNN的结构。我们在不同深度的一些中间层之后考虑高斯分类器,如图3所示,分为\(S1、··、S4\)子阶段。我们认为CNN是一个级联,由一组子阶段\(S1,···,S4\)组成。假设A是一个异常patch, \(A_i\) 是子阶段 \(S_i\) 将 \(A\) 归类为异常事件的事件。设 \(D\) 和 \(F\) 是级联的检测率和误报; 它们的计算如下[49]: \[ D = Pr[A_4,· · · , A_1|A] =\prod^4_{i=1}{d_i}\\ \tag{1}\\ \]
\[ F = Pr[A_4,· · · , A_1|\hat{A}] =\prod^4_{i=1}f_i\\ \tag{2} \]
式中,对于阶段\(i\), \(d_i= Pr[A_i|A_{i−1},···,A_i, A]\), \(f_i= Pr[A_i|A_{i−1},···,A_i,\hat{A}]\)为检测率和假阳性率。我们利用在四个不同深度学习的特征创建了四个弱高斯分类器。这些分类器的学习过程独立于级联网络学习过程。我们在第三- d部分讨论培训。
根据方程式(1)(2),通过训练这些弱分类器,可以获得较少的误报数。我们还调整了分类器,使它们具有非常高的检测率。因为我们的补丁是立方体\((40×40× 20)\),首先,在x、y和时间方向上,将10个大小为\(5×5×5\)的立方核与步长为1的立方输入块进行卷积。然后,应用\(2 × 2 × 2\)子采样核。\(S^1_2\)子阶段使用该层生成的特征。
两个卷积层和子采样层重复,\(5×5×5\)和\(2×2×2\)核作为级联CNN的第3层和第4层;第二阶段\(S_2^2\)考虑第四层的输出。然后我们对10个大小为\(4 × 4 × 2\)的内核进行卷积作为第 5 层,将一个大小为\(900\)的全连通层卷积作为第六层来考虑\(S^3_2\)。最后,CNN使用了两个完全连接的层,尺寸分别为\(450\)和\(100\),可以考虑用于\(S^4_2\)。我们在Section III-C中讨论级联CNN的复杂度降低。
深度结构分层训练:在真实的异常问题中,训练数据通常没有标记,或者只有正常样本。因此,将此任务的深度网络训练为端到端网络是不可能的。
为了从分层特征提取中获益,CNN是逐层训练的,并且不依赖于其层之间的分类器,类似于Ranzato等人在[48]中的工作。
卷积层的核和全连接层的权值都由稀疏自编码器(SAE)训练。将所有的训练视频转换为一组具有相同大小的kernel的patch。在这些训练补丁中,一个隐层有s神经元的SAE被训练。
假设我们有\(m\)个\((w, h, t)\)维的法向补丁,而\(x_i∈\mathbb{R}^D\)是用于学习核的原始数据,其中\(D = w×h×t\)。自动编码器尝试最小化等式。(3)通过重构原始数据: \[ L =\frac1m\sum^m_{i=1}||x_i− W_2δ(W_1x_i+ b_1) + b_2||^2+λ\sum^D_{i=1}\sum^s_{j=1}(W^{ji}_2)^2+β\sum^s_{j=1} KL(ρ|ρ'_j)\tag{3} \] 其中,\(s\)为自编码器隐层节点数,\(W_1∈\mathbb{R}^{s·D}\), \(W_2∈\mathbb{R}^{D·s}\)为权重矩阵,分别将输入层节点映射为隐层节点,隐层节点映射为输出层节点。\(W^{ji}_ 2\)是第\(j\)层隐藏层节点和第\(i\) 层输出层节点之间的权值,\(δ\)是一个sigmoid函数。b1和b2分别为输出层和隐藏层的偏置。\(KL\)是Kullback-Leibler散度[44],\(KL(ρ|ρ'_j)\)是一个正则函数;设置它是为了使隐藏层的激活变得稀疏。
\(KL\)是基于以\(ρ\)为参数的伯努利分布与有源节点分布之间的相似性。\(β\)参数是稀疏自编码器目标中惩罚项的权重。我们可以通过随机梯度下降方法对\(W_1\)有效地优化上述目标。我们认为\(W^{1:D,i}_1\)为各自CNN层第\(i\)层内核的权值,其中\(i\)为SAE的第\(i\)层隐藏层节点。使用上述方法,我们训练了我们所有级联CNN层的所有内核。我们的CNN是一个卷积层的层次结构,每一层的输入数据都是前一层的输出数据表示。然而,第一层输入数据是一个原始视频补丁。
在第一层中,在从视频帧中提取的输入斑块上,我们有一个大小为\(5×5×5\)的3D接受域。为了表示这些补丁,我们使用了10个立方核。为了训练这些kernel,我们使用了一个相当于CNN接受域(即\(5×5×5\))的输入大小的SAE,一个相当于kernel数量(即10)的隐藏层,输出大小与输入大小相同。
SAE对输入视频补丁进行培训。训练完成后,我们使用SAE的编码器部分作为CNN的内核,即使用的内核为\((W^{1:D=5×5×5,i}_1)^{i=1:10}\);参见图5。
我们将这些内核应用到视频补丁上,然后在2×2×2区域上进行3D最大池化操作。在第一个子阶段的顶部,我们有一个大小为\(18×18×8×10\)的特征图。第二层卷积由子阶段1的输出特征图提供。
第二子阶段的卷积和池化与第一子阶段的规范相同。为了训练卷积核,提取的小块被输入到前一个子阶段的输出特征映射上,并将它们提供给具有训练核的规范的SAE。在第二阶段的顶部,提取大小为\(7 × 7 × 2 × 100\)的特征图。
在第三个子阶段,我们应用了一个10个大小为\(4×4×2\)的核的卷积,就像之前的子阶段一样,在第三个子阶段的顶部,我们有一个\(4×4×1×1000\)特征图。与前面一样,我们应用了一个输入大小为特征图、隐藏层大小为900的SAE。随后,我们应用另一个SAE,输入大小为900,隐藏大小为450。
最后,将同样的技术应用于450个特征向量上,在整个CNN架构的顶部提取一个大小为100的特征向量进行第四子阶段。在这个特征层次中,通过从浅到深的移动,可以提取出更复杂的特征。