• 论文超详细精读|五千字:PB-GCN



    在这里插入图片描述

    前言

    笔者从人工智能小白的角度,力求能够从原文中解析出最高效率的知识。
    之前看了很多博客去学习AI,但发现虽然有时候会感觉很省时间,但到了复现的时候就会傻眼,因为太多实现的细节没有提及。而且博客具有很强的主观性,因此我建议还是搭配原文来看。

    请下载原文《Part-based Graph Convolutional Network for Action Recognition》搭配阅读本文,会更高效哦!

    总览

    首先,看完标题《Part-based Graph Convolutional Network for Action Recognition》,摘要和结论,我了解到了以下信息:
    1.引入了基于部分的图卷积网络(PB-GCN)来从骨架视频中识别动作。
    2.将骨架图划分为四个子图,子图之间共享关节,并学习使用基于部分的图卷积网络的识别模型。与使用整个骨架图的模型相比,这样的模型提高了识别性能。本质上,parts上的图卷积的目的是捕捉parts的高级属性并学习它们之间的关系
    3.相对坐标和时间位移:没有使用3D关节坐标作为节点特征,而是使用相对坐标和时间位移提高了性能。

    一、Introduction

    几何特征和运动学特征已被用于骨骼动作识别。因此,本文使用了编码相对关节坐标的几何特征和编码基于部分的图卷积模型中每个顶点的时间位移的运动特征,以产生显著影响。

    主要贡献

    在这里插入图片描述
    (a)几何和运动学特征
    (b)阑尾和轴向部分:两个部分
    (c)将阑尾和轴向骨骼分为上下部分:四个部分
    (d)将阑尾上下骨骼分为左右部分:六个部分。

    1.制定了一个通用的基于部分的图卷积网络(PB-GCN),它可以学习任何具有众所周知属性的图,并应用于识别S-videos中的动作
    2.使用几何和运动特征来代替每个顶点的3D关节位置,以提高识别性能,

    二、Related Work

    Graph-based methods(基于图的方法)

    本文公式探索了带有基于部分的图卷积网络的分割骨架图,并且证明了它提高了识别性能。此外,使用相对坐标和时间位移作为每个顶点处的特征,而不是3D连接坐标(,这提高了动作识别性能。

    三、Background

    使用度矩阵将邻接矩阵归一化为:在这里插入图片描述
    在这里插入图片描述

    本文主要讨论空间卷积,因为它们类似于RGB图像等规则格图上的卷积。然后,可以通过堆叠多个图形卷积单元来形成图形CNN。图形卷积(如上图所示)可定义为:
    在这里插入图片描述
    其中,

    • v i v_i vi 为卷积居中的根顶点(如图像卷积中的中心像素)
    • W ( ⋅ ) W(·) W() k k k 邻域 N k ( v i ) N_k(v_i) Nk(vi) 中分配给邻居 v j v_j vj 的标签索引的大小为 L L L 的滤波器权向量
    • X ( v j ) X(v_j) X(vj) v j v_j vj 处的输入特征, Y ( v i ) Y(v_i) Y(vi) 为根顶点 v i v_i vi 处的卷积输出特征。

    将式2表示为邻接矩阵:
    在这里插入图片描述
    A n o r m ( i , j ) A^{norm}(i, j) Anorm(i,j) 基本上定义了距离为1的邻域,因此,方程2通过使用 k k k 阶邻域 N k ( v i ) N_k(v_i) Nk(vi) 获得了一种更一般的卷积形式。

    3.1 Part-based Graph(基于部分的图)

    人体骨架图可以分为几个部分,每个子图代表人体的一个部分。通常,基于部分的图可以构造成子图的组合,其中每个子图都具有定义它的特定属性。
    假设图G被分成n个分区,则:
    在这里插入图片描述
    P p \mathcal{P}_p Pp 是图 G \mathcal{G} G 的分区(或子图) p p p 。作者考虑分区可以共享顶点或有边连接它们的场景。接着解释了如何为部分图定义部分图卷积。

    3.3 Part-based Graph Convolutions(基于部分的图卷积)

    1.本质上,parts上的图卷积的目的是捕捉parts的高级属性并学习它们之间的关系。在基于变形parts的模型中,通过变形parts之间的连接来识别不同的parts,并学习它们之间的关系。
    2.类似地,parts上的图卷积识别该子图的属性,而子图上的聚集学习它们之间的关系。对于基于parts的图形,分别执行每个parts的卷积,并使用聚合函数 F a g g \mathcal{F}_{agg} Fagg 合并结果。跨分区在边缘上使用 F a g g \mathcal{F}_{agg} Fagg
    在这里插入图片描述
    F a g g \mathcal{F}_{agg} Fagg用于跨分区的公共顶点:
    在这里插入图片描述
    卷积参数 W p W_p Wp 可以跨部分共享或保持分离,而仅考虑该部分中的 v i v_i vi的邻居 ( N k p ( v i ) ) (N_{kp}(v_i)) (Nkp(vi))
    为了组合跨部分的信息,根据分区配置,

    • 函数 F a g g \mathcal{F}_{agg} Fagg 组合共享顶点处的信息(公式7)
    • 或者,通过交叉部分的边共享信息(公式6, E ( p 1 , p 2 ) \mathcal{E}(p_1,p_2) E(p1p2) 包含连接部分 p 1 p_1 p1 p 2 p_2 p2 的所有边)。

    可以使用一个复杂的 F a g g \mathcal{F}_{agg} Fagg 来使模型变得强大。利用图卷积,基于部分的图模型可以学习丰富的表示。

    四、Spatio-temporal Part-based Graph Convolutions

    为了包含时间维度,每个部分对应的关节都被时间连接。
    在这里插入图片描述
    上图为根节点的时空邻域(绿色)和时空维度卷积的描述。 图中显示了 F a g g \mathcal{F}_{agg} Fagg 的应用效果,其中公共顶点的阴影较暗。

    • (b)为五帧躯干的时空图。
    • (c)为躯干和头部共同顶点的空间卷积。
    • (d)为不同帧的空间卷积。
    • (e)为在头部+躯干上应用 F a g g \mathcal{F}_{agg} Fagg
    • (f)为合并图的时间维度卷积。
    卷积过程:

    1.分区卷积:按照公式5对每个分区进行空间卷积。
    2.分区合并:使用 F a g g \mathcal{F}_{agg} Fagg 将经过卷积的分区合并。
    3.合并图时间卷积:对通过聚集分区得到的图进行时间卷积。

    在实作上,作者为每一帧独立地对每个分区进行空间卷积,在每一帧聚合它们,并在聚合图的时间维度上执行时间卷积。

    实作细节

    1.如何卷积?首先在时空图中定义一个顶点的时空邻域,并为邻域中的顶点分配标签,从而进行卷积。

    • 对于每个顶点,对于空间维度( N 1 \mathcal{N}_1 N1),使用1邻域( k = 1 k = 1 k=1),因为骨架图不是很大。
    • 对于时间维度(Nτ),此模型使用 τ τ τ-邻域( k = τ k = τ k=τ)。

    上图图(a)(虚线多边形)显示了根顶点的空间和时间邻域。
    此模型的不同邻域集定义为 ( d ( v i , v j ) = v i d(v_i, v_j) = v_i d(vi,vj)=vi v j v_j vj之间最短路径的长度):
    在这里插入图片描述
    其中, t a t_a ta t b t_b tb 表示两个时间瞬间, p ∈ { 1 , … , n } p∈\{1,… , n\} p{1n}为分区索引。
    每个部分的顶点集合 V p \mathcal{V}_p Vp 都不同,部分之间共享一些顶点(图1(c))。
    由于时间卷积是在聚合的时空图上执行的,所以 N τ \mathcal{N}τ Nτ不是部分特定的。
    图3(a)显示了躯干根顶点的空间和时间邻域。
    为了对接收域(或邻域)中的顶点排序,作者在空间上使用单一标签( L S : V → { 0 } L_S: \mathcal{V}→\{0\} LS:V{0} )来平等地权衡每个顶点的 N 1 p \mathcal{N}_{1p} N1p中的顶点,在时间上使用 τ τ τ 标签 ( L T : V → { 0 , … , τ − 1 } ) (L_T:\mathcal{V}→\{0,…, τ−1\}) (LT:V{0τ1}) 来对 N τ N_τ Nτ 帧之间的顶点进行不同的权衡。
    标签函数定义为:
    在这里插入图片描述

    使用标记的空间和时间感受场,作者将空间和时间卷积定义为:
    在这里插入图片描述
    其中,

    • A p A_p Ap是部分 p p p 的归一化邻接矩阵,如第3节所述。
    • 每个部分的 L S L_S LS是相同的,但 N 1 p \mathcal{N}_{1p} N1p部分(parts)特定的
    • W p ∈ R C ′ × C × 1 × 1 W_p∈\mathbb{R}^{C' ×C×1×1} WpRC×C×1×1部分(parts)特定的信道变换核(点向运算)
    • W T ∈ R C ′ × C × τ × 1 W_T∈\mathbb{R}^{C' ×C×τ×1} WTRC×C×τ×1时间卷积核
    • Z p Z_p Zp是在每个顶点的输入特征 X p X_p Xp 上应用 W p W_p Wp 的输出。
    • Y S Y_S YS 是集合一帧上所有分区图的输出, Y T Y_T YT是对 τ τ τ 帧的 Y S Y_S YS 输出进行时间卷积后的输出。

    使用加权和融合作为此模型的 F a g g \mathcal{F}_{agg} Fagg :
    在这里插入图片描述

    现在我们再回到图一

    在这里插入图片描述
    作者认为,人体骨骼可分为两大组成部分:(1)轴骨和(2)阑尾骨。
    (b)显示了这两个组件所包含的主体部分。人体骨骼可以根据这些组成部分分为不同的部分。
    不同的划分方案如(b),(c)和(d)所示,使用这些方案进行实验来测试PB-GCN。

    对于最终的表示,作者将人体骨骼分为头、手、躯干和腿四个部分,这对应于一个划分方案,即轴向和附录骨骼分别分为上下两个部分,如(c)所示。

    作者把手和腿的左右部分放在一起考虑,以便在执行一个动作时不知道人类的侧性(手/脚)。

    为了说明对侧侧性的不可知是如何有帮助的,作者将阑尾骨骼的上下部分分为左、右两部分(如(d)所示),结果是6个部分,并显示其结果。

    为了覆盖骨架图中关节之间的所有自然连接,作者使得两个相邻部分之间至少一个关节有重叠。例如,在(c)中,头和手之间的肩关节很常见。对于下阑尾骨骼(即腿),还包括脊柱底部的关节,以便与下轴骨有很好的重叠。

    体系结构和实现

    1.子图表示:邻接矩阵表示每个子图,用相应的度矩阵 d d d 归一化。
    2.输入:S-video时空图中的每个顶点的特征张量
    3.输出:视频的类分数向量。
    4.结构:基于类似resnet的模型,由9个时空图卷积单元(每个单元具有4个 W P W_ P WP核、1个 W T W_T WT核和一个residual)和一个初始时空头单元组成。
    5.输出通道:前三层有64个输出通道,后三层有128个,最后三层有256个。
    6.边权的学习:使用一个可学习的边权掩码来学习每个子图中的边权。

  • 相关阅读:
    微信小程序快速入门【四】
    FGUI编辑器插件开发(不推荐使用,当做参考吧)
    Python&C++相互混合调用编程全面实战-31完成扩展库中打开ffmpeg解码器
    Servlet 需要提供对应的doGet() 与 doPost()方法
    电子元器件手册中assert和deassert的含义
    568A和568B两种线序
    介绍Node.js中fs模块 代码和注释。
    java面试题基础第七天
    罗汉果甜苷V/益生菌修饰卵清蛋白 Mogroside V/probiotics-OVA
    【使用python和flask建个人博客】修复侧边栏最新文章、最多阅读等链接不能打开的问题
  • 原文地址:https://blog.csdn.net/IanYue/article/details/127708695