ST-GCN 论文解读

2023-11-09

论文:基于骨骼动作识别的时空图卷积网络

在这里插入图片描述

  • 对视频进行姿态估计,在骨架序列上构造时空图;
  • 在输入数据上应用多层时空图卷积(ST-GCN),逐步在图上生成更高层次的特征图;
  • 然后由标准 S o f t m a x Softmax Softmax 分类器将其分类到相应的动作类别。
  • 整个模型采用反向传播的端到端方式训练。

ST-GCN 的输入通常为三维的骨架关节点矩阵,用于表示人体在时间序列上的运动状态。对于一个长度为 T T T 的时间序列和 V V V 个骨架节点,ST-GCN 的输入矩阵为 X ∈ R V × C × T X∈R^{V×C×T} XRV×C×T,其中 C C C 表示每个节点的特征维度。如果需要使用 N N N 个人体的骨架数据进行训练或预测,则可以将这些数据串联成一个四维张量 X ∈ R N × V × C × T X∈R^{N×V×C×T} XRN×V×C×T 作为模型的输入。

摘要

传统的骨骼建模方法通常依赖于手工制作的部件或遍历规则,从而导致表达能力有限和泛化困难,针对特定应用设计的模型很难推广到其他应用。

在这项工作中,我们提出了一种新的动态骨架模型,称为时空图卷积网络(ST-GCN),它通过自动从数据中学习空间和时间模式,超越了以前方法的限制。这种提法不仅具有更强的表达能力,而且具有更强的泛化能力。

主要贡献

这项工作的主要贡献在于三个方面:

  • 提出了 ST-GCN,这是一种基于图的动态骨骼建模通用公式,这是第一个将基于图的神经网络应用于该任务。
  • 针对骨架建模的具体要求,提出了 ST-GCN 中卷积核的设计原则
  • 在基于骨骼的动作识别的两个大规模数据集上,与之前使用手工制作部件或遍历规则的方法相比,所提出的模型获得了更好的性能,在手工设计方面的工作量大大减少。ST-GCN 的代码和模型是公开的。

ST-GCN:基于图的动态骨骼建模通用公式

在本文中,我们提出通过将图神经网络扩展到时空图模型,设计一种用于动作识别的骨架序列的通用表示,称为时空图卷积网络(ST-GCN)。

如下图骨架序列的时空图所示,该模型建立在一系列骨架图之上,其中每个节点对应于人体的一个关节。

在这里插入图片描述

边有两种类型,

  • 一种是符合关节自然连通性的空间边
  • 另一种是跨越连续时间步长连接相同关节的时间边

在此基础上构造多层时空图卷积,实现了信息在空间和时间维度上的集成。关节坐标被用作 ST-GCN 的输入。

ST-GCN 的层次特性消除了手工制作的部件分配或遍历规则的需要。(不理解看下面的引用)

传统的骨架模型方法中,一般使用基于关键点检测的算法(如 OpenPose 等)来提取人体骨架信息,并根据预定义部件分配和遍历规则骨架进行建模

具体来说,这些规则包括了:

  1. 人体骨架的构成方式和连接顺序。
  2. 节点对应的身体部位、编号和名称等信息。
  3. 骨架节点的搜索顺序和遍历方式。

例如,一个典型的手工制作的部件分配或遍历规则可能会指定:躯干部分的关节连接按照肩膀和髋部的关节来确定,手臂部分的关节连接按照肩膀和肘部的关节来确定,腿部分的关节连接按照髋部和膝盖的关节来确定。

而 ST-GCN 的重要作用之一就是在这个基础上,利用时空图卷积网络动态地学习现有数据中的关系特征,从而消除了手工制作部件分配或遍历规则的需要,提高了行为识别的准确性和稳定性。
(不懂,ST-GCN 是在这个基础上,得到的时空图,那不还是需要部件分配或遍历规则吗?怎么说消除了呢?没错,接着看解释在下面)


ST-GCN 在进行时空图卷积之前,仍然需要对骨架节点进行部件分配和遍历规则的设计。不过区别于传统方法中的手工制作,ST-GCN 可以通过学习动态地确定部件分配和遍历规则,并且这些规则是与特定任务(如行为识别)紧密相关的。


类比 CNN 中卷积核的参数,在传统的 CNN 中,卷积核的参数往往需要人工设计,而在使用前向传播和梯度下降等方法进行训练后,CNN 可以自动学习到卷积核的参数。

具体而言,ST-GCN 的部件分配规则通常指定了每个节点的身体部位、编号和名称等信息,例如第一个节点代表头部(Head),第二个节点代表左手肩(Left Shoulder),第三个节点代表右手肩(Right Shoulder)等。


遍历规则则指定了卷积神经网络在时空图上进行卷积运算时的搜索顺序和方式,例如从头部一步步延伸到脚部,或者从中心节点向四周扩散等。

至此,不难理解,为什么说 ST-GCN 是基于图的动态骨骼建模通用公式,就是因为 ST-GCN 利用时空图卷积网络的框架,将关键点(即人体骨架节点)作为节点,通过连接方式建立起空间和时间上的邻接关系,形成了一个时空图。在这个时空图上进行卷积运算,可以动态地学习骨架节点之间的关系特征,有效地学习到人体姿态和动作的空间和时间表达式

现在我们将讨论 ST-GCN 模型中的组件。

1. 骨架图构建

骨骼序列通常由每一帧中每个人体关节的 2D 或 3D 坐标表示。在我们的工作中,我们利用时空图来形成骨架序列的层次表示。特别地,我们在具有 N N N 个关节和 T T T 个框架(帧)的骨架序列上构造了无向时空图 G = ( V , E ) G = (V, E) G=(V,E),该骨架序列具有体内和帧间连接。

1.1 节点集 V V V

