本文结合现有的文献和方法以及作者自己的实践理解,详细阐述了图卷积在基于骨架的动作识别方向的应用,内容翔实,值得一读。
文章的脉络为:
1. 问题简述
2. 基本概念介绍
3. 方法和思路分析
4. 文献解读
4.1 时空特征的提取
4.2 更全面的空间特征抽取策略
4.3 数据增强
4.4 综合方法
由于篇幅较长,将分为上下进行发布。
人体动作识别是近年来 CV 领域的热门研究方向,其对人机交互、智能监控等应用具有重要意义。骨架动作识别属于动作识别的一个分支,旨在识别由骨架随时间变化构成的时间序列所代表的动作类型,即每个样本由连续的骨架帧构成,维度是 (T,V,C),T 表示时间,V表示关节,C 表示空间位置( XY 或 XYZ),模型需要给出样本所属动作类别,因此属于多分类任务。其另一个分支是 RGB 视频动作识别。
该任务常用的数据集是 NTU RGB+D 数据集,以及Skeleton-Kinetics(用 openpose 在Kinetics-400视频数据集中得到 3D 骨架)数据集。
本文主要介绍近两年来基于图卷积的骨架动作识别相关工作,图卷积的标准公式为:
该公式的严密推导过程是从图的傅里叶变换以及谱域分析开始的,不过可以从空域来简单理解,即邻接矩阵 A 乘特征矩阵H可以聚合(sum, mean, max 等)一阶邻域特征,自环邻接I 可以将聚合的邻居特征与当前节点特征合并,最后通过权重矩阵 W 完成通道的变换。矩阵是度矩阵,用于对自环邻接矩阵 (A+I) 进行对称规范化,此外一些论文也使用随机游走规范化。
图卷积的核心思想是建立图中不同节点之间的信息交流,从而学习图中每个节点的嵌入特征表示,在只考虑一阶邻域的条件下,随着网络层数加深,每个节点的感受野都会越来越大,最终覆盖全图,实现信息的完全交互。
对于图分类任务,在最后一层图卷积后,通常会经过一层 readout 层,得到整个图的表示,然后用这个表示来进行分类。对于骨架动作识别任务,每个样本都由图序列构成,因此需要在时间和空间维度同时进行 readout,通常是 pooling。
笔者认为该任务可以从三个领域借鉴方法:
1. 骨架通常由关节(joint)和骨骼(bone)相互连接表示,具有天然的图结构,因此可以借助 GNN 强大的空间特征抽取能力,来学习动作的潜在表示。事实上从 18 年开始,绝大部分骨架动作识别相关工作都是基于图卷积网络的。
2. 骨架序列属于时间序列,因此可以利用时间序列建模的相关方法来获取时间特征,例如 GRU、LSTM、3D 卷积等。
3. 骨架动作识别与视频动作识别都需要通过模型来提取动作的潜在特征,特别是时空特征的提取,因此可以相互借鉴方法。
此外,也有学者提出了其他的方法,例如可以将骨架序列转化为 RGB 图片,这样该问题就转化为图像分类问题(18 年之前的主流方法),也有基于 KNN 和贝叶斯的相关方法,总之解决问题的思路方法是多元化的,不局限于某一特定领域。在笔者阅读相关文献时,总结出了一些常见的改进(涨分)思路:
数据增强:原始骨架数据反映的骨架位置信息,如果对相邻两帧求差值,便可以得到骨架的一阶动态信息,对相邻关节求差值亦可以得到骨骼动态信息。理论上模型也能学习到这些信息,但提前计算出来并作为输入,可以在一定程度上提升准确率。
类邻接矩阵策略:GCN 中使用的邻接矩阵只包含一阶邻域,每个节点的感受野都非常有限,只有达到足够深度,网络层才能学习到远端关节之间的语义信息。此外,传统的邻接矩阵元素只有 0 和 1 两种值,在多数情况下很难反应关节间的相互关系。因此,设计一种不限于一阶邻域和整数值的邻接矩阵,是许多工作的探究点。对于骨架动作识别任务,主要建立非骨骼连接的关节之间的联系,例如手腕和脚踝。
注意力机制:Self-attention 及其相关变体在最近几年很火,例如由何恺明团队提出的 non-local 模块,在视频行为识别、目标检测等任务上都取得了不错的效果。对动作识别而言,每个动作的信息往往集中在某一个或几个关节,而且肢节末端的关节由于运动更频繁,幅度更大,往往具有更多的关键信息,因此空间注意力是值得探究的点。
图结构拓展:通常在构建图时,只将关节作为图的节点,然而骨骼(bones)与关节具有密不可分的关系,虽然视觉上骨骼通常是长条形的,但仍然可以抽象为一个点参与图卷积。这种做法可以显著提升图的分辨率以及对空间信息的表达能力。
局部划分(part-based)方法:同一肢节或同一个区域内的关节之间运动相似度会更高,按这个规律可以将骨架分为多个区域(part),在区域内和区域间定义不同的信息传播方式,可以有效的提取局部和全局特征。这种方法称为part-based method。
因此由于水平有限,不能写得通俗易懂,可能会造成一些内容理解起来困难,因此建议结合原文阅读,还请谅解。此外,在解读文献时,陈述顺序和原文的顺序会有一些出入,这是因为不同文献侧重点不同,我会尽量按照我认为的合理顺序来分析。
此外,我会根据个人理解,从一些简单,通俗易懂的工作开始介绍,然后再介绍相对复杂的工作,这样有助于大家理清该领域的研究思路和方向。
时空特征的提取
图结构序列与视频一样,都兼具时间和空间特征,因此如何在 GCN 的基础上,设计对时空特征的抽取方法,是构造网络时必须考虑的问题。
DPRL: Deep Progressive Reinforcement Learning for Skeleton-based Action Recognition(CVPR,2018)
http://openaccess.thecvf.com/content_cvpr_2018/CameraReady/1736.pdf
通过强化学习帧蒸馏方法(frame distillation)来选择最具代表性的帧,然后再通过图卷积网络抽取空间信息。前者是时间上的类注意力方法,后者则是空间上的特征抽取方法,整体网络结构如下:
网络结构
深度渐进式强化学习(DPRL)
帧蒸馏网络对应中的 FDNet。样本中不同帧所含信息不同,且许多相邻帧往往具有大量的冗余信息,该工作通过强化学习蒸馏方法从原始帧序列中挑选最具代表力,可识别力的帧参与图卷积,使网络能得到更多的有用信息,而丢弃哪些混淆度强的无用信息。具体方法在文献中有详细介绍。
基于强化学习的帧蒸馏网络
类邻接矩阵策略
这篇文章是典型的类邻接矩阵策略。通过手工构建的非骨骼连接(下图虚线)来强化节点之间的信息交流,提高节点的感受野对于某些动作而言,其主要运动关节在原始骨架中并不是直接相连的,例如拍手动作,这就意味着在1邻域的情况下,需要经过多次卷积两手之间才会有互相得到对方的信息,如果让他们直接相连,可以让信息在更浅的网络层得到交互,更深的网络学习到的特征信息也更加稳定准确。
人工构建的非骨骼连接
具体地,对于固有骨骼连接,在邻接矩阵中用一个可学习参数 α 来代表连接权重,对非固有邻接,用可学习参数 β 来代表连接权重。
此外,在进行图卷积时,由于输入是图序列,因此会对每一帧单独进行图卷积,然后在时间维度上进行 concate,从而得到整个图序列的 feature map 。
实验结果
在 NTU 数据上的实验结果,左右两列分别是 cross subject 和 cross view:
总结
该工作提出的帧蒸馏网络在思想上与注意力机制一致,即挑选出有意义,感兴趣的部分,而空间上的非物理连接则能有效的提高特征聚合速度,此外自学习的邻接矩阵参数能让重要关节得到更多的关注。
02
ST-GCN: Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition(AAAI, 2018)
https://arxiv.org/pdf/1801.07455.pdf
一篇非常具有代表性的文章,其核心思想是通过空域上的图卷积和时域上的常规卷积,来聚合时间和空间特征。
时空图卷积
借鉴了视频动作识别中对 3D 卷积分解为 (2+1)D 的思想,通过空间上的图卷积来提取空间信息,通过前后相邻帧的常规卷积来提取时间信息,通过二者的串联叠加来逐步提取时空信息。这么做相当于将每个节点的感受野扩大到的时空范围。
时空图卷积示意图
假设 feature map 维度是(C, T, V)每个 block 由两部分组成:
1.对每一帧的图卷积:
2. 在 T 维度进行的常规卷积,卷积核大小是(τ,1)。
此外图卷积和整个 block 都包含 residual 连接。
邻域划分策略
节点邻域是节点的邻居节点的集合,体现在邻接矩阵中。标准 GCN 对所有节点使用同一个权重矩阵,但人体运动过程中,存在关节距离重心越远,运动幅度越大的规律,即包含的信息越多,因此本文提出将邻域分为三个部分:自身,近重心,远重心,如下图中的(d):
三种不同的邻域划分策略
划分过后对每个节点而言,其邻域会分为三个部分,因此图的邻接矩阵就分为了三个子邻接矩阵,每个矩阵单独享有一个卷积权重,分别进行图卷积,最后通过加法叠加结果。这样划分会导致参数数量增加(扩增 3 倍),但网络对空间特征细节的刻画能力也更加强。
邻接矩阵自学习策略
通过为邻接矩阵赋予一个等大小的权重矩阵,可以让网络自动学习边与边之间的连接权重:
M 表示待学习的权重矩阵(全 1 初始化),Aj 表示第 j 个邻域对应的邻接矩阵,通过二者的 hardmard 乘积得到最终的邻接矩阵。这种做法可以在一定程度上提高对已有物理连接的刻画能力,但不能使 A 中的 0 值变为非 0 值,即不能在关节间建立非物理连接。
提出新数据集
本文通过 openpose 从视频中提取 2D 骨架序列,再将置信度作为 z 轴,从而得到 3D 骨架序列,由此从Kinetics-400视频行为数据集中得到了Kinetics-skeleton 骨架行为数据集。
实验结果
在 NTU 数据集上的实验结果:
在 Kinetics-skeleton 数据集上的实验结果:
总结
本文通过线性堆叠的 GCN 和 TCN 来间接扩大每个节点的感受野,非常有助于时空信息的提取。对邻域的经验性划分虽然会增加参数数量,但也能提高网络对不同关节特征的刻画能力。此外,自学习的 mask 参数能让关节连接权重更加平滑,但相较于 DPRL,本文没有建立非相邻关节之间的直接连接,因此远端关节之间的信息交互会更困难。而对于 DPRL,其使用的是人工定义的非骨骼连接,因此对空间信息的刻画能力非常有限。
更全面的空间特征抽取策略
虽然骨架代表了物理上真实存在的关节连接,但在骨架的基础上建立更多的非物理连接,甚至是关节的强连通图,能提高每个节点的感受野,从而让网络在浅层就能学习到更多的有用信息。
HCN: Co-occurrence Feature Learning from Skeleton Data for Action Recognition and Detection with Hierarchical Aggregation
https://arxiv.org/pdf/1804.06055.pdf
这篇文章提出的方法在 GCN 相关工作出现之前效果最佳,这里简要介绍。
HCN网络结构示意图
这里输入 Input 的大小是 T*V*C,T 是帧长度,V是节点数量,C 是输入通道。
开始的两层卷积是常规的通道卷积,然后将 V 和 C 维度对调,这样接下来的卷积就会将 V作为通道处理,而卷积对通道的操作是全连接,因此任意两个节点都会进行加权求和。这种做法体现在图上,相当于建立任意两个节点之间的可学习权重连接,将图当成强连通图对待。因此该方法虽然没有直接使用图卷积,却仍然能取得不错的效果。
实验结果
NTU 数据集:
02
2S-AGCN: Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition(CVPR, 2019)
https://arxiv.org/pdf/1805.07694.pdf
本文在 ST-GCN 的基础上,提出了更加合理的邻接矩阵策略,不仅包含自学习的邻接矩阵,还通过 self-attention 机制为每个样本计算单独的邻接矩阵,大大增强了网络对空间特征的抽取能力。
数据增强
即将 bones 流作为独立数据流,独立于 joint 流进行训练。预测时结合两个网络的预测值,得到最终预测结果:
适应性邻接矩阵策略
这里的 k 表示三种不同的领域,即 ST-GCN 中的 spatial 邻域划分策略。邻接矩阵由三部分构成:
Ak 是基础邻接矩阵,值只有 0 和 1,只包含关节间原有的直接物理连接。
Bk 是权重邻接矩阵,初始化为 0,由网络自动学习。
Ck 是 attention 邻接矩阵,计算方式为embedded 高斯函数:
T 表示转置。这部分主要借鉴了 “non-local neural network” 和 “attention is all you need” 中提出的self-attention 方法,但不同于何恺明的 non-local网络,这里是用关节的轨迹来计算两个关节之间的attention 值,时间维度被合并到了 C 中,这么做可以降低计算量和参数量,防止过拟合。
三个邻接矩阵的整体计算过程可以用类似于 non-local 网络中的图例来表示:
实验结果
在 NTU cross view上的 Ablation 实验:
个人认为在 cross subject 条件下对比会比较明显。NTU 数据集:
Kinetics-Skeleton 数据集:
03
DGNN:Skeleton-Based Action Recognition with Directed Graph Neural Networks
https://url.cn/5x6EUs3
在 ST-GCN 和 2S-AGCN 的基础上进一步提高了抽取空间特征时的细粒度。
有向图信息传播
在 ST-GCN 中提出的邻域划分策略,实际上可以概括为不同的信息传播方向区别对待,信息从末端关节流向中心关节和从中心关节流向末端关节应该区别对待。因此本文用有向图来处理不同的信息方向:
此外在,2S-AGCN 中 bones 流和 joints 流相互独立,然而二者实际上应该具有更加紧密的联系,因此本文将 Bones 也作为一种节点参与到信息流传播中,这样可以提高空间特征的细粒度。这与 Sym-GNN 中的 AGC 部分有一定的相似之处。
结合以上两点,可以用关联矩阵(incidence matrix)来表示节点和边之间的连接关系,关联矩阵规模是 (Nv , Ne),即节点数和边数。关联矩阵中1 表示节点是边的源节点,-1 表示目标节点。进一步地可以将源节点关联矩阵和目标节点关联矩阵分开:
在进行信息传播时,先分别以节点和边为中心聚合特征,然后再更新节点和边的值:
g 表示聚合函数,通过关联矩阵图卷积进行聚合,h 表示更新函数,这里是 1*1 卷积(即FC 层)。假设某一层输入通道是 Cin,输出通道数是 Cout,则 1*1 卷积的卷积核大小为3*Cin*Cout,要比标准图卷积中 Cin*Cout 的卷积核大三倍。因此参数数量相对来讲要多很多。
数据增强
本文将 motion 流作为另一个独立训练的数据流,bone 和 joints 计算 motion 值的方法相同,即计算两帧差值。
实验结果
NTU 数据集:
Kinetics-Skeleton 数据集:
03
PBGCN: Part-based Graph Convolutional Network for Action Recognition(BMVC, 2019
典型的 part-based 方法,将人体骨架分为多个子图,定义了子图内部和子图之间的信息传播方式,这样便能更好的抽取局部关节信息,同时加快信息传播速度。
何(geometric)特征与动力学(kinematic)特征
这里的几何信息就是骨骼特征(包含非骨骼连接),即在空间上计算相邻关节坐标差值,动力学特征就是运动特征,通过计算相邻帧对应关节的差值得到。
基于局部划分的图卷积(PBGC)
首先将人体骨架图分为多个子图:
并且保证相邻两个子图间至少有一个公共关节。然后对每个节点,首先在其所在的子图内执行图卷积,再执行子图间的信息传播:
其中(5)表示在分图p中的点vi的卷积结果,Nkp是点vi在子图p中的邻接节点集合,Wp表示点子图p的权重矩阵(不与其他子图共享),(6)表示点vi与相邻子图的邻接节点之间的信息聚合。其中聚合函数定义如下:
即加权平均。因此,每个点先在其所属子图内的邻域进行图卷积,再与相邻子图的邻接节点进行信息聚合。
由于不同子图之间不共享权重,因此子图划分策略就异常重要。本文提出了多种不同的划分策略,可以按上下不同肢体划分,可以按左右划分,其中效果最好的是四部划分:
这是因为人体骨架左右对称,左手和右手往往具有非常相似的行为,适合共享权重,而不同类型的肢体往往具有不同的运动特征,因此适合划分到不同子图。
时空图卷积
这部分与ST-GCN中的时空图卷积比较相似。
公式15表示时域卷积,将每个关节与该关节前后τ帧内的值做加权求和。
04
2s-SDGCN Spatial Residual Layer and Dense Connection Block Enhanced Spatial Temporal Graph Convolutional Network for Skeleton-Based Action Recognition(ICCV 2019,workshop)
本文方法相对较简单,即认为空间信息重要性更强,因此在残差连接中也进行图卷积:
上方绿色部分是本文使用的残差连接,而ST-GCN是用的残差连接只有简单的通道变换,没有邻接矩阵参与运算。
用公式表示如下:
此外,还添加了dense连接(DCB):
将这两种方法结合到一起,再嵌入到其他方法中。
05
STGR: Spatio-temporal graph routing for skeleton-based action recognition(AAAI, 2019)
本文从时间和空间的角度设计了邻接矩阵计算方法,以计算节点之间的时间和空间关系。虽然设计了较为复杂的邻接矩阵策略,但效果并不如2S-AGCN。
空间图路由子网络
首先根据一种无参数图划分策略,将每一帧的原始图划分为K个子图。将每个子图都当成强连通图,这样就能得到空间图序列:
为1时,表示关节i与j在时刻t是相连的,为0时表示不相连,是否相连是根据子图划分情况来决定的,而任意两个子图的节点之间都不会相连(完全隔离)。
得到了空间连接图序列后,就要从所有图中选出最具信息的一个,首先用7*7的卷积来聚集局部特征,然后再全局取平均(GAP):
这样就将每一时刻的图都用一个标量值来表示:
这样就包含了图的所有信息,并且是一个序列。使用两层全连接层来对m进行进一步加权:
其中:
得到的μ也是一个长为T的权重向量,将T作为权值,回代到原图G中,并在时间范围做平均:
整个这一步,实际上就是对每个时刻的图做了一次加权平均。
时间路由子网络
首先将输入序列用每个关节的时序轨迹来表示,这样就得到了N个独立的关节轨迹。接着用一个LSTM来学习每个关节轨迹的浅层表示:
将LSTM最后一个时间步的隐状态作为该关节轨迹的最终表示。(这里说LSTM在不同关节轨迹间参数不共享)得到关节特征经过编码后的特征序列:
接着通过FC层转换和向量点乘(类似于embedded高斯函数)来计算两个关节之间的联系:
最终学习到关节之间的时域联系。
时空特征融合
网络结构示意图
通过concate的方法融合学习到的图,然后进行图卷积。
关节连接可视化
图(a)是关节的原始关节骨骼连接,图(b)是空间图路由学习到的关节连接,图(c)是时间图路由学习到的连接。
学习到了时间和空间图分别对应各自的邻接矩阵,在进行图卷积时通过加法进行特征融合:
其中。这个公式和ST-GCN很相似,只不过ST-GCN中只有三个不同的空间图,没有时间图。因此本文的工作实际上就是在ST-GCN的基础上,增加了两个额外的邻接矩阵策略,其他地方没有明显改动。优化时不仅使用分类损失函数,还使用图稀疏损失函数,以确保图的稀疏性:
06
AGC-LSTM: An Attention Enhanced Graph Convolutional LSTM Network for Skeleton-Based Action Recognition(CVPR,2019)
传统的 LSTM 每一时间步的输入都是一维向量, convLSTM 将卷积操作作为元计算方式,从而让LSTM 可以接受图片时间序列作为输入,进一步地,本文将 GCN 作为 LSTM 的元计算方式,从而可以让 LSTM 可以接受图时间序列作为输入。
数据增强
通过求相邻帧插值可以得到motion信息,再通过FC和将motion信息与原始数据结合,然后通过LSTM进行初步的通道扩张:
得到的Eti具有512通道数,作为LSTM网络的输入。此外,本文还将part流作为另一个数据流:
通过双流融合来提升效果。
注意力增强型图卷积LSTM网络
和传统LSTM一样都具有三个门结构,输入门,遗忘门,输出门。但是这些门是通过图卷积操作来计算的。单元结构和计算公式如下:
空间注意力机制
对每个时步而言,将其所有节点对应的输出值加权求和:
然后再添加res连接:
计算得到一个attention系数αt,注意αt长度是一个长度为N(节点数)的向量,最终该时间步节点 i 的输出值为:
在最后一层,将不同节点的输出聚合起来,就得到了该时间步的最终输出值:
得到的(global)和(local)用于最终的动作类别预测。
时序平均池化
在AGC-LSTM层之间进行时间维度上的池化,可以逐步提高AGC-LSTM层的时间感受野,同时也能大幅度降低计算量。
损失函数
不仅对和输出进行监督,还额外对他们的 attention 值进行监督,第三项保证对不同的关节赋予的相同的注意力,第四项保证关注的关节数量是有限的。
笔者认为只要是多输入网络,不局限于单纯的关节位置,就可以看成是一种数据增强方法。从前面的一些文章中可以发现数据增强是广泛使用的策略,这里介绍一些以数据增强为核心的文章。
01
VA-fusion: View Adaptive Neural Networks for High Performance Skeleton-based Human Action Recognition(TPAMI, 2018)
光学估计和穿戴式传感器是目前常用的两种三维运动数据采集方法。而光学估计会受到机位和视角的影响,即对同一段动作,在不同的机位和角度下,估计得到的3D骨骼数据是有差异的:
本文提出了一种视角自动学习网络来解决这个问题,即让网络自行学习最佳的摄像机视角,即对骨架进行一定的旋转和平移,参数为[αt, βt, γt, dt],其中前三个分别对应是三个轴的旋转参数,dt表示位移,因此变换公式为:
对每一帧,都有一组对应的视角变换参数。
可以分别在RNN和CNN上学习视角变换,不同的网络对应不同的变换方法:
其中LSTM作为主网络时,通过LSTM层学习四个参数(对每一帧)在CNN作为主网络时,先将骨架映射为伪RGB图,然后通过以下公式进行坐标变换:
其中 R 是旋转矩阵,由旋转参数得到。
本文还提出了随机旋转骨架的数据增强方法,可以在一定程度上降低过拟合。此外,将坐标原点移动到每个动作第一帧的身体中心,这样可以让网络对起始位置不敏感。
02
3SCNN:Three-Stream Convolutional Neural Network with Multi-task and Ensemble Learning for 3D Action Recognition(CVPR workshop, 2019)
传统的数据增强方法中,joint, bone, motion数据通常是独立的,通过在网络最后进行融合来提高识别精度。本文提出可以在网络中段对三个特征流做信息交互。
整个网络分为三个stage:
数据增强
从原始数据中额外生成motion 和 bone 数据,这样就有三个数据流。
Enhanced point-level feature learning
数据特征增强。作者认为即便是3D骨骼数据,同一序列不同的机位下估计得到的数据仍然具有差异,因此可以将原始动作通过坐标旋转变换来增强,即coordinate adaptive module。而旋转矩阵不是人工提前设定,而是由网络通过FC层学习得到:
L就是旋转矩阵的个数,即增强的数据倍数。将得到的L组增强数据在通道维度进行concat,然后再通过point-level convolution(参考HCN)进一步提取特征。
Pairwise feature fusion
将三个数据流进行特征融合,有两种融合方法:
Conv block包含两层卷积,卷积核大小都是3*3,channel为128, 256。Concat即特征融合,在通道维度上融合。图(a)是不共享conv block的参数,其效果要好于图(b)的共享参数block,但相应的参数也增多。
Ensemble
将三个数据流通过损失函数求和的方法实现相互监督:
03
SGN: Semantics-Guided Neural Networks for Efficient Skeleton-Based Human Action recognition
侧重于模型的效率,通过人工特征工程来进行数据增强,从而保证网络能在更少的层数下(相对于之前的GCN工作),仍然能达到很好的效果。
Dynamics and Semantics information
其中velocity就是同一关节前后帧之间的差值(到目前为止,我们所了解到的差值有两种:一种是时间上,相邻帧的差值,这是一种简单的 temporal信息,另一种是空间上,相邻关节的坐标差,称为bones信息,从2s-AGCN和DGNN的实验结果来看,通过求差得到的bones信息对分类带来的提升效果要远高于temporal信息)。Velocity 和 position 统称为dynamics信息。
Frame index 和 joint type 就是 semantics 信息,用 One-hot 表示。
通过两层FC分别将这四种信息映射到高维空间,然后再通过concate的方式进行特征聚合:
Semantic-aware graph convolution
不能只使用dynamic信息来决定关节之间的连接,因为不同关节对的dynamics信息可能相同,而他们的连接权重应该是不同的。即便是同一个序列,其在不同帧中的关节之间的关系也可能不同。因此还需要联合sematic信息。对于一个T帧,每帧有J个关节的序列,为其构建一个有T*J个节点的图。其中帧号为t,关节号为j的关节,其对应第J(t-1) + j 个节点。这样便能得到一个spatio-temporal graph,可以对这个graph计算相应的邻接矩阵,接着通过动态的图内容自适应连接(content adaptive connections)来计算邻接矩阵,和2S-AGCN不同的是,本文提出即便是在一个序列内,不同帧所包含的关节并发信息也不同,因此需要将自适应性细化到每一帧。计算方法类似于高斯函数:
接着通过GCN和 residual 残差连接的结合,来实现信息在关节间的传播:
其中 G 是邻接矩阵,所有W都是可学习的权重矩阵(变换矩阵)。自适应邻接矩阵会将图变成强连通图,因此发掘的信息是全局 global 信息,而对于局部的信息(parts, local),可以用CNN来发掘。
Semantics-aware convolution
GCN主要是提取了关节之间全局关联(global correlation)的探究,这是因为adaptive connections让每个关节都有一个覆盖其他所有关节的卷积核(表现在邻接矩阵G上),而CNN具有更小的卷积核,可以发掘关节之间的局部关联(local correlation)模式(pattern),这和之前的那些基于parts的方法有相同的思想。
01
Sym-GNN: Symbiotic Graph Neural Networks for 3D Skeleton-based Human Action Recognition and Motion Prediction(submitted to IEEE-TPAMI,2019)
本文是CVPR 2019文章:Actional-Structural Graph Convolutional Networks for Skeleton-based Action Recognition(AS-GCN)的期刊版本。进行了一些改进,效果要比AS-GCN好一些。
本文融合使用了诸多上面已经介绍过的方法,并提出了预测和分类任务相互监督的训练方法,可以有效提升模型对关节特征的获取能力。
数据增强
首先将 bone 也作为一个独立数据分支,通过和 joint 流融合得到预测结果。(上图中的 Dual 和 Prime )。
其次提出通过求差值,求导操作(difference operate)获取关节的动态信息,包括移动向量(motion),速度和加速度:
β 取0,1,2时分别对应motion,velocity和accleration。
邻接矩阵策略
本文的邻接矩阵策略相对其他工作要复杂一些,主要由以下两部分构成:
1. Actional Graph Convolution(AGC)
首先设计了一种信息在节点和边之间循环传播更新的方法,这样做是为了得到节点的高维特征表示,进而用于计算邻接矩阵,而不是直接更新节点信息:
注意,第0次迭代时,每个节点的输入是该节点在所有帧的位置所构成的序列,即关节轨迹(node trajectory),因此以上公式不包含维度t的信息。F都表示FC层。
实际上,这样的信息逐层传播迭代的思想与GCN相同,但细节不同。首先始终以节点为终点,而边只是中间变量,其次任何两个点之间都要进行传播,相当于是在强连通图下进行特征传播,而不局限于关节的物理连接。多次迭代后每个节点都能充分的聚合其他所有节点的信息。且不同于ST-GCN,因为节点在信息传播时,是带着时序所有信息进行传播的。
在经过了K次迭代后,每个节点的特征都得到了更新,此时根据embedded高斯函数来计算两个节点之间的关联系数,由此得到一个新的邻接矩阵:
f 和g分别是两个 embedding 全连接层。学习到的邻接矩阵类似于2S-AGCN中的 attention 邻接矩阵,只不过embedding采用的是全连接层而不是卷积层。这部分的整体计算流程如下:
计算得到邻接矩阵后,进行常规的图卷积:
注意此时图卷积的对象就是每一帧的数据(t上标),而不是关节轨迹。
1.2 Structural Graph Convolution(SGC)
这部分通过对基础邻接矩阵取不同的幂次来提升每个节点的感受野,卷积公式如下:
依然是对每帧进行图卷积,其中γ表示对邻接矩阵取γ幂次。此外,类似于ST-GCN,还为A添加了加权权重:
1.3 joint scale graph convolution(JGC)
对前面两部分卷积结果加权求和:
注意这里卷积对象都是单帧图。本文还提出了一种关节位置限制机制,来限制每一层提取的特征的变化程度,从而提高稳定性,降低噪声数据的影响。
时序特征提取
joint-scale graph and temporal convolution block(J-GTC)
时序卷积就是在沿着时间维度做卷积,这部分的思想和ST-GCN相同,先进行空间上的图卷积,再进行时间上的一般卷积,如此反复,可以串联地学习时空特征:
ρ 是非线性激活函数。TC 将每个关节与其前后多帧范围内的值进行卷积,属于1D 卷积。
J-GTC block同时包含了batch norm,dropout,residual connection模块。
多尺度卷积:Part-based策略
GC-LSTM将part-based流作为独立数据流输入,只在最后与Joint流做特征融合,本文加强了两个数据流之间的信息交流,主要是在合适的位置将两个特征流沿节点维度进行拼接:
首先将人体分为多个part,每个part内的关节取平均值,这样每个part就变成了一个节点这么做相当于降低了图的分辨率。两个数据流通过pooling和matching的方法进行特征交互。Matching是将part scale图的单个节点复制多次,得到joint scale图。
分类和预测任务共同监督
同时进行动作识别和动作预测的任务(分别使用不同的任务网络),在优化时,损失函数为二者的加权和:
其中参数通过 multiple gradient descent algorithm 算法获得。