摘要

  • 当前很多人体行为识别分类器都是基于从原始图像上手工提取的特征,本文提出的3D CNN能够直接从原始输入中提取特征,通过执行3D卷积在监控视频中从时间和空间维度提取特征,将高级功能模型规范化,并结合各种不同模型的输出,进一步提高3D CNN的性能。在机场的监控视频中,该方法相比于传统的方法,取的了卓越的性能。

介绍

  • 现实的环境的监控视频背景杂乱、遮挡等原因,在识别之前会对视频中的某些情况作出某些假设(假设在现实环境中很少存在),然后遵循两步原则:

    1. 计算原始视频帧的特征;
    2. 基于获得的特征学习分类器;
  • 而然在实际场景中,很少知道哪些特征对手头任务很重要,因为特征选择高度依赖问题。特别是对于人类动作识别,不同的动作类别在其外观和运动模式方面可能显得截然不同。

  • 深度学习模型是一类可以通过从低级特征构建高级特征来学习特征层次结构的机器。这种学习机可以使用有监督或无监督的方法进行训练。

  • CNN主要用于2D图像,本文探讨将CNN用于视频中人体动作的识别,一种容易想到的方法是将视频的每一帧视为静止图像,并用CNN来识别单个帧的级别动作,但这种方法没有考虑多个连续帧的编码运动信息。为了有效的结合视频中的运动信息,文章提出可以在CNN卷积层中执行3D卷积,以便捕获沿空间和时间维度的辨别特征。3D CNN架构可以从相邻的视频帧生成多个信息通道,并在每个通道中分别执行卷积和下采样,通过组合来自视频通道的信息获得最终特征表示。为了进一步提升3D CNN模型的性能,我们建议增加模型,辅助输出计算为高级运动特征,并集成各种不同架构的输出进行预测。

  • 本文贡献:

    • 本文应用3D卷积运算从视频数据中提取空间和时间特征以进行动作识别。这些3D特征提取器在空间和时间维度上操作,从而捕获视频流中的运动信息;
    • 开发了基于3D卷积特征提取的3D卷积神经网络架构(CNN),该CNN架构从相邻视频帧生成多个信息通道,并在每个通道中分别执行卷积和下采样。通过组合来自所有通道的信息获得最终的特征表示;
    • 建议通过增加具有高级运动特征的输出来规范3D CNN模型;
    • 建议通过组合各种不同3D CNN架构的输出来提高模型的性能。

3D卷积神经网络

  • 在二维CNN中,卷积应用于2D特征图,仅从空间维度计算特征。当利用视频数据分析问题的时候,我们期望捕获在多个连续帧编码的运动信息。为此,提出在CNN的卷积进行3D卷积,以计算空间和时间维度特征, 3D卷积是通过堆叠多个连续的帧组成一个立方体,然后在立方体中运用3D卷积核。通过这种结构,卷积层中的特征图都会与上一层中的多个相邻帧相连,从而捕获运动信息。如下图所示,一个feature map的某一位置的值是通过卷积上一层的三个连续的帧的同一位置的局部感受野得到的。

3D卷积神经网络

  • 要注意的是,3D卷积核只能从cube中提取一种类型特征,因为在整个卷积的过程中卷积核的权值都是一样的的(共享权值),都是同一种卷积核,上图中同一颜色的连线表示相同的权值。因此我们可以采用多种卷积核来提取多种特征。
  • 对于CNNs,有一个通用的设计规则就是:在后面的层(离输出层近的)特征map的个数应该增加,这样就可以从低级的feature map组合产生更多类型的特征。

3D CNN架构

  • 基于上述的3D卷积,可以设计出各种CNN架构。在上下文中,我们描述了为了描述了为TRECVID数据集中的人为动作识别开发的3D CNN架构,如图所示:

3D卷积神经网络

  • 文中的3D CNN架构包含一个硬连线hardwired层、3个卷积层、2个下采样层和一个全连接层。每个3D卷积核卷积的立方体是连续7帧,没帧patch大小是60x40;
  • 在第一层,我们应用了一个固定的hardwired的核去对原始的帧进行处理,产生多个通道的信息,然后对多个通道分别处理。最后再将所有通道的信息组合起来得到最终的特征描述。这个hardwired层实际上是编码了我们对特征的先验知识,这比随机初始化性能要好。
  • 每帧提取五个通道的信息,分别是:灰度、x和y方向的梯度,x和y方向的光流。其中,前面三个都可以每帧都计算。然后水平和垂直方向的光流场需要两个连续帧才确定。所以是7x3 + (7-1)x2=33个特征maps。

