【论文笔记】Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition...

2023-05-16

 

Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition

2018-01-28  15:45:13 

 

研究背景和动机:

  行人动作识别(Human Action Recognition)主要从多个模态的角度来进行研究,即:appearance,depth,optical-flow,以及 body skeletons。这其中,动态的人类骨骼点 通常是最具有信息量的,且能够和其他模态进行互补。但是最近研究这个东西的工作,却很少,我们系统的分析了这个模态,目标就是想开发一种 principle and effective 的方法来建模动态的骨骼点,并且将其用于行为识别。  

  动态的骨骼模态,可以自然地表达为时间序列的 human joint locations,行人的动作,就可以看做是分析这些运动模式就可以了。当前的方法主要是简单的将 the joint coordinates 构成特征向量,然后应用 temporal analysis thereon。这些方法的能力是有限的,因为他们并没有显示的探索这些 joints 之间的空间关系,然而这对于理解 human actions 来说,是非常重要的。最近也有些方法将这些连接考虑到他们的模型中,但是,这些方法严重的依赖于手工设计的 parts 或者 rules。这就使得他们的方法很难应用到其他问题上。

  为了克服这些困难,我们需要一种新的方法可以自动的捕获 the patterns embedded in the spatial configuration of the joints, 以及 their temporal dynamics。这是深度神经网络的优势,但是,骨骼点的数据是一种 graph 的结构,而不是 2D 或者 3D 的网格,所以,很难利用当前的 CNN 来直接处理这些数据。最近,graph convolutional networks(GCNs),将 CNN 拓展到了 任意结构的 graphs 上来,已经得到了很大的关注,并且得到了广泛的应用,如:image classification, document classification, and semi-supervised learning. 但是,这些方法都是基于一种 fixed  graph 作为输入。将 GCNs 在大型数据集上来建模 dynamic graphs,如:human skeleton sequence,还没有被研究。

  

  本文通过将 GCN 拓展到 spatial-temporal graph model,称为:ST-GCN。如上图所示,这个模型是在 一个骨骼图的序列上 构建的,每个节点对应了 a joint of the human body。有两种 edges,即:spatial edgestemporal edges。 

  

   本文的创新点:

  1).  We propose ST-GCN, a generic graph-based formulation for modeling dynamic skeletons, which is the first that applies graph-based neural networks for this task. 

  2).  We propose several principles in designing convolution kernels in ST-GCN to meet the specific demands in skeleton modeling. 

  3).  On two large scale datasets for skeleton-based action recognition, the proposed model achieves superior performance as compared to previous methods using hand-crafted parts or traversal rules, with considerably less effort in manual design.

  The code and models of ST-GCN are made publicly available https://github.com/yysijie/st-gcn.  

 

将 GCNs 拓展到 graph 上主要有如下两大类方法:

  1). the spectral perspective, where the locality of graph convolution is considered in the form of spectral analysis

  2). the spatial perspective,  where the convolutioan filter are applied directly on the graph nodes and their neighbors

 

