异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常

关于论文学习

        这篇文献中作者通过训练一个 Siamese 神经网络,将手工制作的表示和距离函数替换为学习的表示和距离函数,建立了简单的最近邻方案.Siamese 网络通过训练将视频块对分类为相似或不同,并用来找到与所有训练视频块不同的测试视频块,因此判定是异常的.从目标数据集的训练数据中学习一个样本模型(包含所有唯一的正常视频块).最后,使用经过训练的 Siamese 网络中的测试视频块和样本之间的最近邻居评分来为每个测试视频块分配异常评分. 

        特性:即插即用的方法(学到的距离函数可以在目标数据集上即用即得),以及可扩展和抗环境变化的特性(exemplar集的更新非常容易)。

论文地址:Learning a distance function with a Siamese network to localize anomalies in videos | IEEE Conference Publication | IEEE Xplore


一、介绍

        训练提供只提供普通视频,这样问题就变成了从正常的训练视频中建立正常活动的模型,然后在同一场景的测试视频中检测出与模型有较大偏差的异常

        大多数以前的方法都有局限性,这可以归结为以下一个或多个原因,这也是作者研究方法的动机:

                (1)许多方法中使用的特性都是手工制作的。例如spatiotemporal gradients , dynamic textures, histogram of gradients , histogram of flows , flow fields 和 foreground masks。

                (2)几乎每一种方法都需要一个昂贵的计算模型建立阶段,需要专家知识,这可能不适合实际应用。

                (3)许多以前的工作重点是只检测特定的偏离异常。

        为了克服这些限制,作者提出了一种基于exemplars的最近邻方法来检测视频异常,该方法使用一个由Siamese CNN学习的距离函数来测量测试视频中与正常活动的相似程度。作者的方法建立在这篇论文的工作之上,在中,使用普通视频创建一个普通活动的模型,该模型由视频的每个空间区域的一组范例组成。范例是表示视频patch的特征向量,即固定大小H × W × T的视频时空块,其中H、W、T分别为视频patch的高度、宽度和时间深度。视频空间区域的范例代表了在该区域内正常视频中出现的所有独特的视频补丁。范例是特定于区域的,因为异常是特定于区域的简单事实。为了检测异常,将测试视频中某个特定空间区域的视频补丁与该区域的样本进行比较,异常分数即为到最近的样本的距离。如果一个测试视频补丁和每个范例视频补丁不一样,那么它就是异常的。在中,使用手工制作的特征(前景蒙版或流场)来表示视频补丁,并使用预定义的距离函数(L2或归一化L1)来计算特征向量之间的距离。作者提出学习一个更好的特征向量和距离函数,通过训练一个Siamese CNN来测量对视频补丁之间的距离。作者的CNN不是特定于特定的场景,而是从几个不同的源视频异常检测数据集的视频补丁中训练出来的。这个想法在精神上类似于学习CNN匹配补丁的工作,只是扩展到了视频。实验表明,在UCSD Ped1、Ped2和中大Avenue测试集上,作者的方法或优于或与目前的技术水平相当。

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第1张图片

图1 场景说明:UCSD Ped2、ShanghaiTech和CUHK Avenue被用作源数据集来学习距离函数

        综上所述,作者的主要贡献是:
        1. 作者的方法将训练CNN将视频斑块分类为正常或异常的问题(因为没有异常的训练例子,所以无法做到)转化为训练CNN计算两个视频斑块之间的距离的问题(可以为这个问题产生大量的例子)。无论目标数据集如何,都使用相同的参数来训练来自源数据集的CNN。
        2. 这种方法允许特定任务的特征学习,允许从正常视频中有效地建立典范模型,并将各种偏离常态的情况检测为异常情况。
        3. 通过将问题的复杂性转移到距离函数学习任务上,简单的1-NN distance-toexemplar异常检测变得高度可解释。据作者所知,作者的论文是第一个采取这种方法进行异常检测的。


二、相关工作

        2.1 基于距离的方法

        基于距离的方法包括从训练分区创建一个模型,并测量与该模型的偏差,以确定测试分区的异常分数。

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第2张图片

