您的位置:首页 > 其它

【论文解读】Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition

2020-02-04 22:19 721 查看

本文是港中文大学发表在AAAI2018的一篇工作,是GCN应用在基于骨架的动作识别的开山之作,后续工作有很多,比如今年的CVPR2019的《Actional-Structural Graph Convolutional Networks for Skeleton-based Action Recognition》和《Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition》都是在此基础上进行优化。

论文链接: https://arxiv.org/abs/1801.07455
官方源码(pytorch): https://github.com/yysijie/st-gcn

1.介绍

当前基于深度学习的动作识别领域主要是对于外观和光流进行建模,而在此之外容易想到的是通过人体骨架。动态骨架模态可以自然地表示为一系列人体关节位置的时间序列,以二维或三维坐标的形式表示,然后通过分析其运动模式,可以识别人类的行为。人体的骨骼和关节轨迹对光照变化和场景变化具有较强的鲁棒性,目前也有很多精度很高的姿态估计算法,从感觉上来说是一种非常不错的想法。

早期利用人体骨架进行动作识别的方法,仅仅是利用单个时间步长的关节坐标来形成特征向量,并对其进行时间分析,而这类方法的能力是有限的,因为它们没有显式地利用关节之间的空间关系,这是理解人类行为的关键。之后出现了一些考虑关节连接的方法,并得到了效果的提升,但大多数依赖于手工设计的规则来进行分析,难以推广。

此外人体骨架是以图的形式出现的,而不是类似图片那样的二维或者三维像素网格,考虑到最近非常热的图神经网络(GCN),很自然的想到利用GCN来建模。因此本文作者提出将图神经网络扩展到时空图模型,即Spatial-Temporal Graph Convolutional Networks(ST-GCN),如图1所示,该模型是建立在一系列骨架图之上的,其中每个节点对应于人体的一个关节。有两种类型的边,一种是符合关节自然连通性的空间边,另一种是跨越连续时间步长连接同一关节的时间边。并在此基础上构造了多个时空图卷积层,实现了信息在时空维度上的集成。

2.Spatial Temporal Graph ConvNet

2.1 Pipeline概况

首先我们来看整体的网络结构,对视频利用OpenPose等算法进行姿态估计,并构造骨架序列的时空图。之后用多层时空图卷积(ST-GCN),逐步在图上生成更高层次的特征图,最后用标准的Softmax分类器将其分类为相应的动作类别,如下图所示。

2.2 骨架图结构

骨架序列通常由每个人体关键点的二维或三维坐标表示,在此使用时空图G=(V,E)G=(V,E)G=(V,E)来表示N个关节点与T帧的人体骨架序列中空间与时间的连接关系,具体来说在图中的点VVV就是骨架序列中的所有关节点,对于Kinetics数据集使用OpenPose提取姿态就是18个关键点,对于NTURGB+D数据集就是25个关键点,而每一个关键点的特征向量由该点坐标和置信度组成。图中的边EEE分空间和时间两种,分别是如图1中依据人体自然结构连接的蓝色连接边线ES={vtivtj∣(i,j)∈H}E_S=\left\{ v_{ti}v_{tj}|(i,j)\in H \right\}ES​={vti​vtj​∣(i,j)∈H},其中HHH表示人体关节自然连接的集合,与图1中同一个关节点在不同时间帧上的绿色连接边线EF={vtiv(t+1)j}E_F=\left\{ v_{ti}v_{(t+1)j}\right\}EF​={vti​v(t+1)j​},因此EFE_FEF​表示边的时间轨迹。

2.3 时空图卷积神经网络

在深入研究完整的ST-GCN之前,首先来看单帧上的图卷积操作,在假设stride为1且有合适padding的条件下,给定kernel大小为K∗KK*KK∗K的卷积算子和一个通道数为ccc的输入特征图finf_{in}fin​,单通道在空间位置xxx处的输出值可以表示为

其中采样函数ppp用来列举位置xxx的领域,权重函数www用于计算和采样ccc维通道输入特征向量的内积,这里采用的是可变性卷积中的公式形式。

将上式推广到输入特征图为空间图VtV_tVt​的情况时,就定义了图的卷积运算。那么下一步就来重新定义采样函数ppp以及权重函数www。