3 Spatial Temporal Graph ConvNet 

  3.1. Pipeline Overview:

  基于骨骼的数据可以通过捕获运动的设备,或者 视频中姿态估计的算法得到。通常,这些数据是序列的视频帧,每一帧都有关节点坐标的结合。给定 2D 或者 3D 坐标的形式,关节点的序列,我们构建一个时空图(spatial temporal graph),其中,关节点是 graph nodes,人体结构 以及 时间 的自然连接作为 graph 的 nodes。ST-GCN 的输入是 graph nodes 的的联合坐标向量。这个可以类比 基于图像的 CNNs ,其输入是 pixel intensity vectors residing on the 2D image grid。时空图卷积操作的多层,将会用来处理这些数据,然后在 graph 上,产生高层的 feature maps。然后用标准的 SoftMax 分类器来进行分类。整个模型是 end to end trained,并可以用 BP 算法进行优化。

  

  3.2. Skeleton Graph Construction

  我们构建一个无向图 G = {V, E},其有 N 个节点,T frame是 featuring both intra-body and inter-frame connection。

  在一个 graph 中,节点的集合 $ V = {vti|t=1,..,T} $ includes the all the joints in a skeleton sequence。作为 ST-GCN's 的输入,节点 F(vti) 的特征向量是由 坐标向量 以及 预测的置信度构成的。我们在骨骼序列上构建 spatial-temporal graph 是有两个步骤:

  首先,在一帧上的节点,我们按照人体结构的连接性,用 edge 将其连接起来;

  然后,每一个节点,会在连续视频帧上,会被连接到相同的节点。

  

  正式的来说,the edge set E 是有两种子集合的:

  the first subset depicts the intra-skeletion connection at each frame;

  the second subset contains the inter-frame edges,which connect the same joints in consecutive frames。

  

  3.3. Spatial Graph Convolutional Neural Network:

  在我们进入完全的 ST-GCN 之前,我们首先看单帧上的 graph CNN model。在这种情况下,在时刻 t ,单张视频帧的情况下,将会有 N 个骨骼节点 $V_t$,并且有骨骼边界(the skeleton edges)。我们回忆在 2D 自然图像或者 feature maps 上的卷积操作,卷积操作的输出仍然是 2D 的网格。当步长为1,并且设置合适的 padding 时,输出的 feature maps 可以和输入拥有相同的大小。我们在接下来的讨论中,都是基于这个假设。给定一个 kernel size 为 K*K 的卷积操作,通道个数为 c 的输入 feature maps,在位置 x 处的单个通道的输出值为:

  

 其中, P 是 采样函数(the sampling function p),列举了位置 x 的近邻(enumerates the neighbors of location x)。在图像卷积中,也可以表示为:$p(x, h, w) = x + p' (h, w)$。加权函数(the weight function w)提供了一个权重向量,来计算其与采样的输入向量的内积(provides a weight vector in c-dimensional real space for computing the inner product with the sampled output feature vectors of dimension c)。由于加权函数与位置 x 无关,所以,滤波器的权重可以在图像中进行共享。在图像领域,标准的卷积在图像领域可以通过编码矩形网格(rectangle grid)。更加细节的解释和应用可以参考 Dai et al. 2017 的文章。

   在 graph 上的卷积操作可以定义为:将上述定义拓展到存在于 spatial graph $V_t$ 的输入特征图上,即:the feature map has a vector on each node of the graph(在 graph 上的每个节点都有一个向量)。下一步的拓展,就是重新定义采样函数 p 和 加权函数 w。

  

  Sampling function. 在图像中,采样函数 p(h, w) 是定义在中心位置为 x 的近邻像素上的。在 graph 中,我们可以类似的定义采样函数在一个节点 $v_{ti}$ 的近邻集合 $B(v_{ti})$ 。所以采样函数 p 可以写为:

  

在本文当中,我们对于所有的情况,都设置 D = 1,即:1-neighbor set of joint nodes. 更多数量的 D 留作未来工作。

  

  Weight function. 相对于采样函数,加权函数的定义更加 trickier。在 2D 卷积中,一个固定的 grid 自然的存在于中心位置(naturally exists around the center location)。所以,相邻像素点拥有一个固定的空间次序(pixles within the nighbor can have a fixed spatial order)。The weight function can then be implemented by indexing a tensor of (c, K, K) dimensions according to the spatial order. 像我们刚刚创建的那种 general 的 graph,并没有这样的潜在的排列(there is no such implicit arrangement)。该问题首先被 Niepert et al. 研究,the order 定义为:a graph labeling process in the neighbor graph around the root node. 我们跟随这个 idea 来构建我们的权重函数。并非给定每一个近邻节点一个特定的 labeling,我们简单的将骨骼节点的近邻集合划分为固定个数的 K 个子集,每一个子集有一个 label。于是,我们有了一个映射,即:maps a node in the neighborhood to its subset label. 加权函数 w 可以索引一个 tensor (c, K) dimension 来执行:

  

  Spatial Graph Convolution. 有了优化的采样函数和加权函数,我们可以重新定义公式(1)为:

  

  其中,the normalizing term Z 等于对应子集的基数。用公式(2)(3)代替公式(4)中的各项,我们可以得到:

  

  值得注意的是,这个表达形式也可以看做是标准的 2D convolution,如果我们将 image 看做 常规的 2D grid(this formulation can resemble the standard 2D convolution if we treat a image as a regular 2D grid)。

 

  Spatial Temporal Modeling.  在上述 Spatial graph CNN 的基础上,我们现在开始将其拓展都 时空结构上。在构建 graph 的时候,graph 的 temporal aspect 我们是直接时序上相同的节点连接起来的。这确保我们可以定义一种非常简单的策略将 Spatial graph CNN 拓展到 spatial temporal domain。我们将近邻节点拓展到包含时序连接的节点(we extend the concept of neighborhood to also include temporally connected joints):

  

  为了完成在 spatial temporal graph 上的卷积操作,我们也需要 the sampling function,and the weight function. 因为 temporal axis 的次序是显然的,我们直接将 label map $l_{ST}$ 定义为:

  

   

  3.4. Partition Strategies 

  给定 spatial temporal graph convolution 的高层定义,设计一种 partitioning strategy 来执行 the label map l. 

  Uni-labeling

  Distance partitioning

  Spatial configuration partitioning

  

  3.5. Learnable edge importance weighting

  

  3.6. Implementing ST-GCN

  基于 graph 的卷积操作不如 2D 或者 3D 卷积那么直观,这里我们采取类似 Kipf 在 ICLR 2017年发表的文章中所用的 graph convolution 操作。同一帧的 Body 内部的关节点的连接可以表示为:a adjcency matrix A,然后用 identity matrix I 用来表示 self-connections。在 single-frame 的情况下,用第一种分割策略的 st-gcn 可以用下面的公式进行表达:

  