在这个图中,节点集 V = { v t i ∣ t = 1 , … , T ; i = 1 , … , N } V = \{v_{ti}|t = 1,…, T;i = 1,…, N\} V={vtit=1T;i=1N} 包括骨架序列中的所有关节。作为 ST-GCN 的输入,节点 F ( v t i ) F(v_{ti}) F(vti) 上的特征向量由 t t t 上第 i i i 个关节的坐标向量和估计置信度组成

置信度是指一个人体关键点被正确预测的程度。它用来代表特征点的识别准确程度和可信度,通常表示为0到1之间的数值。如果置信度越高,说明该关节点被正确识别的概率越大,反之则说明该关节点可能被错误识别或者无法识别。


在计算机视觉任务中,对于人体关键点检测问题,置信度 C_conf 通常表示检测算法对于该特定关键点的预测可信度。例如,如果一个人体姿态估计算法可以正确地检测出某个人的肘部关键点,则这个肘部关键点的 C_conf 值应该是比较高的。

我们分两步构建骨架序列上的时空图:

  • 首先,根据人体结构的连通性,将一个框架内的关节用边连接起来
  • 然后将每个关节连接到连续帧中的相同关节

因此,这个设置中的连接是自然定义的,无需手动分配。这也使得网络架构能够在具有不同数量的关节或关节连接的数据集上工作。例如,

  • 在动力学数据集上,我们使用来自 O p e n P o s e OpenPose OpenPose 工具箱的 2D 姿态估计,结果输出18个关节;
  • 而在 NTURGB+D 数据集上,我们使用 3D 关节跟踪结果作为输入,得到25个关节。

ST-GCN 可以在两种情况下操作,并提供一致的优越性能。

1.2 边集 E E E

从形式上讲,边集 E E E 由两个子集组成:

  • 第一个子集描述了每一帧的骨架内连接,记为 E S = { v t i v t j ∣ ( i , j ) ∈ H } E_S = \{v_{ti}v_{tj} |(i, j)∈H\} ES={vtivtj(i,j)H},其中 H H H 为自然连接的人体关节集合;
  • 第二个子集包含帧间边,它们连接连续帧中的相同关节,如 E F = { v t i v ( t + 1 ) i } E_F = \{v_{ti}v_{(t+1)i}\} EF={vtiv(t+1)i}

因此,对于一个特定关节 i i i E F E_F EF 中的所有边将表示其随时间的轨迹。

2. 空间图卷积神经网络

在深入研究成熟的 ST-GCN 之前,我们首先看一下单帧内的图 CNN 模型。在这种情况下,在时间 τ τ τ 的单个帧上,将有 N N N 个关节节点 V t V_t Vt,以及骨架边 E S ( τ ) = { v t i v t j ∣ t = τ , ( i , j ) ∈ H } E_S(τ) = \{v_{ti}v_{tj} |t = τ,(i, j)∈H\} ES(τ)={vtivtjt=τ(i,j)H}。回顾二维自然图像或特征图上卷积运算的定义,它们都可以被视为二维网格。卷积运算的输出特征图同样是一个二维网格。使用步长 1 和适当的填充,输出特征映射可以与输入特征映射具有相同的大小。在接下来的讨论中,我们将假设这个条件。给定核尺寸为 K × K K × K K×K 的卷积算子,以及通道数量为 c c c 的输入特征映射 f i n f_{in} fin。在空间位置 x x x 处,单个通道的输出值可以写成:
f o u t ( x ) = ∑ h = 1 K ∑ w = 1 K f i n ( p ( x , h , w ) ) ⋅ w ( h , w ) (1) f_{out}(x) = \sum_{h=1}^{K} \sum_{w=1}^{K}f_{in}(\mathbf{p}(\mathbf{x}, h, w)) · \mathbf{w}(h, w) \tag{1} fout(x)=h=1Kw=1Kfin(p(x,h,w))w(h,w)(1) 抽样函数 p : Z 2 × Z 2 → Z 2 \mathbf p:Z^2 × Z^2→Z^2 pZ2×Z2Z2 列举了空间位置 x x x 的邻居的位置。在图像卷积,它也可以表示为 p ( x , h , w ) = x + p ′ ( h , w ) \mathbf p (\mathbf x, h, w) = \mathbf x + \mathbf p' (h, w) p(x,h,w)=x+p(h,w)。权函数 w : Z 2 → R c \mathbf w: Z^2→\mathbb R^c w:Z2Rc 提供了一个 c c c 维实空间中的权向量,用于计算与采样的 c c c 维输入特征向量的内积。注意,权函数与输入位置 x x x 无关。因此,在输入图像滤波器权重到处都是共享的。图像域上的标准卷积是通过在 p ( x ) \mathbf p(\mathbf x) p(x) 中编码一个矩形网格来实现的。

可以理解为:图像域上的标准卷积操作可以看作是将一个大小为 K × K K×K K×K 的矩阵(即卷积核)沿着图像平面上的每个像素点进行移动,并分别与该像素点周围的一小块区域做内积运算。
请添加图片描述

然后,通过将上述公式扩展到输入特征映射位于空间图 V t V_t Vt 上的情况,来定义图上的卷积操作。即特征映射 f i n t : V t → R c f_{in}^t:V_t→R^c fintVtRc 在图的每个节点上都有一个向量。扩展的下一步是重新定义抽样函数 p \mathbf p p 和权重函数 w \mathbf w w

R c R^c Rc 表示 c c c 维实数向量空间,其中 R R R 表示实数域, c c c 表示向量维度。这里,在第 t t t 帧,每个关节点可以映射到它的邻接关节点,但是一个关节点需要 c c c 维(即关节点的坐标和置信度)来表示,所以这是一个 c c c 维实数向量。

2.1 抽样函数