1. 采样函数: 在图像中,采样函数是相对于中心位置xxx的近邻像素,也就是围绕中心xxx卷积核大小的一块区域。在图卷积中,可以类似的定义对于节点vtiv_{ti}vti​其邻近节点集合B(vti)={vtj∣d(vtj,vti)≤D}B(v_{ti})=\left\{v_{tj}|d(v_{tj},v_{ti})\leq D\right\}B(vti​)={vtj​∣d(vtj​,vti​)≤D}上的采样函数,其中d(vtj,vti)d(v_{tj},v_{ti})d(vtj​,vti​)表示从vtjv_{tj}vtj​到vtiv_{ti}vti​的最小长度(最小跳数)。因此采样函数p:B(vti)→Vp:B(v_{ti})\rightarrow Vp:B(vti​)→V可以被写作

在这篇论文中距离取D=1D=1D=1,也就是最近邻,更高的距离被留作后续工作。

2. 权重函数: 在二维卷积中,相邻像素的空间顺序是固定的,因此权重函数可以按照空间顺序建立索引来进行按元素乘法。而对于图却没有这样的排列顺序,这一问题的解决方案首先在《Realtime multi-person 2d pose estimation using part affinity fields》中进行了研究,其中邻近节点的空间顺序由根节点周围邻居图中的图标记过程定义,这里沿用了这个概念,但并没有给每一个邻居节点提供唯一的标签,而是通过划分某一关节点vtiv_{ti}vti​的邻居集B(vti)B(v_{ti})B(vti​)到固定数量的KKK个子集来简化这一过程,其中每个子集共用一个标签。因此我们可以有一个映射lti:B(vti)→{0,...,K−1}l_{ti}:B(v_{ti})\rightarrow \left\{0,...,K-1\right\}lti​:B(vti​)→{0,...,K−1},它将邻域中的节点映射到其子集标签。因此权重函数w(vtj,vti)w(v_{tj},v_{ti})w(vtj​,vti​)可以通过索引一个(c,K)(c,K)(c,K)维的张量或者:

在之后讨论几种分区策略。
3. 空间图卷积: 利用上述改进后的采样函数和权重函数,可以将公式(1)重写为图卷积的形式

其中归一化项Zti(vtj)=∣{vtk∣lti(vtk)=lti(vtj)}∣Z_{ti}(v_{tj})=|\left\{v_{tk}|l_{ti}(v_{tk})=l_{ti}(v_{tj})\right\}|Zti​(vtj​)=∣{vtk​∣lti​(vtk​)=lti​(vtj​)}∣等于对应子集的基数,这一项是为了平衡不同子集对输出的贡献。将公式(2)、(3)代入公式(4)中可以得到

论文中表示:值得注意的是,如果我们将图像视为一个规则的二维网格,这个公式可以类似于标准的二维卷积。例如,为了类似于3x3个卷积运算,我们在以一个像素为中心的3x3个网格中有一个9个像素的邻居。然后将邻居集划分为9个子集,每个子集都有一个像素。

4. 时空建模: 在构造了空间图CNN之后,现在要对骨架序列中的时空动力学进行建模。在构建图的过程中,图的时间方面是通过跨连续帧连接相同的节点来构建的,这使我们能够定义一个非常简单的策略,将空间图CNN扩展到时空域。也就是说,我们将邻域的概念扩展到包括时域连接的关节

参数Γ\GammaΓ控制被包括在邻居图中的时间范围,因此可称为时间卷积核大小。为了实现对时空图的卷积运算,还需要采样函数(与仅考虑空间的情况相同)和权重函数,特别是标记的映射函数lSTl_{ST}lST​,考虑到时间轴是有序的,因此直接修改标签映射lSTl_{ST}lST​为根节点vtiv_{ti}vti​的时空领域,其中ltil_{ti}lti​是之前所述的单帧上的标签映射

