Generative Cooperative Learning for Unsupervised Video Anomaly Detection论文笔记

本文最后更新于:2022年9月7日 晚上

Generative Cooperative Learning for Unsupervised Video Anomaly Detection论文笔记

这篇论文是CVPR2022的一篇无监督视频异常检测的文章。视频异常检测没有明确的定义,“异常”可能指暴力行为、爆炸、枪击、逆行等,同时,异常情况出现的概率相较于正常情况较低,数据也很难收集,所以视频异常检测是一个很难的任务。这篇文章提出了Generative Cooperative Learning (GCL) ,其包含一个辨别器 (discriminator) 和一个生成器 (generator,也是一个autoencoder),它们进行合作式的互相学习来实现无监督学习。测试阶段,根据原文的实现,每16帧将会输出一个异常分数。

CVPR 2022 Open Access Repository (thecvf.com)

大致介绍

模型大图

模型整体结构如上图。

输入的无标签视频数据将会分成长度为 pp 的segment,然后使用ResNext3D进行特征提取,得到2048维的向量(不是很清楚这个特征提取模型,好像是提取之后没有时间维度了),随机的segment feature被组合成batch送入模型。

模型包含一个基于Autoencoder的生成器 G\mathcal G 和一个多层FC的辨别器 D\mathcal D。Autoencoder有编码和重构两个阶段,在训练时生成器的目的就是:对于正常数据能够很好地重构,对于异常数据不能很好重构,所以,生成器在计算重构损失时,正常数据应该损失较小,异常数据应该损失较大。生成器的损失Lr\mathcal L_r通过初始特征和重构特征之间计算MSE得到。在得到batch中每个segment的损失之后,会进行伪标签 lGq\mathcal l^q_G 的生成,根据之前的假设,设置一个阈值LGth\mathcal L^{th}_G,损失大于阈值的伪标签为异常。注意,此时得到的损失Lr\mathcal L_r并非最终的损失。

得到伪标签后,这个伪标签将监督辨别器的训练,这个没什么好说的,计算二分类交叉熵损失LD\mathcal L_D。在辨别器得到分布后,也会生成伪标签lDq\mathcal l^q_D ,设置一个阈值LDth\mathcal L^{th}_D,概率大于阈值的伪标签为异常。如下图,得到的异常的segment的重构特征将会被替换为另一个“错误的”特征,然后再与输入计算MSE得到生成器的损失LG\mathcal L_G。通过如此指定“错误的”特征,能够避免让生成器较好地重构异常数据特征,回应了之前的假设。作者把这个叫做Negative learning。

细节介绍

生成器预训练

为了获得更好的效果,生成器会使用更clean的数据进行预训练。这个更clean的数据的提取比较简单,计算fi,jt+1fi,jt2||f^{t+1}_{i,j}-f^{t}_{i,j}||_2,假如超过阈值DthD_{th}了就不使用fi,jt+1f^{t+1}_{i,j}

Negative Learning

可以用多种方式替换异常数据的重构特征:(1)全1向量 (2)均匀分布的随机向量 (3)高斯分布的随机向量 (4)不替换。

作者通过下图的实验发现全1更好。

Negative Learning

阈值选择

重构特征生成伪标签的阈值:LGth=μR+σR\mathcal L^{th}_G = \mu_R+\sigma_R

辨别器生成伪标签的阈值:LDth=μR+0.1σR\mathcal L^{th}_D = \mu_R+0.1\sigma_R

预训练的阈值:Dth=0.70D_{th}=0.70(这个真的迷惑,好诡异的超参)

本文提出的无监督学习与其他视频异常检测方法的区别

主要根据论文中Related Work进行分析。

  • 与One-Class Classification (OCC) 的区别

    OCC可见另一个[博客](One Class Classification算法简单介绍 - Kamino’s Blog)的说明。OCC在异常检测领域运用比较广泛,其需要正常的数据,不需异常数据就能进行训练。缺点是很接近正常数据的异常数据也会被well-reconstruction,并且需要的是正常的数据,不能混进异常数据。

  • 与Weakly Supervised的区别

    WS使用video-level的异常视频标注来训练,从而能够预测frame-level的异常分数。video-level的异常视频并不是说整个视频都是异常的,而是说这个视频中包含异常帧,但是并不知道具体位置。确定是也需要标签。

  • 与其他Unsupervised的区别

    作者说一些Unsupervised的方法其实是OCC,而本文是可以同时使用正常的和异常的数据进行训练。

结果比较

数据集

本次使用两个数据集,UCF-Crime和ShanghaiTech。两者都是监控摄像头下的视频异常事件数据集,UCF-Crime包含13类事件,总共有128小时,训练集包含810异常视频和800正常视频,测试集包含140异常视频和150正常视频,这个数据集的训练集包含video-level的标注,而测试集还有frame-level的标注。ShanghaiTech包含13个场景下的130中异常事件,训练集由63个异常视频和175个正常视频,测试集包含44个异常视频和155个正常视频。

整体比较

如上图,GCLOCCGCL_{OCC}指的是也和其他OCC任务一样只使用正常数据进行训练,结果比其他方法好很多。

如上图,即使与弱监督学习的方法比较,GCLWSGCL_{WS}也是comparable的。(但是这里不是很清楚WS的版本有什么变化)

SOTA了无监督的方法,GCLBGCL_B是baseline,GCLPTGCL_{PT}是进行预训练的版本。

消融实验

接下来才是重点,在UCF上进行的消融实验。

如上图,先用AutoEncoder做实验,使用所有数据的AE结果较差,使用标注出来的正常视频训练能达到65.76%AUC,而作者使用的 temporal difference的方法则能接近标注的效果,说明作者的TD方式是有用的。

其次,Negative learning的作用可以从第4、5行证实,Pretrain的作用可以从5、6行证实。

作者最后还发现OCC能够带来更好的效果,也就是说,OCC这种只用正常视频数据进行训练的也应该被看做是一种“监督学习”,而和本文提出的无监督学习应该分开。

可视化

Fig6发现使用了Negative learning的AutoEncoder更能够将红色的异常数据区分开来。Fig8是4个视频的异常分数图,第一个是正常视频,分数都很低,第二个和第三个异常视频都表现不错,而第四个视频在开始和结尾有预测失误,作者说是因为这个视频开头结尾出现了浮动的文字,这在训练集中很少见。

限制

系统是根据已有数据来进行学习的,假如以往都没有异常事件发生,那系统可能把罕见的正常事件当做异常。比如某个机器每三个月要换一次电池,前两个月的数据被用来训练模型,而模型没有见过换电池的数据,所以很容易把换电池看作异常。

没看懂的地方

作者的GCL的Weakly Supervised版本是咋改的???