一直以来,异常检测都是focus on 无监督(也有说是半监督),所需要挑战的数据集多是监控视频下的行人道上的数据集,所要挑战的异常都是未见物体/异常运动(快速运动为主)。这些数据集和真实情景期望解决的危险有所差别,于是[1]提出了UCF-Crime数据集,并且引入了弱监督的多示例学习的方法进入异常检测。
本文最大贡献在于提出了一个真实场景下的异常(危险)数据集UCF-Crime。数据集总共包含有1900个视频,划分有1610个视频做训练集,其中正常占800个,异常有810个。其中它们的标记是Video-level的。而测试部分包括有290个视频,其中正常包括有150个。视频长短不一,最长的能够有976503帧,最短只有104帧。
另外打破了异常检测常见的无监督设定,选取了弱监督的设定,这能够一定程度打破现有异常检测的小数据集,也符合工业界对非真实异常(危险)检测的需求。
本文细节[CVPR 2018论文笔记] 真实监控场景中的异常事件检测 讲的很仔细,我就不过多复述。
本质上只是pretrained C3D提取特征,输入一个三层FC 网络获得预测分值,另外考虑到异常的标记是含噪的,异常事件的是有事件连续性的,因此给异常部分的预测加上了稀疏约束和时间平滑约束。而基本的loss是用了Hinge Loss.
在上文中提到的MIL设置中,正常的标记是pure的,但是异常是夹杂着正常的部分。本文引入了noise label cleaner 的做法到此,对于异常部分的标记进行一定的噪音清除,以此训练一个Action Classifier,测试时只需要使用这个classifier就能够做能够产生出一个异常分值。
以C3D为例,主要的流程包括:
训练阶段挺麻烦的,Noise Label Cleaner 和Action Classifier是交替训练的,这就需要反复的取特征/取分值(用两张1080抽特征花了我一天),然后再去训练Noise Label Cleaner。
本文最主要是提出GCN Noise Label Cleaner的模块,主要是两层FC+特征相似图GCN+时序一致性图GCN,两个GCN output经过AVG Pooling 进行混合,从而得到预测分值。
给定一个视频V,那么其所有的snippets都是一个节点,邻接矩阵$A_F$,定义如下(这本来就是self-loop,文中再加上$I_n$似乎没必要)。
然后做一个正则化的拉普拉斯矩阵
那么这个这个图卷积结果如下:
给定一个视频有T个snippets,那么构建一个时序一致性图只与$A_T$只是跟时序相关,这里利用了拉普拉斯核函数来计算两个snippet的相似性,
那么对应的时序一致性图可以表示为:
这里的loss都是指Graph Label Noise Cleaner的Loss,分为直接损失和简洁损失两个部分。
直接损失其实就是高置信度的片段的 Cross Entropy Error. 正如之前说的以10crop预测的mean作为预测标记,而其variance作为置信度。这里的就以Action Classifier预测的mean作为准确标记。
这里的$p_i$ 是指在训练阶段当中对于这一段预测的加权平均,用以平滑网络在不同训练阶段的预测结果,减少大的波动。
文中主要对C3D和TSN的进行了实验。后者包括了TSN-RGB和TSN-Flow两种,而前者总比后者性能要好。
在UCF-Crime的数据集上,经过了三次的label noise clean后的得到了最好的表现结果。其中在TSN-RGB上效果最好。
这里,本文对ShanghaiTech数据集重新的安排,训练集既包括正常也有异常,测试集亦然,从而能够做到弱监督训练。
与前面两篇不一样,没有使用UCF-Crime,并且提出了open-set的异常检测的子topic。认为由于异常是无限的,对于open-set,我们常用Metric Learning 例如Triplet Loss等,这里同样也用了Triplet Loss,同时附加上无监督的预测损失,结合Margin Learning和无监督预测来做异常检测。
本文基于Avenue、ShanghaiTech做的open-set:实际上对原来的测试集进行10-fold,取1/10测试集放进训练集,然后进行训练。认为UCF-Crime多背景/角度与现实不符(这个可从ShanghaiTech的表现大概可知,其实原有的无监督方法都倾向于固定的背景和角度。),而没有选择使用这个数据集。对于取1/10的测试集放进训练集训练的做法,然后认为仍在测试集的异常为unseen,这样的分法有些粗略,不过这三个数据集本来就没有标记异常的类别。
ConvLSTM用在异常检测也不是第一天的事了,当然之前的做法是Conv+Composite LSTM。这里换了个更强的Encoder和Decoder(将CycleGAN 的generator拆成两部分,encoder还带着三个Residual Block,使用前T帧Encoded Feature 输入LSTM,然后预测T+1帧)。相对于17 ICME[4]的模型而言,这更像CVPR 18[5]的预测未来帧。
文中同时对于Video-Level Annotation和Frame-Level Annotation进行训练。那么在Loss设置也考虑这个问题。由上图我们也可以看到,这包括了Margin Learning Loss 和 Prediction Loss。
这里只是使用了L1 Loss 来计算预测与实际的差别
这里的边缘损失,实际上是加权三元组损失,随机选取一个snippet作为anchor,然后选择一个正常的snippet和异常的snippet,从而计算这些的hidden feature的weighted Triplet Loss.
上面的公式的$S_{t+T}^*$,在Frame-Level的监督下,正常就是1,异常就是0。而在Video-Level的监督下,正常自然就是1。那么对于异常而言,首先用只有正常数据去训练一个ConvLSTM,以其Regular Score作为异常的权重;另外使用0.5作为阈值,划分positive和negative部分。
实际使用时$lambda$取1.
这里沿用了CVPR 2018的计算方法,采用PSNR来计算异常分值。
第一列的两个Future Prediction是采用不同的generator的,前者使用的是UNet,后者是ConvLSTM,在无监督设置下,其实就已经能够在Avenue上得到接近90%的表现,而在增加了10%的异常作为弱监督加入到训练后,得到了数个百分点的提升。
对比不同的generator,在与本模型同样的设置下对比其表现,发现ConvLSTM generator更优,能够获得更高的score gap和AUC.
[1] Real World Anomaly Detection in Surveillance Video, CVPR 2018. paper code
[2] Graph Convolutional Label Noise Cleaner: Train a Plug-and-play Action Classififier for Anomaly Detection paper code
[3] Margin Learning Embedded Prediction for Video Anomaly Detection with A Few Anomalies IJCAI 2019 paper
[4] Remembering history with convolutional LSTM for anomaly detection, ICME 2017 paper
[5] Future Frame Prediction for Anomaly Detection - A New Baseline CVPR 2018 paper my_blog
一家之言,难免疏漏,望不吝斧正~
本文同步于个人专栏
CV上手之路zhuanlan.zhihu.com