8bcfb5a526db25a0e3b86f576707a975.png

Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition

论文链接:

https://arxiv.org/abs/1805.07694​arxiv.org

代码链接:

lshiwjx/2s-AGCN​github.com
5036332fe7c489aa66048b948a45ec4f.png

跟AS-GCN相同,这篇论文也是对ST-GCN的改进,同样是2019年发表在CVPR上面的文章。论文提出一个双流自适应图卷积网络(2s-AGCN)。从名字可以看出,文章主要创新点有两个,一个是双流网络,另外一个是自适应性。

首先,老一套,先回顾一下ST-GCN的结构,这部分我在之前的文章写了,这里打一下广告,有兴趣可以看一下:

哀殿:【骨骼行为识别】ST-GCN论文理解​zhuanlan.zhihu.com
5186b75917c15a8ec63892b2c6597204.png

我们只介绍ST-GCN的整体公式,如下图公式(2)。

是权重,
是邻接矩阵,
是注意力掩码,
是子集类别数,一般取3。

104e6db5df4a9f36aef82e838e64ca94.png

在说本篇论文的创新前,先说明一下ST-GCN的缺点。ST-GCN的注意力机制灵活性不够,掩码

是与邻接矩阵直接相乘,这里说的相乘是按元素相乘,并不是矩阵相乘。这就造成一个现象,就是如果邻接矩阵
里面部分元素为0,那么无论
对应元素为何值,最后结果都是0。换句话说就是不会创造不存在的连接,比如对于“行走”动作,手和腿的联系很大,但是手和腿没有直接相连,所以效果不好。ST-GCN的第二个缺点就是没有利用骨骼数据的第二特征,这里第一特征就是关节坐标,第二特征就是骨骼的长度和方向。直觉上,第二特征也包含了丰富的行为信息。

下面介绍的是针对ST-GCN的第一个缺点进行的改进。2s-AGCN提出来的自适应图卷积的主要公式如下图公式(3)

1073afbcb0be91340abf79271cbbb7a5.png

从公式(3)可以看到,相比于ST-GCN,2s-AGCN对邻接矩阵进行了改进。这里的邻接矩阵是三个部分之和。

第一部分

是和公式(2)中的邻接矩阵相同(另外一篇论文的DGNN结构对此进行了改进)。

第二部分

和第一部分类似,也是一个
的邻接矩阵,这里有所不同的是,
是一个可训练的权重,而且没有对其进行如归一化等任何约束条件,也就是
完全是从数据学习过来的参数。他不仅能表示两个节点是否存在联系,而且能表示联系的强弱。乍一看
似乎和之前提到的掩码
没什么区别,这里与ST-GCN不同的是融合方式。ST-GCN是相乘,这里是相加,相加就可以产生不存在的联系。

第三部分

是对每个样本学习一个独有的图。它用的是非常经典的高斯嵌入函数,功能就是捕捉关节之间的相似性。他的功能其实和
有点类似,就是确定两个顶点是否存在连接和连接的强弱。说实话我是不太懂他们在功能上的差别在哪,我能理解的就是
中的元素没有进行归一化等处理,功能就是注意力机制。而
中的元素是0-1的概率,是通过softmax层处理过的。下图是他的整体图,从图上可以看到输入数据的形状是
,编码成
,这里的
论文上没有明确说是什么,我是看了代码才看懂,这里的
是输出通道除以
。输出通道和输入通道一般有两种关系,要么是输出通道和输入通道相等,要么输出通道是输入通道的一半。除以
的目的是因为最后的结果是
的,不包含通道维度,所以这样做可以减少计算量,只要控制
卷积层的输出通道就行了。因为其实
的卷积的参数量挺大的。原本2s-AGCN的参数量就比ST-GCN多很多。

其实关于

,我还有点话想说,生成
的方式叫做高斯嵌入函数,也就是
分支和
分支相乘得到
。这个
是pytorch里面的torch.matmul()函数,这个函数的工作方式大家可以自行百度,这里的维度并不是图上提到的
,其实前面还有批次乘以
(表示最大人数,一般是2)。还有一点,就是下图的第二个相乘,也就是
,他后面其实还有个softmax层,这部分因为是调参做的一些改进,文章并没有写到原理上。关于softmax的维度等参数,大家可以看看原论文的代码。

041a3375510ce818fbbe0e0ff9dfce80.png

编码后的

再通过两个转换函数分别变换成
,然后两个矩阵相乘得到
的相似矩阵
中的元素
代表顶点
和顶点
的相似性,其值为0-1。最后的公式如下图公式(5)。

71dbc8ed4b1dc0fa721ee7ab05a2e98b.png

针对于双流法中的另外一个分支,输入的数据是骨骼的长度和方向。长度和方向看起来比关节坐标要复杂,其实很简单。首先寻找一个人体骨骼的重心,就是人胸腔部分作为中心点,因为每个骨骼都有两个点,把靠近中心点的关节看做源关节,远离中心点的关节看做目标关节。所以说关节就是点,骨骼就是从一个点指向另外一个点的向量,向量的长度就是骨骼的长度,向量的方向就是骨骼的方向。

这样另外一个分支流的输入数据就明朗了,因为骨骼是两个关节组成一个骨骼,而且没有环状的图,所以关节数比骨骼数多1个。这里添加一个值为0的空关节,这样关节数与骨骼数就相同,网络也相同。最后双流法的框架如下图。

8e146248c7a629223b01713c06e13ffc.png

总的来说这篇论文比较好理解,思路也比较明确,针对ST-GCN的两个缺点进行改进,提出两个创新点。作者提到的用相加取代相乘的注意力机制是一种很好的创新,另外就是利用骨骼的长度和方向也是最近两年开始使用的。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