最近准备对有关基于GAN的视频行为异常检测的一些论文进行详细阅读,顺便做个笔记~
这篇文章是来自ICIP2017的文章,属于比较老的文章了。
论文地址:https://arxiv.org/abs/1708.09644v1
其是受到了图像转换的启发,通过比较原始帧与其optical-flow的转换差异来判断异常,也是属于重构这一方法下的,以及使用了两个CGAN。接下来就详细记录一下阅读该论文的笔记。
主要思路
该论文主要的思想是使用视频正常帧和相应的光流图对GAN进行训练,因为仅使用正常数据进行训练,所以生成器无法重构出异常事件。在测试的时候,将GAN重建的外观和运动进行比较,通过计算局部差异可以来检测异常及其所处的区域。
学习正常行为
学习正常行为的过程其实就是训练模型的过程。该论文主要采用的是两个CGANs作为其主要模型,其中设为训练视频第t帧图片,为相应的光流图。
学习分为两个网络:和。前者是输入视频帧图像生成对应的光流图,后者则是输入光流图生成其对应的视频帧。该两个网络都是条件GANs,其CGANs中的生成器(G)输入一张图像x以及噪声向量z(通过噪声分布Z中采集),输出一个与x相同维度但通道数不相同的光流图像。举个例子,在中,输入x来自于,并且p是其对应重构的光流图像y=。对于鉴别器(D)来说,D输入(x,y)或者(x,p),输出为一个标量,代表了图像来属于真实数据的概率。
训练G、D的损失函数主要包括两个:
第一个损失函数是重构损失,保证生成图的图像与真是图像尽可能的相似
第二个损失函数则是训练GAN的损失函数
训练结束后,由于训练时是使用的正常行为的数据,所以其对正常行为有重构能力,但对
异常不具备重构能力。所以当测试时遇到了异常的视频帧,其不能很好的重建异常区域,正是利用了这个“缺陷”,可以把异常及其所处的异常区域检测出来。
异常检测过程
具体过程用上图来解释。
在图1中的top过程中,输入了一张拥有异常事件的图像F(有小车行驶),在通过训练好的GANs中后,输出其对应的光流图(注意,这里的GANs不是用来和输入图像F相似的图像,而是生成对应的光流图),然后计算误差。真实光流图与重构光流图之间的差异无法通过训练好的重构,因此可以看到生成出来的光流图中是没有小车的光流图像的。
在Bottom,输入图像F对应的真实光流图O,再通过后,生成出来其对应的视频帧图像,然后将F和经过CNN提取相关语义信息(这里作者使用的是在ImageNet中已经训练好的AlexNet的前五层卷积层作为语义提取器(不包括pooling))后做差异:,然后对和进行相应的归一化(这里省略这些细节),变成以及,再将二者进行加权相加即可得到最后的异常热力图:,其中作者设置为2.结果如下:
实验结果
在UCSD表现得结果很好,ped1 97.4%、ped2 93.5%
个人收获
最近的课题定为了行人异常行为检测,这应该算是特别偏向应用的领域了,这篇文章利用了cGANs对正常图像的重构来检测异常,算是比较主流的方法。但这篇文章只在UCSD上做了效果对比,UCSD数据集行人所占的比重很小,人与人之间也有足够的间隔,使用光流信息能够很好的区分每个行人。并且异常通常是比较明显的,比如骑自行车,汽车经过等。对于其他数据集作者没有公布其性能,可能也是因为结果不好吧。
总得来说,算是复习了一下cGANs(前几天看GAN的时候正好看到了),以及基于重构的异常检测,可以加固对这方面的印象。下一篇论文准备阅读
Robust Anomaly Detection in Videos Using Multilevel Representations(MLAD网络)
这篇文章也是利用了两对cGANs,但引用了CAE来进行重构。