5. 分区策略: 考虑到时空图卷积的高维表示,设计一个分区策略来实现标签映射lll是非常重要的,在本文中探讨了三种分区策略,注意这里讨论的分区策略只在空间维度进行,时间维度可以按公式(7)扩展。下图(a)为输入单帧骨架的示例,其中身体关节点为蓝色点,D=1D=1D=1的filter接收域用红色虚线画出。

  • Uni-labeling(单标签): 最简单和最直接的分区策略就是整个邻域都为同一子集,也就是上图(b)中的情况。在该策略中,每个相邻节点上的特征向量都与一个相同权向量做内积。这就存在明显的缺点,因为这个策略等价于所有相邻节点的平均特征向量与权重向量做内积。这对于骨架序列来说是次优的,因为在这个操作中会丢失局部差异性。该策略在形式上可以表示为K=1K=1K=1和lti(vtj)=0,∀i,j∈Vl_{ti}(v_{tj})=0,\forall i,j\in Vlti​(vtj​)=0,∀i,j∈V
  • Distance partitioning(距离分区): 另一种自然而然的分区策略是根据节点之间距离对邻域内节点进行分区。在本文中因为设置K=1K=1K=1,因此邻域被分为两个子集,其中D=0D=0D=0表示根节点本身,其余的邻域节点位于D=1D=1D=1的子集中,对应上图©中的情况。因此这种策略将有两个不同的权重向量,它们能够建模关节点的局部差异性,如关节之间的相对平移。形式上表示为K=2K=2K=2和lti(vtj)=d(vtj,vti)l_{ti}(v_{tj})=d(v_{tj},v_{ti})lti​(vtj​)=d(vtj​,vti​)
  • Spatial configuration partitioning(空间结构分区): 由于人体骨架在空间上是局部性的,所以仍然可以在划分过程中利用这种特定的空间结构,设计一种将邻域集划分为三个子集的策略:(1)根节点本身;(2)向心集合:距离骨架重心较根节点近的邻域节点;(3)其它所有节点被分为离心集合。对应上图(d)中的情况。在这里,一个坐标系中所有关节的平均坐标作为其骨架重心(代码中其实是根据骨架图来判断,如OpenPose为表示脖子的节点,NTURGB+D是胸中心的节点,都是事先定义好的,没有用到平均坐标)。这一策略的灵感来自一个事实,即身体部分的运动可以大致分为向心和离心运动。形式上表示为

6. 可学习的边的重要性加权: 虽然人们在做动作时关节会成群移动,但一个关节可能出现在身体的多个位置。在建模这些部件的动力学时,这些外观应该具有不同的重要性。因此作者在时空图卷积网络的每一层都添加了一个可学习的掩码。该掩码将根据ESE_SES​中每个边来学习重要性权重,来缩放节点特征对相邻节点的贡献。实验结果表明,添加该掩码可以进一步提高ST-GCN的识别性能。因此,也可以尝试添加注意力机制,作者把这个留给将来的工作。

7. ST-GCN实现: 这里采用了《Semi-supervised classification with graph convolutional networks》这篇论文的图卷积形式,单帧内关节的内部连接由邻接矩阵AAA和表示自连接的单位矩阵III表示。在单帧情况下,采用第一个分区策略的ST-GCN可以用以下公式实现

