Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记

论文题目《基于双流结构的自适应图卷积网络的骨骼姿态识别》引言
1.引言
作者提出了双流自适应图卷积(2s-AGCN),在两个2个数据集上进行了大量的实验,都实现了最先进的性能。
贡献
1.提出了自适应的图卷积网络结构针对不同的图卷积层和端到端的骨骼样本能够更好的学习其拓扑结构,也能够更好的适用于识别任务和其层次结构。
2.二阶信息通过双流结构和一阶信息联合起来,对提高性能起到了很好地作用
3.在两个数据集上有了能好的效果
【Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记】2.相关工作
2.1 基于骨骼的姿态识别
目前流行的姿态识别有2中基于RNN的和基于CNN的,最近,Yan等。提出了一种时空图卷积网络(ST-GCN),直接将骨架数据建模为图结构。 因此比以前的方法具有更好的性能。
2.2 图卷积神经网络
目前有两种基于空间域和基于光谱域的,基于空间域的图卷积是直接对其图像顶点和邻居节点进行滤波卷积。而基于谱域的图卷积是通过傅里叶变换,拉普拉斯矩阵的特征值和特征向量。本文中使用的是基于空间域的图卷积操作,所以和以往的图卷积公式会不一样。
3.图卷积网络
3.1图结构
每一帧的骨骼数据作为向量序列被提供。每一个向量都代表这个人的关节的3维或者2维坐标。一个完整的姿态包括不同长度的帧和不同的样本。我们用时空图去模拟这些关节的空间维度和时空维度的结构信息。这个具体的结构我们是按照ST-GCN里面的工作进行的。如图
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

上面的图代表一个骨骼的空间结构图的例子。其中关节代表为一个节点,他们的自然连接作为一个空间边。就是左图中黄色的边,就是空间边,就是空间结构上的边,传统意义上的边。然后对于时间维度上来说的话,在很多帧的骨骼图中,我们连接相邻的帧的同一个节点,那么这条边我们就叫它时间边,就是时间维度上的边。一会要用到双流结构之中。就是左图中那种横着的边。节点的坐标就作为节点属性。对于右边的图的话是ST-GCN中的定义,文中没有怎么解释,就是一个人为划分的集合用以卷积节点的信息的集合,×代表骨骼图中的重心,每个图都有一个重心,然后红色的节点代表本节点,定义其距离为一的节点为邻居节点,也就是我们要划分的节点,然后如果这个邻居节点离重心的距离比本节点离重心的距离远那么我们就叫它离心节点,就是图中蓝色的节点,同理可得绿色节点是近心节点。为什么么要这么划分呢,这个在卷积公式里面会用到。
3.2 图卷积
本文的策略是通过多层的图卷积层提取精炼更多的高层语意信息,然后在经过一个全局平均池化层,和一个softmax层,然后输出,根据值来进行预测
在空间维度上的图卷积公式对于节点V其被定义为:
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

其中f代表输入的特征图,v代表图中的节点。B代表卷积的样本空间,也就是我们上面的划分就是图1的右图中的圈起来的部分。w是权值函数和传统卷积算子类似,其是根据给定的输入确定其权值向量的值。由于权值向量的数量是固定的,但是这个B集合里面的节点个数却有很多。为了让每一个节点都有自己的权值向量,所以我们就做了上面说的划分,以l函数来表示就比如说在ST-GCN里面根据经验将内核设置为3,那么就有3个集合,所以就有了这样的作用就是,比如集合里面有很多节点,但是权值向量只有3个那么怎么来确定节点的权值向量到底是多少呢,所以就可以根据节点是根节点,还是离心节点,还是近心节点来确认。其中的Z代表这个集合的里面的节点的个数,目的是平衡每个节点的值,就比如一个根基节点的邻居节点比较多,那么我们就要除以他的个数来平均一下以免这个节点的特征提取的值过大或者过小,就相当于对其进行标准化的操作。
3.3具体实现
这个在空间域的图卷积的具体实现并不是很直观。具体的说这个特征图都是一个C * T * N的张量。N代表节点的数量,C代表通道数,T代表时间长度,就是帧的长度。
然后根据ST-GCN里面的图卷积公式的定义我们可以将公式1变换成下面这种:
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

Kv就是空间维度里面的内核的大小。根据设定其为3.然后A是一个领接矩阵,代表是否节点VJ是节点VI的邻居是不是在其对应的B的集合里面。其中:Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

这个是在ST-GCN里面的,也就是传统的领接矩阵的标准化。
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

其中a是0.001,是为了防止对应的元素为0.
W是一个11的权值向量,就想是公式1里面的w,然后他是根据输入的不同来确定其权值向量的,比如说我们说的这个一个B集里面的内核为3,那么就有3种节点嘛,根节点,离心节点,近心节点。所以根据3种节点的不同W也会不同的赋予3种节点不同的权值。M是一个注意力图。用来表示每个节点的重要性,根据公式2,就可以看出,其代表的是,对于集合B里面的每一种节点聚合邻居节点的特征然后赋予权值然后再注意力图相点积,然后相加,就是每一个B集合我们提取的高层语义信息了。
然后就是对于时空域的卷积的话,由于时空域里面,每个关节只有前一帧和后一帧的2个关节,是一个固定的结构,那么我们就可以用传统的卷积对其进行卷积操作,设置一个大小为Kt的一个1
1的卷积核,直接进行卷积。
4.双流结构的自适应图卷积网络
下面详细的进行介绍。
4.1自适应图卷积层
之前说的空间图卷积的话是基于一个预定义好的图,其实不是最好的,所以作者提出了一种自适应的图卷积层。它使得图的结构和其他参数一样能够实现端到端的学习,在不同的样本和层之中图的结构都是不一样的。这使得这个模型更加有灵活性。除此之外,文中还设置了一个残差结构,以便在原始模型中能够更加的稳定。
根据公式2.A代表是否节点之间有连接,M代表连接的强度。所以为了让图结构有自适应功能,我们让公式2转换成公式3
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