其中,多个输出通道的权重向量堆叠起来构成了权重矩阵(the weight matrix W)。实际上,在时空的情况下,我们可以将 input feature map 表示为:a tensor of (C, V, T) dimension. graph convolution 可以通过执行 1 × Γ standard 2D convolution and multiplies the resulting tensor with the normalized adjacency matrix on the second dimension.

 

  对于多个子集的划分策略(for partitioning strategies with multiple subsets),即:distance partitioning and spatial configuration partitioning,我们也这么执行。 但注意到,邻接矩阵被分解为多个矩阵 Aj,即: $A+I = \sum_{j} A_j$。

  执行 learnable edge importance weighting 是很直观的。对于每一个邻接矩阵,我们给其配置一个可学习的 weight matrix M。

  

 

 


  Experiments:

   

  

 

 


 

 

转载于:https://www.cnblogs.com/wangxiaocvpr/p/8371660.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文笔记】Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition... 的相关文章

  • java 的地理图表

    谁能推荐一个 Java 组件 它可以让您创建一个漂亮的世界地图图像 突出显示某些国家 基于一些统计数据 与此图像类似的东西 类似于 Google 地理图表 但适用于 Java https developers google com char
  • sql server图形查询,找到节点的所有路径

    我有一个非常常见的问题 我试图使用图形查询来解决 sql server 2017 我想构建一个查询并查找节点中的任何人如何连接到C 我想构建一个查询并查找节点中的任何人如何连接到C 有 1 或 2 个连接 这是创建该图的完整脚本 DROP
  • 使用最短路径计算连接概率

    我想知道 igraph 中是否有一个函数可以计算加权图中顶点之间的连接概率 其中边的权重是相邻顶点的连接概率 我基于这样的邻接矩阵构建了一个图 其中相邻连接概率形成权重 这是针对河流网络 因此图的每个节点仅连接到单个下游节点 我本来希望使用
  • qgraph可以在实际边缘之外渲染边缘标签吗?

    为了便于阅读 我正在尝试在 qgraph 中的实际边缘之外插入边缘标签 我特别不喜欢在标签下方添加白色背景的选项 它会弄乱边缘 根据手册 只能沿线调整边缘标签位置 而不能在侧面调整 以前有人为此苦苦挣扎吗 是否可以规避这个问题 干杯 似乎没
  • 在 Python 中为方法生成控制流图的最简单方法是什么?

    我正在编写一个程序来尝试比较两种方法 我想为所有匹配的方法生成控制流图 CFG 并使用拓扑排序来比较两个图 有一个Python包叫做staticfg https pypi org project staticfg 它正是从一段 Python
  • 目标必须是节点索引的密集双精度数组。怎么解决?

    我正在尝试构建一个网络图词邻接 http www personal umich edu mejn netdata 数据 但我收到错误 目标必须是节点索引的密集双数组 以下是我的代码 fileName adjnoun gml inputfil
  • ggplot2:将面/条文本分割成两行

    考虑以下带有长面 条带文本的 ggplot2 图 断成两行 该文本超出了专门用于分面标题的区域 library ggplot2 x lt c 1 3 1 3 y lt c 3 1 1 3 grp lt c 0 0 0 1 1 1 p lt
  • 为什么A*的复杂度在内存中是指数级的?

    维基百科关于 A 复杂度的说法如下 链接在这里 http en wikipedia org wiki A search algorithm 比当时更成问题 复杂度是A 的内存使用量 在 最坏的情况 也必须记住 指数数量的节点 我不认为这是正
  • 在尝试找到最长路径的同时消除有向无环图中的无关边

    我问了一个question https stackoverflow com q 8685598 35690关于在可变数量的集合中查找没有重复字符的子序列 解决方案是创建每对字母的矩阵 丢弃每组中未出现的字母 然后找到最长路径 http en
  • NetworkX:翻转图

    有没有办法以相反的顺序生成图形 即我想生成垂直翻转的图形 或者如果我可以在绘制之前用一些 matplotlib 子例程翻转它 F e 我希望 357 和 358 位于顶部 1 6 位于底部 只需交换您的位置坐标即可 import netwo
  • 在 Python 中使用邻接表构建节点图

    我有一个Node类如下 class Node def init self val 0 neighbors None self val val self neighbors neighbors if neighbors is not None
  • 如何使用ggplot2在地图上添加经度和纬度线?

    我现在正在使用绘制加拿大地图ggplot2 因为默认的投影方式是 aea 阿尔伯斯等积 所以地图上的经度和纬度都是直线 我想知道如何在地图上以 110W 100W 90W 和 50N 60N 70N 的形式显示经度和纬度 它们应该是曲线 多
  • 如何避免动态图中的“堆指针意大利面条”?

    一般问题 假设您正在编写一个由图组成的系统 以及可以根据相邻节点的配置激活的图重写规则 也就是说 您有一个在运行时不可预测地增长 收缩的动态图 如果你天真地使用malloc 新节点将被分配在内存中的随机位置 经过足够的时间 你的堆将变成一个
  • 在 python matplotlib 中格式化损坏的 y 轴

    我正在 matplotlib 中处理一个 相当复杂的 条形图 它包含来自多个源的摘要数据 每个源都沿 x 轴标记 y 轴上有一系列结果 许多结果都是异常值 我尝试使用断开的 y 轴来显示这些结果 而不会使用以下组合来扭曲整个图表这个方法 h
  • 在 R 中从一条线偏移绘制一条平行线

    我有代表沿着一些街道行驶的线串 但我实际上想代表骑自行车者的旅程 它偏离线路 即他们在路边附近行驶 我正在努力思考如何去做 我制作了一段可重现的 R 代码来进行说明 Let s say I have a route along some s
  • 如何在matplotlib_venn中将维恩图保存为PNG图

    使用以下代码我尝试创建维恩图 然后另存为文件 import matplotlib from matplotlib venn import venn2 set1 set A B C D set2 set B C D E plt venn2 s
  • Gremlin 中的广度优先枚举

    我正在尝试使用 Gremlin 进行广度优先枚举 但是我无法找到一种方法来输出枚举期间观察到的所有步骤 我只能打印出最后一次迭代的结果 我的问题是 给定这样的起始节点 我如何使用 Gremlin 跟踪所有路径 不知道整体深度 并打印出我沿途
  • 图中的后边

    I m having a hard time understanding Tarjan s algorithm for articulation points I m currently following this tutorial he
  • Bokeh 中单独的节点和边缘悬停工具?

    我正在尝试为 Bokeh 中的节点和边缘获取单独的悬停工具提示 但未能使其正常工作 有人可以指出我做错了什么吗 我相信代码应该如下所示 from bokeh io import show output notebook from bokeh
  • 如何有效地将多个光栅 (.tif) 文件导入 R

    我是 R 新手 尤其是在空间数据方面 我正在尝试找到一种方法来有效地将多个 600 单波段栅格 tif 文件导入到 R 中 所有文件都存储在同一文件夹中 不确定这是否重要 但请注意 在我的 Mac 和 Windows 并行 VM 上的文件夹