在图像上,采样函数 p ( h , w ) \mathbf p(h, w) p(h,w) 是在相邻像素点关于中心位置 x x x 上定义的。在图上,我们同样可以在节点 v t i v_{ti} vti 的邻居集 B ( v t i ) = { v t j ∣ d ( v t j , v t i ) ≤ D } B(v_{ti}) = \{ v_{tj} |d(v_{tj}, v_{ti}) ≤ D \} B(vti)={vtjd(vtj,vti)D} 上定义采样函数。这里 d ( v t j , v t i ) d(v_{tj}, v_{ti}) d(vtj,vti) 表示从 v t j v_{tj} vtj v t i v_{ti} vti 的任何路径的最小长度。因此,抽样函数 p : B ( v t i ) → V \mathbf p: B(v_{ti})→V p:B(vti)V 可以写成:
p ( v t i , v t j ) = v t j (2) \mathbf p( v_{ti}, v_{tj}) = v_{tj} \tag{2} p(vti,vtj)=vtj(2)

注意这里的 v t j v_{tj} vtj 是节点 v t i v_{ti} vti 的邻居集 B ( v t i ) B(v_{ti}) B(vti)中的节点,即当 D = 1 D=1 D=1 时,采样函数 p \mathbf p p 取的是邻接点。

在这项工作中,我们对所有情况使用 D = 1 D = 1 D=1,即关节节点的 1 − n e i g h b o r 1-neighbor 1neighbor 集。更大的 D D D 值留给以后的工作。

2.2 权重函数

与抽样函数相比,权重函数的定义比较复杂。在二维卷积中,中心位置周围自然存在一个刚性网格。所以相邻的像素可以有固定的空间顺序。权重函数可以通过根据空间顺序索引 ( c , K , K ) (c, K, K) (c,K,K) 维的张量来实现。

对于一般的图,就像我们刚刚构造的那样,没有这样的隐式排列。这个问题的解决方案首先在 (Niepert, Ahmed, and Kutzkov 2016) 中进行了研究,其中顺序由该关节点周围的邻居图中的图标记过程定义。我们按照这个思路来构造权重函数。我们没有给每个邻居节点一个唯一的标签,而是将一个关节点 v t i v_{ti} vti 的邻居集 B ( v t i ) B(v_{ti}) B(vti) 划分为固定数量的 K K K 个子集,其中每个子集都有一个数字标签,从而简化了这个过程。

因此,我们可以得到一个映射 l t i : B ( v t i ) → { 0 , … , K − 1 } l_{ti}:B(v_{ti})→\{0,…, K−1 \} ltiB(vti){0K1},它将邻域中的一个节点映射到它的子集标签。权函数 w ( v t i , v t j ) : B ( v t i ) → R c \mathbf w(v_{ti}, v_{tj}): B(v_{ti})→R^c w(vti,vtj):B(vti)Rc 可以通过索引一个 ( c , K ) (c, K) (c,K) 维张量或
w ( v t i , v t j ) = w ′ ( l t i ( v t j ) ) (3) \mathbf w(v_{ti}, v_{tj}) = \mathbf w'(l_{ti}(v_{tj})) \tag{3} w(vti,vtj)=w(lti(vtj))(3)
来实现。

这里解释一下,如果我们使用一个 ( c , K ) (c,K) (c,K) 维张量 w ′ \mathbf w' w 来表示权重向量 w \mathbf w w,其中第 k k k 个列向量为 w k ′ \mathbf w'_k wk ,则表达式(3)的意思是:对于给定的关节点 v t i v_{ti} vti 和邻居节点 v t j v_{tj} vtj,我们首先计算出 v t j v_{tj} vtj 的子集标签 l t i ( V t j ) l_{ti}(V_{tj}) lti(Vtj),然后使用这个标签来索引张量 w ′ \mathbf w' w 中的一个列向量 w l t i ( v t j ) ′ \mathbf w'_{l_{ti} (v_{tj}) } wlti(vtj) ,从而得到节点 v t i v_{ti} vti v t j v_{tj} vtj 之间的权重向量 w ( v t i , v t j ) \mathbf w(v_{ti}, v_{tj}) w(vti,vtj)

我们将在下面讨论几种分区策略。

2.3 空间图卷积

有了改进的抽样函数和权函数,我们现在用图卷积重写公式(1)如下:
f o u t ( v t i ) = ∑ v t j ∈ B ( v t i ) 1 Z t i ( v t j ) f i n ( p ( v t i , v t j ) ) ⋅ w ( v t i , v t j ) (4) f_{out}(v_{ti}) = \sum_{v_{tj}∈B(v_{ti})} \frac{1}{Z_{ti}(v_{tj})} f_{in}(\mathbf{p}(v_{ti}, v_{tj})) · \mathbf{w}(v_{ti}, v_{tj}) \tag{4} fout(vti)=vtjB(vti)Zti(vtj)1fin(p(vti,vtj))w(vti,vtj)(4) 其中归一项 Z t i ( v t j ) = ∣ v t k ∣ l t i ( v t k ) = l t i ( v t j ) ∣ Z_{ti}(v_{tj}) =| {v_{tk}|l_{ti}(v_{tk}) = l_{ti}(v_{tj})} | Zti(vtj)=vtklti(vtk)=lti(vtj) 等于相应子集的基数。添加这个术语是为了平衡不同子集对输出的贡献。

将公式(2)和公式(3)代入公式(4),得到
f o u t ( v t i ) = ∑ 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 ) ) (5) f_{out}(v_{ti}) = \sum_{v_{tj}∈B(v_{ti})} \frac{1}{Z_{ti}(v_{tj})} f_{in}( v_{tj}) · \mathbf{w}(l_{ti}(v_{tj})) \tag{5} fout(vti)=vtjB(vti)Zti(vtj)1fin(vtj)w(lti(vtj))(5)值得注意的是,如果我们将图像视为一个规则的 2D 网格,这个公式可以类似于标准的 2D 卷积。例如,为了类似于3×3卷积运算,我们在以像素为中心的3×3网格中有一个9像素的邻居。然后将邻居集划分为9个子集,每个子集有一个像素。

2.4 时空建模

在时空图中,考虑每个节点不仅具有空间位置信息,还具有时间信息。因此,我们需要重新定义邻域 B ( v t i ) B(v_{ti}) B(vti),以包括时间上相邻的节点,即连接连续帧上的相同关节。

