安防视频的异常事件检测

异常事件检测任务(Anomaly detection)的难点:

1.异常事件发生的频率很低,导致数据的收集和标注比较困难;

2.异常事件的稀少导致训练中的正样本远少于负样本;

3.在监控场景中,不管是通常(normaly)还是异常(anomaly)事件都是很多样且复杂的,即类别内的多样性很高,variance 很严重。

最近 UCF 的 CV 研究中心就在 CVPR18 上发表了一篇关于监控视频异常事件检测的论文,提出了一种基于深度多实例排序的弱监督算法框架,同时提出了一个新的大规模异常事件检测数据集。这篇笔记主要对这篇文章进行介绍,也算是帮助自己理解,若有错误烦请指正。

本文提出的异常检测算法

很多先前的方法都先学习一个通常的模式,并假定任何违背这个通常模式的 模式应该是异常的。但事实上,一个方法很难也几乎不可能去定义一个所谓的通常模式,因为通常模式里面可能包含太多不同的事件和行为了。同样,也很难去定义异常事件,因为异常事件同样也可能包含太多类型的情况了。所以,这篇文章主要提出了两点 motivations。

1.异常事件检测任务应该要在弱监督框架下进行学习。此处弱监督指在训练时,只知道一段视频中有或没有异常事件,而异常事件的种类以及具体的发生时间是未知的。

2.异常事件检测任务应该采取两阶段的框架,即不管异常事件的种类,生成异常事件的 proposal,之后再对 proposal 中包含的异常事件进行分类。这样有助于提高异常事件检测的召回率(应该是因为这样可以找到一些不在现有类别中的异常)。这样的框架和目标检测中的 RCNN 类方法十分相似。这篇文章则主要针对异常 proposal 阶段进行研究。

基于这样的想法,该文采用了多示例学习(Multiple instance learning, MIL)方法来构建算法框架,并提出了包含 稀疏和平滑约束的 MIL 排序损失来训练模型。算法框架如下图所示,主要使用 MIL 的思路构建训练集合,使用 C3D+FC 的网络来获取异常评分,最后采用提出的 MIL 排序损失来训练模型。

多示例学习(Multiple Instance Learning)

首先简单的介绍一下多示例学习,这是在 20 世纪 90 年代在机器学习领域中提出的方法。在 MIL 中,「包」被定义为多个示例的集合,其中「正包」中至少包含一个正示例,而「负包」中则只有负示例(此处示例的概念与样本相同,以下不区分)。MIL 的目的是得到一个分类器,使得对于待测试的示例,可以得到其正负标签。可以看出,在异常检测任务中,弱监督实际上就是 MIL 的另外一种表达形式,所以 MIL 的求解算法很适合用于该弱监督任务中。多示例学习的更多介绍可以参考这篇博客:

多示例学习(Multiple Instance Learning)

 

今天一直在准备组会seminar,是导师点名要我做的报告,一篇有关weakly supervised的论文《Weakly supervised discriminative location and classification: a joint learning process》。读了第一遍就觉得所谓weakly supervised似乎就是多示例学习换了一个说法而已。再看更多的论文之前,这个结论还有待验证。不管怎么说,多示例学习是一个影响深远的大坑,很多令人印象深刻的重要工作都直接或者间接的应用了多示例的思想。其中我觉得最耀眼的应该是Felzenszwalb大牛的《Object Detection with Discriminatively trained part based models》。在那篇文章里他把这个模型叫做latent SVM,实际上就是MILSVM的变种。

 

监督学习 (Supervised Learning)

“学习是透过教授或体验而获得知识、技术、态度或价值的过程,从而导致可量度的稳定的行为变化,更准确一点来说是建立新的精神结构或审视过去的精神结构。”                                                                                                                  ————百度百科

 

上面这段话里,我觉得说的最贴切的地方是“学习需要审视过去”。对于计算机来说,所谓过去就是训练样本,机器学习是一个根据训练样本得到分类器或者拟合函数的过程。而监督学习意味着每个训练样本都有属于自己的标记。当这个标记代表着分类类别的时候,学习得到的就是分类函数。当这个标记代表着某种连续的取值的时候,学习得到的就是拟合函数。更复杂的,每个标记可以是一个集合,这时候学习得到的是结构化预测函数。

 