随机推荐

  • CodeForces - 225B题解

    知识 xff1a 无 题目 xff1a CodeForces 225B链接 Numbers k bonacci k is integer k gt 1 are a generalization of Fibonacci numbers an
  • HDU 2177 取(2堆)石子游戏题解

    知识 xff1a 博弈论 威佐夫博弈 xff08 Wythoff Game xff09 题目 xff1a HDU 2177 链接 有两堆石子 xff0c 数量任意 xff0c 可以不同 游戏开始由两个人轮流取石子 游戏规定 xff0c 每次
  • 浙江省赛2015 _ L _ ZOJ 3880

    水题 题目 xff1a ZOJ 3880 There is a popular multiplayer online battle arena game called Demacia of the Ancients There are lo
  • 浙江省赛2015 _ J - Convert QWERTY to Dvorak -> ZOJ 3878

    模拟水题 题目 xff1a ZOJ 3878 Edward a poor copy typist is a user of the Dvorak Layout But now he has only a QWERTY Keyboard wi
  • 浙江省赛2015 _ G - Lunch Time -> ZOJ - 3875

    水题 这道题比赛当时没有做出来 原因是 ends xff0c C 43 43 对ends的处理是在缓冲区插入 0 然后刷新 xff0c 而不是空格 xff0c 能输出空格是因为Windows对 0 默认的处理方式是输出一个空格 xff0c
  • 贪心算法

    算法导引 xff1a 问题 xff1a 有1元 5元 10元 100元 500元的硬币 xff08 假设所有面值硬币都足够 xff09 现在要找给顾客620元 xff0c 最少需要多少枚硬币 xff1f xff08 改编自挑战程序设计竞赛
  • 蓝桥杯_PREV-34_矩阵翻硬币

    题目 xff1a 矩阵翻硬币 链接 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵 随后 xff0c 小明对每一个硬币分别进行一次 Q 操作 对第x行第y列的硬币进行 Q 操作的定义 xff1a 将所有第 i x 行 xff0c 第
  • ONL(open network linux) from OCP

    https opennetlinux org github xff1a https github com OpenComputeProject OpenNetworkLinux Open Network Linux is a Linux d
  • C++ string数组注意事项

    string xff1a 经实践string数组 xff0c 如string s 10100 xff0c 不能使用s j k 61 这种方法赋值 具体原因未知 求教为什么 xff1f
  • CodeForces - 954C - Matrix Walk

    坑题 题目 xff1a CodeForces 954C 题意 矩阵的每一元素可以用 Ai j 61 y i 1 43 j 来表示 xff0c xff08 就是二维数组用一维指针表示的方法 xff09 xff0c 给你一个路径序列 xff0c
  • Mathjex练习

    u k i 61 a k i k 1 j 61 1 l k j u j i u k i 61
  • 转载:全排列与next_permutation

    转载声明 xff1a 来自https blog csdn net yingyujianmo article details 52046398 感谢作者的讲解 全排列是面试笔试过程中经常遇到的一个问题 对于练习过的同学来说 xff0c 这个问
  • 转载:如何快速转载CSDN中的博客

    转载声明 xff1a 来自https blog csdn net bolu1234 article details 51867099 感谢作者的分享 前言 对于喜欢逛CSDN的人来说 xff0c 看别人的博客确实能够对自己有不小的提高 xf
  • Matlab日记

    Matlab中对clear函数赋值后如何清除变量 xff1f 方法很多 xff0c 一般用 builtin clear b u i l t i n 执 行 内 建 的 函 数 b u i l
  • QT_Windows_命令行下编译,发布

    本文所使用到的资源链接 xff1a 1 所有QT版本镜像下载 2 单文件制作封装工具Engima Virtual Box 环境配置 xff1a 报如下错 xff0c 参考这个 在我这里是因为 xff1a 系统的环境变量的目录中有几个版本不同
  • 容斥原理详解

    翻译 xff1a vici 64 cust 对容斥原理的描述 容斥原理是一种重要的组合数学方法 xff0c 可以让你求解任意大小的集合 xff0c 或者计算复合事件的概率 描述 容斥原理可以描述如下 xff1a 要计算几个集合并集的大小 x
  • 2018ACM/ICPC全国邀请赛(江苏) 总结

    抱憾打铁 整理了一下今天的思路 xff0c 记录如下 开始时我先开的A题 xff0c 我感觉是模拟 xff0c 和lqs讨论了一下 xff0c 感觉会T xff0c 就想其他方法了 开始wjj开的B xff0c 他说感觉是推个公式 xff0
  • HDU 1002 Java大数

    题意很简单输出 a 43 b a 43 b 只不过 a a 和 b b 都很大 xff0c 需要处理大数问题 Java大数解决方法 xff0c 详见代码 xff1a import java io import java util impor
  • broadcom OF-DPA

    https www broadcom com products ethernet connectivity software of dpa http broadcom switch github io of dpa doc html OFD
  • 【论文笔记】Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition...

    Spatial Temporal Graph Convolutional Networks for Skeleton Based Action Recognition 2018 01 28 15 45 13 研究背景和动机 xff1a 行人