(STGCN学习笔记)Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition

Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition ------STGCN学习笔记

  • STGCN学习笔记
    • 1.摘要
    • 2.引言
    • 3.相关工作
      • 3.1 Neural Networks on Graphs
      • 3.2 Skeleton Based Action Recognition
    • 4.时空图卷积网络
      • 4.1bady parts
      • 4.2数据来源
      • 4.3骨架图的构造
    • 5.STGCN的原理
      • 5.1卷积
      • 5.2采样函数
      • 5.3权重函数
        • 5.3.1partitioning strategies(分区策略)
      • 5.4空间图卷积
      • 5.5时空建模
      • 5.6可学习边重要性加权
      • 5.7STGCN的实现
      • 5.8网络结构与训练
    • 6.实验

STGCN学习笔记

论文标题:Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition
(基于骨骼的动作识别的时空图卷积网络)

作者: Sijie Yan, Yuanjun Xiong, Dahua Lin
Department of Information Engineering, The Chinese University of Hong Kong
fys016, [email protected], [email protected]
文章下载地址:https://arxiv.org/abs/1801.07455
代码下载地址:https://github.com/yysijie/st-gcn?

1.摘要

 这篇论文主要是提出STGCN(时空图卷积网络)。在摘要中指出这个方法克服了传统方法依赖于手工部分或者traversal rules(遍历规则)的局限性。主要特点是:自动学习了data的Spatial(空间)和temporal(时间)的特性。在大型数据集KineticsNTU-RGBD取得了优越的成绩。
看完摘要很期待弄清楚这个STGCN的工作原理。

2.引言

 人类动作识别在视频理解中发挥着重要的作用,近年来已成为一个活跃的研究领域。前人在外观、深度、光流(optical flows)建模研究已经很深入,但是在dynamic skeletons(动态骨架)模型的关注还是很少。所以这篇论文的宗旨就是对dynamic skeletons(动态骨架)进行建模,并且利用其完成动作识别。
 动态骨架的形态可以自然的表现为:人体关节点的时间序列,我们通常以二维或三维坐标的形式表示。通过人体的运动模式可以分析得到人的行为。早期的人们正是利用这一点,将单个时间步长的关节坐标形成特征向量,结合时间序列分析人类的行为(这也是我们最常想到的方法)。而理解人类行为很关键的一点就是关节点与关节点之间的空间关系,原始的方法的局限性就是未能很好利用这一点。近期人们开始尝试利用关节之间的自然连接,这一改进产生了很多新的method,结果证明这种改进是正确的。
 在引言中提到,现在的方法有一个很大的局限就是通用性,即为了分析Spatial patterns,导致模型依赖于手工部分或者traversal rules(遍历规则),所以大部分模型是为特定应用程序设计的,很难推广到其他应用程序。如何自动地捕捉关节的Spatial信息以及它们的时间动态信息?---------利用Deep Learing可以解决这个难题。但是遇到比较困难的一点是,骨架数据是图形式的,直接利用已经很成熟的深度学习技术如CNN并不难很好的处理。而恰好GCN将CNN推向了图类数据。
 在引言部分的最后,作者提到这篇文章提出将图神经网络扩展到时空图模型,即时空图卷积网络(ST-GCN),设计一个用于动作识别的通用骨架序列表示。并且说明了这个模型应用在骨架图上
骨架时空图::也属于图这种数据类型,即由结点和边(edges)组成。
1)结点:骨架图的结点就是人骨架中的关节点。这一点很好理解
2):骨架图中的边就相当具有“时空特色”,边的类型分为两类。为了方便理解我使用“控制变量法”来描述:
 a)在同一时间(帧)内,某个骨架数据各个关节点之间连接关系称为第一类边。
 b)在同一关节点处,某个骨架数据的某个关节点在各个时间(帧)之间的连接关系称为第二类边示例如下图所示:

(STGCN学习笔记)Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition_第1张图片可以看出随着Temporal的变化,某一帧(例如第一帧)深蓝色的关节点之间构成第一类边;深蓝色帧和淡蓝色帧在某一关节点之间由构成了第二类边。第二类边连接相同的关节,具有线性关系。(就是一条直线)

