-
这是CVPR2018的一篇文章,主要贡献:
1.提出了一种基于多示例学习(MIL)的异常检测算法。
2.引入了新的大规模异常行为检测数据集(UCF Crime) -
Deep MIL Ranking Model
异常行为通常是很难被精确定义的。首先,异常的概念非常主观的,每个人对于异常的理解都有差别。其次,1//0标签该如何分配也需要考量。再者,我们难以获得足够多的异常样本。作者在这篇文章中把异常行为识别当做了一个回归问题,从特征向量中对异常分数进行回归,异常分数位于0~1之间,理想情况是异常行为比正常行为的分数要高。即:
但是,由于要精确的标注每个异常行为的在视频中时间位置是非常耗费时间的,所以作者提出将多示例学习应用到异常行为检测中,这种方法只需要video level的标签,即每个标签只标注视频中是否有异常,而不知道异常发生的时间。
每个视频被分割成了固定数量的segment,这些segment被看做MIL中的instance,而每个视频则看做MIL中的bag。而视频中异常分数最大的segment的分数则作为的异常分数 。所以,我们的目标函数为:
由于在现实场景中,异常事件通常只占很小的一段时间。所以,作者对异常分数引入了Sparse constraint。而视频序列的相邻instance之间的分数是平滑的,所以作者对异常分数引入了平滑约束。所以。损失函数变为:
最终的损失函数还要加上一个正则项,为:
- UCF crime 数据集
作者构造了一个新的大规模数据集来评估我们的方法。它包括13个真实世界的异常,包括虐待、逮捕、纵火、殴打、事故、入室盗窃、爆炸、打架、抢劫、枪击、偷窃、商店盗窃和破坏。之所以选择这些异常情况,是因为它们对公共安全有重大影响。这一数据集可以用来做两种任务:
1.检测异常行为,并确定异常行为发生的时间
2.检测异常行为的同时,确定异常行为的类别
作者将UCF crime 与以前的数据集进行了比较:
-
具体网络结构
这里类似于一个孪生网络,对正常视频和异常视频分开处理
1.视频被resize到240*320,帧率被固定到30fps,并分成多个instance(实验中为32个)。
2.提取每16帧的C3D特征,这里的特征是从C3D网络的FC6中获得,取这16帧特征的均值。
3.将提取到的特征输入到3个FC层,FC1共516个神经元,使用RELU激活。FC2为32个神经元,FC3为1个神经元,激活函数为Sigmoid。这3个FC层中存在60%的drop out 正则化。
4.对正常视频和异常视频中分别取异常分数最大的instance,来计算MIL Ranking Loss,实验中证明 λ 1 = λ 2 = 8 ∗ 1 0 − 5 , λ 3 = 0.01 \lambda_1=\lambda_2=8*10^{-5},\lambda_3=0.01 λ1=λ2=8∗10−5,λ3=0.01时检测效果最好 。采用adagrad对Loss进行优化。 -
与其他方法的比较
作者在这部分里将自己的方法与三种方法进行了比较。分别是
1) Lu et al. 提出的基于字典的方法
2)Hasan et al.提出的基于自编码机的方法
3)直接利用二分类SVM
利用 frame based receiver operating characteristic (ROC)曲线和对应的曲线下面积(AUC)来评价该方法的性能。不使用等错误率(EER),是因为它没有正确地测量异常,特别是当长视频中只有一小部分包含异常行为时。
可以看出,这种方法在保证低的虚警率的同时,取得了良好的检测性能。 -
检测效果示例
(A)-(D)播放四个带有异常事件的录像。该方法通过为异常帧生成较高的异常分值,为异常帧的检测提供了成功和及时的方法。(E)和(F)是两个正常的视频,整个视频中产生低异常分数(接近0),对两个正常视频产生零虚警。
(G)和(H)为说明了两个失败案例:
(G)是一个含有入室盗窃事件的异常视频(通过窗户进入办公室的人)。由于现场的黑暗,没有检测到异常部分。此外,它产生虚假警报主要是由于飞行昆虫在镜头前遮挡。
在(H)中,由于突然聚集(在街上观看接力赛),模型产生虚警。可能是这个方法不能检测群体性的正常行为。
- 用UCF Crime做行为识别
作者使用了两种方法来对这个数据集做行为识别:TCNN和C3D。由于数据集中都是未剪辑的长视频,并且类内变化很大,所以这两种行为识别方法表现很差。