异常事件检测研究之路(一 )

        课题定为异常事件检测以来,做了很多小实验,但是一直感觉自己并没有碰触到核心的部分,最近看了一篇很有收获的文章,是第一篇将深度学习算法引入异常事件检测中,来自文作者Dan Xu 等,文章名字为‘Learning Deep Representations of  Appearance and Motion for Anomalous Event Detection ’,看了这篇文章,先介绍一下文章的每一部分内容。

一、摘要

       此文章是第一篇将深度学习特征引入异常检测中,提出了一个AMDN (Appearance and Motion DeepNet )网络,结合运动目标的外观和运动信息,去自动学习特征表示,并且提出了新颖的双融合策略,包含传统的早期融合和后期融合策略,文章大致是引入了stacked denoising autoencoders (级联的降噪自编码),对输出的特征采用多层one-class SVM (一分类svm)去进行预测每个输入是异常的得分。

二、介绍

            异常事件检测研究之路(一 )_第1张图片

这一部分大概介绍了传统的检测方法,以及深度学习最近的引入,上图为该文章的总体思路。

2.1.1 Denoising Autoencoders (降噪自编码)

      这一部分介绍了降噪自编码的原理,降噪自编码(DAE )是一个有隐层的神经网络,它是通过将原始数据部分去破坏,通过破坏的数据x去重构原始数据,一般对原始数据破坏的方式有给原始数据加入高斯噪声、椒盐噪声等;一般降噪自编码可以分为两个部分:编码和解码,它们之间有一个单一共享的隐层。这两个部分都去学习各自的映射函数,w表示权重,b表示偏重,编码和解码都有各自的变量因子,每一层的输出表达式为s(Wxi+ b),其中s指的是映射函数比如常用sigmoid函数, 采用了编码/解码结构,这个网络就可以自动的学习到能代表输入比较稳定的特征。

         降噪自编码就是在学习这四个参数(W;W0;b;b0 ,使得下式目标函数达到最优,目标函数为:

                                                   

        上式表达式第一部分代表了重构的误差, 同时引入了权重惩罚去作正则项,参数拉姆达是去调整两者的重要程度,在隐含层引入稀疏约束去发现代表输入数据最有意义的特征,我们设置了目标稀疏程度, 也定义了所有训练数据第j列的平均激活值,另外一个惩罚项为交叉熵,可以将交叉熵加入上式去学到一个更加稀疏的表示,上式公式有非凸目标函数,并且采用梯度下降法可以求得局部最优。

2.1.2 AMDN Structure
上述提出的AMDN结构是由三个SDAE 组成的,每一个SDAE 对应一个低级的输入,这三个SDAE分别学到了外观特征、运动特征以及两者联合的特征,每一个降噪自编码都是由两部分组成:编码和解码。在编码的第一层使用一个过完备的过滤器去捕获输入数据的典型特征。这样在下一层隐层中神经元的个数就会减少一半。解码过程跟编码过程有对称的结构,大致描述一下3种降噪自编码特征提取方式。

外观特征:这一级的特征为从原始的图像像素特征中学习能代表外观的特征,为了去捕捉外观的贡献,采用多尺度的滑动窗去提取稠密的图像块,滑动步长为d,最后将图像块统一为大小wa× ha× ca ,前两个参数为图像块的宽和长,最后一个参数为图像的通道,比如灰度图通道为1,将这些归一之后的图像用于训练,所有的块归一化到【0,1】,在编码过程使用用4个编码层,第一层的神经元个数为na× wa× ha× ca ,va>  为放大因子目的为构造一个完备的过滤器。

运动特征:通过光流计算目标的运动信息,采用固定大小wm× hm× cm (cm=2是指光流沿x、y轴的幅值),通过稠密的光流块去学习运动信息,同上一个部分特征也是归一化到【0,1】,每一个通道使用4层编码层第一层的神经元个数为nm× wm× hm× cm 。

外观和运动的联合表示:上述提到编码模型是分别学习外观和运动信息,为了考虑两者之间的联系,提出了一种方法去求综合两者的联合信息,通过灰度图的像素块和对应的光流块去学习pixel-level early fusion(早期融合) 特征。

2.1.3 AMDN Training
通过两步去训练AMDN :预训练和微调。利用稀疏约束的方法去学习每一个降噪自编码,给输入数据加入噪声去学习它的映射函数,在下一层中通过没有加入噪声的输入去学习映射函数。采用一层一层的预训练,降噪自编码可以被堆积为多层的前馈深度学习网络。通过预训练每一层可以初始化每一层的参数,然后通过对整个网络进行微调去调整每部分的参数。

    微调将每一层的SDAE都看成是独立的模型,给定训练集包括N个训练数据(这N个中包含外观信息、运动信息以及联合信息),后项传播去微调整个网络。上述目标函数通过公式(2)去微调整个SDAE整个层。

                                              

上述的拉姆达是用户自定义的参数,为了加速训练过程中的收敛性,采用方法SGD,将训练数据分为小块计算。 

通过微调整个网络,就学到了能代表异常事件的特征。理论上,SDAE每一层的输出都可以作为特征表示,本文的工作选择隐藏层去得到紧致的表示,每一层都有参数w、b,通过映射函数可以得出当前层的输出,并且作为下一层的输入,直到隐层。

2.2 Abnormal Event Detection with Deep Representations

     将异常事件检测看为基于块的二分类问题,给定一个测试帧,通过滑动窗口和固定步长可以得到M*N个块,将每一块分为是异常的还是正常的。特别的,对于检测块计算出三个异常分值,利用一分类SVM模型去计算特征表示,三个分值通过线性组合的方式以表示最终的异常分值,先采用背景减法只提取出运动目标,可以加快计算速度。

2.2.1 One-class SVM Modeling      

    一分类的SVM在边缘检测中被广泛的应用,大致思路是在特征空间中学习一个超平面并将训练数据映射到超平面上,超平面上点的分布的情况与实际的对应,以此可以学到训练数据的边沿,最终,给定测试数据,在超平面之外的则为异常数据,一类svm的目标方程为:

                                     异常事件检测研究之路(一 )_第2张图片

   w是学到的权重向量,p是偏重。F(·)为特征映射函数,可以将特征向量映射到高维特征空间中。参数v调节超平面在特征空间上的分布,通过引入核函数上述目标函数可以变为相应的标准对偶形式,在实验中选择了径向基核函数,通过上式给出最优的参数值,通过估计下式可以计算出第几个降噪自编码的输出分数。                                                    

2.2.2 Late Fusion for Anomaly Detection
   无监督的后期融合方法去自动学习权重向量,权重学习策略为下式:

                                     异常事件检测研究之路(一 )_第3张图片

      其中sk=[s1,s2,...sk]是训练数据的矩阵。具体每个参量的意思在文章中有介绍,为了求得上式,首先得到矩阵w和前d个特征向量对应的向量,组成协方差矩阵则阿尔法  可以由下式获得:

                                     

            对于每一个子块t,通过计算相关的异常分数,将该结果与一个阈值做比较判断是否为异常事件。

3 Experimental Results 

    上述的方法是在matlab、c++和caffe框架下实现的,光流法的程序是用c++写的,对于一分类的svm,利用libsvm实现,数据库用了UCSD数据库和Train数据库。       
    量化评价:对于UCSD数据库,对于外观学习,利用三个不同尺度15*15,18*18,20*20分别去在原始视频上提取图像块,这样会产生5千万个图像块,随机采样1千万个并且归一化到相同大小(比如15*15大小)去训练。对于运动学习,用图像块大小为15*15大小去采样,随机采样6百万个子块。在测试阶段,利用15*15大小的滑动窗口块步长为15去采样测试视频。表观层和运动层中第一层网络的神经元数量设为1024,联合模块的神经元数目设为2048,接下来编码层的神经元数目为1024(2048)-512(1024)-256(512)-128(256),解码过程为对称结构,对于DAE的预训练阶段,以变量为0.0003对输入数据加入高斯噪声,网络采用动量参数为0.9的随机梯度下降法去训练。接下来作者介绍了一些实验中各部分的参数。 

4 Conclusions
    基于深度学习提出了一种新颖的无监督的对于异常事件的检测方法,该方法是基于多个降噪自编码去学习场景的表观和运动信息,并且对学到的特征采用双融合机制,
在两个数据集上证明了方法的有效性,未来的工作包括探索其它网络结构、对SDAE网络采用多通道数据融合,对于异构的场景未来的工作可以采取多任务融合的方法。

以上翻译只是代表个人,有很多不准备的地方,也有很多不理解的地方,如果大家对文章感兴趣还是建议去看作者的原文。


以下是自己的个人疑问,查了一些资料,但是还是没有明白。

大致列出几个不懂的地方:1、文章中提到对于输入特征都归一化到[0,1],是如何归一化的呢,比如对于图像块因为图像中像素的大小是[0,255],是将255映射为1,0为0,这样就将像素值映射到了[0,1]之间。还是采用对当前块中的像素值找到max和min,将max映射为1,将Min映射为0,这里归一化这里不是很明白,同理对光流值那里的归一化是采取什么方式。

2、对于表观信息和运动信息中的降噪自编码,给出每一层节点个数的顺序为1024-512-256-128,为什么第一层是1024个呢?我看文章是采用15*15的窗口进行滑动的,如果每一个点的像素值对应一个输入神经元,那也只有225个神经元 ,那么输入1024个神经元又代表什么呢?而对于光流图,每一个点的光流值是有两个值的,即x方向和y方向的光流值,又是怎么处理的呢。

3、文章中提到是采用了三种大小的滑动窗去扫描图像的,分别是大小15*15,18*18,20*20,文章中提到了“warped into the same size
,这个意思是指将这三个尺度都归一化到同样大小吗(15*15)。

4、文章提出了双融合的概念,分别是“traditional early fusion ”和“late fusion strategies ”,对这两种融合方式理解不是很清楚,对于早期融合,就是说把运动特征和光流特征放在一起,怎么放的呢,前一半运动信息,后一半光流特征吗?

而对于后期融合,就是说在检测阶段对提到的三种特征分别进入one-class SVM 训练好的模型中,则可以得到每一种情况下预测的标签结果,没有看懂文章中给的融合策略。









你可能感兴趣的:(我的研究生毕业设计)