正是这种层次化特性,消除了手工编写的部分或者traversal rules(遍历规则)的需要。

3.相关工作

这一部分主要介绍了两个部分:Neural Networks on Graphs和Skeleton Based Action Recognition. 在这里简单总结:

3.1 Neural Networks on Graphs

 在图上构造GCNs的原理通常遵循两个stream:
 1)spectral 的角度:以频谱分析的形式考虑图卷积的局部性
 2)spatial 的角度:卷积滤波器直接应用于图节点及其相邻节点
这篇文章的工作是从spatial的角度考虑的。

3.2 Skeleton Based Action Recognition

 人体的骨骼和关节轨迹对光照变化和场景变化具有很强的鲁棒性。并且由于高度精确的深度传感器或姿态估计算法,数据很容易获得。因此,有一系列广泛的基于骨骼的动作识别方法。这些方法可以分为基于手工特征的方法和深度学习方法。

4.时空图卷积网络

4.1bady parts

 在进行活动时,人类的关节会以局部小组的形式移动,这就是所谓的bady parts.
之前已经有人验证了在建模中引入bady parts的有效性。作者认为:这种改进很大程度上是因为局部区域内关节轨迹的建模与整个骨架相比受到了限制,从而形成了骨架序列的层次表示。而CNN可以帮助实现层次表示和局部性,这就是作者将CNN的思想引入骨架数据的启蒙思想。

4.2数据来源

 基于骨架的数据可以从运动捕捉设备中获得,也可以从视频中获得姿态估计算法。通常数据是一系列的帧,每一帧都有一组关节坐标。构造出了骨架时空图(引言中有提到)

4.3骨架图的构造

 骨架序列通常由每个帧中每个人体关节的二维或三维坐标表示。之前使用卷积进行骨骼动作识别的工作是将所有关节的坐标向量串联起来,形成每帧一个特征向量。在这篇论文中,作者利用时空图来形成骨架序列的层次表示。作者构造了一个无向时空图G = (V;E),具有N个关节和T个框架的骨架序列,具有身体内部和框架之间的连接(骨架时空图的特性)。对于结点集合:

V = { v t i ∣ t = 1 , . . . , T , i = 1 , . . . , N } V=\left\{ v_{ti}|t = 1,...,T,i=1,...,N\right\} V={ vtit=1,...,T,i=1,...,N}
由t帧的第i个关节点构成。t表示帧数,i表示关节点编号。
 构造过程分为两步:
 1)将每一帧内将所有关节点连接。
 2)然后每个关节在连续的坐标系中连接到同一个关节
注意:在这个连接过程中是没有手动分配的。这一点的好处:是使得这个神经网络可以处理更多的数据集,增加其通用性。基于这点,论文中给出了个例子: a)对于Kinetics数据集,作者使用OpenPose 工具箱输出了具有18个关节点的2D姿态估计的结果;b)对于NTURGB+D 数据集,作者使用3D关节跟踪,产生了具有25个关节点的跟踪结果。这一点可以体现出STGCN的通用性。

5.STGCN的原理

整个STGCN的大致过程如下图所示:(STGCN学习笔记)Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition_第2张图片我们可以看到,输入一段录音并且利用姿态估计算法得到骨架数据(这里也可以使用mocap设备等方法获取数据),输入STGCN中结果softmax分类器得到分类结果。这个应用还是十分广泛的,例如输入一段民族舞视频,可以输出是哪个少数民族的舞蹈。

5.1卷积

 文章中简单介绍了图像domain中传统卷积的方法。给定卷积核大小为K × Kchannels大小为c,输入feature map f i n f_{in} fin ;单个通道在空间位置x处的输出值可以表示为

(STGCN学习笔记)Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition_第3张图片

我刚开始也对这里的pw很不解,后来明白了p其实是采样函数;w其实是权重函数。这其实就是一个卷积操作。注意:权值函数与输入位置x无关,因此fiter权值在输入图像的任何地方都是共享的。
 当然这个只是针对feature map而言,我们如果想应用在时空骨架图上还需要对采样函数和权重函数进一步的改进。

