知行编程网知行编程网  2022-05-13 17:00 知行编程网 隐藏边栏 |   抢沙发  204 
文章评分 1 次,平均分 5.0

视频异常检测:预测未来帧 Future Frame Prediction的3个缺陷

来自 | 知乎    作者 | 曾伊言
https://www.zhihu.com/people/ceng-yi-yan-8
本文仅作交流,如有侵权,请联系删除

视频异常检测:预测未来帧 Future Frame Prediction的3个缺陷

paper:https://arxiv.org/pdf/1712.09867.pdf
tf_code:https://github.com/StevenLiuWen/ano_pred_cvpr2018
pytorch_code:https://github.com/fjchange/pytorch_ano_pre

我要说的是: 这篇论文提出的基于对未来帧的预测实现的视频异常检测的方法有缺陷,希望以下内容可以明确后续工作的着力方向。封面图提及的3个缺陷如下。
检测上的缺陷:
  1. 许多正常事件也是不可预测的,因此误报率会非常高。(如:夜间有一辆车打开、关闭了车灯,开灯前后画面PSNR变化极大。一辆正常行驶的车辆突然闯入了镜头,闯入前后画面PSNR变化极大。)
  2. 当异常事件占画面的面积过小,那么对应的PSNR变化量也会变小。小画幅的异常事件召回率会非常低。(一个人持枪抢劫商铺,异常画面面积占比过小,导致PSNR变化不明显)
工程实现上的缺陷:无法抽帧检测,算力消耗大。
如果你是做工程的,那么请你先选取适合它的使用场景,在降低它对算力的要求后,再做进一步的工作。虽然这篇文章在 CUHK Avenue,UCSD Ped1 Ped2 以及 toy dataset ShanghaiTech 上面表现得好,但是换到 UCF Crime 这种更加接近真实监控视频的数据集上就不行了,我得到的ROC是对角线。
如果你是做科研的,那么我希望你能先降低它的误报率,然后提高它在小画幅事件上的召回率。同时我也有3点建议: 第一,一些太简单的数据集不适合视频异常检测(CUHK Avenue,UCSD Ped1 Ped2 以及 toy dataset ShanghaiTech)。第二,基于对未来帧的预测实现的视频异常检测有重大的缺陷,如果你能解决这个缺陷那就太好了,但是请用更有说服力的数据集(如 UCF Crime)去验证新的算法。
以下的正文有更详细的分析。能成为 CVPR 2018 Poster的文章不至于有这么多的缺点,所以我对上面我的看法也一直抱有怀疑(也许ROC变成对角线是我技不如人,复现能力差导),如果下文有错误,还请大家指出。


   此论文的方法

想要完整查看整篇文章介绍,可以看@Kiwi【1】CVPR 2018:预测未来帧以检测异常(复现很方便,TensorFlow、PyTorch都有)【2】 关于论文使用了对抗网络(GAN)去做预测的细节如下:(以下内容整理自上面的论文阅读笔记)

随机切下5帧,以4帧预测最后一帧
使用对抗网络去生成图片(判别器用的是Patch GAN)
Objective Function 是 Intensity loss(RGB亮度差的平方) Gradient loss(边缘梯度) optical flow loss(光流),以及 Adversarial loss(对抗损失)

1.1 这篇文章的思路
以下内容的复制来源是@orli【3】Future Frame Prediction for Anomaly Detection – A New Baseline[arxiv,cvpr2018]【4】
由于异常事件样本难以获取以及穷举,传统方案多只使用正常样本进行半监督训练。
大部分基于深度学习的方案使用自编码器结构模型:对当前视频帧进行重构,根据重构误差检测异常。作者认为该类方案效果不理想,自编码器具有强大的重构能力,可能依然能较好重构出异常画面(输出较小的重构误差)。
作者指出:异常检测应该从预测角度考虑。当前基于CGAN的视频帧预测模型已取得较好的发展,在该文[1]基础上进行修改。

