Real-world Anomaly Detection in Surveillance Videos解读与实现

解读
(1)文章思想:
此文是在弱监督下训练的,具体而言,就是在一段视频中,只关心是否有异常事件的存在,而不关心具体的异常类型以及异常发生在哪些帧内。
基于此,文章的主要实现过程为:
Real-world Anomaly Detection in Surveillance Videos解读与实现_第1张图片
首先,使用C3D提取视频特征,文章以32帧为一个bag进行处理。
C3D提取视频时空特征是由Facebook团队提出来的。此文章使用公开的C3D预训练模型提取视频特征,然后将提取好的特征拿出来,送到三层全连接层中,计算异常得分,根据异常得分,预测是否发生异常事件。
(2)文章主要卖点:
1,数据集
本文公开了一个新的异常检测的数据集UCF-Crime,为以后异常事件检测的发展起到重要推动作用。
2,创新点
提出深度MIL排序模型,作用在后面那3层全连接层中。
首先解释一下多实例学习(MIL)。平常的深度学习训练都是一个样本对应一个label,而在MIL中,出现bag这个概念,一个bag对应一个label,一个正bag中至少需要有一个正样本,一个负bag中只能全部是负样本,而一个bag中,包含有多个样本,所以叫多实例学习,此文中,一个bag中包含有32个样本。
此文中,将异常检测当做一个回归问题。既主要是回归异常得分值。此文将损失函数定义为异常事件与正常事件异常值的排序。即认为异常事件的异常得分一定要高于正常事件的异常得分。即
在这里插入图片描述
其中,Va表示异常bag,Vn表示正常bag,f()表示模型。因为在bag中不清楚每个具体样本的label,但是一定存在正bag中最大的异常得分一定大于负bag中最大的异常得分,所以有
在这里插入图片描述
为了使正负样本尽可能的远,文章采用hinge-loss(铰链损失)损失函数。
在此,稍微介绍一下hinge-loss损失函数。
首先,Hinge-loss的函数原型为:
在这里插入图片描述
常用于间距最大化的问题处理上,表示当正确分类,loss就为0,否则为
在这里插入图片描述
回到此文中,那么此文的损失函数就可以写成:
在这里插入图片描述
然后在此损失函数表达式中加入平滑约束与稀疏约束,则可以写成下面的式子:
Real-world Anomaly Detection in Surveillance Videos解读与实现_第2张图片

防止模型过拟合,在损失函数后面还加上L2正则,所以最终的损失函数为:
在这里插入图片描述
实现:
(1)使用C3D-V1.0提取视频特征
1,在服务器上编译C3D-V1.0
①下载C3D-V1.0:https://github.com/facebook/C3D/tree/master/C3D-v1.0
②进入下载保存到本地的C3D-V1.0目录,备份Makefile.config.example文件。
在终端,输入 cp Makefile.config.example Makefie.config
③ 编译C3D-V1.0
在终端,输入 make -j8
如果没有出错,就编译成功了,如果出错了,仔细查看出错提示,一般而言,Makefie.config中,opencv 版本不对,将注释的OPENCV_VERSION := 3打开即可。
2,提取视频特征
① cd /home1/dj/C3D-v1.0/examples/c3d_feature_extraction 将目录更写到c3d_feature_extraction这一级,让后直接 sh c3d_sport1m_feature_extraction_video.sh
3,提取视频特征过程中踩的坑
①打不开视频文件
Real-world Anomaly Detection in Surveillance Videos解读与实现_第3张图片
这种情况,原因可能来自视频编解码器,确保已编译OpenCV和Ffmpeg并打开了共享标志。
首先查看是否安装了opencv和ffmpeg,在命令行中输入
pkg-config --modversion opencv 查看opencv版本号,ffmpeg -version 查看ffmpeg版本号。
Real-world Anomaly Detection in Surveillance Videos解读与实现_第4张图片
如果都已安装,则表示视频解码器出了问题。
②显卡型号不匹配
Real-world Anomaly Detection in Surveillance Videos解读与实现_第5张图片
根据自己显卡类型,查询对应的计算能力,比如我这服务器上用的显卡是1080Ti,所以我将makefile.config作了点修改。
Real-world Anomaly Detection in Surveillance Videos解读与实现_第6张图片
③数据不要太满,比如,如果总共数据有370张,17张一组,不要使用到369张,会报以下错误,解决的办法即删掉一组数据,就只用到353张,重新运行,就ok了,具体原因,还不知道。
Real-world Anomaly Detection in Surveillance Videos解读与实现_第7张图片
4,这样就将你自己的视频或者图像的特征用C3D提取出来了。
Real-world Anomaly Detection in Surveillance Videos解读与实现_第8张图片
其中,后缀fc7-1, fc6-1 ,prob分别表示fc7-1层保留的特征, fc6-1层保留的特征和prob层保留的特征。
(2)使用matlab整合C3D提取出来的特征
在Save_C3DFeatures_32Segments.m中配置好3CD特征路径和最终保存txt文件的路径,运行程序即可。
Real-world Anomaly Detection in Surveillance Videos解读与实现_第9张图片
一段视频的特征最终融合在一个txt文件中。
Real-world Anomaly Detection in Surveillance Videos解读与实现_第10张图片
融合特征过程中踩过的坑:
在Save_C3DFeatures_32Segments.m设置3CD特征路径的时候,只能设置到实际放特征的倒数第二层路径,比如我这设置的是:
Real-world Anomaly Detection in Surveillance Videos解读与实现_第11张图片
但是实际我放C3D特征的路径是:
Real-world Anomaly Detection in Surveillance Videos解读与实现_第12张图片
(3)使用python,运行最终的异常检测demo。
我用的AnomalyDetectionCVPR2018-master下载路径:https://download.csdn.net/download/jiafeier_555/10823952
1,将融合的特征和相应视频放在同一目录下
Real-world Anomaly Detection in Surveillance Videos解读与实现_第13张图片
2,安装好import中需要的各个包,在运行Demo_GUI.py中设置好各个相关路径,运行即可。
Real-world Anomaly Detection in Surveillance Videos解读与实现_第14张图片
这里有一个峰,表示视频中出现一件异常事件。

你可能感兴趣的:(深度学习,视频)