c67cdabd4b747f606c07d4c452393ea7.png

paper code

1. Overview

视频异常检测很多依赖于像素级的表观和动作特征,这也会使模型对于噪音敏感,且与背景有较大的相关,而背景的冗余信息会增加模型的负担。另外异常检测追求可解释性,检测异常也想知道异常的触发的原因。

在姿态检测已经较为成熟的现在,结合姿态估计,抽取skeleton,对skeleton进行规律学习,那么异常检测部分就能大大降低负担(当然姿态检测端就比较重,但这不是我们关注的重点)。对于skeleton就可以利用常用的Composite-LSTM,这里特别在于使用了两个LSTM,分别做个体和场景下的个体间关系的重构与预测,之间还做了message-passing串联在一起。相对于像素级的模型利用高维度的带有大量冗余信息的模型相对比,基于低维度且信息密集的skeleton能更为高效。

2. Framework

2.1 Skeleton Motion Decomposition

2a19393bf3e2190dbc9f44bc0bd69482.png

考虑到如果个体与监控摄像头的距离会导致个体的大小差异,远的个体容易直接被无视,这里文中对个体动作的局部与全局解耦,其实也就是将每一个skeleton(x,y) 从基于帧绝对坐标转化为以自身中心的相对坐标(local),那么其自身中心就是global,当然这还需要加上宽和高才能将相对坐标于帧坐标的转换,那么$f^g_t=(centre_X,centre_y,w,h)$ ,而w,h与个体在场景的位置,距离摄像头的远近有关。解耦后,global上可以将个体视作一个点,对场景下多个个体进行建模,而local则可以针对个体运动进行建模。

2.2 MPED-RNN

考虑到即使局部运动,但是其假装运动实际全局静止应当也被视为异常,也就是说,local和global之间的关联也应当在保持,当关联被打破应当视为异常。

f1a4ded783ae6d4e4a46b3b26246435d.png

这里将composite-LSTM的LSTM unit替换为GRU(GRU的计算代价更小)。无论是Global或是Local都是由3个GRU组成,而composite-LSTM包括有Encode,Reconstruction, Prediction三个部分,而message passing part其实就是以GRU t-1时刻的隐状态的经过一层FC的输出。

2.2.1 Encoder Part

  1. 初始化状态为NULL
  2. t=1,2,...T,

3a3d8b50cf1d2f8690f81501942dc6b6.png

2.2.2 Reconstruction Part

  1. 初始化为$h_T^{gr}=h_T^{ge} , h_T^{lr}=h_T^{le}$
  2. t=T,T-1,...1

f7d3bcbfb886e807ff083a5e4f4c1f48.png

2.2.3 Prediction Part

类似Reconstruction,

  1. 初始化为$h_T^{gp}=h_T^{ge} , h_T^{lp}=h_T^{le}$
  2. t=T+1,T+2,...T+P,

0dd87389e478e619139543aa486d5b35.png

2.3 Training

2.3.1 Sampling

由于个体在场景中的运动包含若干多帧,为了方便训练,使用sliding windows来采样。

2.3.2 Losses

Loss也很简单,只是坐标的重构和预测,那么loss就是基于生成坐标与实际坐标的的MSE,但是考虑到global, local之外更关键的是还原到帧的全局坐标,所以又引入了一个还原后的坐标的MSE。所以loss分为三部分,localglobalperceptual

70f57ccf711d3c150f81f385e414d735.png

20d35c23f040b0ff41b6478d447439f7.png

2.3.3 Regularization

由于AEs模型能力过强,容易无法保证模型对正常和异常的还原能力不同,所以引入正则来限制模型的能力。本文在于寻找一个最小的隐向量同时保证模型的能力。通过从训练集划出一部分做验证集,将模型从high capacity训练,记录其lowest validation loss,然后逐步降低capacity来寻找适合的网络。

2.3.4 Detecting

  1. Extract segments: 从轨迹中采样出包含A个体的segments
  2. Segments losses: 经过MPED-GRU,计算每一个segments的三个loss
  3. Skeleton anomaly scores:对于包含有$f_t$,求多个segments下$f_t$的平均异常分值,

c07a3c00ae1efeeba19ace2ed4256f89.png
  1. frame-level anomaly scores:一个帧下可能有多个个体,那么该个体该时刻最大的异常分值即为此帧的异常分值。

7ba330830beb8f45718100d28b3b5dc9.png

2.4 Datasets

  1. 采用Alpha Pose 来提取skeletons
  2. 利用光流和skeletons来对相邻帧的skeletons进行配对。
  3. 提出测试集中异常与人无关的事件,产生HR-ShanghaiTech, HR-Avenue

3. Experiments

70cdbdc2de9f008a6238401b2c6faa5d.png

只是比较AUC的话,HR-ShanghaiTech的75.42%,HR-Avenue的86.31%是看起来不错,但是对比起Precision Recall-AUC就有点惨不忍睹了:

HR-ShanghaiTech 66.17%, HR-Avenue:66.25% (by evaluatint pretrained model released on github)

dd608aef0996b9468ea8c88ad4a815bc.png

这里主要在于对比出message passing的作用。

predict 和 ground truth 还是会有一定差异,但是其差异相对来说较大动作的异常小。

128f966480bc2bdc49970c65d72ca180.png

无论是基于object 还是基于skeleton,detection 都会影响实际的结果,玻璃/镜子带来的错误检测,或者检测失准都会影响模型的能力。

c78ada890933299876f3882a14c8c04d.png

4. Discussions

  1. 这篇文章将异常检测引入human-related的概念,提出skeleton based的异常检测方法,为可解释指出了一个方向
  2. 同时文章对ShanghaiTech、Avenue清洗出human-related part,也把skeleton和trajectory都已经生成好,可以供后续使用。
  3. 模型的AUC或许美丽,但是PR-AUC却是较低,这说明模型实际仍然存在问题,有改进的空间。另外Composite-LSTM的是否能被替代?基于GNN?
  4. Local 和 Global的解耦能否被引入到其他方法中?

一家之言,难免疏漏,望不吝斧正~

本文同步于个人专栏CV上手之路

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