在公式3中
主要不同在于领接矩阵,A B C
第一部分对于A的话就是以往的邻接矩阵,代表人身体的物理结构
第二部分对于B的话,B同样也是一个邻接矩阵,相对于A,邻接矩阵B里面的值,会和其他参数一样,随着训练而一起进行优化,让这个模型更加具有灵活性。这个邻接矩阵B也同样不仅仅代表连接而且也代表着连接的强度。邻接矩阵B起着M一样的作用而且比M更加的优化,就比如说,在公式2里面是A和M的点积,但是如果A里面对应的元素是0但是M对应的元素不是,其结果终究还是0,但是B就不一样了。这个B能够生成新的连接,但是M不能。
第三部分对于C来说C是一个数据依赖图,其为每一个样本都学习一个第一无二的图。它是为了确定2个节点之间是否有连接或者连接有多强。我们实现它通过计算两个节点的嵌入高斯函数的相似性:
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

具体操作是,对于输入的张量CTN,通过高斯嵌入函数变为CeTN,按照我个人理解这个高斯嵌入函数就是将通道C输入的数据通过一个嵌入高斯函数变成和的形式就是在原始数据外面加上一个 * 和 * 的函数。然后根据公式4就有了,因为是转置所以就经过大量的实验将其分为2个矩阵分别为N * CT矩阵和CT * N的矩阵,刚好就是转置的形式,然后把它们相乘我们就得到了一个NN的矩阵了 。这个NN的矩阵就是这个函数,最后再加上一个e就和公式4一样了,就得到了高斯函数的相似性度矩阵。在这个求得的相似度矩阵中,其中的元素就代表节点之间的相似性。然后再将其值标准化为0-1.由于是有一个softmax的操作我们计算C的公式如下:
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

其中的W是指2个嵌入函数的参数。
我们并没有直接代替A而是添加了B和C。B的值和2个嵌入函数的参数都初始化为0.用这种方法极大的提高了模型的灵活性。
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

整个自适应图卷积结构如上图所示。除了上面介绍的A,B,C,这个内核的设置和上面一样,是3.w都是上面提到的。除此之外,加入了一个残差网络,在每一层之中都加入了残差网络,是为了在加入其它模型之中的时候不改变其初始的状态。就是如果输入的通道和输出的通道数据不一样的时候那么,那么我们就可以使用到残差网络。残差网络会一直用一个残差1*1的卷积的数据然后和网络输出的相加,知道输入通道的数据和输出通道的数据相匹配。
4.2。自适应图卷积块
自适应图卷积快如下:
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

其中COVS是空间卷积就是上面提到的一系列,COVT是时空卷积。卷击块里面,首先进行空间卷积,然后进入BN层(标准化层),然后进入RELU激励函数。然后通过一个dropout层,防止过拟合。然后再进行时空卷积,然后再通过BN,relu层。最后再加入一个残差网络,残差网络的作用和之前一样,是为了匹配输入通道和输出通道的数据一样。
4.3 自适应图卷积网络
自适应图卷积网络是有许多块堆叠而成。如图:
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

由9个块堆叠而成,首先是一个BN层,用以标准化输入数据,然后经过9个卷积层,每三个块的通道数分别是64,128,256.每三个层的通道数不一样,就可以用到上面我们说的残差结构。然后最后再进过一个全局平局池化层将不同的样本的特征图统一成相同的大小。最后再经过softmax层得到0~1的数据用以预测。
4.4双流结构网络
之前说过骨骼的二阶信息对于骨骼的姿态识别也是非常的重要的,所以在本文之中就提出以一个双流结构用到了骨头的信息。
怎么用的呢,就是把之前说的,一块骨头,必然会有2个关节,那么,靠近重心的节点设为源关节,远离重心节点的节点我们设为目标关节,然后这两个关节之间的骨头的信息就可以用这两个节点来表示,就是源节点的坐标,减去目标节点的坐标,这样骨头的信息就能够表示了。然后的话,骨头始终比关节数少一个,那么我们就设置重心节点为一个空骨骼其值为0.所以现在我们的骨头信息就和节点信息的数据一样了,那么我们也就可以把骨头数据当做输入,输入我们之前设定好的网络中,然后形成一个双流结构。如图:
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

如图所示。给定一个样本,我们首先根据关节的数据计算骨骼的数据。然后,关节数据和骨骼数据分别输入两个流。最后,将两个流的SoftMax分数相加,得到融合分数并预测动作标签。
5.Experiments
Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition--论文笔记
文章图片

    推荐阅读