本文结合现有的文献和方法以及作者自己的实践理解,详细阐述了图卷积在基于骨架的动作识别方向的应用,内容翔实,值得一读。
文章的脉络为:
1. 问题简述
2. 基本概念介绍
3. 方法和思路分析
4. 文献解读
4.1 时空特征的提取
4.2 更全面的空间特征抽取策略
4.3 数据增强
4.4 综合方法
由于篇幅较长,将分为上下进行发布,这是下篇。 上篇见: 全面详解! 图卷积在动作识别方向的应用(上)
更全面的空间特征抽取策略
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 算法获得。
极验是全球顶尖的交互安全技术服务商,于2012年在武汉成立。全球首创 “行为式验证技术” ,利用生物特征与人工智能技术解决交互安全问题,为企业抵御恶意攻击防止资产损失提供一站式解决方案。