其中Λii=∑j(Aij+Iij)\Lambda^{ii}=\sum_j(A^{ij}+I^{ij})Λii=∑j​(Aij+Iij),这里将多个输出通道的权重向量叠加形成权重矩阵WWW。在实际中,考虑时空维度,我们可以将输入特征图表示为(C,V,T)(C,V,T)(C,V,T)维,图卷积操作通过执行卷积核大小为1∗Γ1*\Gamma1∗Γ的标准二维卷积来实现。并将得到的张量与归一化邻接矩阵Λ−1/2(A+I)Λ−1/2\Lambda^{-1/2}(A+I)\Lambda^{-1/2}Λ−1/2(A+I)Λ−1/2在第二个维度上相乘。(PS. 源码中的具体实现并不是这样,有空我会详细介绍源代码的实现

对于具有多个子集的分区策略,即上述距离分区与空间结构分区策略,对公式(9)稍作修改,此时邻接矩阵被分解为多个矩阵,其中A+I=∑jAjA+I=\sum_jA_jA+I=∑j​Aj​,例如在距离分区策略中,A0=IA_0=IA0​=I并且A1=AA_1=AA1​=A。则公式(9)就转变为

其中Λii=∑k(Ajik)+α\Lambda^{ii}=\sum_k(A^{ik}_j)+\alphaΛii=∑k​(Ajik​)+α,这里α=0.001\alpha=0.001α=0.001是为了避免AjA_jAj​中的空行。

而实现可学习的边的重要性加权非常简单,对于每一个邻接矩阵都用一个可学习的权值矩阵MMM与之对应,并在公式(9)中用(A+I)⊗M(A+I)\otimes M(A+I)⊗M,公式(10)中用Aj⊗MA_j\otimes MAj​⊗M来替代原有的(A+I)(A+I)(A+I)和AjA_jAj​,这里的⊗\otimes⊗表示矩阵间的按元素乘法,掩码MMM初始化为全1的矩阵。

8. 网络架构与训练:

  • 首先将输入的骨架用一个BatchNorm层来规范化数据
  • ST-GCN网络模型一共由9层ST-GCN单元组成,前三层输出通道为64,中间三层输出通道为128,最后三层输出通道为256,每个层的时间卷积核大小为9(源码中为tcn块,是一个Conv2D的卷积层,卷积核大小为9x1,9对应时间维度)
  • 每一个ST-GCN都使用了残差结构,并使用概率为0.5的Dropout,防止过拟合
  • 在第4层和第7层将时域的stride设为2作为池化层,最后对得到的张量进行全局池化得到256维的特征向量,最后提供给softmax分类。
  • 采用SGD,learning rate设为0.01,每10个epochs学习率自乘0.1
  • 为了避免过拟合,在对Kinetics数据集进行训练时,采用了两种增强方法来替代Dropout。首先,为了模拟相机的运动,我们对所有帧的骨架序列进行随机仿射变换。即从第一帧到最后一帧,我们选取几个固定角度、平移因子和缩放因子作为候选,然后随机抽取三个因子的两个组合,生成仿射变换。这种变换被插入到中间帧中,以产生一种在拍摄过程中平滑地移动视角一样的效果。我们把这种增强称为随机移动。其次,我们在训练中随机抽取原始骨架序列的片段,并在测试中使用所有帧。网络最后的全局池化使网络能够处理长度不定的输入序列。

3. 实验

本文使用了两个数据集:Kinetics和NTU-RGB+D。

Kinetics数据集是目前最大的无约束动作识别数据集,包含300,000个从YouTube上得到的视频剪辑片段,涵盖多达400个人类动作类别。从日常活动,体育运动到复杂的交互动作,每个片段大约10秒。由于Kinetics数据集仅提供原始的视频片段,并没有骨架数据。因此作者对视频的每一帧首先使用OpenPose进行姿态估计得到18个关键点和置信度,并在每帧上选取平均关节置信度最高的两个人,记录他们的关节坐标和置信度作为特征,最终得到(3,T,18,2)(3,T,18,2)(3,T,18,2)的张量,这里为了简单起见,采用从开始到T=300的帧数。

NTU-RGB+D是目前最大的室内动作捕获三维关节的动作识别数据集,该数据集包含60个动作类别的56,000个动作剪辑,由40名志愿者在实验室的室内环境中拍摄的,同时记录3个摄像头的视图。提供的标签注释是三维关节坐标(X,Y,Z)(X,Y,Z)(X,Y,Z),由kinetic深度传感器得到。骨架图包含25个关节点,每个片段保证最多有2个人体骨架。

表1表示的是在Kinetics数据集上的消融实验,Baseline TCN是对于每一层的输入特征只进行时间域的卷积操作,因此称作TCN。这种模型在NTU-RGB+D数据集上表现良好。可以看出,融入了空间维度,以及添加合理的分区策略的时空图卷积模型,在Kinetics数据集上始终优于基线模型。Local Convolution是一个介于基线模型和ST-GCN之间的中间模型,使用了非共享权值的卷积filters,相比之下ST-GCN的效果还是要更好。

之后四个是不同的分区策略进行比较,其中的Distance partitioning*表示分区权重为w0=−w1w_0=-w_1w0​=−w1​的策略,表明多个子集分区策略总是优于单子集分区。这几种策略中空间结构分区效果最好,ST-GCN+Imp表示加了可学习的掩码MMM,后续与SOAT比较就采用ST-GCN+Imp的方法。

表2和表3是在两个数据集下与SOAT进行对比,其中NTU-RGB+D中的X-Sub表示训练集和验证集来自不同的人物,X-View表示训练集和测试集来自不同的摄像头视角。这里有两个有意思的点,第一个是对于两个数据集上纯基于骨架的方案,本文提出的ST-GCN取得了最优的结果,而第二个点则是对比于使用了RGB或者使用了光流法的传统深度学习动作识别方法,基于骨架的这一系列方法包括ST-GCN差距还是很大,尤其是这里使用的RGB和光流使用的是数据集发布的论文中的baseline,而现有的基于RGB最好的结果我看17年发表的Non-local就达到了将近78%,差距不可谓不大! 具体结果可以看表3后面截取Non-local文章中的实验截图。

《Non-local Neural Networks》中的实验结果,纯RGB的NL I3D在Kinetics上达到了77.7%

之后作者解释了一下,并提出骨架信息可以作为RGB和光流的额外信息。表4是作者在Kinetics中选取了30类不涉及人物场景交互并且与人体骨架有强烈相关性的动作子集上做得测试,表5是作者做得多特征融合实验。

4. 总结

如开头所述,本文是GCN应用在基于骨架的动作识别的开山之作。后续工作有很多,其中也有很多发了顶会的文章,并且这类算法在NTU-RGB+D这一纯姿态信息的数据集上也是达到了SOAT的水平。但在日常的视频或者监控摄像头场景下的这类raw video,相比于光流模型甚至纯RGB的模型差距非常大,也限制了这类方法的使用范围。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
BlackFission 发布了2 篇原创文章 · 获赞 0 · 访问量 366 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