摘要

监控录像能够捕捉到各种真实的异常情况。在本文中,我们提出利用正常和异常视频来学习异常。为了避免在训练视频中标注异常片段或片段非常耗时,我们提出利用弱标记的训练视频,通过深度多实例排序框架学习异常,即训练标签(异常或正常)在视频级别而不是剪辑级别。在我们的方法中,我们将正常和异常视频视为包,将视频片段视为多实例学习(MIL)中的实例,并自动学习深度异常排序模型,该模型预测异常视频片段的高异常分数。此外,我们在排序损失函数中引入稀疏性和时间平滑性约束,以便在训练过程中更好地定位异常。
我们还引入了一个新的大规模的128小时视频数据集。它由1900个长而未经修剪的真实世界监控视频组成,有13个真实的异常情况,如打架、交通事故、入室盗窃、抢劫等,以及正常的活动。此数据集可用于两个任务。首先,综合考虑一组的所有异常和另一组的所有正常活动的一般异常检测。第二,识别出13个异常活动。实验结果表明,与现有的异常检测方法相比,我们的MIL异常检测方法在异常检测性能上有了显著的提高。我们提供了最近几个关于异常活动识别的深度学习基线的结果。这些基线的低识别性能表明我们的数据集非常具有挑战性,并为未来的工作提供了更多机会。该数据集可从https://webpages.uncc.edu/cchen62/dataset.html获取。

方法

首先在训练期间将监控视频划分为固定数量的片段。这些段在一个包中创建实例。使用正(异常)袋和负(正常)袋,我们使用提出的深度MIL排序损失训练异常检测模型。
image
给定正视频(包含异常)和负视频(不包含异常),我们将它们分成多个时间视频片段。然后,将每个视频表示为一个袋子,每个时间段表示袋子中的一个实例。在提取视频片段的C3D特征[36]后,我们利用一种新的排名损失函数来训练一个全连接的神经网络,该函数计算正袋和负袋中得分最高的实例(红色部分)之间的排名损失。

多实例学习(MIL)

在使用支持向量机的标准监督分类问题中,所有正样例和负样例的标签都是可用的,并且使用以下优化函数学习分类器:

image-1687590817659
其中①为hinge loss,yi表示每个示例的标签,φ(x)表示图像补丁或视频片段的特征表示,b为偏置,k为训练示例的总数,w为要学习的分类器。

MIL放宽了具有这些准确的时间注释的假设。在MIL中,视频中异常事件的精确时间位置是未知的。相反,只需要视频级的标签来显示整个视频中存在异常。包含异常的视频被标记为正,没有任何异常的视频被标记为负。然后,我们将一个积极的视频表示为一个积极的包Ba,其中不同的时间段在包中生成单独的实例,(p1,p2,…,pm),其中m是包中的实例数。我们假设这些实例中至少有一个包含异常。类似地,负的视频用一个负的包Bn表示,其中这个包中的时间段形成负的实例(n1,n2,…,nm)。在负的包中,没有一个实例包含异常。由于正实例的确切信息(即实例级标签)未知,因此可以根据每个包[4]中的最大分数实例来优化目标函数:
image-1687590950338

深度MIL排序模型(Deep MIL Ranking Model)

在我们提出的方法中,我们将异常检测作为一个回归问题。我们希望异常视频片段比正常片段有更高的异常分数。直接的方法将是使用一个排序损失(rank loss),这鼓励了异常视频片段比正常片段的高分,例如:
image-1687591233170
其中,Va和Vn表示异常和正常的视频片段,f(Va)和f(Vn)分别表示相应的预测分数。如果在训练中知道视频片段的注释,上述rank函数应该很良好。
然而,在没有视频片段注释的情况下,不可能使用等式3.相反,我们提出了以下多实例排序目标函数:
image-1687591276051
中max是在每个包中的所有视频片段。我们不是要在包的每个实例上执行排名,而是只要在正包和负包中异常得分最高的两个实例上执行排名。正包中最高异常得分对应的段最有可能是真正的阳性实例。与负包中最高的异常得分对应的段看起来最像一个异常段,但实际上是一个正常的实例。这个负的实例被认为是一个困难的实例,它可能会在异常检测中产生错误,变成阳性。通过使用方程式4,我们想把正实例和负实例区分开。因此,我们在hinge loss公式中的排序损失如下:
image-1687591336458
上述损失的一个局限性是,它忽略了异常视频的潜在时间结构。首先,在现实场景中,异常通常只发生很短的时间。在这种情况下,异常包中的实例(段)的分数应该是稀疏的,这表明只有少数段可能包含异常。第二,由于视频是一系列片段,异常分数应该在视频片段之间平滑地变化。因此,我们通过最小化相邻视频片段的分数差异来加强时间相邻视频片段的异常分数之间的时间平滑性。通过结合对实例分数的稀疏性和平滑性约束,损失函数成为:
image-1687591369457
其中,①表示时间平滑度项,②表示稀疏性项。在这个MIL的ranking loss中,该loss从正包和负包的最大分数视频片段反向传播。通过对大量的正包和负包进行训练,我们希望让网络将学习一个广义模型来预测正包中异常片段的高分。最后,我们完整的目标函数是
image-1687591415420

实现细节

我们从C3D网络[36]的全连接(FC)层FC6中提取视觉特征。在计算特性之前,我们将每个视频帧重新调整为240×320像素,并将帧率固定为30fps。我们计算每16帧视频剪辑的C3D特征,然后进行l2归一化。为了获得一个视频片段的特征,我们取该片段内所有16帧剪辑特征的平均值。我们将这些特征(4096D)输入到一个3层的FC神经网络中。第一个FC层有512个单元,然后是32个单元和1个单元的FC层。在FC层之间使用60%的dropout正则化[33]。我们用更深层次的网络进行实验,但没有观察到更好的检测精度。我们在第一FC层和最后一层分别使用ReLU[19]激活和Sigmoid激活,并使用Adagrad[14]优化器,初始学习率为0.001。将MIL ranking loss中的稀疏性和平滑性约束参数设置为λ1=λ2=8×10−5,以获得最佳性能。
我们将每个视频分成32个不重叠的片段,并将每个视频片段作为包的一个实例。32是依靠经验设置的。我们还实验了多尺度重叠的时间段,但不影响检测精度。我们随机选择30个阳性包和30个阴性包作为一个小批次。我们利用Theano[35]在计算图上通过反向模式自动微分来计算梯度。具体来说,我们确定了损失所依赖的变量集,计算了每个变量的梯度,并通过计算图上的链规则得到了最终的梯度。每个视频通过网络,我们得到其每个时间段的分数。然后我们计算损失,如等式6和等式7、并反向传播整个批次的损失。

评估度量。
在之前对异常检测[27]的研究之后,我们使用(ROC)曲线和曲线下相应的面积(AUC)来评价我们的方法的性能。我们不使用等错误率(EER)[27],因为它不能正确测量异常,特别是当长视频的一小部分包含异常行为时。
image-1687591605768

代码复现

论文中老版本的代码已经失效,在github上找了一个重制的版本,原文中使用的c3d提取网络特征,这里使用I3D提取特征,得到的auc指标达到了83%
image-1687592123390