1.2 这篇文章的亮点
以下内容的复制来源是@另半夏【5】[cvpr18]视频中异常检测【6】
今天解读的这篇论文是cvpr18年的一篇poster,来自上科大高盛华老师团队。
该文章的主题就是在encoding-decoding的基础上,摒弃之前的重构误差,使用预测误差。文章亮点有以下:
1. 使用预测误差,强调异常行为的不可预测性
2. 使用gan保证重构的图像逼近真实图像
3. 使用flownet来产生光流,速度快。
全文思路不复杂,但是给人感觉是非常扎实有效
我在论文中使用的数据集上面得到了与论文相符的实验结果(特别是里面提出的 toy dataset ShanghaiTech)。然而,当我把数据集换成 真实监控视频数据集重新进行训练时(UCF-Crime 104G 曾伊言:真实监控视频异常检测数据集 CVPR. 2018. 与注意事项)【7】得到的ROC几乎是一条对角线,这是非常差的结果
我在UCF-Crime中的车祸视频中,挑选出没有分镜切换的视频,然后标记出发生事故的视频片段,最后用论文提出的方法进行训练。

   两个缺陷

我也认为异常检测可以从预测角度考虑,我在复现前,这篇基于未来帧预测的文章给我的感觉也是扎实有效。但是这个方法在其他数据集上的复现结果非常不理想。这让我不得不在事后思考这个方法无效的原因。我查看了复现结果,并找出了此方法的两个缺陷。


2.1 许多正常事件也是不可预测的,因而误报率高

我截取了可以说明缺陷的视频片段,如下:
  1. 车灯亮起,车灯与车灯前方区域被照亮
  2. 生成器的预测帧无法预测到这种变化,生成车灯不亮的预测帧
  3. 对比预测帧(生成图片)与实际帧,得到的PSNR下降非常明显
  4. 判定真实帧与预测值差异较大
  5. 因此认为异常事件发生。
视频异常检测:预测未来帧 Future Frame Prediction的3个缺陷
在我们的训练中,车灯突然亮起是正常事件,无论是顶尖人类还是顶尖生成器都无法预测下一帧车灯是否亮起(或熄灭)。但是我们可以确定的是:无论车灯是否亮起,这都是正常事件。然而,这两个可能的未来帧他们的PSNR差别太大了。这是存在于所有基于未来帧预测的方法的最致命缺陷。
基于未来帧预测的方法「强调异常行为的不可预测性」,但是他们忽略了「正常行为的不可预测性」。即便存在一个最优的生成器,它也只能生成一张图片,面对上面的车灯难题它还是会误报。


2.2 当异常事件占画面的面积过小,那么对应的PSNR变化也小

我截取了可以说明缺陷的视频片段,如下:
下面两帧是都虐待老人的视频,黑衣女子伸手击打老人,令人气愤。图中异常的“区域”只有黑衣女子的手与受虐老人的头部,面积非常小。(尽管这篇文章的生成器并没有测出发生异常的区域)即便存在一个最优的生成器,它完美地生成了下一帧图片,这张图片只有异常区域与实际帧不同。然而,由于异常区域的面积实在太小了,因此反映到PSNR时,这种变化依然无法被我们检测到。
视频异常检测:预测未来帧 Future Frame Prediction的3个缺陷


2.3 其他负面例子

上面举出来的例子只是沧海两粟(毕竟这个算法具有接近对角线的ROC),下面提及的都会误报、漏报,我就不一一截图了:
  1. 图中有突然变化的正常物体。如:闪烁的车灯,弹开的雨伞,变色的交通灯。
  2. 有快速闯入镜头的正常物体。如:快速行驶的车辆(这个物体上一帧不存在于镜头内,而下一秒它却出现在镜头里)。
  3. 画面急剧变化。如:闪烁的路灯,突然挡住镜头的昆虫(论文自己也提到了),云台镜头移动,摄像机的画面自动调节过程。
  4. 少见的正常行为。如:打开的门,东西掉了回头捡东西的行人。
  5. 异常行为画幅过小。(如:掏出来的枪,打人的手)


   总结与改进