已经制定了空间图 CNN,我们现在推进到在骨架序列内建模时空动态的任务。回想一下,在图的构造中,图的时间方面是通过连接连续帧上的相同关节来构造的。这使我们能够定义一个非常简单的策略来将空间图 CNN 扩展到时空域

也就是说,我们扩展了邻域的概念,也包括时间连接的关节
B ( v t i ) = { v q j ∣ d ( v t j , v t i ) ≤ K , ∣ q − t ∣ ≤ ⌊ Γ / 2 ⌋ } (6) B(v_{ti}) = \{v_{qj} |d(v_{tj} , v_{ti}) ≤ K, |q − t| ≤ \lfloor Γ/2 \rfloor \} \tag{6} B(vti)={vqjd(vtj,vti)K,qtΓ/2⌋}(6)该公式定义了每个节点的邻域 B ( v t i ) B(v_{ti}) B(vti) 包括空间距离不超过 K K K 个单位的所有节点时间距离不超过 ⌊ Γ / 2 ⌋ \lfloor Γ/2 \rfloor Γ/2 个单位的所有节点。其中,参数 Γ Γ Γ 控制时间上要包含在邻域图中的范围,因此可以称为时间内核大小

为了在时空图上完成卷积运算,我们需要类比空间图的方法,定义采样函数和权重函数。与空间图一样,采样函数是一个简单的函数,不需要任何修改。获得邻居节点的方法与空间图相同,只需使用表达式(6)中定义的邻域来获取。

我们需要修改标签映射,以适应带时间维度的邻域。由于时间轴是有序的,对于以 v t i v_{ti} vti 为中间位置的空间时间邻域,我们直接修改标签映射 l S T l_{ST} lST,为: l S T ( v q j ) = l t i ( v t j ) + ( q − t + ⌊ Γ / 2 ⌋ ) × K (7) l_{ST}(v_{qj}) = l_{ti}(v_{tj}) + (q-t+\lfloor Γ/2 \rfloor) ×K \tag{7} lST(vqj)=lti(vtj)+(qt+Γ/2⌋)×K(7)其中 l t i ( v t j ) l_{ti}(v_{tj}) lti(vtj) 是在一个单帧 t t t 上关节 i i i 的邻接点 j j j 的标签映射,而 ( q − t + ⌊ Γ / 2 ⌋ ) × K (q-t+\lfloor Γ/2 \rfloor) ×K (qt+Γ/2⌋)×K 用于在时间维度上对标签进行编码。这样,我们就对所构造的时空图进行了定义良好的卷积运算。

由于时空图中每个节点都包含了时间信息,而且时间轴是有序的,因此我们需要一种方式来将时间信息编码进标签映射里,从而使得卷积运算能够顺利进行。


这里解释一下具体方法:在节点 v t i v_{ti} vti 的标签映射 l t i ( v t j ) l_{ti}(v_{tj}) lti(vtj) 的基础上,加上一个时间维度的偏移量 ( q − t + ⌊ Γ / 2 ⌋ ) × K (q-t+\lfloor Γ/2 \rfloor) ×K (qt+Γ/2⌋)×K 。这个公式中,

  • q q q 表示当前样本节点 v q j v_{qj} vqj 在时空图中所处的时间步(帧)数,也可以理解为当前处理的时刻,通常是通过滑动一个窗口来进行遍历处理。
  • t t t 表示 v t i v_{ti} vti 所处的时间步(帧)数。
  • 因此, q − t q−t qt 就是当前节点 v q j v_{qj} vqj 与节点 v t i v_{ti} vti 之间的时间距离。对于当前节点 v q j v_{qj} vqj,它的时间邻域可以由 ( q − ⌊ Γ / 2 ⌋ , q + ⌊ Γ / 2 ⌋ ) (q−⌊Γ/2⌋,q+⌊Γ/2⌋) (qΓ/2,q+Γ/2⌋) 表示
  • 再加上 ⌊ Γ / 2 ⌋ ⌊Γ/2⌋ Γ/2 是为了获取当前节点的邻域范围,保证时间距离在 Γ Γ Γ 范围内,而不会超出有效时间范围
  • 最后再乘以 K K K 是为了将时间距离转换为标签数值,其中 K K K 是一个常量,表示每个时间步的标签表示的长度。

简单来说, ( q − t + ⌊ Γ / 2 ⌋ ) × K (q−t+⌊Γ/2⌋)×K (qt+Γ/2⌋)×K 这个公式的作用就是将时间信息编码为标签数值,从而方便在时空图上进行卷积运算。

3. 分区策略(ST-GCN 中卷积核的设计原则)

考虑到时空图卷积的高级形式,设计一种划分策略来实现标签映射 l l l 是很重要的。在这项工作中,我们探索了几种划分策略。为了简单起见,我们只讨论单个框架中的情况,因为它们可以使用公式(7)自然地扩展到时空域。

在这里插入图片描述

上图是构造卷积运算的划分策略。从左到右:

  • (a)输入骨架示例帧。身体关节用蓝点绘制。 D = 1 D = 1 D=1 的过滤器的接受域用红色虚线圈绘制。
  • (b)单标签分区策略,即一个邻域内的所有节点都有相同的标签(绿色)。
  • (c)距离分区策略,这两个子集是距离为0的根节点本身(绿色)和距离为1的其他相邻点(蓝色)。
  • (d)空间结构分区策略,节点根据与骨架重心(黑色十字)的距离与根节点(绿色)的距离进行标记,向心节点的距离较短(蓝色),而离心节点的距离较长(黄色)。
3.1 Uni-labeling 单标签分区策略