5.2采样函数

 对于图像,采样函数p(x,h,w) 在相邻像素上相对于中心位置x进行定义。例如h=3,w=3时候,p就相当于x以及x的8邻域元素构成的集合。
 但是在骨架图中,没有了像图像一样的相邻像素的位置关系,于是论文中引入了如下公式:

B ( v t i ) = { v t j ∣ d ( v t j , v t i ) < = D } B(v_{ti}) =\left\{ v_{tj}|d( v_{tj},v_{ti} ) <=D \right\} B(vti)={ vtjd(vtj,vti)<=D}
其实也很好理解,采样函数B就是采样中心 v t i v_{ti} vti 以及到 v t i v_{ti} vti路长小于等于D的元素的集合。
论文中说:在这项工作中,我们对所有情况使用D = 1,即节点的1近邻集。更多的D留给未来的工作。
数学表示如下:

在这里插入图片描述

5.3权重函数

 与采样函数相比,权函数的定义更为复杂。在二维卷积中,中心位置周围自然存在一个刚性网格。因此,相邻的像素可以有一个固定的空间顺序。权重函数可以通过为张量(c,K,K)按空间顺序排列的维度。对于像我们刚才构造的一般图,没有这样的隐式排列。其中的顺序由根节点周围的邻居图中的图标记过程定义。作者按照这个思路来构造权重函数
 作者没有给每个邻居节点一个唯一的标记,而是通过将一个联合节点 v t i v_{ti} vti的邻居集B( v t i v_{ti} vti)划分为固定数量的K个子集来简化这个过程。每个子集都有一个数字标签。
数学表示如下:

在这里插入图片描述
 刚开始觉得这里很晦涩难懂,但是看了partitioning strategies(论文中为3.4,我们这里为5.3.1)后就明白了。

5.3.1partitioning strategies(分区策略)

文中介绍了三种策略:

1)Uni-labeling
 最简单、最直接的分区策略是使用子集,即整个邻居集本身。在该策略中,每个相邻节点的特征向量都有一个具有相同权向量的内积。
 这种方法有一个明显的缺点,在单帧情况下,使用这种策略等价于计算权向量与所有相邻节点的平均特征向量的内积。这对于骨架序列分类来说是次优的,因为在这个操作中可能会丢失局部微分属性。
2)Distance partitioning
 另一种自然分区策略是根据节点到根节点的距离。在这篇文章中,作者设置了D = 1,所以邻居集将被分成两个子集,其中D = 0指的是根节点本身,其余的邻居节点属于D = 1子集。因此,我们将有两个不同的权重向量,它们能够建模局部微分性质,如关节之间的相对平移。
3)Spatial configuration partitioning.
 作者设计了一个策略,将邻居集划分为三个子集:
a)根节点本身
b)比根节点更接近骨架重心的相邻节点
c)剩下远离骨架重心的相邻节点。这样设计的原因是:身体各部分的运动可以大致分为同心运动和偏心运动
数学表示如下所示:

在这里插入图片描述
在论文中规定:一个坐标系中所有关节的平均坐标被视为其重心,用 r i r_i ri表示。
刚开始对于这些一头雾水,看了论文中的图就明白了。如下所示:

(STGCN学习笔记)Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition_第4张图片从左到右:
(a)输入框架的示例框架。身体的关节是用蓝点画的。D = 1的过滤器的接受域用红色虚线圈表示。(b)Uni-labe,其中一个邻域中的所有节点都具有相同的标签(绿色)。
{c}Distance partitioning.这两个子集是距离为0的根节点本身(绿色)和距离为1的其他相邻点。(蓝色)
(d)Spatial configuration partitioning.根据节点到骨架重心的距离(黑色十字)与根节点的距离(绿色)进行标记。向心节点比根节点距离短(蓝色),而离心节点比根节点距离长(黄色)。

 作者将在基于骨骼的动作识别实验上对所提出的分割策略进行实证检验。可以预期,更高级的分区策略将带来更好的建模能力和识别性能。

5.4空间图卷积

 利用改进后的采样函数和权函数,我们现在用图卷积的形式将式(1)改写为