3.1 它的优点

当然,如果缩小适用场景,那么这个方法还是能找到用武之地。我相信这个方法适用于:
  • 社区白天的固定摄像头,人类打架,有人开枪(它不曾在打架、枪击数据上训练过)
  • 通道关口的固定摄像头,有人不按规定骑车、跳舞、打球(这一类画幅大的异常行为)
大部分基于深度学习的方案使用自编码器结构模型(Auto-encoders AE):对当前视频帧进行重构,根据重构误差检测异常。作者认为该类方案效果不理想
优点似乎没有,我找不到任何一种场景是它有优势的。上面的适用场景,在只有在正常视频做训练数据时,用AE也能做。

3.2 它的缺点
这个基于未来帧预测的异常行为检测方法,会误报突然发生的正常事件,会漏检画幅小的异常事件。如果这两点没解决,那么我可以预见:不可能有基于此方法的项目能够落地。基于未来帧预测的异常行为检测方法是先天不足的。这个方法不适用于:
  • 云台摄像头缩放、转动前没有提醒它
  • 夜晚,红外摄像头(有灯光影响的)
  • 画幅小,不明显的异常行为(掏出来的枪,打人的手)
  • 帧率低的摄像头
  • 对算力要求较高,无法进行抽帧检测
这个算法不适用于帧率较低的摄像头,并且它对算力要求较高,无法进行抽帧检测
根据重构误差检测异常的方法(Reconstruction Error, 下面称为RE)可以通过“抽帧检测”的方法降低对算力的要求:比如我一秒钟采集一帧进行检测。而论文提出的方法(Future Frame Prediction, 下面称为FFP)无法进行“抽帧检测”(例如:无法一秒抽一帧)。理由如下:
3.2.1. 未来帧预测绝对无法检测出静止的异常画面(而重建法没有这个缺陷)。未来帧预测的方法有这个缺陷的原因是:对于接近静止的画面,生成器将会生成一张与输入图片相同的预测图片
在真实监控视频中,存在着大量静止的异常画面,如下:
如果是训练良好的RE方法,在抽到Nn时,重构误差小,抽到An时,重构误差大。如果是训练良好的FFP方法,那么抽到 N1时,它生成了出接近N2的图片,PSNR很大,抽到N2时,它生成的N3与A3不相同,则PSNR下降。以上都是正常的。然而,在抽到An时,我们无法保证相邻的两张An有足够的差异。因此FFP无法抽帧。前面章节2 提到了这个方法在算法设计上的先天缺陷,这里提到的这个缺陷,是工程实现上非常关心的,即便这个算法预测精度高,要是落地的时候需要用30fps去检测的话,估计做工程的人也不会选这种方法,况且这个算法的预测精度也不高。
3.2.2. 随着抽帧间隔的增加,对未来帧预测的难度逐渐增大。因此,从这个角度讲,增大抽帧间隔,重建法不会受到影响,而未来帧预测方法会受到影响,尤其是误检率将会升高。
我本来只想写第2.1章的,没想到仔细分析后发现它的缺点越写越多。


3.3 改进方案

针对快速闯入镜头的正常物体,我有非常简单的改进方案,即:忽略所有在画面边缘的事件,对比PSNR时,我们只选取画面中央进行对比。
针对上面提及的其他科研上、工程上的缺陷,我目前想不到改进方案。

能成为 CVPR 2018 Poster的文章不至于有这么多的缺点,所以我对上面我的看法也一直抱有怀疑,如果上文有错误,还请大家指出。

但是请不要私信,因为我认为有价值的讨论应该让所有人都能看到。知乎上类似的排雷文也曾经帮助过我,因此我也需要为社区做贡献。

   回复评论
