Skeleton-Based Action Recognition with Multi-Stream Adaptive Graph Convolutional Networks(一)论文阅读

MS-AAGCN_2019

Author:Lei Shi, Yifan Zhang, Member, IEEE, Jian Cheng, Member, IEEE, and Hanqing Lu, Senior Member, IEEE
github:https://github.com/lshiwjx/2s-AGCN

Abstract

作者提出了一种新的多流注意增强自适应图卷积神经网络(MS-AAGCN),用于基于骨架的动作识别。作者模型中的图拓扑可以基于端到端的输入数据统一地或单独地学习。
创新点:

  1. An adaptive graph convolutional network is proposed
    to adaptively learn the topology of the graph in an end to-end manner.

图拓扑可以基于端到端的输入数据统一地或单独地学习。这种数据驱动的方法增加了模型的灵活性,使其更具通用性,以适应不同的数据样本。

  1. A STC-attention module is proposed
    and embedded in each graph convolutional layer, which can
    help model learn to selectively focus on discriminative joints,
    frames and channels.

通过一个时空通道注意模块进一步增强了自适应图卷积层,使模型更加关注重要的关节、帧和特征。

  1. The second-order information (bones)
    of the skeleton data is firstly formulated and combined with
    the first-order information (joints) in this work, which brings
    notable improvement for the recognition performance.

建立了骨架数据的二阶信息(骨骼),并与一阶信息(关节)结合,在多流框架下,对关节和骨骼的信息以及它们的运动信息进行了同步建模,提高了识别精度。(后面会具体讲一阶信息和二阶信息的具体概念)

Introduction

首先陈述ST-GCN的缺点(对于ST-GCN不了解的读者,可以查阅我之前的博客ST-GCN学习之路),有三个方面:

  1. 对于在人体图上相距较远的节点ST-GCN很难捕捉到他们的依赖关系。如拍手、阅读等动作,两只手的关联很大,但是在ST-GCN中因为两只手在图上的距离很大,其关联性并没有得到体现。
  2. 神经网络是分层的,不同的层包含不同的语义层次。然而,ST-GCN中应用的图的拓扑结构在所有层上都是固定的,缺乏对不同层中包含的多级语义进行建模的灵活性和能力。
  3. 对于不同动作类的所有样本,一个固定的图结构可能不是最优的。对于“擦脸”和“触头”等动作,手和头之间的联系应该更紧密。而对于"系鞋带",手和脚之间的关系应该更紧密。

上述三点说明了:图的结构不应该是预先启发式的根据人体结构定义,而应该是由数据驱动(训练)形成的。

Related Work

介绍了人体动作识别从2D手工设计特征到ST-GCN的发展过程。

GRAPH CONVOLUTIONAL NETWORKS

这部分基本上就是回顾了ST-GCN里时空图卷积的公式,有ST-GCN基础的读者可以大致回顾一下。不过我认为这篇文章里分析ST-GCN公式竟然比原文里解释的更清楚(迷惑操作)

A.Graph construction

一帧中的原始骨架数据总是由一系列向量表示。每个矢量表示相应人体关节的二维或三维坐标。一个完整的动作包含多个帧,对于不同的样本具有不同的长度。我们使用时空图来模拟这些关节之间的空间和时间维度的结构化信息。这里,空间维度是指同一帧中的关节,时间维度是指所有帧上的相同关节。
  图1中的左子图示出了构造的4个时空骨架图的示例,其中关节表示为顶点,它们在人体中的自然连接表示为空间边(图1中的橙色线,左)。对于时间维度,两个连续帧中的对应关节与图1(左)中绿线所示的时间边缘连接。将每个关节的坐标矢量设置为对应顶点的属性。由于图是内在的,并且是基于人体的自然连通性而构建的,我们称之为 human-body-based图。
  在这里插入图片描述

B. Graph convolution

图结构如上定义,对于空间维度。顶点 v i v_{i} vi 上的图卷积操作表示为:
f o u t = ∑ v t j ∈ B ( v t i ) 1 Z t i ( v t j ) f i n ( v t j ) w ( l t i ( v t j ) ) (1) f_{out}=\sum_{v_{tj}\in B(v_{ti})}\frac{1}{Z_{ti}(v_{tj})}f_{in}(v_{tj})w(l_{ti}(v_{tj})) \tag{1} fout=vtjB(vti)Zti(vtj)1fin(vtj)w(lti(vtj))(1)
在这里插入图片描述

C. Implementation

在这里插入图片描述

MULTI-STREAM ATTENTION-ENHANCED ADAPTIVE

在本节中,我们详细介绍了multi-stream attention-enhanced adaptive graph convolutional network (MS-AAGCN)的细节。

A. Adaptive graph convolutional layer

上面说了基于人体的骨架图,计算骨架数据的时空图卷积,并不是一种好的方法(具体见上面ST-GCN的缺点)。为了解决这个问题,我们提出了一个自适应图的卷积层。它以端到端学习的方式对图的拓扑结构和网络的其他参数进行了优化。
将原来空域卷积层式中的 A k A_{k} Ak改为两个子图 B k 和 C k B_{k}和C_{k} BkCk的加权和: B k + α C k B_{k}+\alpha C_{k} Bk+αCk
f o u t = ∑ k K v W k f i n ( B k + α C k ) (3) f_{out}=\sum_{k}^{K_{v} }W_{k}f_{in}(B_{k}+\alpha C_{k})\tag{3} fout=kKvWkfin(Bk+αCk)(3)
下面分别介绍两个子图是怎么得到的。

The first sub-graph ( B k B_{k} Bk)

B k B_{k} Bk是从数据中学习到的全局图。它用基于人体的图的邻接矩阵 A k A_{k} Ak进行初始化,与 A k A_{k} Ak不同的是, B k B_{k} Bk的元素在训练过程中与其他参数一起被参数化和更新。对 B k B_{k} Bk的值没有约束,这意味着该图是完全根据训练数据学习的(也就是说不会有人体关节之间的连接关系的约束)。除此之外, B k B_{k} Bk在每一个卷积层都是独特的,因此对不同层中包含的不同语义级别更为个性化。

The second sub-graph ( C k C_{k} Ck)

C k C_{k} Ck是每个样本的私有图,对于每个样本来说 C k C_{k} Ck都独一无二(或者说是独立的)。因为对于每个卷积层每一次前向传播来说,我们都需要计算一次 C k C_{k} Ck,相比之下 B k B_{k} Bk就不用根据输入样本而进行改变。(下面的卷积层示意图会更清楚的表达这一点)
相似矩阵 C k C_{k} Ck的计算方式为:
C k = s o f t m a x ( f i n T W θ k T W ϕ k f i n ) (4) C_{k}=softmax(f_{in}^{T}W_{\theta k}^{T}W_{\phi k}f_{in})\tag{4} Ck=softmax(finTWθkTWϕkfin)(4)
其中, f i n ∈ R C i n × T × N f_{in}\in \mathbb{R}^{C_{in}\times T\times N} finRCin×T×N是输入的特征图,我们想将它映射到 R C i n × T × N \mathbb{R}^{C_{in}\times T\times N} RCin×T×N的空间,因此我们选用两个 1 × 1 1\times1 1×1的可学习的卷积核 W θ k W_{\theta k} Wθk W ϕ k W_{\phi k} Wϕk W θ k ∈ R C e × C i n × 1 × 1 W_{\theta k}\in \mathbb{R}^{C_{e}\times C_{in}\times1\times1} WθkRCe×Cin×1×1, W ϕ k ∈ R C e × C i n × 1 × 1 W_{\phi k}\in \mathbb{R}^{C_{e}\times C_{in}\times1\times1} WϕkRCe×Cin×1×1。所以 f i n T W θ k T ∈ R N × T × C e f_{in}^{T}W_{\theta k}^{T}\in \mathbb{R}^{N\times T\times C_{e}} finTWθkTRN×T×Ce f i n W ϕ k ∈ R C e × T × N f_{in}W_{\phi k}\in \mathbb{R}^{C_{e}\times T\times N} finWϕkRCe×T×N。从而得到 s o f m a x ( ) sofmax() sofmax()内的形状为 R t i m e s N × N \mathbb{R}^{times N\times N} RtimesN×N。再经过 s o f m a x ( ) sofmax() sofmax()对其中元素进行归一化。 C k C_{k} Ck中的元素 C k i j C_{k}^{ij} Ckij即表示顶点 v i v_{i} vi和顶点 v j v_{j} vj之间的相似性。文中把这种方法称为normalized embedded Gaussian function to estimate the feature similarity of the two vertexes
(代码中这里的 C e C_e Ce 是输出通道除以 4 4 4 ,个人认为 1 × 1 1\times 1 1×1的卷积核就是整合通道间的数据,而除以 4 4 4的目的是减少 1 × 1 1\times 1 1×1卷积核的计算量,只要控制输出通道是 N × N N\times N N×N就行了。(这里其实我不是太懂为什么这个 N × N N\times N N×N矩阵体现了关节顶点之间的相似性,有知道的小伙伴也可以留言讨论一下)

Gating mechanism

这里的Gating mechanism的意思其实很简单,就是将 B k B_{k} Bk C k C_{k} Ck通过一个可学习的参数 α \alpha α线性组合在一起。而且这个 α \alpha α在每一层卷积层里都是不同的,这也丰富了模型的表达能力。

综合上面三个机制,每一层再添加了一个残差连接。即得到了本文Adaptive graph convolutional layer卷积层的结构:(个人觉得则张图做的非常好,这里还要注意一个点,就是这个 K v K_{v} Kv沿袭了ST-GCN对每个节点周围节点集合划分成三个子集的方式)
在这里插入图片描述

在实验中,我们发现图拓扑在训练过程的早期发生了显著变化,导致模型不稳定,影响模型的收敛性。为了稳定训练水平,我们尝试了两种策略。

  1. The first strategy is using A k + α B k + β C K A_{k}+\alpha B_{k}+\beta C_{K} Ak+αBk+βCKas the adjacency matrix.where A k A_k Ak is the human-body-based graph which is fixed. The B k B_k Bk, C k C_k Ck, α and β are initialized to be 0, thus the A k A_k Ak will dominate(主导) the early stage of the training.
  2. The second strategy is initializing the B k B_k Bk with A k A_k Ak and blocking the propagation of the gradient for B k B_k Bk at the early stage of the training process until the training stabilizes.

经过作者的实验证明,第二种方法略微好于第一种方法。

B. Attention module

提出了 STC-attention module:spatial attention module(SAM), temporal attention module(TAM) and channel attention module(CAM)。(空间、时间、通道三个维度的注意力模块)
在这里插入图片描述
这里用到的attention机制是类似于SeNetCBAM中的机制,以通道注意力模块(SAM)为例:
在这里插入图片描述
首先通过一个global average pooling,公式为:
在这里插入图片描述
W × H × C W\times H\times C W×H×C的特征图转化为 1 × 1 × C 1\times 1\times C 1×1×C的向量(即将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,它表征着在特征通道上响应的全局分布。)接下来就是通过 F e x F_{ex} Fex操作:
在这里插入图片描述
这里先用 W 1 W_1 W1乘以z,就是一个全连接层操作, W 1 W_1 W1的维度是 C / r × C C/r \times C C/r×C C / r C/r C/r可以把它看作是全连接层中的隐藏层,r参数的目的是为了

  1. 具有更多的非线性,可以更好地拟合通道间复杂的相关性;
  2. 极大地减少了参数量和计算量。然后通过一个 Sigmoid 的门获得 0~1 之间归一化的权重,最后通过一个 Scale 的操作来将归一化后的权重加权到每个通道的特征上。

然后再经过一个ReLU层;然后再和W2相乘,和W2相乘也是一个全连接层的过程,W2的维度是 C ∗ C / r C*C/r CC/r,因此输出的维度就是 1 × 1 × C 1\times 1\times C 1×1×C;最后再经过sigmoid函数,得到s。
最后是一个 Reweight 的操作,我们将 输出的s看做是每个特征通道的重要性(权重),然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的reweight,公式为:
在这里插入图片描述
上述就是通道注意力模块的构建过程。类比通道注意力模块,作者构建出了空间注意力模块和时间注意力模块:
在这里插入图片描述
STC每个模块中在乘上原feature map后再通过残差连接:
在这里插入图片描述
作者在原文中还提到了STC中三个模块的顺序问题,在Experiment中给出了三个模块按不同顺序放置对于最终效果的影响,最终得出以S-T-C顺序放置效果最好。

C. Basic block

在时域上的卷积和ST-GCN相同。下图中给出了一个网络基本单元的示意图,其中Convs表示Adaptive graph convolutional layer,Convt表示在时域上的卷积。

performing the K t K_t Kt × 1 convolution on the C × T × N feature maps. Both the spatial GCN and the temporal GCN are followed by a batch normalization (BN) layer and a ReLU layer. As shown in Fig. 4, one basic block is the series of one spatial GCN (Convs), one STC-attention module (STC) and one temporal GCN (Convt). To stabilize the training and ease the gradient propagation, a residual connection is added for each basic block.
在这里插入图片描述

D. Network architecture

网络的总体架构是这些基本块的堆栈(图4)。一共有9个块。每个块的输出通道数为64、64、64、128、128、128、256、256和256。在开始处添加一个数据BN层以规范化输入数据。在结束时做一个全局平均池化,最后的输出被发送到softmax分类器以获得预测结果。每一层下面的三个数分别代表:输入通道数、输出通道数、步长

As shown in Fig. 5, the overall architecture of the network is the stack of these basic blocks (Fig. 4). There are a total of 9 blocks. The numbers of output channels for each block are 64, 64, 64, 128, 128, 128, 256, 256 and 256. A data BN layer is added at the beginning to normalize the input data. A global average pooling layer is performed at the end to pool feature maps of different samples to the same size. The final output is sent to a softmax classifier to obtain the prediction.在这里插入图片描述

E. Multi-stream networks

Multi-stream在文中体现位四个流,这四个流分别为:关节点流、骨骼向量流、关节点-动量流、骨骼向量-动量流。针对这四个流,分别训练四个预测网络,最终利用加权求和将四个流的softmax score进行融合,得到动作分数并预测动作标签。
在这里插入图片描述
上面图中L对应的是bone(骨骼向量)这个地方应该是论文误标成了L。下面说明一下这四个流的输入怎么计算,鉴于文中在这一块写的很简略,本人按照自己的理解阐述,如果有错误欢迎在评论指正:
首先J-Stream就是最直接的关节点输入,他为 R B a t c h s i z e × C i n × T × N \mathbb{R}^{Batchsize\times C_{in}\times T\times N} RBatchsize×Cin×T×N
关节向量L-Stream的输入计算方法为:首先寻找一个人体骨骼的重心,就是人胸腔部分关节点作为中心点,因为每个骨骼向量都有两个关节点,把靠近中心点的关节看做源关节(source joint),远离中心点的关节看做目标关节(target joint)。所以说关节就是点,骨骼就是从一个点指向另外一个点的向量,向量的长度就是骨骼的长度,向量的方向就是骨骼的方向。数学上表达为:
在这里插入图片描述
如果骨骼节点一共有N个,那么按这种方法构建出来的关节向量就有N-1个。其中,因为我们预先设置的重心点(胸腔关节点)一直会被当做源关节,因此我们将重心点在骨骼向量流-网络的输入对应值设定为0。这样我们就也可以得到一个维数为 R B a t c h s i z e × C i n × T × N \mathbb{R}^{Batchsize\times C_{in}\times T\times N} RBatchsize×Cin×T×N的输入了。

接下来就是动量M的计算部分,这部分比较简单,就是将关节点和骨骼向量的 t + 1 t+1 t+1时刻的 R t + 1 B a t c h s i z e × C i n × N \mathbb{R}^{Batchsize\times C_{in} \times N}_{t+1} Rt+1Batchsize×Cin×N特征和 t t t时刻的 R t + 1 B a t c h s i z e × C i n × N \mathbb{R}^{Batchsize\times C_{in} \times N}_{t+1} Rt+1Batchsize×Cin×N特征相减,相当于是对输入在时间维度上做一个后向差分,得到一个全新的输入。这样子就构建出了L-M流和J-M流。具体公式如下:
在这里插入图片描述

Experiment

这部分主要讲的是模型的效果和训练时的Detail设置,需要的读者可以自行查阅论文。

Summary

本篇论文是ST-GCN的一篇改进之作,其中不受人体骨骼物理节点约束,构建自适应图的方法十分新颖,另外注意力机制多流的思想也是比较好的创新。但是它不好的地方在于与ST-GCN相比参数太多,导致整个网络过于冗大了。接下来还会出一篇关于它的源码解读的博客。
参考文献:
论文笔记–Skeleton-Based Action Recognition with Multi-Stream Adaptive Graph Convolutional Networks
【骨骼行为识别】2s-AGCN论文理解

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值