最简单、最直接的划分策略是使用子集,即整个邻居集本身。在这种策略中,每个相邻节点上的特征向量都有一个具有相同权重向量的内积。实际上,这种策略类似于(Kipf和Welling 2017)中引入的传播规则。它有一个明显的缺点,在单帧情况下,使用该策略相当于计算所有相邻节点的权值向量与平均特征向量之间的内积。这对于骨架序列分类来说是次优的,因为在这个操作中可能会丢失局部微分性质。形式上,我们有 K = 1 , l t i ( v t j ) = 0 , ∀ i , j ∈ V K = 1, l_{ti}(v_{tj}) = 0,∀i, j∈V K=1,lti(vtj)=0i,jV

3.2 Distance partitioning 距离分区策略

另一种自然划分策略是根据节点到中心位置节点 v t i v_{ti} vti 的距离 d ( ⋅ , v t i ) d(·,v_{ti}) d(vti) 对邻居集进行划分。在这项工作中,因为我们设置 D = 1 D = 1 D=1,邻居集将被分成两个子集,其中 D = 0 D = 0 D=0 表示中心位置节点本身,其余的邻居节点都在 D = 1 D = 1 D=1 子集中。因此,我们将有两个不同的权重向量,它们能够建模局部微分性质,如关节之间的相对平移。形式上,我们有 K = 2 , l t i ( v t j ) = d ( v t j , v t i ) K = 2, l_{ti}(v_{tj}) = d(v_{tj}, v_{ti}) K=2,lti(vtj)=d(vtj,vti)

3.3 Spatial configuration partitioning 空间结构分区策略