图2 使用学习到的距离函数对UCSD Ped1目标数据集进行样本提取和异常评分的说明

        2.2 基于概率的方法

        概率方法与基于距离的方法类似,只是该模型有一个概率解释,例如,作为一个概率图形模型或一个高维概率分布。 

        2.3 基于重构的方法

        重构方法的目的是将输入分解为其共同的构成部分,并将它们重新组合起来,以重建输入,使 "重建误差 "最小化。

这部分详细内容可以参考:异常检测 | 监控视频的异常检测与建模_六个核桃Lu的博客-CSDN博客 


三、方法

        通过构建的基于exemplars的最近邻方法,作者的主要问题是学习一个距离函数,用于比较测试视频中的video patches和代表正常视频中所有唯一的video patch的样本video patches。为此,作者使用了一个类似于Bromley和LeCun首次引入的Siamese网络(见图1)。

(关于Siamese网络训练,我这篇文章内有介绍:Meta Learning(元学习)_六个核桃Lu的博客-CSDN博客)

        本质上,通过将异常检测任务本身变成一个相当简单的最近邻距离计算(见图2),作者试图将建模这个问题复杂性的负担转移到学习距离函数的任务上。这个学习问题可以离线完成,并且可以从源数据集中获得大量的训练数据。理想情况下,这可以一次完成,并产生的特征表示和距离函数用于各种不同的目标数据集。

        3.1 生成训练视频补丁对(Generating training video patch pairs)

        在训练Siamese网络来估计两个视频patch之间的距离时,主要的困难在于如何生成相似不同video patch对的训练集。一个训练示例由一对video patch和一个二进制标签组成,表示这两个video patch是相似还是不同(见图1第1部分)。选择video patch对,正确对应它们的ground truth标签“相似”或“不同”。还应该选择对,这样在测试时间对CNN输入的可能域的覆盖是高的。这是为了确保在测试时不要求CNN对域外输入进行操作。

        作者使用现有的视频异常检测数据集来做到这一点。使用一个源集标记的视频异常检测数据集来生成相似和不同的video patch对。用于生成训练示例的标记数据集当然应该与最终将进行测试的目标视频异常检测数据集分离。

        基本观点如下:对于每个源数据集,

        (1) 测试区的非异常video patch与训练区中同一空间区域的至少一个video patch相似。如果它与任何正常的video patch不同,那么它就是异常的。

        (2) 测试分区的异常video patch与训练分区中同一空间区域的所有可能的video patch不同。此外,它甚至与最相似的video patch也不同。

        第一条规则为测试视频中的每个正常video patch生成一对,尽管由于任何测试视频中都有许多正常的video patch,该规则可以生成许多相似的对。第二个规则为测试视频中的每个异常video patch生成许多不一样的不同的对。第一个规则需要一个距离函数来找到与测试video patch最相似的训练video patch。对训练最有用的在第二条规则中,由一个距离函数很难知道哪些是不同的(即相似的),这也是很有用的。我们使用一个简单的归一化L1距离作为我们的距离函数,以及3.2节中描述的video patches的表示。

        对于使用预定义的距离函数来帮助选择训练实例,不必担心是Siamese网络可能只是学习这个距离函数,原因是:每个example pair的标签不是L1距离,而是一个0或1,分别表示这对exemplar是相似还是不同。其次,两个相似对之间的L1距离有可能比两个不同对之间的L1距离大。

        需要注意的是,标准化的L1距离并不能很好地测量video patches之间的距离。例如,这个距离没有考虑到自然图像中的许多变化,如比例、照明和物体的姿势。因为这些变化主要存在于摄像机场景的不同区域,所以在归一化L1距离上确定了一个自适应阈值来执行这些配对。考虑上述规则,结合检查给定区域内最近邻距离的分布,确定区域的阈值。具体地说,相机帧中给定区域的自适应阈值被简单地确定为µ + α * σ,其中µ是测试video patch和训练video patch之间的最近邻居距离的平均值,σ为对应的标准差,α通过识别最近邻距离分布中的弯头来确定(实验中作者一致将其设为0.2)。自适应阈值在源数据集中是常见的,但在相似和不相似的对中是不同的。

        注意,在Siamese网络中,距离较大的不同配对更容易被区分;另一方面,尽管有这种特性,我们仍然需要一些这样的配对来实现高域收敛。因此,作者包含了概率与它们之间的距离成反比的候选对,实现了高域覆盖,但也有足够数量的示例接近决策边界。我们还将随机video patch与它们的轻微增强(随机平移和/或中央缩放)版本配对。最后的video patch对数据集由相同数量的相似和不同的patch对组成。

        3.2 学习距离函数(Learning a distance function)

        表示方式的选择:此时选择video patch的表示方式是很重要的,这样学习到的距离函数才能很好地用于异常检测任务。作者选择的表示法包括一个 H × W × C 的长方体。鉴于所有异常都是基于外观或运动,作者采用多模态表示。在接下来的所有实验中,第一个通道是灰度图像patch,接下来的12个通道是6对图像patch之间密集光流场x和y方向梯度绝对值的图像patch。设C = 13,所有实验设H = 20, W = 20。参见图1(第2部分)进行说明。

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第3张图片

        预处理:训练过程中对每个video patch pairs 的 x1, x2 进行随机量的数据增强,以提高学习到的距离函数对这些变化的稳定性。数据增强包括随机从左到右翻转,在[0.7,1]中集中缩放和在[-0.2,0.2]中第一个通道的亮度抖动。预处理还涉及到每个视频patch从[0,255]到[- 1,1]的线性缩放强度值。

        网络架构和培训:图3概述了作者的网络架构。

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第4张图片

        每对视频中的每一个patch首先使用2 × 2 max-pooling的conv-relu-batchnorm操作独立处理,在每一个卷积之后,称之为卷积孪生“尾巴”。尾巴之间的权重绑定保证了两个极其相似的视频片段不可能有非常不同的中间表示,因为每个尾巴计算的是相同的函数。最后,从两个双尾(conv5, conv5_5)中提取扁平特征向量,然后在一个典型的分类流水线中进行处理,从而最大限度地减少交叉熵损失。所有的卷积都使用3 × 3滤波器,步幅为1。作者发现在conv5处减去特征映射比拼接产生更快的优化。作者认为这是因为element-wise减法在网络架构上诱导了更强的结构优先。让B代表minibatch大小,索引minibatch和y(x_{1}^{^{(i)}},x_{2}^{^{(i)}})是一个B mini-batch向量包含标签,作者假设y (x_{1}^{^{(i)}},x_{2}^{^{(i)}}) = 0 ,x1和x2每当相似video patch和y (x_{1}^{^{(i)}},x_{2}^{^{(i)}}) = 1。

        互视性损失的形式为:

         其中p(x_{1}^{^{(i)}},x_{2}^{^{(i)}})是softmax函数输出的不同patch的概率。

        注意,在损失中,我们为不相似的类\gamma设置类权重为0.2,以对错误分类的不相似对的惩罚小于错误分类的相似对。这进一步满足了作者在异常检测阶段的目标,即在高真阳性率下有低的假阳性率(其中异常被表示为阳性类别)。对于训练,目标与标准反向传播算法和Adam优化器相结合,通过定期测试验证集(一组拒绝训练示例)来节省最佳网络权值。由于权重系结,梯度在双尾上是相加的。作者使用的批大小为128,初始学习率为0.001,最多训练500次。Xavier-Glorot权重初始化采样来自一个正态分布,与所有层的ReLU激活一起使用。需要注意的重要一点是,作者并没有保存能够最大化验证准确性或最小化验证损失的网络权值,而是保存了能够最大化假阳性率高达0.3的接受者工作特征曲线(AUC)下的验证面积的权值。这条ROC曲线是通过绘制真阳性率作为假阳性率的函数得到的,其中不同的类别表示为阳性。通过最大化这个AUC,以一种在低误报率下实现高真报率的方式排列距离的网络是首选的,这是在异常检测阶段希望看到的行为。作者使用标签平滑正则化设置为0.1来辅助泛化。

        发现添加标签平滑正则化有助于两个原因:首先,视频补丁配对过程在某种意义上必须猜测未来学习的函数应该调用哪些相似和不同,以便在异常检测方面取得良好的性能,因此它产生了一个带有噪声标签的数据集。第二种来自于这样的观察,即最小化交叉熵等同于最大化正确标签的对数似然,这使得网络试图增加正确标签对应的logit,使其比其他logit大得多,导致它对训练数据过度拟合,对自己的预测过于自信。标签平滑通过降低网络对其预测的信心来帮助解决这两个问题。我们还在第二个到最后一个全连接层(fc1)的激活时使用dropout为0.3。

        3.3 目标数据集的exemplar学习与异常检测(Exemplar learning and anomaly detection on target dataset)

        检测目标数据集上的异常涉及两个阶段:使用数据集的train分区构建exemplars模型和检测分区上的异常检测。这两个阶段都使用之前训练过的Siamese网络来测量视频补丁之间的距离。这是通过简单地将对应于不同视频补丁的logit值的softmax作为补丁之间距离的度量来实现的。因为softmax输出也可以被解释为概率,所以测量的距离也可以被解释为patch不同的概率。作者强调Siamese网络的训练是独立于exemplars模型建立和异常检测阶段。Siamese网络在与目标视频异常检测数据集不同的源数据集上训练。

        目标数据集训练划分的范例学习:由于视频包含大量的时间冗余,作者使用的exemplar学习方法在目标数据集中建立一个正常活动的模型。样本模型由一组区域特定的样本视频片段组成,这些片段来自列车分区,使用空间步长(H/2, W/2)和时间步长为1的滑动时空窗口。exemplar学习的要点是用一个更小的唯一的、有代表性的video path集来表示序列划分中的所有video path集。Siamese网络学习到的特征向量用来表示一个video path, Siamese网络学习到的距离函数用来度量两个特征向量之间的距离。一个视频补丁被添加到一个特定空间区域的样本集,如果它与该区域最近的样本的距离超过一个阈值,作者为所有的实验设置为0.3。图2展示了作者的CNN从UCSD Ped1数据集中相机视场的一个区域提取的样本video path的子集。exemplar学习方法的一大优点是可以基于流的方式更新exemplar集。这使得该方法可以随时间的变化而扩展和适应环境的变化。

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第5张图片

        对目标数据集的测试分区进行异常检测:在测试时,从测试分区中提取空间跨度(H/2,W/2)和时间跨度为1的重叠path,与最近的exemplars的距离产生异常得分(见图2)。在exemplar学习和异常评分阶段,作者通过忽略几乎不包含运动的video path来实现额外的速度提升。具体来说,如果一个视频补丁在通道维度上有20%以下的像素不满足流量大小的阈值或当前和前一帧之间的原始像素值差异的阈值,那么这个video path就会被忽略。此外,实验中使用的粗暴的近邻搜索可以被快速的近似近邻算法取代,以进一步提高速度。异常得分被存储并聚集在一个像素图中,一个像素的最终异常得分只是它作为它所参与的path的一部分收到的所有异常得分的平均值(由于斑块在空间和时间上的重叠)。异常检测是针对特定区域的,因此一个补丁只与从同一区域提取的exemplar进行比较。


四、实验

        4.1 数据集

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第6张图片

 监控视频异常检测数据集下载:监控视频异常检测数据集整理_wzg2016的博客-CSDN博客_监控视频数据集

        作者使用中提出的两个新标准来报告性能,这两个标准更能代表文章中提到的实际性能。在这篇文章中我有详细介绍:异常检测 | Street Scene_六个核桃Lu的博客-CSDN博客

        4.2 与技术水平的比较

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第7张图片

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第8张图片

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第9张图片

异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常_第10张图片

你可能感兴趣的:(异常检测,计算机视觉,机器学习,人工智能,视觉检测)