3D卷积神经网络

  • 然后我们用一个7x7x3的3D卷积核(7x7在空间,3是时间维)在五个通道的每一个通道分别进行卷积。为了增加feature map个数(实际上就是提取不同的特征),我们在每一个位置都采用两个不同的卷积核,这样在C2层的两个特征maps组中,每组都包含23个特征maps。23=(7-3+1)x3+(6-3+1)x2,前面那个是:七个连续帧,其灰度、x和y方向的梯度这三个通道都分别有7帧,然后水平和垂直方向的光流场都只有6帧。54x34是(60-7+1)x(40-7+1)

  • 在紧接着的下采样层S3层max pooling,我们在C2层的特征maps中用2x2窗口进行下采样,这样就会得到相同数目但是空间分辨率降低的特征maps。下采样后,就是27x17=(54/2)*(34/2)

  • C4是在5个通道中分别采用7x6x3的3D卷积核。为了增加特征maps个数,我们在每个位置都采用3个不同的卷积核,这样就可以得到6组不同的特征maps,每组有13个特征maps。13=((7-3+1)-3+1)x3+((6-3+1)-3+1)x2,前面那个是:七个连续帧,其灰度、x和y方向的梯度这三个通道都分别有7帧,然后水平和垂直方向的光流场都只有6帧。21x12是(27-7+1)x(17-6+1)

  • S5层用的是3x3的下采样窗口,所以得到7x4。所以本文中,空间维度上卷积后的尺寸变化可以通过下图很直观的表现出来:

3D卷积神经网络

  • 到这个阶段,时间维上帧的个数已经很小了,在这一层,我们只在空间维度上面卷积,这时候我们使用的核是7x4,然后输出的特征maps就被减小到1x1的大小。而C6层就包含有128个feature map,每个特征map与S5层中所有78(13x6)个特征maps全连接,这样每个特征map就是1x1,也就是一个值了,而这个就是最终的特征向量了,共128维。
  • 经过多层的卷积和下采样后,每连续7帧的输入图像都被转化为一个128维的特征向量,这个特征向量捕捉了输入帧的运动信息。输出层的节点数与行为的类型数目一致,而且每个节点与C6中这128个节点是全连接的。如下图:

3D卷积神经网络

  • 在这里,我们采用一个线性分类器来对这128维的特征向量进行分类,实现行为识别。

  • 模型中所有可训练的参数都是随机初始化的,然后通过在线BP算法进行训练。

Model Regularization(模型规范化)

  • 3D CNN模型的输入被限制为一个少的连续视频帧(论文中取的是7帧),因为随着输入窗口大小的增加,模型需要训练的参数也会增加。但是呢,很多人的行为是跨越很多帧的。
  • 因此,在3D CNN模型中,有必要捕捉这种高层的运动信息。为了达到这个目的,我们用大量的帧来计算运动特征,然后把这些运动特征作为辅助输出去规则化3D CNN模型。
  • 对于每一个需要训练的行为,我们提取其长时间的行为信息,作为其高级行为特征。这个运动信息因为时间够长,所以要比CNN的输入帧的立方体包含的信息要丰富很多。然后我们就迫使CNN学习一个非常接近这个特征的特征向量。这可以通过在CNN的最后一个隐层再连接一系列的辅助输出节点,然后训练过程中,使提取的特征更好的逼近这个计算好的高层的行为运动特征向量。如下图所示:

卷积神经网络

  • 高级行为辅助特征的提取过程是先在原始的灰度图像上计算稠密sift描述子,然后通过这些sift描述子和运动边缘历史图像(MEHI)组合构造bag-of-words特征作为高级行为辅助特征(我也还不太懂bag-of-words特征,可以自己查一下)。如下图:

卷积神经网络

  • 因为灰度图保留了外观信息,运动边缘历史图像(MEHI)只关心形状和运动模式,所以可以提取这两个互补的信息作为两个连续帧的局部特征bag。MEHI 的计算见上图右,先简单的计算两帧间的差分,这样就可以保留运动信息,然后对其执行一次Canny边缘检测,这样可以使得观测图像更加清楚简洁。最终的运动边缘图像就是将历史的这些图像乘以一个遗忘因子再累加起来得到。具体的构造需要参考更多的论文了。

Model Combination(模型组合)

  • 不同的3D CNN模型在不同的应用环境下性能不一样,一种自适应的方法就是构造多个不同模型,然后对一个特定的输入,每个模型都做出预测,然后组合这些模型的预测得到最后的决策。
  • 本文中,我们构造多个不同的3D CNN模型,因此它可以从输入捕捉潜在的互补信息,然后在预测阶段,每个模型都针对一个输入得到对应的输出,然后再组合这些输出得到最终的结果。

Model Implementation(模型实现)

  • 在本实验中,所有的子采样层都是最大子采样,用于训练规范化模型的整体代价函数是有真实的行为类的误差和高层特征的辅助输入代价项的线性加权得到,,权值分别是1和0.005,模型的所有参数都是随机初始化,然后通过diagonal Levenberg-Marquardt方法来优化训练。

疑问

  • 在3D CNN网络架构中,S5层13*2@7x4经过7x4的卷积核卷积之后为什么会出处128个feature map,有了解的同行可以给我解答一下,谢谢啦!

参考