由于人体骨架在空间上是局部化的,我们仍然可以在分区过程中利用这种特定的空间结构。我们设计了一种策略,将邻居集分为三个子集:1)根节点本身;2)向心群:比根节点更接近骨架重心的相邻节点;3)否则为离心群。在这里,骨架中所有关节的平均坐标被视为其重心。这种策略的灵感来自于身体部位的运动可以大致分为同心运动和偏心运动。形式上,我们有: l t i ( v t j ) = { 0 , r j = r i 1 , r j < r i 2 , r j > r i (8) l_{ti}(v_{tj}) = \begin{cases} 0, & r_j = r_i \\ 1, & r_j < r_i \\ \tag{8} 2, & r_j > r_i \end{cases} lti(vtj)= 0,1,2,rj=rirj<rirj>ri(8)
其中 r i r_i ri 是训练集中所有帧中从重心到关节 i i i 的平均距离。

更先进的分区策略有望带来更好的建模能力和识别性能。

4. 可学习边缘重要性加权

在动作的过程中,一个关节可能会在身体的多个部位出现。而且,在不同部位的动力学建模中,这些关节外观的重要性是不同的。在这个意义上,我们在时空图卷积的每一层上都加上一个可学习的掩码 M M M

掩码将根据 E S E_S ES 中每个空间图边的学习重要性权重,将节点的特征贡献扩展到其邻近节点。这样就能更好地处理不同部位之间的关节信息。我们发现添加该掩码可以进一步提高 ST-GCN 的识别性能。

也可以使用一个依赖于数据的注意力图,来提升空间特征的贡献扩展效果。注意力图可以帮助模型更准确地关注重要的特征信息,从而提高性能表现。我们把这个留给未来的工作。

实现 ST-GCN

基于图的卷积的实现不像 2D 或 3D 卷积那样简单。在这里,我们提供了实现 ST-GCN 用于基于骨架的动作识别的细节。

我们采用类似于(Kipf和Welling 2017)中的图卷积实现。单帧内关节的体内连接由表示自连接的邻接矩阵 A \mathbf A A 和单位矩阵 I \mathbf I I 表示。在单帧情况下,采用第一个分区策略的 ST-GCN 可以用以下公式实现 f o u t = Λ − 1 2 ( A + I ) Λ − 1 2 f i n W (9) \mathbf f_{out} = \mathbf Λ^{-\frac{1}{2}} (\mathbf A+ \mathbf I) \mathbf Λ^{-\frac{1}{2}} \mathbf f_{in} \mathbf W \tag{9} fout=Λ21(A+I)Λ21finW(9)其中 Λ i i = ∑ j ( A i j + I i j ) Λ^{ii} = \sum_{j} (A^{ij} + I^{ ij}) Λii=j(Aij+Iij)。这里将多个输出通道的权值向量叠加形成权值矩阵 W \mathbf W W。在实际操作中,在时空情况下,我们可以将输入特征映射表示为 ( C , V , T ) (C, V, T) (C,V,T) 维的张量。图卷积是通过执行 1 × Γ 1 × Γ 1×Γ 标准 2D 卷积来实现的,并将得到的张量与第二维上的归一化邻接矩阵 Λ − 1 2 ( A + I ) Λ − 1 2 \mathbf Λ^{-\frac{1}{2}} (\mathbf A+ \mathbf I) \mathbf Λ^{-\frac{1}{2}} Λ21(A+I)Λ21 相乘。

对于具有多个子集的分区策略,即距离分区和空间结构分区,我们再次利用了这种实现。但注意,现在邻接矩阵被分解成几个矩阵,其中 A + I = ∑ j A j \mathbf A + \mathbf I = \sum_{j} \mathbf A_j A+I=jAj。例如,在距离划分策略中, A 0 = I , A 1 = A \mathbf A_0 = \mathbf I, \mathbf A_1 = \mathbf A A0=I,A1=A,表达式(9)转换成: f o u t = ∑ j Λ j − 1 2 A j Λ j − 1 2 f i n W j (10) \mathbf f_{out} = \sum_j \mathbf Λ_j^{-\frac {1}{2}} \mathbf A_j \mathbf Λ_j^{-\frac {1}{2}} \mathbf f_{in} \mathbf W_j \tag{10} fout=jΛj21AjΛj21finWj(10) 其中,类似地 Λ j i i = ∑ k ( A j i k ) + α Λ^{ii}_j = \sum_{k} (A^{ik}_j)+α Λjii=k(Ajik)+α。这里我们设 α = 0.001 α = 0.001 α=0.001 以避免 A j A_j Aj 中的空行。

可学习边缘重要性加权的实现非常简单。对于每个邻接矩阵,我们都伴随一个可学习权值矩阵 M \mathbf M M,我们分别用 ( A + I ) ⊗ M (\mathbf A + \mathbf I)⊗\mathbf M (A+I)M A j ⊗ M \mathbf A_j⊗ \mathbf M AjM 代替表达式(9)中的矩阵 A + I \mathbf A + \mathbf I A+I 和表达式(10)中的 A j \mathbf A_j Aj 。这里 ⊗ ⊗ 表示两个矩阵之间的元素乘积。掩码 M M M 被初始化为一个全一矩阵。

网络架构与训练

由于 ST-GCN 在不同节点上共享权重,因此在不同节点上保持输入数据的比例一致是很重要的。在我们的实验中,我们首先将输入骨架提供给批处理规范化层来规范化数据。

ST-GCN 模型由9层时空图卷积算子(ST-GCN 单元)组成。前三层有64个输出通道,接着三层有128个输出通道,最后三层有256个输出通道。这些层有9个时间内核大小。Resnet 机制应用于每个 ST-GCN 单元

在每个 ST-GCN 单元后,我们以0.5概率随机剔除特征,以避免过拟合。第4和第7时序卷积层的步长设为2作为池化层。然后对得到的张量进行全局池化,得到每个序列的256维特征向量。最后,我们将它们输入 S o f t M a x SoftMax SoftMax 分类器。使用随机梯度下降学习模型,学习率为0.01。我们在每10个 epoch 之后将学习率衰减0.1。

为了避免过拟合,我们在动力学数据集上训练时执行两种增强来替换掉层(Kay et al 2017)。

首先,为了模拟相机运动,我们对所有帧的骨架序列执行随机仿射变换。特别是从第一帧到最后一帧,我们选取了几个固定的角度、平移和比例因子作为候选因子,然后随机采样三个因子的两个组合来生成仿射变换。这种转换被插入到中间帧中,以产生一种效果,就好像我们在回放过程中平滑地移动视点一样。我们把这种增强称为随机移动。

其次,我们在训练中从原始骨架序列中随机抽取片段,并在测试中使用所有帧。网络顶部的全局池使网络能够处理不确定长度的输入序列。

实验

我们评估了 ST-GCN 在基于骨骼的动作识别实验中的性能。我们在两个性质截然不同的大规模动作识别数据集上进行了实验:Kinetics 人类动作数据集(Kinetics) (Kay et al 2017)是迄今为止最大的无约束动作识别数据集,NTURGB+D (Shahroudy et al 2016)是最大的内部捕获动作识别数据集。

特别是,我们首先对动力学数据集进行详细的消融研究,以检查所提出的模型组件对识别性能的贡献。然后我们将 ST-GCN 的识别结果与其他最先进的方法和其他输入模式进行了比较。

为了验证我们在无约束设置中获得的经验是否具有普遍性,我们对 NTURGB+D 上的约束设置进行了实验,并将 ST-GCN 与其他最先进的方法进行了比较。所有实验均在 PyTorch 深度学习框架上进行,并配有8个 TITANX 图形处理器。

论文理解

ST-GCN 这篇论文算是 GCN 在骨骼行为识别里面的开山之作了,他提供了一种新的思路和实现方式,解决了以前方法的局限性并取得了较好的效果。虽然他只是2018年发表的,但是这篇论文给了很详细的代码,2019年发表在 CVPR 上的 AS-GCN 和 2s-AGCN 都是在该代码的基础上改进的。

学习新的东西的时候将他和学习过的老的东西进行对比。比如学习 GCN 要和之前学过的 CNN 对比着学,就非常好理解。

空间特征的提取

1. 图卷积

特征提取器,输入结点特征和 graph 结构,输出结点最终的特征表达。

在这里插入图片描述

主要的框架就是这样,图卷积相比于图像卷积,只是多左乘了一个邻接矩阵 A A A,后面就是一些细节。

在这里插入图片描述
如上图所示,

  1. 邻接矩阵 A A A对角线都是0,这说明没有考虑自身节点的特征,只是考虑了边的特征。
  2. 如果加上自身节点的特征,就是 A ′ A' A,即论文中的 A + I A+I A+I
  3. 如果再考虑对 A ′ A' A 进行归一化,就是 D − 1 A ′ D^{-1}A' D1A,其中 D D D 是度矩阵。
  4. 对称归一化,如第四个公式所示 D − 1 2 A ′ D − 1 2 D^{-\frac{1}{2}}A'D^{-\frac{1}{2}} D21AD21

2. 感受野

一般图像二维卷积最小的卷积核就是 3 × 3 3×3 3×3 的卷积核,感受野就是一个中心点和周围八个元素共九个元素的组合。

这里和CNN相似,定义离中心点距离 D = 1 D=1 D=1 ,也就是与中心点直接相连的点为一个卷积核的感受野。如图(a)所示:

在这里插入图片描述

3. 卷积核

那么怎么选择卷积核呢?

这里感受野都是离中心点距离 D = 1 D=1 D=1 的范围,选择卷积核就是说将同范围的点进行分类

  • 图(b)是中心点和相连的点采用同样的权重,这里只有一种权重
  • 图(c)是中心点和相连的点采用不同的权重,这里有两种权重
  • 图(d)分为三种点,一是静止点,二是向心点,三是离心点,指的是离人体重心近的点和远的点,所以有三种权重

从直觉上,图(d)选择方法更加合适。

在这里插入图片描述

先计算人体重心位置,即上图中黑色 × 位置。

相对于绿色节点来说:

  • 蓝色节点到重心的距离更小,那蓝色节点就是向心点;
  • 橙色节点到重心的距离更大,那橙色节点就是离心点;
  • 而绿色节点本身就是一个静止的点。

选择合适的感受野和卷积核之后就能够像 CNN 那样一个点一个点的卷积计算了,卷积的过程就是提取特征的过程

4. 注意力机制

注意力机制,论文上说的是一个可学习的掩码 M M M,加入方式也很简单,就是直接与上面说的 A ′ A' A 相乘。这是一种非常简单的方法,虽然不是最好的,但是用的是最多的。

上面说的都是空间特征的提取,后面要做的就是时间特征的提取。

时间特征的提取

时间特征提取用的是 TCN,是一个 1D 卷积卷积的维度是时间维度,他的卷积核一行多列,从下图就很容易看明白。

在这里插入图片描述

作为一篇开创性的文章,自然也会有很多不足之处,比如他的卷积核选择方式只能聚集局部特征,还有注意力机制并不能创造没有直接相连的关节的联系

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

ST-GCN 论文解读 的相关文章

  • GhostNet 论文解读

    GhostNet More Features from Cheap Operations CVPR 2020 论文地址 xff1a arXiv 开源 PyTorch代码 xff1a GitHub 引言 由于嵌入式设备上有限的内存和计算资源
  • st-gcn复现

    1 st gcn执行命令 进入存储代码的目录 xff0c 激活pytorch环境 xff0c 之后运行命令 python main span class token punctuation span py demo span class t
  • SSD论文解读

    1 论文简述 题目 SSD Single Shot MultiBox Detector 作者 Wei Liu Dragomir Anguelov Dumitru Erhan Christian Szegedy Scott Reed Chen
  • ST-GCN训练自建数据集

    参考了许多博文 xff0c 慢慢地也就把st gcn跑出来了 xff0c 参考的文章一会附在文章里面 xff0c 实测有用 1 安装st gcn 复现STGCN CPU版 xff08 ubuntu16 04 43 pytorch0 4 0
  • 复现STGCN CPU版 (ubuntu16.04+pytorch0.4.0+openpose+caffe)

    前提 xff1a ubuntu下将python3 5 2设为默认 xff08 百度 xff09 一 下载stgcn xff08 gitbub上fork后导入到gitee快些 xff09 st gcn Spatial Temporal Gra
  • 【没有哪个港口是永远的停留~ 论文解读】SphereFace

    论文 xff1a SphereFace Deep Hypersphere Embedding for Face Recognition 代码 xff1a at https github com wy1iu sphereface 摘要 本文讨
  • 【没有哪个港口是永远的停留~ 论文解读】AM - softmax

    论文 xff1a Additive Margin Softmax for Face Verification 代码 xff1a https github com happynear AMSoftm 相似论文 xff1a CosFace La
  • ASGCN之图卷积网络(GCN)

    文章目录 前言1 理论部分1 1 为什么会出现图卷积网络 xff1f 1 2 图卷积网络的推导过程1 3 图卷积网络的公式 2 代码实现参考资料 前言 本文从使用图卷积网络的目的出发 xff0c 先对图卷积网络的来源与公式做简要介绍 xff
  • 解读:基于GCN的股票预测模型

    前言 xff1a 自ICLR2017首次提出图卷积神经网络 xff08 GCN xff09 的概念 xff0c 该模型在节点分类 边预测等任务上表现出了出色的性能 在传统因子选股模型中 xff0c 常常将股票视为独立的个体 xff0c 但事
  • 《Graph Learning》

    从本章开始 我们就会陆续讲一些图算法 本文首先给大家聊一聊图传播算法 对于图传播算法 并没有确切的定义 但是这类算法都有着十分明确和统一的范式 理解了这一范式之后 就能迅速掌握此类算法 给定图G V E V表示节点集合 E表示边集合 设N
  • 从数据分布的角度提高对抗样本的可迁移性

    1 引言 对抗迁移性攻击一般是先通过代理模型生成对抗样本 然后将该样本迁移到其它黑盒模型中进行攻击 对抗迁移性的根本原因目前仍有待于探究 以前的工作主要从模型的角度探讨原因 例如决策边界 模型架构和模型容量等 在该论文中 作者从数据分布的角
  • centernet(cornernet)中通过高斯核函数画热点图时 高斯半径的确定及 改进成椭圆高斯图

    为什么采用二维的高斯核 参考https zhuanlan zhihu com p 96856635 其中原因解释合理 但公式推导有待商榷 在设置GT box的heat map的时候 我们不能仅仅只在top left bottom right
  • policy gradient详解(附代码)

    1 引言 policy gradient是强化学习中一种基于概率策略的方法 智能体通过与环境的交互获得特定时刻的状态信息 并直接给出下一步要采取各种动作的概率 然后根据该状态动作的策略分布采取下一步的行动 所以每种动作都有可能被选中 只是选
  • 论文解读:Factuality Enhanced Language Models for Open-Ended Text Generation

    论文解读 Factuality Enhanced Language Models for Open Ended Text Generation Github https github com nayeon7lee FactualityPro
  • 风格迁移背后原理及tensorflow实现

    前言 本文将详细介绍 tf 实现风格迁移的小demo 看完这篇就可以去实现自己的风格迁移了 复现的算法来自论文 Perceptual P e r c e p t u a l
  • 《Graph learning》

    上周发布的 图传播算法 上 中讲了关于图传播算法的基本范式和PageRank算法 本文将延续上周的文章 继续讲解剩下的三个算法 2 HITS HITS Hyperlink Induced Topic Search 另一个典型的图传播算法 其
  • ST-GCN 论文解读

    论文 基于骨骼动作识别的时空图卷积网络 摘要 主要贡献 ST GCN 基于图的动态骨骼建模通用公式 1 骨架图构建 1 1 节点集 V V V 1 2 边集
  • PointNet介绍

    论文 PointNet Deep Learning on Point Sets for 3D Classification and Segmentation 代码 https github com charlesq34 pointnet 0
  • 【人体姿态】Convolutional Pose Machines

    Wei Shih En et al Convolutional Pose Machines CVPR 2016 本论文将深度学习应用于人体姿态分析 同时用卷积图层表达纹理信息和空间信息 目前在2016年的MPII竞赛中名列前茅 作者在git
  • Open-Set Object Detection and Discovery (OSODD)

    最近因为工程需要 就去调研一下 open set detection 算法 然后发现一篇不错的论文 Towards Open Set Object Detection and Discovery 论文使用了额外的 memory 来当做网络的

随机推荐

  • VUE 构建清除注释、依赖包版本号

    问题 vue项目构建生成的js文件包含一些注释 里面含使用的依赖包及版本信息 可能会对网站造成危害 那么如何清除掉这些注释呢 解决方法 首先查看项目里webpack的版本号 npm list webpack 根据webpack版本号更新 h
  • Java解析省份城市

    Java解析省份城市 json文件 ps 地址可能不全 仅供参考 格式化导入地址 param address return public String formatAddr String address if address null re
  • 淘宝性能自动化测试平台搭建过程

    导读 ID TOP100case 淘宝网的性能测试自动化平台具备了分布式 高并发 低成本 可扩展等特性的性能测试平台工具 它包括性能项目管理 环境管理 脚本管理 场景管理 任务管理 监控管理 结果管理等模块 以及前端性能测试模块 性能测试报
  • 解决Makefile: recipe for target ‘xxx‘ failed

    author daisy skye的博客 CSDN博客 嵌入式 Qt Linux领域博主 问题 在android编译Kernel调用makefile引起的recipe for target 很多文章写的是由于编译文件路径引起或者是makef
  • 模型调优:验证集的作用(就是为了调整超参数)

    一 总结 一句话总结 验证集的作用就是为了调整超参数 1 超参数 超参数的值不是学习出来的 大多数机器学习算法都有超参数 可以设置来控制算法行为 超参数的值不是通过学习算法本身学习出来的 超参数如果学习太难优化 有时一个选项被设为学习算法不
  • inner join on, left join on, right join on讲解(转载)

    看了后面的操作实例 一切都明白了 1 理论 只要两个表的公共字段有匹配值 就将这两个表中的记录组合起来 个人理解 以一个共同的字段求两个表中符合要求的交集 并将每个表符合要求的记录以共同的字段为牵引合并起来 语法 FROM table1 I
  • 【新学期】双非本科大三学长经验分享

    一 自我介绍 大家好 我是一名双非二本人工智能专业的大三在读生 说起我的个人经历 其实没啥经历 大一大二两年的时间都是游走于学院的活动 平时没事搞搞团结 喜欢热闹 聚餐 搞素拓活动 所以 在学习方面就没有很下功夫 上课听了也是听不听的吧 反
  • [Vue]插件

    前言 系列文章目录 Vue 目录 老师的课件笔记 不含视频 https www aliyundrive com s B8sDe5u56BU 笔记在线版 https note youdao com s 5vP46EPC 视频 尚硅谷Vue2
  • 三菱FX2NPLC 定时器和计数器(1)

    今天学习了李金城老师的PLC基础课程第18课时和第19课时有关三菱PLC的定时器和计数器的内容 现对相关内容进行整理 三菱PLC的定时器和计数器 1 1 定时器类型 1 1通用型定时器 1 2积算型定时器 2 定时器程序编制 2 1瞬时触点
  • go --timer

    定时器是什么 Golang 原生 time 包下可以用来执行一些定时任务或者是周期性的任务的一个工具 本文基于 Go 1 14 如果以下文章有哪里不对或者问题的地方 欢迎讨论学习 定时器的日常使用 Timer 相关 func NewTime
  • IOException: 文件名、目录名或卷标语法不正确

    问题描述 创建文件夹或者文件的时候报的异常 解决过程 在电脑上新增一个名字为 我的我的 lt gt gt fdvd lt 文件 会发现提示如下 把违法的字符给替换掉即可 public static String replaceIllegal
  • SPI四种模式区别

    SPI四种模式区别 spi四种模式SPI的相位 CPHA 和极性 CPOL 分别可以为0或1 对应的4种组合构成了SPI的4种模式 mode Mode 0 CPOL 0 CPHA 0 Mode 1 CPOL 0 CPHA 1 Mode 2
  • react 实现表格列表拖拽排序

    问题描述 在项目开发中 遇到这样一个需求 需要对表格里面的数据进行拖拽排序 效果图如下所示 思路 安装两个插件 react sortable hoc 或者 react beautiful dnd array move npm install
  • Darts解读

    如果没看过这篇paper 可以先去看一下翻译过的版本Darts译文 整篇paper主要分了三大部分 分别是INTRODUCTION DIFFERENTIABLE ARCHITECTURE SEARCH EXPERIMENTS AND RES
  • IDEA2022.3.2创建第一个SpringMVC项目

    1 创建Maven的web工程 导入相关坐标
  • 错误:【Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块 】解决方法和思路

    WinFrom程序 错误 Unable to load DLL SQLite Interop dll 找不到指定的模块 Exception from HRESULT 0x8007007E Stack Trace at System Data
  • PCB信号集中换层

    一 信号集中换层 会引起信号参考平面的改变 因此会造成信号回流路径的不连续 因此应该尽量避免信号的集中换层 能在同一层走线就不要进行换层走线 这样可以最大程度减小信号的回路面积 减少EMI问题 重要思想 在低速电路中 信号沿着电阻最小的路径
  • IDEA的JDBC代码配置驱动

    一 普通项目的JDBC代码配置驱动 第一步 创建模块 点击 File gt new gt Module 第二步 打开模块的设置 点击 File gt Project Structure 出现以下界面 第三步 添加 java 的库 选择 Li
  • Java程序员如何加快打怪升级之路

    程序员正常的职业走向一般是怎么样的 我不能完全的解释 只能以身边人的例子来诠释 1 大公司 打下手 1 3月 代码工 3 8月 程序员 1年到 项目组长 4年半以上 看机遇 项目经理 6年以上 看机遇 2 小公司 代码工 1 3月 程序员
  • ST-GCN 论文解读

    论文 基于骨骼动作识别的时空图卷积网络 摘要 主要贡献 ST GCN 基于图的动态骨骼建模通用公式 1 骨架图构建 1 1 节点集 V V V 1 2 边集