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. [LeetCode] 683. K Empty Slots K个空槽

    There is a garden with N slots. In each slot, there is a flower. The N flowers will bloom one by one ...

  2. 分布式共识算法 (二) Paxos算法

    系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.背景 1.1 命名 Paxos,最早是Le ...

  3. Maven使用第三方Jar文件

    本例中,需要在Maven项目里添加uiautomator.jar文件.以下介绍两种方法: 方法一:在pom.xml里指定jar文件目录 <dependency> <groupId&g ...

  4. W5500电路图

    W5500是韩国一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,W5500同时也是一颗工业级以太网控制芯片,最近发现我们国内也有和W5500 芯片一样芯片 介绍给大家 如下图:

  5. Github上传项目及更新自己的项目

    更新:请前往下载Github Deskdop,Git命令什么的再也不用啦! 一.首次上传项目 1.在GitHub上创建对应仓库 仓库建立如下: README文件不用勾选,否则初次上传文件就要合并. 2 ...

  6. 【javascript】判断是否为正整数

    function isNormalInteger(str) { var n = Math.floor(Number(str)); return n !== Infinity && St ...

  7. Laravel服务容器的绑定与解析

    本篇文章给大家带来的内容是关于Laravel服务容器的绑定与解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言   老实说,第一次老大让我看laravel框架手册的那天早上,我 ...

  8. nginx反向代理配置去除前缀

    (转载)原文链接:https://blog.csdn.net/gongchenyu/article/details/85960027 使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发 ...

  9. QT 随笔目录

    [1]基础部分 <信号和槽机制> <信号与槽知识点> <QString 与 string转换> <QT 继承QWidget && 继承QDia ...

  10. Nginx 极简入门教程!

    上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 Nginx 扫盲入门吧! 基本介绍 Ngi ...