很感谢论文的作者@罗伟鑫【8】的回复,下面是我的回复:
“ucf crime我们跑过都是50%的auc,不可能有效的,原因很简单,镜头晃动和切换,所有方法都会失效”——未来帧预测论文作者(可以在评论区看到作者的全部回复内容)
我也认为未来帧预测在“镜头晃动和切换”下会失效,并且我还认为在排除了“镜头晃动和切换”后,它依然会失效。因此,为了排除镜头晃动与切换的影响,我手动对UCF Crime数据集进行了筛选,被选中的都是没有镜头切换、没有镜头晃动的视频片段。选择了异常事件中“RoadAccident”的这个类别。(视频长度为2小时)、并从正常视频中筛选出了含有车辆的户外视频片段。(视频长度为37小时)。使用未来帧预测得到的ROC如下:
视频异常检测:预测未来帧 Future Frame Prediction的3个缺陷

ROC,x轴为FalsePositiveRate,y轴为TruePositiveRate。橙色:基于未来帧预测、蓝色:I3D+RNN+Regression、浅蓝色:I3D+RNN+Regression + 更多训练数据

可以看到,与上文的分析符合,由于存在一些不可预测的正常事件,所以橙色曲线(基于未来帧预测)右上角接近对角线(完全失去判断能力)。橙色曲线只需要正常视频作为训练数据(优势),而蓝色的曲线还需要异常视频作为训练数据,蓝色曲线见曾伊言:CVPR.2018真实监控视频异常检测的论文复现与98G数据集UCF-Crime的注意事项【9】
“实时性:抽帧应该无论是重建还是ffp都可以做吧?不太懂你说的ffp不能一秒抽一帧?”(省略部分内容,未来帧预测论文作者的完整回复内容在评论区可见)“对于静止的异常,预测会失效,包括重建也会失效,可以参照双流法或者我iccv的拓展tpami里面的双流法,都是apperance和motion两个决策器,最后融合,motion用ffp,appearance用重建的即可”
因为未来帧预测(FFP)对于静止的异常会失效,因此ffp无法抽帧预测,详见上文“3.2.1. 未来帧预测绝对无法检测出静止的异常画面(而重建法没有这个缺陷)、3.2.2. 随着抽帧间隔的增加,对未来帧预测的难度逐渐增大。”

对于静止的异常,重建法不会失效。

参考文献

【1】https://www.zhihu.com/people/feng-jia-chang
【2】https://zhuanlan.zhihu.com/p/53071846
【3】https://www.zhihu.com/people/zhu-yi-lin-4
【4】https://zhuanlan.zhihu.com/p/37703721
【5】https://www.zhihu.com/people/xi-dian-a-peng
【6】https://zhuanlan.zhihu.com/p/39165190
【7】https://zhuanlan.zhihu.com/p/98928534
【8】https://www.zhihu.com/people/luo-wei-xin-23
【9】https://zhuanlan.zhihu.com/p/98928534


<pre style="max-width: 100%;letter-spacing: 0.544px;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-right: 8px;margin-left: 8px;max-width: 100%;white-space: normal;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;widows: 1;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong>完<strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong></span></strong></span></strong></section><section style="max-width: 100%;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-right: 8px;margin-bottom: 15px;margin-left: 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></section><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 1.75em;letter-spacing: 0px;box-sizing: border-box !important;overflow-wrap: break-word !important;">一文通俗了解对抗生成网络(GAN)核心思想<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p><section style="margin-bottom: 5px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">MIT最新深度学习入门课,安排起来!</span><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></section><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 1.75em;letter-spacing: 0px;box-sizing: border-box !important;overflow-wrap: break-word !important;">图深度学习入门难?这篇教程帮你理清楚了脉络<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;line-height: 1.75em;letter-spacing: 0px;box-sizing: border-box !important;overflow-wrap: break-word !important;">五分钟了解机器学习十大算法<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 1.75em;letter-spacing: 0px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">谷歌出现新冠肺炎确诊病例,限制员工出行;比尔·盖茨:可能成百年不遇的大流行病</span><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p></section></section></section></section></section></section></section></section>

视频异常检测:预测未来帧 Future Frame Prediction的3个缺陷

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

你可能也喜欢

热评文章

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享