很多时候,不是每个训练样本都有标记,而是只有一部分被标记,而另一部分只有数据本身,标记缺失掉了。这时候需要将没有标记的数据和有标记的数据结合起来进行机器学习,这就是半监督学习。又有的时候,甚至所有的样本都没有标记,这就是非监督学习。但是实际上,非监督学习没法进行目标明确的分类、拟合任务,只能做一些分析性的任务,比如说聚类,PCA,字典学习等等。

 

多示例问题 (Multiple Instance Problem)

我们考虑这样一种训练数据,这个数据是有标记的,标记只有两个类别,正和负。但这一次标记的目标不是一个样本,而是一个数据包(bag)。某一个或者几个数据合在一起叫做一个bag,每个bag有自己的标记。当一个bag的标记为负时,这个bag里面所有样本的标记都是负的。当一个bag的标记为正时,这个bag里面至少有一个样本的标记为正。 我们的目标是学习得到一个分类器,使得对新输入的样本,可以给出它的正负标记。这样的一类问题就是多示例问题。

 

这个问题在实际的应用中非常常见,比如说,方校长建长城的时候,他要列举一些违禁词汇不让大家搜索,他觉得一个一个输入太麻烦了,于是可以找来一些黄色或者反动的网站,直接作为正样本包:网站中的词汇总有一个是违禁的。然后拿健康向上的人民日报网页作为负样本包:里面的词汇没有一个是违禁的。又比如做检测问题,标记训练图片样本的时候需要给出一个矩形框指明目标的位置,有可能标的不够准确,导致不同的样本之间对不齐,这时候可以将标记的矩形框做一些局部扰动得到一些新的矩形框,将它们一起看成一个bag,其中总有一个是最佳的正样本,也就是标记为正。而取一张没有目标的图片,作为负样本包:无论在里面怎么截取图片,都是负样本。

 

 求解方法

关于多示例问题怎么求解,假如说所有的样本标记都已经知道了,那就是一个监督学习的问题了,用SVM,adaboost之类的都可以做。现在的困难是,有很多样本的标记我们不知道。对于负样本包来说就无所谓了,里面每个样本那都是负标记,这个是明确的。问题出在正样本包上面,每个正样本包里只能保证有一个是正样本,其他的是正是负就不知道了,关键是到底是哪个样本是正的呢?这个也是不清楚的。

 

解决这个问题的方法其实挺直接的:迭代优化(alternative optimization)。也就是说,我们先假设已经知道了所有样本的标记,那么就可以通过某种监督学习的方法得到一个分类模型,通过这个模型我们可以对每个训练样本进行预测,然后更新它们的标记,我们又可以拿这一次新得到的标记重新训练分类模型了。所以整个优化过程分为两部分:监督学习,标记更新。

 

这里还有一些地方需要注意:

第一点, 训练监督学习的模型的时候,只从正样本包里挑选被预测的“最像正确”(也就是分类得分最高)的那一个,正样本包里面其他的样本,不管预测出来是正的还是负的都不要了。这是因为,其实多示例的问题也可以描述为,正样本包里面“最正确”的一个样本标记是正的,跟其他样本无关。所以,这种选择策略恰恰是符合问题定义的。

第二点,如果负样本足够多的话,可以只挑选每个负样本包里面被预测“最像正确"的一个样本作为负样本进行训练,这样子的负样本也叫做hard sample或者most violated sample。实践上来说,它们对于模型快速收敛是最有效的。

 

那么下面给出一个简单的流程图:

 

多示例学习:


输入:数据矩阵, 包标记,包与样本的关系

输出: 分类函数 f

 

将每个标记包j中的样本初始化为包的标记,初始化集合U为空,将所有样本加入样本集U

重复下面的过程

取的样本的数据以及标记训练得到一个分类函数f

利用f预测所有样本的标记

清空U

对于每个正标记包,选取f预测得分最高的样本加入集合U

对于每个负标记包,选取f预测得分最高的样本加入集合U(或者取较高的某些样本,也可以取全部样本都加入U,这取决于负样本是否充足)

直到满足结束条件

返回f

深度MIL排序模型

