全面详解!图卷积在动作识别方向的应用(上)
- 2020-01-03 09:59:00
- 刘大牛 转自文章
- 231
这里要特别感谢我们的作者,来自电子科大的研究生凯隐。非常认真全面的总结,希望我们都可以把这种分享的精神、开源的精神传递下去,感谢比心!
本文结合现有的文献和方法以及作者自己的实践理解,详细阐述了图卷积在基于骨架的动作识别方向的应用,内容翔实,值得一读。
文章的脉络为:
1. 问题简述
2. 基本概念介绍
3. 方法和思路分析
4. 文献解读
4.1 时空特征的提取
4.2 更全面的空间特征抽取策略
4.3 数据增强
4.4 综合方法
由于篇幅较长,将分为上下进行发布。
人体动作识别是近年来 CV 领域的热门研究方向,其对人机交互、智能监控等应用具有重要意义。骨架动作识别属于动作识别的一个分支,旨在识别由骨架随时间变化构成的时间序列所代表的动作类型,即每个样本由连续的骨架帧构成,维度是 ( T,V,C), T 表示时间, V表示关节, C 表示空间位置( XY 或 XYZ),模型需要给出样本所属动作类别,因此属于多分类任务。其另一个分支是 RGB 视频动作识别。
该任务常用的数据集是 NTU RGB+D 数据集,以及Skeleton-Kinetics(用 openpose 在Kinetics-400视频数据集中得到 3D 骨架)数据集。
本文主要介绍近两年来基于图卷积的骨架动作识别相关工作,图卷积的标准公式为:
该公式的严密推导过程是从图的傅里叶变换以及谱域分析开始的,不过可以从空域来简单理解,即邻接矩阵 A 乘特征矩阵 H可以聚合( sum, mean, max 等)一阶邻域特征,自环邻接 I 可以将聚合的邻居特征与当前节点特征合并,最后通过权重矩阵 W 完成通道的变换。矩阵 是度矩阵,用于对自环邻接矩阵 (A+I) 进行对称规范化,此外一些论文也使用随机游走规范化。
图卷积的核心思想是建立图中不同节点之间的信息交流,从而学习图中每个节点的嵌入特征表示,在只考虑一阶邻域的条件下,随着网络层数加深,每个节点的感受野都会越来越大,最终覆盖全图,实现信息的完全交互。
对于图分类任务,在最后一层图卷积后,通常会经过一层 readout 层,得到整个图的表示,然后用这个表示来进行分类。对于骨架动作识别任务,每个样本都由图序列构成,因此需要在时间和空间维度同时进行 readout,通常是 pooling。
笔者认为该任务可以从三个领域借鉴方法:
1. 骨架通常由关节(joint)和骨骼(bone)相互连接表示,具有天然的图结构,因此可以借助 GNN 强大的空间特征抽取能力,来学习动作的潜在表示。事实上从 18 年开始,绝大部分骨架动作识别相关工作都是基于图卷积网络的。
2. 骨架序列属于时间序列,因此可以利用时间序列建模的相关方法来获取时间特征,例如 GRU、LSTM、3D 卷积等。
3. 骨架动作识别与视频动作识别都需要通过模型来提取动作的潜在特征,特别是时空特征的提取,因此可以相互借鉴方法。
此外,也有学者提出了其他的方法,例如可以将骨架序列转化为 RGB 图片,这样该问题就转化为图像分类问题(18 年之前的主流方法),也有基于 KNN 和贝叶斯的相关方法,总之解决问题的思路方法是多元化的,不局限于某一特定领域。在笔者阅读相关文献时,总结出了一些常见的改进(涨分)思路:
数据增强:原始骨架数据反映的骨架位置信息,如果对相邻两帧求差值,便可以得到骨架的一阶动态信息,对相邻关节求差值亦可以得到骨骼动态信息。理论上模型也能学习到这些信息,但提前计算出来并作为输入,可以在一定程度上提升准确率。
类邻接矩阵策略:GCN 中使用的邻接矩阵只包含一阶邻域,每个节点的感受野都非常有限,只有达到足够深度,网络层才能学习到远端关节之间的语义信息。此外,传统的邻接矩阵元素只有 0 和 1 两种值,在多数情况下很难反应关节间的相互关系。因此,设计一种不限于一阶邻域和整数值的邻接矩阵,是许多工作的探究点。对于骨架动作识别任务,主要建立非骨骼连接的关节之间的联系,例如手腕和脚踝。
注意力机制:Self-attention 及其相关变体在最近几年很火,例如由何恺明团队提出的 non-local 模块,在视频行为识别、目标检测等任务上都取得了不错的效果。对动作识别而言,每个动作的信息往往集中在某一个或几个关节,而且肢节末端的关节由于运动更频繁,幅度更大,往往具有更多的关键信息,因此空间注意力是值得探究的点。
图结构拓展:通常在构建图时,只将关节作为图的节点,然而骨骼(bones)与关节具有密不可分的关系,虽然视觉上骨骼通常是长条形的,但仍然可以抽象为一个点参与图卷积。这种做法可以显著提升图的分辨率以及对空间信息的表达能力。
局部划分(part-based)方法:同一肢节或同一个区域内的关节之间运动相似度会更高,按这个规律可以将骨架分为多个区域(part),在区域内和区域间定义不同的信息传播方式,可以有效的提取局部和全局特征。这种方法称为part-based method。
因此由于水平有限,不能写得通俗易懂,可能会造成一些内容理解起来困难,因此建议结合原文阅读,还请谅解。此外,在解读文献时,陈述顺序和原文的顺序会有一些出入,这是因为不同文献侧重点不同,我会尽量按照我认为的合理顺序来分析。
此外,我会根据个人理解,从一些简单,通俗易懂的工作开始介绍,然后再介绍相对复杂的工作,这样有助于大家理清该领域的研究思路和方向。
时空特征的提取
图结构序列与视频一样,都兼具时间和空间特征,因此如何在 GCN 的基础上,设计对时空特征的抽取方法,是构造网络时必须考虑的问题。
DPRL: Deep Progressive Reinforcement Learning for Skeleton-based Action Recognition(CVPR,2018)
http://openaccess.thecvf.com/content_cvpr_2018/CameraReady/1736.pdf
通过强化学习帧蒸馏方法(frame distillation)来选择最具代表性的帧,然后再通过图卷积网络抽取空间信息。前者是时间上的类注意力方法,后者则是空间上的特征抽取方法,整体网络结构如下:
网络结构
深度渐进式强化学习(DPRL)
帧蒸馏网络对应中的 FDNet。样本中不同帧所含信息不同,且许多相邻帧往往具有大量的冗余信息,该工作通过强化学习蒸馏方法从原始帧序列中挑选最具代表力,可识别力的帧参与图卷积,使网络能得到更多的有用信息,而丢弃哪些混淆度强的无用信息。具体方法在文献中有详细介绍。
基于强化学习的帧蒸馏网络
类邻接矩阵策略
这篇文章是典型的类邻接矩阵策略。通过手工构建的非骨骼连接(下图虚线)来强化节点之间的信息交流,提高节点的感受野对于某些动作而言,其主要运动关节在原始骨架中并不是直接相连的,例如拍手动作,这就意味着在1邻域的情况下,需要经过多次卷积两手之间才会有互相得到对方的信息,如果让他们直接相连,可以让信息在更浅的网络层得到交互,更深的网络学习到的特征信息也更加稳定准确。
人工构建的非骨骼连接
具体地,对于固有骨骼连接,在邻接矩阵中用一个可学习参数 α 来代表连接权重,对非固有邻接,用可学习参数 β 来代表连接权重。
此外,在进行图卷积时,由于输入是图序列,因此会对每一帧单独进行图卷积,然后在时间维度上进行 concate,从而得到整个图序列的 feature map 。
实验结果
在 NTU 数据上的实验结果,左右两列分别是 cross subject 和 cross view:
总结
该工作提出的帧蒸馏网络在思想上与注意力机制一致,即挑选出有意义,感兴趣的部分,而空间上的非物理连接则能有效的提高特征聚合速度,此外自学习的邻接矩阵参数能让重要关节得到更多的关注。
02
ST-GCN: Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition(AAAI, 2018)
https://arxiv.org/pdf/1801.07455.pdf
一篇非常具有代表性的文章,其核心思想是通过空域上的图卷积和时域上的常规卷积,来聚合时间和空间特征。
时空图卷积
借鉴了视频动作识别中对 3D 卷积分解为 (2+1)D 的思想,通过空间上的图卷积来提取空间信息,通过前后相邻帧的常规卷积来提取时间信息,通过二者的串联叠加来逐步提取时空信息。这么做相当于将每个节点的感受野扩大到的时空范围。
时空图卷积示意图
假设 feature map 维度是 (C, T, V)每个 block 由两部分组成:
1.对每一帧的图卷积:
2. 在 T 维度进行的常规卷积,卷积核大小是 (τ,1)。
此外图卷积和整个 block 都包含 residual 连接。
邻域划分策略
节点邻域是节点的邻居节点的集合,体现在邻接矩阵中。标准 GCN 对所有节点使用同一个权重矩阵,但人体运动过程中,存在关节距离重心越远,运动幅度越大的规律,即包含的信息越多,因此本文提出将邻域分为三个部分:自身,近重心,远重心,如下图中的(d):
三种不同的邻域划分策略
划分过后对每个节点而言,其邻域会分为三个部分,因此图的邻接矩阵就分为了三个子邻接矩阵,每个矩阵单独享有一个卷积权重,分别进行图卷积,最后通过加法叠加结果。这样划分会导致参数数量增加(扩增 3 倍),但网络对空间特征细节的刻画能力也更加强。
邻接矩阵自学习策略
通过为邻接矩阵赋予一个等大小的权重矩阵,可以让网络自动学习边与边之间的连接权重:
M 表示待学习的权重矩阵(全 1 初始化), Aj 表示第 j 个邻域对应的邻接矩阵,通过二者的 hardmard 乘积得到最终的邻接矩阵。这种做法可以在一定程度上提高对已有物理连接的刻画能力,但不能使 A 中的 0 值变为非 0 值,即不能在关节间建立非物理连接。
提出新数据集
本文通过 openpose 从视频中提取 2D 骨架序列,再将置信度作为 z 轴,从而得到 3D 骨架序列,由此从Kinetics-400视频行为数据集中得到了Kinetics-skeleton 骨架行为数据集。
实验结果
在 NTU 数据集上的实验结果:
在 Kinetics-skeleton 数据集上的实验结果:
总结
本文通过线性堆叠的 GCN 和 TCN 来间接扩大每个节点的感受野,非常有助于时空信息的提取。对邻域的经验性划分虽然会增加参数数量,但也能提高网络对不同关节特征的刻画能力。此外,自学习的 mask 参数能让关节连接权重更加平滑,但相较于 DPRL,本文没有建立非相邻关节之间的直接连接,因此远端关节之间的信息交互会更困难。而对于 DPRL,其使用的是人工定义的非骨骼连接,因此对空间信息的刻画能力非常有限。
更全面的空间特征抽取策略
虽然骨架代表了物理上真实存在的关节连接,但在骨架的基础上建立更多的非物理连接,甚至是关节的强连通图,能提高每个节点的感受野,从而让网络在浅层就能学习到更多的有用信息。
HCN: Co-occurrence Feature Learning from Skeleton Data for Action Recognition and Detection with Hierarchical Aggregation
https://arxiv.org/pdf/1804.06055.pdf
这篇文章提出的方法在 GCN 相关工作出现之前效果最佳,这里简要介绍。
HCN网络结构示意图
这里输入 Input 的大小是 T*V*C, T 是帧长度, V是节点数量, C 是输入通道。
开始的两层卷积是常规的通道卷积,然后将 V 和 C 维度对调,这样接下来的卷积就会将 V作为通道处理,而卷积对通道的操作是全连接,因此任意两个节点都会进行加权求和。这种做法体现在图上,相当于建立任意两个节点之间的可学习权重连接,将图当成强连通图对待。因此该方法虽然没有直接使用图卷积,却仍然能取得不错的效果。
实验结果
NTU 数据集:
02
2S-AGCN: Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition(CVPR, 2019)
https://arxiv.org/pdf/1805.07694.pdf
本文在 ST-GCN 的基础上,提出了更加合理的邻接矩阵策略,不仅包含自学习的邻接矩阵,还通过 self-attention 机制为每个样本计算单独的邻接矩阵,大大增强了网络对空间特征的抽取能力。
数据增强
即将 bones 流作为独立数据流,独立于 joint 流进行训练。预测时结合两个网络的预测值,得到最终预测结果:
适应性邻接矩阵策略
这里的 k 表示三种不同的领域,即 ST-GCN 中的 spatial 邻域划分策略。邻接矩阵由三部分构成:
A k 是基础邻接矩阵,值只有 0 和 1,只包含关节间原有的直接物理连接。
B k 是权重邻接矩阵,初始化为 0,由网络自动学习。
C k 是 attention 邻接矩阵,计算方式为embedded 高斯函数:
T 表示转置。这部分主要借鉴了 “non-local neural network” 和 “attention is all you need” 中提出的self-attention 方法,但不同于何恺明的 non-local网络,这里是用关节的轨迹来计算两个关节之间的attention 值,时间维度被合并到了 C 中,这么做可以降低计算量和参数量,防止过拟合。
三个邻接矩阵的整体计算过程可以用类似于 non-local 网络中的图例来表示:
实验结果
在 NTU cross view上的 Ablation 实验:
个人认为在 cross subject 条件下对比会比较明显。NTU 数据集:
Kinetics-Skeleton 数据集:
03
DGNN:Skeleton-Based Action Recognition with Directed Graph Neural Networks
https://url.cn/5x6EUs3
在 ST-GCN 和 2S-AGCN 的基础上进一步提高了抽取空间特征时的细粒度。
有向图信息传播
在 ST-GCN 中提出的邻域划分策略,实际上可以概括为不同的信息传播方向区别对待,信息从末端关节流向中心关节和从中心关节流向末端关节应该区别对待。因此本文用有向图来处理不同的信息方向:
此外在,2S-AGCN 中 bones 流和 joints 流相互独立,然而二者实际上应该具有更加紧密的联系,因此本文将 Bones 也作为一种节点参与到信息流传播中,这样可以提高空间特征的细粒度。这与 Sym-GNN 中的 AGC 部分有一定的相似之处。
结合以上两点,可以用关联矩阵(incidence matrix)来表示节点和边之间的连接关系,关联矩阵规模是 (Nv , Ne),即节点数和边数。关联矩阵中 1 表示节点是边的源节点, -1 表示目标节点。进一步地可以将源节点关联矩阵和目标节点关联矩阵分开:
在进行信息传播时,先分别以节点和边为中心聚合特征,然后再更新节点和边的值:
g 表示聚合函数,通过关联矩阵图卷积进行聚合, h 表示更新函数,这里是 1*1 卷积(即 FC 层)。假设某一层输入通道是 Cin,输出通道数是 Cout,则 1*1 卷积的卷积核大小为 3*Cin*Cout,要比标准图卷积中 Cin*Cout 的卷积核大三倍。因此参数数量相对来讲要多很多。
数据增强
本文将 motion 流作为另一个独立训练的数据流,bone 和 joints 计算 motion 值的方法相同,即计算两帧差值。
实验结果
NTU 数据集:
Kinetics-Skeleton 数据集:
极验是全球顶尖的交互安全技术服务商,于2012年在武汉成立。全球首创 “行为式验证技术” ,利用生物特征与人工智能技术解决交互安全问题,为企业抵御恶意攻击防止资产损失提供一站式解决方案。
联系人: | 透明七彩巨人 |
---|---|
Email: | weok168@gmail.com |