文章目录
论文:Unsupervised Anomaly Detection for Traffic Surveillance Based on Background Modeling
代码:https://github.com/NVIDIAAICITYCHALLENGE/2018AICITY_MCPRL
1 论文背景
近年来,在交通监控视频中检测异常车辆的需求日益增长。然而,这项任务的最大挑战是缺乏用于训练监督模型的标记数据集。通过检查异常车辆的相似性发现,如果车辆在视频中静止较长时间,则将其标记为异常车辆是合理的。利用这一特性,论文提出了一种新的基于背景建模的交通监控无监督异常检测方法,该方法在不依赖标注数据的情况下,在处理异构场景和极低分辨率视频方面具有很大的潜力。
作者实现了将传统的背景建模与深度学习网络相结合的新方法,且优势明显:无监督。
2 交通异常检测系统框架
这里的系统由3个模块组成。
首先使用MOG2进行背景建模,去除移动的车辆作为前景,同时保留停车车辆作为背景的一部分。
传统方法一般是去追踪车的轨迹,通过轨道判断车辆是否异常,但这种会受到光线、天气、视频质量的影响。
考虑当车辆撞车、抛锚,相关车辆应停留并成为背景的一部分。这样也就把复杂的问题转化为简单的检测问题。
但是作者在考虑设法消除红绿灯以及摄像头移动问题方面的解决方法上好像没有非常合理,在下面的决策模块给出了异常判定过程的算法流程:
- 等待红灯,如何与事故停车区分?
论文指出红灯时间最长为30s时,则30s以下的静止认为是正常,反之异常。笔者认为仅仅去观察30s的静止而不做其他判断不适用于所有情况。 - 车辆拥堵时导致的大量车辆停滞在背景中又该如何决策?
论文指出背景建模的更新速率为120帧(帧率为30时对应4s视频),但笔者认为不适用于真正的拥堵情况。
检测模块由Fast-RCNN检测器和基于VGGNet的分类器组成。
利用Fast-RCNN进行多尺度检测以发现图像中尽可能多的车辆(因为车辆尺寸不同),对于可能出现的假阳性检出率高的问题,使用VGGNet作为一个分类器来降低,然后利用NMS去除来自检测模块不同分支的重叠框。在检测静止车辆这里应该没什么问题。
决策模块:根据检测模块得到的结果来判断是否发生事故。
在该算法流程中,主要是看对保存的车辆信息 I 的更新条件及异常判定条件(有一些需要注意的是,背景建模是T=120帧更新一次,检测模块检测的是背景帧,将背景帧中的检测框作为本决策模块的输入) :
- 第4行判断:之前保存的所有信息中有与当前背景帧检测出的静止车辆框位置相交大于0.5的框并且当前帧与上一次更新该框的信息时间小于5s就认为是同一辆车,可以更新信息,(笔者认为背景帧之间在视频帧率为30fps的情况下相差4s,因此该5s时间判断无必要);另外第2个判断是为了避免当相机移动后由于位置信息的改变导致的信息无法更新而产生程序认为的“新的异常”,设置了15s的时间,当某个信息15s还没有被更新,则去根据resnet50提取特征如果当前信息与保存的信息中某个信息L2距离小于0.9,则可以认为是同一个异常,这点在对抗相机抖动方面还是挺实用的,不过15s的时间大约是更新4次背景帧,可以作为可调参数。
- 第11行i_temp为空的判断一般有两种可能情况:1)当前背景帧检测出的静止车辆信息在原信息库里没有对应,在背景帧的第一帧需要首次设置信息;2)由于相机抖动导致的信息移位,且时间在5-15s之内,还未引起程序注意。
- 第16行判断笔者认为信息持续时间超过30s包含于更新频率大于25(相当于120帧/30fps*25约100s),作者认为红灯30s为潜在异常时间的开始,而100s为100%异常的开始,因此该判断笔者认为过于简单粗暴。(但笔者目前并不确定的是,论文中没有提到对原视频的每一帧进行检测并决策还是抽帧决策,因此该更新频率是否包含30s是笔者无法确定的,也可能是笔者知识储备有限,目前存疑,确定之后会再修改)
作者为了获得更准确的时间戳,在确定异常后,返回原始视频中先前帧中的异常车辆A,得分为0.3或更高,设置了一个以异常车辆为中心的7W×7H大小区域,其中W×H是车辆大小。然后在该区域重新运行检测模块,从一开始就反过来检测车辆A′。当先前检测到的A和重新检测到的A’之间的IoU大于0.5时,将它们视为同一车辆,并将异常车辆A′在原始视频中7W×7H区域消失的时间设置为该异常的时间戳。这在一定程度上可以更接近异常发生时间,但是是消失在7W*7H的异常区域的具体时间,这个异常区域的设置也可以作为可调参数。