视频异常事件检测Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video

文章目录

  • Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video
    • 1. Architecture
    • 2.Detail
      • CAE部分:
      • K-means和SVM部分:
      • Inference部分:
    • 3.实验结果
    • 4.一些问题和后续

Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video

1. Architecture

异常事件监测问题中有几个困难:

  • 缺乏异常数据,对此作者提出了 one-V.S.-rest的伪标签模式。
  • 异常事件总是伴随在正常事件中发生,因此是基于上下文的。

大多数现有的方法都采用的是基于离群检测(outlier detection)的策略,训练时对所有场景的normality进行学习,在inference阶段,如果测试数据严重偏离则视为anomaly。

此外,大多数现有的方法都是基于local或global(frame-level)的特征进行学习,而没有显式地利用场景中的物体,作者采用了SSD做一个object detection的预处理,这也很合乎常理,一般video中的异常也一般都是由于前景object变化而产生的。

算法的整体流程如下:
视频异常事件检测Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video_第1张图片

  1. SSD提取object。分别将t-3、t、t+3三帧中的objects提取出,并将提取到的bbox灰度化,t-3和t、t和t+3分别作相减得到的gradient信息作为motion送入卷积自编码器(convolutional-auto-encoder,CAE),t帧的bbox单独送入另外一个appearance CAE提取特征。

  2. 各CAE提取特征,最后将3个CAE提取的特征concatenate。

  3. 将concatenated在一起的特征进行k-means聚类,每一类代表一个特定的normality。

  4. 训练分类器。对一个给定的簇i,剩下的{1,2,3…,k\i}簇都视为dummy anomalies,对每个簇i训练一个二元分类器,即所谓的one-versus-rest策略。作者用的是SVM分类器,g_i的含义就是被判别为第i个normality的得分。
    g i ( x ) = ∑ j = 1 m w j ⋅ x j + b g_{i}(x)=\sum_{j=1}^{m} w_{j} \cdot x_{j}+b gi(x)=j=1mwjxj+b

  5. inference。在推断阶段,将测试的bbox输入到k个分类器,取最高的得分后再取负号作为该object的abnormality分数,并作为对应该帧处的anomaly map。
    s ( x ) = − max ⁡ i { g i ( x ) } , ∀ i ∈ { 1 , 2 , … , k } s(x)=-\max _{i}\left\{g_{i}(x)\right\}, \forall i \in\{1,2, \ldots, k\} s(x)=imax{gi(x)},i{1,2,,k}

2.Detail

CAE部分:

视频异常事件检测Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video_第2张图片
Notation:@后面表示卷积核个数,卷积核的depth维一定和输入的depth是匹配的,所以没标出来。

Encoder 部分:
Input:6464@1
Conv1:3
3@32 --> 6464@32
ReLu1
Max-pooling1:2
2,stride=2 --> 3232@32
Conv2:3
3@32 --> 3232@32
ReLu2
Max-pooling2:2
2,stride=2 --> 1616@32
Conv3:3
3@16 --> 1616@16
ReLu3:
Max-pooling3:2
2,stride=2 --> 8*8@16

Decoder部分:
Upsamle1(nearest neighbor):88@16 --> 1616@16
Conv1:33@16–> 1616@16
Upsamle2(nearest neighbor):1616@16 --> 3232@16
Conv2:33@32–> 3232@32
Upsamle3(nearest neighbor):3232@32 --> 6464@32
Conv3:33@32–> 6464@32
Conv4:33@1 --> 6464@1

L ( I , O ) = 1 h ⋅ w ∑ i = 1 h ∑ j = 1 w ( I i j − O i j ) 2 \mathcal{L}(I, O)=\frac{1}{h \cdot w} \sum_{i=1}^{h} \sum_{j=1}^{w}\left(I_{i j}-O_{i j}\right)^{2} L(I,O)=hw1i=1hj=1w(IijOij)2
Loss函数用的MSE,用的Adam optimizer。

K-means和SVM部分:

用的是VLFeat库中的k-means算法,初始化用的k-means++,设置k为10;SVM采用了正则化,不过在论文中,作者进行了对比试验,这两个参数变化产生的影响很微小。

Inference部分:

每个bbox的预测出的abnormality sorce作为该帧对应的bbox区域的abnormality,如果一帧中有两个bbox重叠,则取交集中的最大值,由此以来,可以得到该帧的pixel-level的score(也被称为prediction map)。最后在pixel-level的score上取最大作为frame-level的abnormality score。

3.实验结果

采用的是AUC(Area Under Curve)评估方式,AUC评估指标可以查看这位老哥分享的博客,>>传送门<<

结果表明作者提出的方法都超过了state-of-art一个很高的级别。具体来说,在Avenue数据集上,本方法是第一个超过AUC超过90%的,在Pedestrain数据集和UMN数据集上都有进一步提升,几乎到了100%,所以最近的研究可能需要更新的数据集了。本文还实验了较新的ShanghaiTech数据集,该数据集是多角度,不同光照条件,也突破了80%。

以上是对算法pipline中的一些模块增删后做的对比实验,明显可以看出object-centric和one-vs-rest两个策略有很高的contribution。

对于单帧,该pipline的SSD流程需要74ms,后续特征提取和inference阶段需要16ms,总体可以达到11FPS,用的是Titan XP GPU。

4.一些问题和后续

  1. 为什么需要3个CAE,有两个motion CAE是否造成了重复?
  2. 算法只是对object做一个判断,是否需要加上background,就好比作者自己在Introduction部分提到,异常检测涉及到上下文,比如一辆正在街上行驶的车突然行驶到人行道上,或者一座桥上的车辆冲入海里。
  3. 看下官方公布的代码实现和具体细节部分。
  4. 作者说后续的改进工作主要会考虑在前面的SSD部分。

你可能感兴趣的:(Coputer,Vision,Abnormal,Event,Detection,computer,vision)