在这里插入图片描述
Z t i Z_{ti} Zti等于对应子集的基数,用于normalizing。
将采样函数(2)和权重函数(3)代入(4)得:

在这里插入图片描述
具体的细节将在下一篇代码学习中仔细研究。对于2D卷积,这个式子依然具有通用性。

5.5时空建模

 在5.4中并未考虑时间序列因素,回想一下,在构建图的过程中,图的时间方面是通过跨连续帧连接相同的节点来构建的。这使我们能够定义一个非常简单的策略,将空间图CNN扩展到时空域。也就是说,在空间上我们使用的是“结点邻域”的思想,而在空间上,是将“结点邻域”推广到了相同关节点时间序列集上,即同一关节点的不同帧的数据构成的集合。


Γ 控制着时间序列的范围。简单的理解就是共多少帧。
同样的既然加入了时间因素,对应的采样函数和权重函数该怎么办?
采样函数不变,我的理解是采样只和空间因素相关,考虑时间因素是在采样后进行的。所以采样函数不用改变。
权重函数改变如下:因为时间轴是有序的,所以我们直接修改标签map: l t i ( v t j ) l_{ti}(v_{tj}) lti(vtj)

在这里插入图片描述

5.6可学习边重要性加权

 这是一个性能改进的部分,作者并未过多介绍。大致意思就是说:尽管人们在做动作时关节会成群移动,但一个关节可能出现在多个身体部位。所以关节点之间的重要程度不同,应该赋予不同的权重。
 作者采用的方法是每一层上都添加了一个可学习的mask,实验表明这个mask的添加提升了实验的效果。

5.7STGCN的实现

 单帧内,关节的体内连接由表示自身连接的邻接矩阵 A A A单位矩阵 I I I表示。
1)在Uni-labeling策略时,数学公式如下:
在这里插入图片描述
其中 Λ i i = ∑ j j ( A i j + I i j ) Λ^{ii} =\sum_{j}j(A^{ij} + I^{ij}) Λii=jj(Aij+Iij),这里将多个输出通道的权向量进行叠加,形成权矩阵 W W W。在第二个纬度上,将结果张量与规范化邻接矩阵 Λ − 1 / 2 ( A + I ) Λ − 1 / 2 Λ^{− 1/2} (A + I)Λ^{− 1/ 2} Λ1/2(A+I)Λ1/2 相乘。
2)在distance partitioning 和 spatial configuration partitioning时,注意,现在邻接矩阵被拆分成几个矩阵 A j A_j Aj,其中 A + I = ∑ j A j A + I = \sum_{j} A_j A+I=jAj.
例如在distance partitioning策略时: A 0 = I 和 A 1 = A A_0 = I 和 A_1 = A A0=IA1=A,(9)改为:

在这里插入图片描述
同样的, Λ i i = ∑ k ( A j i k ) + α Λ^{ii} =\sum_{k}(A^{ik}_j)+α Λii=k(Ajik)+α,在这里我们设置α= 0:001 避免 A j A_j Aj空行.

5.8网络结构与训练

 首先将输入的骨架输入到一个批处理的归一化层来对数据进行归一化,ST-GCN模型由9层时空图卷积算子(ST-GCN单元)组成。前3层的输出channels为64,后3层是128,最后三层是256。每个ST-GCN单元使用了ResNet机制。
 在每个STGCN单元之后,我们在0.5的概率下随机dropout feature,以避免过拟合。4,7时间卷积层的stride设置为2作为池化层。在这之后使用一个global pooling得到每个sequence 256维度的特征向量。
 最后,作者将它们提供给一个SoftMax分类器。模型的学习采用随机梯度下降法,学习速度为0.01
作者还提到了使用随机仿射变换增强数据。并且称这种方法为random moving

6.实验

 这里不详细说明,主要是在Kinetics和NTU-RGB+D大型数据集上进行的实验。实验结果如下:
1)在Kinetics上的结果:(STGCN学习笔记)Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition_第5张图片2)在NTU-RGB+D上的结果:
(STGCN学习笔记)Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition_第6张图片

你可能感兴趣的:(动作捕获,动作识别,算法,卷积,深度学习,神经网络)