目录标题
基于图神经网络的图分类问题
- 图神经网络的本质工作就是特征提取,并在图神经网络的最后实现图嵌入(将graph转为特征向量)。
- 过程:首选使用图神经网络进行graph的特征提取,最后进行readout操作(将graph的信息转换为可直接用于分类的n维特征向量),然后送入softmax进行分类,实现对graph的分类(如果有传统卷积神经网络分类经验的话应该很好理解)。
在本文中,图分类具体表示为下图(可与上图比较相看,利于理解)。
Input Video可根据人体关键点组成graph,作为输入数据,
中间的ST-GCNs负责特征提取
最后readout用于softmax分类。
GCN在行为识别领域的应用
学习文章:GCN行为识别应用
内容:选取了自18年以来将GCN和行为识别相结合的代表性工作论文,用于讨论并分析这些工作的核心思想,以及在此基础上可以尝试的idea。
主要任务
行为识别的主要任务是分类识别,对给定的一段动作信息(例如视频,图片,2D骨骼序列,3D骨骼序列),通过特征抽取分类来预测其类别。目前(18年过后)基于视频和RGB图片的主流方法是two-stream双流网络,而基于骨骼数据的主流方法就是图卷积网络了。
研究思路
人体的骨骼图本身就是一个拓扑图,因此将GCN运用到动作识别上是一个非常合理的想法。
但不同于传统的图结构数据,人体运动数据是一连串的时间序列,在每个时间点上具有空间特征,而在帧于帧之间则具有时间特征,如何通过图卷积网络来综合性的发掘运动的时空特征,是目前的行为识别领域的研究热点。
笔者选取了自18年以来将GCN和行为识别相结合的代表性工作,用于讨论并分析这些工作的核心思想,以及在此基础上可以尝试的idea。
ST-GCN(SpatialTemporal Graph Convolutional Networks for Skeleton-Based Action Recognition)解读
原论文
原始论文
这种算法基于人类关节位置的时间序列表示而对动态骨骼建模,并将图卷积扩展为时空图卷积网络而捕捉这种时空的变化关系。
作者提出了一个新颖的动态骨架模型ST-GCN,它可以从数据中自动地学习空间和时间的patterns,这使得模型具有很强的表达能力和泛化能力
解决问题
用于解决基于人体骨架关键点的人类动作识别问题
1.使用 OpenPose 处理了视频,提出了一个数据集
2.结合 GCN 和 TCN 提出了模型,在数据集上效果还不错
主要贡献
-
1.将图卷积网络扩展到时空域,称为时空图卷积网络(ST-GCN)。
对于每个关节而言,不仅考虑它在空间上的相邻关节,还要考虑它在时间上的相邻关节,也就是说将邻域的概念扩展到了时间上。 -
2.新的权重分配策略,文章中提到了三种不同的权重分配策略:
-
图(b)单标签划分策略,将节点和其1邻域节点划分到相同的子集中,使他们具有相同的label,自然也就具有相同的权重。这样的话每个kernel中的权重实际上就是一个1*N的向量,N是节点的特征维数。
图©按距离划分,将节点自身划分为一个子集,1领域划分到一个子集。每个kernel的权重是一个2*N的向量。
图(d)空间构型划分,节点与重心距离划分,距离重心更近(相对于中心节点)的1邻域节点为一个子集,距离重心更远的1邻域节点为一个子集,中心节点自身为1个子集。每个kernel的权重是一个3*N的向量。
经过测试发现第三种策略效果最好,这是因为第三种策略实际上也包含了对末肢关节赋予更多关注的思想,通常距离重心越近,运动幅度越小,同时能更好的区分向心运动和离心运动。
核心思想
1.将图卷积扩展到了时域上,从而更好的发掘动作的运动特征,而不仅仅是空间特征。
2.设计了新的权重分配策略,能更加差异化地学习不同节点的特征。
3.合理的运用先验知识,对运动幅度大的关节给予更多的关注,潜在的体现在权重分配策略中。
简介
该模型是在骨骼图序列上制定的,其中每个节点对应于人体的一个关节。图中存在两种类型的边,即符合关节的自然连接的空间边(spatial edge)和在连续的时间步骤中连接相同关节的时间边(temporal edge)。在此基础上构建多层的时空图卷积,它允许信息沿着空间和时间两个维度进行整合。
OpenPose 预处理
openpose是一个开源的人体关键点检测工具,是一个标注人体的关节(颈部,肩膀,肘部等),连接成骨骼,进而估计人体姿态的算法。作为视频的预处理工具,我们只需要关注 OpenPose 的输出就可以了
ST-GCN直接使用openpose工具进行人体关键点提取(将输入视频分割为多个帧,对每一帧进行关键点检测,并将其打包,用于后续操作)
总的来说,视频的骨骼标注结果维数比较高。在一个视频中,可能有很多帧(Frame)。每个帧中,可能存在很多人(Man)。每个人又有很多关节(Joint)。每一个关节又有不同特征(位置、置信度)。
对于一个 batch 的视频,我们可以用一个 5 维矩阵(N,C,T,V,M) 表示。
N.代表视频的数量,通常一个 batch 有 256 个视频(其实随便设置,最好是 2 的指数)。
C 代表关节的特征,通常一个关节包含 等 3 个特征(如果是三维骨骼就是 4 个)。
T代表关键帧的数量,一般一个视频有 150 帧。
V代表关节的数量,通常一个人标注 18 个关节。
M代表一帧中的人数,一般选择平均置信度最高的 2 个人。
所以,OpenPose 的输出,也就是 ST-GCN 的输入
基于人体关键点构造graph
现在我们有了一段视频中,不同帧之中的人体关键点信息。我们在骨架序列上构造了一个无向时空图G = (V, E),该骨架序列包含N个关节和T个帧,同时具有体内和帧间连接,即时间-空间graph
组合方法:把一帧中每个人体关键点作为node,人体关键点之间的自然连接和时域连接作为edge,构成graph(可以理解为三维的graph),如下图所示。
构造单帧graph(空间域)
一个graph可表示为G = (V, E),V为节点特征(node),E为边特征(edge)
其中V = {vti|t = 1, . . . , T, i =1, . . . , N}
即vti表示不同节点特征,其中t表示不同帧的节点(即时间域),i表示同一帧中不同人体关键点(节点),vti的维度为(x,y,confidence),其中x,y为该关键点的坐标,confidence为该关键点的置信度。
根据V节点即可即可组成单帧的graph(即上图的深蓝色部分)。
构造帧间graph(时间域)
在连续帧中找到相同节点,并将其连成时域信息(edge的信息)。
edge信息由两个子集组成。
第一个子集:同一帧中,关键点间的关系(i表示同一帧中不同的关键点,j表示不同帧间的同一关键点)
第二个子集:不同帧间的人体关节间的关系
至此,根据一段视频中不同帧的人体关键点信息组成了,包含空间与时间信息的graph。
其中,节点信息为(横坐标,纵坐标,置信度);边信息为(ES,EF)。
ST-GCN模型
ST-GCN模型中介绍了如何对上述过程构造的graph进行计算。
传统卷积网络的公式:
其中,p为采样函数,采样x像素点周围h,w范围内的相邻像素点做卷积运算;W为权重函数,提供用于与输入采样特征进行内积运算的权重矩阵。
将这种方法扩展至graph上,
x像素点等同于graph的node;
一个像素点位置包括n维特征,等同于一个node上包含着n维特征。
在此定义graph上的卷积运算,即把Vt节点特征经过卷积运算后得到c维的向量特征。
对graph上的采样函数p和权重函数w进行重新定义。
采样函数
传统卷积神经网络中,采样函数可以理解为卷积核的大小,即每次进行卷积运算(特征提取)时所覆盖的范围。例如,一个3*3的卷积核,在对某一个像素点进行卷积操作时,实际是将该像素点于其相邻的8个像素点的信息进行计算、聚合。
ST-GCN中,节点等同于传统卷积的图像像素点,采样函数就是负责指定对每个节点进行图卷积操作时,所涉及到的相邻节点范围,在本文中D = 1,即一阶相邻节点(直接相连的节点),用公式表示如下,其中d表示两个节点间的距离。
对于D=1,采样函数p可以写为下式,即只采样直接相邻的节点
可视化如下图,这张图在原文中是解释分区策略的,但也比较适合解释采样函数。若以红色节点为计算图卷积的中心node,则其采样范围为红色虚线内的节点,也就是D=1的相邻节点。
权重函数
- 传统神经网络中,权重函数可通过按照空间顺序(如从左到右、从上到下)索引一个(c,K,K)维张量(即c *K *K的卷积核)进行来实现。
- 对于graph,没有这种默认的空间排列,所以需要自定义一种排列方式。
本文采用方法:对graph中某node的相邻node进行子集划分,每个子集都有一个label,即实现映射:
将相邻节点映射至它所属的子集label。具体划分规则在后文有具体介绍。
至此,权重函数(W(vti, vtj)表示基于某node及其邻域得到权重向量Rc)
可以通过直接下标一个(c,K)张量实现,或用下式(lti(vtj)表示vtj在以vti为中心节点进行分子集标签中的所属标签)实现