接下来介绍该文提出的算法。文中将异常检测定义为一个回归任务,即异常样本(anormal)的异常值要高于通常样本(normal)。直观的考虑可以将排序损失定义为:

此处 Va 和 Vn 分别为异常和通常样本,f则为模型预测函数。由于在 MIL 中,并不知道正包中每个样本的真实标签,所以采用以下的形式:

此处即指,在训练中对于正包和负包都只使用分数最大的样本来训练。具体而言,正包中分数最大的样本最可能是正样本,而负包中分数最大的样本则被认为是 hard negative,即难例。基于此式,为了让正负样本之间的距离尽可能远,作者采用了 hinge-loss 的形式。

但这样的 loss 并没有考虑视频的时序结构,所以作者提出了两点改进的 motivation:

1.由于视频片段是连续的,所以异常的分数也应该是相对平滑的。

2.由于正包中的正样本(异常事件)比例是很低的,所以正包里面的分数应该是稀疏的。

基于这两点 motivation,作者在 loss function 中添加了两个约束项,分别为时序平滑约束以及稀疏约束。如下所示。

最后,再添加上模型参数的 l2 正则,就得到了最后的损失函数。

实现细节

在具体实现中,本文采用了在其他数据集上预训练好的 C3D 模型来提取视频片段的特征,此处不对 C3D 模型进行训练。对提取好的特征,再使用 3 层全连接层来获得最后的预测异常值。以上提出的 MIL 排序损失也是用来对这几层 FC 层训练的。

在训练数据处理方面,该文将每个视频均匀分为 32 个片段,作为一个包。训练时,随机选取 30 个正包和 30 个负包作为 mini-batch 进行训练。

本文提出的异常检测数据集

本文的另外一个贡献是提出了一个新的较大规模的异常事件检测数据集 UCF-Crime,参考下表,该数据集比起之前的数据集的优点主要是两方面:一是视频的数量和视频的总时长要远远多于之前的数据集,二是其中包含的异常事件类型比较丰富。

在数据集构成方面,该数据集共包含 13 种异常事件。共有 1900 个视频,其中异常和通常视频各占 950 个。数据集划分方面,训练集包含 1610 个视频(800 个通常视频,810 个异常视频),测试集包含 290 个视频(150 个通常,140 个异常视频)。

数据集网址及该论文项目页见:

Real-world Anomaly Detection in Surveillance Videos http://crcv.ucf.edu/cchen/

实验结果

方法比较

本文主要以 ROC 曲线下的 AUC 来衡量异常检测算法的效果,其实验结果如下图和下表所示。可以看出,其算法比起之前的方法还是有很大的提高的。此外,添加训练中的约束项也带来了一定的效果提升,不过不是很明显。

下图则是一些可视化的结果,可以看出在作者挑选的这些例子中,异常检测的效果还是很不错的,最右一列则为一些失败案例。

虚假预警率分析

在监控任务场景中,一个可靠的系统应该具备较高的召回率和较低的误报率,作者比较了0.5阈值下的误报率,也具备不错的效果。

异常事件分类

该文的方法只是做异常事件 proposal,但该文的数据集实际上还能做异常时间分类任务,所以此处作者还用 C3D 和 TCNN 两种行为识别算法跑了一个 baseline,可以看出此处 TCNN 的效果还是比 C3D 要好很多。

小结与讨论

这篇文章主要针对异常事件检测问题提出了一种新的弱监督算法和一个新的数据集。算法方面,主要就是将这个问题套用进了 MIL 的框架。这个数据集的提出应该对这个方向的发展会有比较大的帮助,此前异常检测一直没有比较大的数据集。

缺点方面,我认为对于异常检测这种数据不平衡任务,用 PRC 曲线会比 ROC 曲线能更好得起到衡量算法效果的作用。即应该用 Average Precision 来衡量异常检测效果。另外文中还着重衡量了虚报率,而在真实场景中对于异常事件的召回率要更重要一些,毕竟漏过几个异常事件比起虚报几个异常事件带来的负面影响更大。

总的来说,异常事件检测作为真实场景中一个非常重要的任务,目前针对性的研究还不是很多。基于这篇文章提出的算法思路和数据集,后面应该也会有更多的工作跟进吧。

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值