前言
这篇仍然是以前写的,CVPR2018关于异常行为检测的文章。这篇文章比较特殊,因为它打破了以往异常行为检测默认的无监督套路,对异常行为进行了人为定义,即规定了几个需要检测的异常行为,而且都是在日常生活中比较常见的,并给出了一个他们自己构建的真实监控场景下的异常行为检测数据库。这个数据库明确规定了一些需要检测出来的异常行为,而且其构建方法也比较讨巧,即仅仅告知某段视频中存在某种异常,而不标注异常发生的具体位置,即这个数据库在无监督数据库基础上稍稍加入了一些监督信息,成为一个弱监督数据库。但是有人要问了,那数据库中没有涵盖的异常行为怎么办,算法无法检测更多其他的异常行为?这里说下我的想法:对一些公共场所,比如车站,对类似于斗殴,抢劫,暴恐这样的异常行为更为看重,而不是很在意一些无关紧要的异常(比如车站里躺在地上休息,或者因赶车而奔跑),在这种情况下这个数据库就非常合适,所以在人工智能还处于比较弱智阶段的当下,做一些取舍以换取更好效果的做法是对的。
Motivation
本文关于motivation的讲法个人觉得还是挺有道理的。作者首先质疑一直以来业界关于异常行为的定义,即背离正常行为模式的都是异常:首先,作者认为收集到全部的正常行为数据是几乎不可能的;其次,现实中某些行为在某些场景下是异常,但在另一些场景下就会变成正常(比如在公园里和在马路上骑摩托);还有就是正常与异常的界限很模糊,异常的判定需要我们合理掌握正常的尺度。这三点是异常行为检测一直以来需要解决的问题。作者认为,有时候加入一些异常信息让模型作参考对模型理解异常行为是很有帮助的,这一点我非常认同,毕竟一个孩子,你从小只告诉他什么是对的,却不告诉他什么是对的,他怎么可能正确的明辨是非?正确的做法是要时不时给他一点反面例子来帮助他理解,这样他对是非的分辨就会非常清晰。从算法层面讲,这一点是非常难实现的,神经网络还没这么高端,对小样本的学习还不够智能,但我觉得貌似是一个非常值得研究的点。
回到这篇文章上,我认为作者的设想是对的,但是落实到做法上却不够给力,他用MIL的方式,相当于给异常样本打上标签,然后做二分类(这里用的是回归,但本质上可以认为就是有监督二分类),效果上并不是我们想的用反面例子引导,而是过多使用了反面例子(不知这里表达清楚没,写的比较快)。下面介绍作者的做法。
方法与网络框架:Deep MIL Ranking Model
在正式开始之前,有必要介绍一下多示例学习(MIL)方面的知识,以下内容参考自这个链接https://blog.csdn.net/loadstar_kun/article/details/22849247 。
比如:我们想训练一个分类器来划分敏感词汇,那我们应该如何做?
- 寻找一个正规网站,采集词汇,构成负包,这样可以保证寻找到的都是正常词汇
- 寻找一个带有敏感词汇的网站,采集词汇,构成正包,这样可以保证包中既有敏感词汇,又有正常词汇
- 使用回归网络,对两个包中所有样本进行打分,从正负包中各选得分最高者,作为正例和负例,然后最大化二者得分间隔,不断迭代…
搞懂了这一点,本文的方法就呼之欲出了,因为本文正是使用了多示例学习的方法 ,下面详述具体流程,在此之前,放主网络框图:
- 使用一个神经网络(这里用了MLP)来对每一个segments打分,然后从正例包中挑一个得分最大的segments(潜在异常样本),同样从负例包中挑一个得分最大的(非异常样本,而且是个难例,即hard instance,有利于优化分界面),用它俩来训练MLP的模型参数,采用hinge-loss,训练的效果就是模型对异常样本输出高的分,对正常样本输出低得分。
实验
数据集部分大家自己去网站上看看,UCF Crime,貌似访问不上了?毕竟是自己搞的网站,没法像企业网站一样稳定,大家理解就好,下载渠道不只官网,kaggle上貌似也有。
实验部分,首先,与SOTA比较,效果还可以,如下图和下表所示: