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

摘要

基于骨架的动作识别因为其以时空结合图(spatiotemporal graph)的形式模拟了人体骨骼而取得了显著的效果。

在现有的基于图的方法中,图的拓扑结构是手动设置的,而且在所有层以及输入样本中是固定不变的。这样的方法在用在有层级CNN和不同输入样本的动作识别中不是最佳的。

而且骨架中的具有更多细节和判别式信息二级结构(骨骼长度、方向、骨头等)很少在现有的方法中研究使用

作者提出了自适应的双流图网络结构用来进行基于骨架的动作识别,整个网络的拓扑结构可以端到端地学习出来,这种数据驱动的图模型增加了模型的灵活性,并且并且获得了更普适更一般化的特征来适应不同的样本

另外还采用了双流的结构同时模拟一级结构和二级结构,提高了动作识别的准确率

在NTU-RGBD以及Kinetics-Skeleton两个数据集上取得了非常好的结果

总结

  1. 提出了一个自适应的图卷积网络,可以自动学习出针对不同样本的不同的拓扑结构
  2. 提出了使用节点信息和骨头信息的双流网络结构

一、引言

目前有3种深度学习方法解决基于骨架的动作识别问题,分别是:将关节点序列表示成关节点向量,然后用RNN进行预测;将关节点信息表示成伪图像,然后用CNN去预测;将关节点信息表示成图结构,用图卷积进行预测。前两种方法不能将骨架信息中的图结构提取出来,也很难适应任意形状的骨架结构。最后一种的典型代表ST-GCN设计了一种时空图卷积网络,将人体的自然骨架结构通过拓扑图表示,动作识别性能得到了质的提升。

然而ST-GCN存在一些缺点:1. 根据人体自然结构预先定义好的拓扑结构图对于动作识别任务来说可能不是最优的;2. ST-GCN网络结构的每一个GCN单元的结构都是固定的,整个网络缺少灵活性;3.一个固定的网络结构对于不同样本的不同种类的动作不是最优的。

针对以上问题,作者提出了一个自适应的双流图网络结构:

  1. 一个自适应的图网络结构:针对不同的GCN单元和不同的样本自动生成不同的拓扑结构图。主要是通过设置两种不同的参数来对模型的拓扑图结构进行控制,一种是全局图,表示所有数据公有的模式结构,另一种是独立图,表示的是每个数据独特的模式结构。这种数据驱动的方法增加了模型图结构的灵活性,更加普遍适用于各种各样的样本。
  2. 双流结构:利用关节点和骨头两种信息设计双流网络结构,使用更丰富的骨架信息进行动作识别,显著的提高了识别性能。
  3. 在NTU RGB+D和kinetics上取得了最好的性能。

二、相关工作

基于骨架的动作识别:RNN、CNN、GCN三种

GCN:spatial perspective(空间), spectral perspective(光谱)

三、GCN

见另外一篇介绍ST-GCN的博文,主要看implementation

四、2s-AGCN

1.自适应卷积层

原始GCN:
\[
\mathbf{f}_{o u t}=\sum_{k}^{K_{v}} \mathbf{W}_{k}\left(\mathbf{f}_{i n} \mathbf{A}_{k}\right) \odot \mathbf{M}_{k} \qquad(公式1)
\]
\(K_v\)指的是区域划分,这里用的是第三种划分方式,即将邻域划分为3个部分,\(W_k\)指的是第\(k\)个区域的参数,\(f_{in}\)指的是网络输入,\(A_k\)指的是邻接矩阵和单位矩阵的和,表示节点之间的连接。\(M_k\)指的是自适应权重矩阵。
\[
\mathbf{f}_{o u t}=\sum_{k}^{K_{v}} \mathbf{W}_{k}\mathbf{f}_{i n} \left(\mathbf{A}_{k}+\mathbf{B}_{k}+\mathbf{C}_{k}\right) \qquad(公式2)
\]
其中\(A_k\)和公式(1)中一样,指的是邻接矩阵

\(B_k\)是一个\(N \times N\)的矩阵,和网络中的其他参数仪器优化训练,没有任何约束,可以是任何元素,不仅可以增强节点之间的连接,而且可以使没有关联的节点之间产生关联。在这里的功能和公式(1)中的\(M_k\)类似,但是\(M_k\)只能改变原来不为零的权重,无法让为零的权重重新变成一个起作用的权重值,比如拥抱的姿势,两个胳膊之间的动作比较相似,有一定的关联,但是人体自然结构无法将这两个节点连接起来,利用这个随机的\(B_k\)参数就可以使得这种没有人体自然结构关联的节点关联到一起。所以\(B_k\)是一项完全由训练数据学习出来的参数,比原始的\(M_k\)更加灵活。

\(C_k\)针对每一个样本学习出一个图,用normalized embedded Gaussian方程来衡量两个节点之间的相似性:
\[
f\left(v_{i}, v_{j}\right)=\frac{e^{\theta\left(v_{i}\right)^{T} \phi\left(v_{j}\right)}}{\sum_{j=1}^{N} e^{\theta\left(v_{i}\right)^{T} \phi\left(v_{j}\right)}} \qquad 公式(3)
\]
对于输入的特征图\(f_{in}\)大小为\(C_{in} \times T \times N\),首先用两个embedding方程\(\theta,\phi\)将其embed成\(C_e \times T \times N\),并将其resize成\(N \times C_eT\)和\(C_eT \times N\),然后将生成的两个矩阵相乘得到\(N \times N\)的相似矩阵\(C_k\),\(C^{ij}_k\)表示节点\(v_i\)和节点\(v_j\)之间的相似性,因为normalized Gaussian和softmax操作是等价的,所以公式(3)等同于公式(4)。如下图所示是AGCN的计算过程示意图。
\[
\mathbf{C}_k = softmax(\mathbf{f}_{in}^T\mathbf{W}_{\theta k}^T\mathbf{W}_{\theta k}\mathbf{f}_{in})
\]

2. 自适应图卷积块

网络的时域和ST-GCN一样,都是对\(C \times T \times N\)的特征图进行\(K_t \times 1\)的卷积,空间域的GCN块(Convs)和时间域的GCN块(Convt)联合起来组成GCN块,如下图所示。

3. 自适应的图卷积网络

4. 双流网络

计算骨头信息作为第二类信息,源点\(v_1 = (x_1, y_1, z_1)\),目标点\(v2 = (x_2, y_2, z_2)\),则骨头\(e_{v_1,v_2} = (x_2-x_1, y_2-y_1, z_2-z_1)\),因为边数总比节点数少一个,所以增加一个中心点自环的一个长度为0的边。最后将两支网络输出的softmax打分值加和作为最后的分数去预测动作标签。

五、实验

1.消融实验

2.图的可视化

一个样本的不同层的图结构是不同的,而且每个节点的重要性是

不同的

不同样本相同层的图结构是不同的

3.和state-of-the-arts比较

原文链接:原文链接
代码链接:代码链接

版权声明:本文为博主原创文章,未经博主允许不得转载。

出处:https://www.cnblogs.com/shyern/

Two-Stream Adaptive Graph Convolutional Network for Skeleton-Based Action Recognition的更多相关文章

  1. 《T-GCN: A Temporal Graph Convolutional Network for Traffic Prediction》 代码解读

    论文链接:https://arxiv.org/abs/1811.05320 博客原作者Missouter,博客链接https://www.cnblogs.com/missouter/,欢迎交流. 解读 ...

  2. Graph Convolutional Network

    How to do Deep Learning on Graphs with Graph Convolutional Networks https://towardsdatascience.com/h ...

  3. GRAPH CONVOLUTIONAL NETWORK WITH SEQUENTIAL ATTENTION FOR GOAL-ORIENTED DIALOGUE SYSTEMS

    面向领域特定目标的对话系统通常需要建模三种类型的输入,即(i)与领域相关的知识库,(ii)对话的历史(即话语序列)和(iii)需要生成响应的当前话语. 在对这些输入进行建模时,当前最先进的模型(如Me ...

  4. GCN(Graph Convolutional Network)的简单公式推导

    第一步:从前一个隐藏层到后一个隐藏层,对结点进行特征变换 第二步:对第一步进行具体实现 第三步:对邻接矩阵进行归一化(行之和为1) 邻接矩阵A的归一化,可以通过度矩阵D来实现(即通过D^-1*A来实现 ...

  5. GCN: Graph Convolutional Network

    从CNN到GCN的联系与区别: https://www.zhihu.com/question/54504471/answer/332657604 更加详解Laplacian矩阵: https://ww ...

  6. 关于Graph Convolutional Network的初步理解

    为给之后关于图卷积网络的科研做知识积累,这里写一篇关于GCN基本理解的博客.GCN的本质是一个图网络中,特征信息的交互+与传播.这里的图指的不是图片,而是数据结构中的图,图卷积网络的应用非常广泛 ,经 ...

  7. 《T-GCN: A Temporal Graph Convolutional Network for Traffic Prediction》 论文解读

    论文链接:https://arxiv.org/abs/1811.05320 最近发现博客好像会被CSDN和一些奇怪的野鸡网站爬下来?看见有人跟爬虫机器人单方面讨论问题我也蛮无奈的.总之原作者Misso ...

  8. 基于3D卷积神经网络的行为识别:3D Convolutional Neural Networks for Human Action Recognition

    简介: 这是一片发表在TPAMI上的文章,可以看见作者有余凯(是百度的那个余凯吗?) 本文提出了一种3D神经网络:通过在神经网络的输入中增加时间这个维度(连续帧),赋予神经网络行为识别的功能. 相应提 ...

  9. 论文笔记之:Semi-supervised Classification with Graph Convolutional Networks

    Semi-supervised Classification with Graph Convolutional Networks 2018-01-16  22:33:36 1. 文章主要思想: 2. ...

随机推荐

  1. Codeforces Round #549 (Div. 2) E 倍增处理按排列顺序的上一个位置

    https://codeforces.com/contest/1143/problem/E 题意 p为n的一个排列,给出有m个数字的数组a,q次询问,每次询问a数组区间[l,r]中是否存在子序列为p的 ...

  2. [LeetCode] 119. Pascal's Triangle II 杨辉三角之二

    Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle. Note t ...

  3. SpringBoot使用token简单鉴权

    本文使用SpringBoot结合Redis进行简单的token鉴权. 1.简介 刚刚换了公司,所以最近有些忙碌,所以一直没有什么产出,最近朋友问我登录相关的,所以这里先写一篇简单使用token鉴权的文 ...

  4. 用SQL语句去掉重复的记录

    删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据 1.delete from 表 where id not in (select max(id) ...

  5. url拼接参数格式

    在一些情况下,需要直接往url上拼接请求参数. http://www.yanggb.com?flag=1&type=normal&role=customer 通过上面的例子就可以看出, ...

  6. springboot+RabbitMQ 问题 RabbitListener 动态队列名称:Attribute value must be constant

    因为多机环境fanout广播模式,每台机器需要使用自己的队列接受消息 所以尝试使用以下的方案 private static final String QUEUE_NAME="foo.&quo ...

  7. scala的应用--UDF:用户自定义函数

    在window10下安装了hadoop,用ida创建maven项目. <properties> <spark.version>2.2.0</spark.version&g ...

  8. Python转义序列

    正则表达式参考:https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

  9. Java : Hibernate 动态+分页+自定义字段+自定义实体类查询

    // 组合查询public List<ListBookDTO> listSetDSL(PublishingHouse publishingHouse,Integer minDiscount ...

  10. 使用python远程连接数据库

    根据web连接服务的原理,我们可以通过一台电脑连接我们另一台电脑上的数据库 一.开启数据库的权限1.Mysql:1)修改访问权限首先修改可以访问的ip,把‘localhost’全部修改为‘%’,打开c ...