在本博客中,我将对骨架动作识别任务中应用图卷积的开山之作ST-GCN进行重述,其中会参杂个人的理解。本篇博客内容为本人研究生阶段结课作业与论文部分内容,因此改进部分暂时未上传;本篇博客旨在于广大同学一起分享讨论于进步,请勿私自转载。
在文末将会对ST-GCN中的图卷积代码进行图画阐述。后续可能会更新代码讲解。
在基于骨架的动作识别任务中,动态的人体骨架具有该任务所需的重要信息,然而以往传统的方法通常使用手工特征或遍历规则对骨架进行建模,不仅限制了模型表达能力还使得模型泛化困难;因此作者提出了一个新颖的动态骨架模型ST-GCN,它可以从数据中自动学习其空间和时间的模式,实现了信息在时空维度的集成,并使得模型具有很强的表达能力和泛化能力。该模型在Kinetics和NTU-RGB+D两个骨架识别数据集上与主流方法相比,取得了质的提升。
人体动作识别在近年来是研究热点,大家使用外观、深度、光流、身体骨架等数据模式来完成该任务,然而却忽略了带有大量重要信息的动态人体骨架,因此作者系统地在该模态下进行研究,有原则、高效的方法对动态人体骨架建模。
以往利用骨架数据都是简单的使用其各个时间帧上的2D或3D关节坐标来构成特征向量,再对其进行时序分析,这种方法具有巨大的局限性:未利用至关重要的关节空间关系;不同于这些方法,作者使用关节的自然连接构建出骨架图,并利用神经网络自动捕捉空间结构和时序动态。关于神经网络类型的选择,不同于以往使用规则的、网格结构的欧几里得数据作为网络的输入的方式,自然连接的骨架图输入是一个不规则的图形数据,因此使用图卷积自然比传统卷积神经网络CNN具有天然的优势。
基于上述背景,作者设计了用于动作识别的骨架序列的通用表示,并且将图神经网络扩展到该时空图中构建出时空图卷积网络模型,称为ST-GCN。对于时空图的构建,作者将人体骨架关节作为节点,将空间上人体骨架的自然连接作为空间边,将时序上相同节点在前一帧和后一帧的对应节点连接作为时序边;随后在该时空图上构建多层时空图卷积,分别在空间维度和时间维度提取信息。
本文中,作者的主要贡献为:
图卷积主要有两种主流方法:
在本文中,作者使用空域图卷积方式。
基于骨架动作识别主要可以分为两大类:
在本文中,作者提出的ST-GCN首次使用图卷积神经网络(GCN),使其可以利用图卷积的局部性和时序动态信息更好更方便的学习人体动作的表示。
现有方法已经证明了身体部位的局部信息对骨架动作识别任务十分有效,因此作者便引用此方法中的骨架序列表示的层次性和局部性,使用神经网络进行实现,从而构建出了基于骨架动作识别任务上的ST-GCN模型。
如图1所示,在ST-GCN网络中:首先使用姿态估计方法从普通视频数据中获取骨架数据,并利用该数据构建出时空骨架序列图作为时空图卷积网络ST-GCN的输入;之后使用多层时空图卷积网络进行卷积,逐步在图上生成更高层次的特征图;最后用标准的Softmax分类器将其分类为相应的动作类别,整个模型通过反向传播以端到端的方式进行训练。
图1 ST-GCN网络
在ST-GCN中,令拥有个节点和帧的骨架序列时空图定义为,其可视化后如图1所示;其中:
其中的节点集合为,且其中的第t帧的第i节点的特征向量有:
若使用openpose提取的骨架数据,则其为该节点的坐标向量和估计置信度组成;而Kinetics和NTU-RGB+D数据集的为该节点的坐标向量。
其中的边集合包括和,分别指空间边(spatial edges)和时序边(temporal edges);指一组自然连接的人体关节。
图2 骨架序列时空图
在构架好骨架图后,作者对其进行了图划分操作(如图2所示,其中图2-(a)为普通骨架图),从而可以使用多种卷积核进行卷积。本文中作者使用的划分策略为空间结构划分方式(Spatial configuration partitioning)(如图2-(d)所示),将其结构图邻接矩阵划分为3个子矩阵,即意味着将结构图划分3个子图:其中第一个子集连接了空间位置上比根节点更远离整个骨架的邻居节点,第二个子集连接了更靠近中心的邻居节点,第三个子集为根节点本身,分别表示了离心运动、向心运动和静止的运动特征。除了这种划分方式外,作者还分别尝试了唯一划分(Uni-labeling partitioning)方式(如图2-(b)所示):将节点的邻居节点划分为一个子集和基于距离的划分 (Distance partitioning)方式(如图2-(c)所示):将节点的邻居节点和根节点划分为2个子集;但实验效果均不佳。
图3 骨架图分区策略
在介绍图卷积之前,作者先以CNN在单帧骨架图输入的卷积举例,并对其卷积公式进行推广概括,得到更加通用的卷积公式,即给定一个核大小为的卷积算子、输入特征映射和通道数c;空间位置x在单个通道的卷积输出可以定义为:
(1)
其中采样函数,即根据卷积核采样出进行卷积操作的特征点,在骨架图中枚举出该位置的邻居。而权重函数提供进行卷积的权重向量,用来与采样出的维特征向量计算内积。
在空域图卷积中,空间域邻接矩阵为,若节点和直接相连,则,其余为0;以此来表示空间域图结构;
其采样函数可写成:
(2)
其中表示到的最短路径,参数控制所采样的邻居图的空间范围。
并且由上述作者将邻居划分为3个子图,并且将每个子图中的每个节点分别通过映射函数映射到其子集标签,即将邻接矩阵划分为、和,分别代表根节点、向心运动特征节点和离心运动特征节点;则其权重函数可写为:
(3)
因此,在空间域上的图卷积公式可写为:
同理,在时间域中,其时间域邻接矩阵为,用来表示连续帧之间关节的轨迹。
其采样函数可写成:
(5)
其中控制时间域卷积的卷积范围,即需要聚合的时间尺度,并且通过简单的映射函数,将时域邻接矩阵划分为份:;故其权重函数可写为:
(6)
所以,在时间域上的卷积公式可写为:
基于上述描述,我们就可以构建出时空域图卷积的明确的卷积算子。
在构建完成时空域的图卷积算子之后,接下来作者便构建了具体实现ST-GCN的具体实现方式:令输入特征图,其中分别表示输入通道数、关键帧帧数和关节点数量;为实现ST-GCN,则公式(4)序改写为:
其中:指第个分区的归一化邻接矩阵;且为度矩阵,设置为0.001,避免空行。是卷积运算的可训练权重向量。是一个简单的注意力掩膜矩阵,代表每个关节的重要性;为点积操作。
对于时间卷积而言,其卷积公式(7)可改写为:
(9)
其中是卷积核大小为Kt×1的2D卷积操作。
在实现ST-GCN网络时,参数和分别设置为1和9,分别表征空间感受野和时间感受野的大小。然而这两个参数都手工设置,不仅缺乏灵活性,还使得模型的时空感受野都十分有限。
该数据集包含从YouTube检索的大约300000个视频片段。且划分240000个视频片段为训练集、20000个视频片段为验证集。这些视频涵盖了多达400个人类动作类,从日常活动、体育场景到复杂的互动动作。每个视频片段大约10秒。该数据集仅提供没有骨架数据的原始视频片段。
为了获得骨架数据,作者首先将所有视频的分辨率调整为340×256,并将帧速率转换为30 FPS。然后,作者使用OpenPose姿态估计工具来估计视频片段中的每个帧上的18个关节的位置。OpenPose给出了像素坐标系中的2D坐标(X,Y)和18个人体关节的置信度得分。因此,作者使用一个元组(X,Y,C)来表示每个关节,一个骨架帧被记录为一个18元组的数组。对于多人情况,作者在每个片段中选择平均联合置信度最高的2个人。
该数据集包含60个动作类中的56880个视频样本。其中里面的动作可分为三大类:日常动作、交互动作和医疗状况;
该数据集包含每个样本的RGB 视频、深度图序列、3D 骨骼数据和红外 (IR) 视频。并由三个 Kinect V2 相机同时捕获。其中3D 骨骼数据包含每人 25 个身体关节的 3D 坐标(X,Y,Z),且每个视频样本中至多包含两人的身体骨架;
其中该数据集拥有两个评价准则,对应于两种训练集与测试集划分标准:
Cross-Subject(X-Sub):按照人物ID来划分训练集和测试集,训练集40320个样本,测试集16560个样本,其中将人物ID为 1, 2, 4, 5, 8, 9, 13, 14, 15,16, 17, 18, 19, 25, 27, 28, 31, 34, 35, 38的20人作为训练集,剩余的作为测试集;即训练样本来自一个演员子集,而使用剩余演员的样本进行评估;
Cross-View(X-View):按相机ID来划分训练集和测试集,相机1采集的样本作为测试集,相机2和3的样本作为训练集,样本数分别为18960和37920。其中相机的设置规则为:三个相机,相机的垂直高度都是一样的,水平角度分别为-45°、0°和45°。
如图4,图5所示,分别ST-GCN在Kinetics和NTU-RGB+D数据集上的动作识别准确率。
图4 ST-GCN在Kinetics数据集的准确率
图5 ST-GCN在NTU-RGB+D数据集的准确率
本文主要提出了一种新颖的基于骨架的动作识别模型:时空图卷积网络(ST-GCN)。该模型在骨架序列上构造了一组时空图卷积。并且在两个大规模数据集上其识别精度都优于现有的基于骨架的算法。
此外,ST-GCN所捕获的动态骨架序列中的运动信息与RGB模态的数据信息是互补的。且作为图卷积在骨架动作识别任务的开山之作,ST-GCN模型也为未来的工作开辟了道路。在将来的研究中,如何将场景、对象和交互等上下文信息融入ST-GCN是亟待解决的问题。
这篇论文是香港中大-商汤科技联合实验室Yan等人在2018年AAAI 会议中发表的论文[2]。由于先前的方法无法直接使用骨架数据的图结构,其中首次应用GCN对骨架数据进行建模,该模型首先以关节为图的顶点,以人体结构和时间的自然联系为图的边,构造一个时空图[1],并基于此图进行时空卷积从而构建出时空图卷积网络,简称为ST-GCN。ST-GCN开辟了图卷积在动作识别应用的先河,几乎所有的基于GCN的动作识别任务都会参考其思想。
在上述ST-GCN网络模型的表述中,不难发现,虽然其拥有许多优点,但是ST-GCN的缺点也十分明显:
·ST-GCN中的人体骨架图是人为手工定义的,限制后面的网络学习到骨架图中的必要关联与新建连接,例如:在识别如“鼓掌”,“阅读”等与人为手工定义的人体骨架图空间上相距甚远的双手间的关系至关重要的动作时[3],网络很难学习到其中的关联,也很难对该原本不存在的边进行新建以建立连接,很大程度上降低了动作识别的精度;
·除此之外,ST-GCN中的网络结构是分层结构,每一层都代表了不同层次的语义信息[4],然而作者所采用的是一个全局固定的网络拓扑结构图,导致该网络无法灵活的对各层中的语义进行建模,且由于固定的全局网络拓扑结构,其感受野野不够灵活[5],也无法提取多尺度的信息[6];
·ST-GCN计算复杂度过高,且由于图卷积各节点之间的信息相互聚合,传统dropout对其无效,导致过拟合[7];
根据此项工作,许多科研人员在此基础上做了大量的相关工作,由于手工定义图的局限性,2s-AGCN与MS-AAGCN引入了多种自适应的拓扑图,而对于分层结构,为方便对各层语义进行建模,SGCN提出了一个通道融合模块 (CAMM);最后由于高计算复杂度shiftGCN将shift操作引入图卷积代替卷积的特征融合操作,除此之外DC-GCN_ADG提出了DC-GCN(DeCoupling Graph Convolutional Network)图卷积网络,可以在不增加计算量的同时增强图卷积的表达能力,并提出了ADG(attention-guided DropGraph)取代原始dropout,解决了图卷积过拟合的问题。
[1] Ren, B. , Liu, M. , Ding, R. , & Liu, H. . (2020). A survey on 3d skeleton-based action recognition using learning method.
[2] Sijie Yan, Yuanjun Xiong, and Dahua Lin. Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition. In AAAI, 2018.
[3] Lei Shi, Yifan Zhang, Jian Cheng, and Hanqing Lu. Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition. In CVPR, 2019.
[4] W. Yang, J. Zhang, J. Cai, and Z. Xu, "Shallow Graph Convolutional Network for Skeleton-Based Action Recognition," Sensors (Basel), vol. 21, no. 2, Jan 11 2021, doi: 10.3390/s21020452.
[5] Ke Cheng, Yifan Zhang, Xiangyu He, Weihan Chen, Jian Cheng, and Hanqing Lu. Skeleton-Based Action Recognition with Shift Graph Convolutional Network. In CVPR, 2020.
[6] H. Xia and X. Gao, "Multi-Scale Mixed Dense Graph Convolution Network for Skeleton-Based Action Recognition," IEEE Access, vol. 9, pp. 36475-36484, 2021, doi: 10.1109/access.2020.3049029.
[7] K. Cheng, Y. Zhang, C. Cao, L. Shi, J. Cheng and H. Lu. Decoupling GCN with DropGraph Module for Skeleton-Based Action Recognition. In ECCV, 2020.
源代码链接:GitHub - yysijie/st-gcn: Spatial Temporal Graph Convolutional Networks (ST-GCN) for Skeleton-Based Action Recognition in PyTorchhttps://github.com/yysijie/st-gcn
注意,本部分只着重介绍图卷积的实现操作部分,多有不全面之处。因此本部分的讲解适合于读者先研究源代码然后配合这部分的内容帮助理解的作用。
首先对于Kinetics-skeleton数据集来说,ST-GCN每层网络的输出如下(参考了知乎作者:
作者:日知
链接:https://www.zhihu.com/question/276101856/answer/638672980
来源:知乎)
“ # N*M(256*2)/C(3)/T(150)/V(18)
Input:[512, 3, 150, 18]
ST-GCN-1:[512, 64, 150, 18]
ST-GCN-2:[512, 64, 150, 18]
ST-GCN-3:[512, 64, 150, 18]
ST-GCN-4:[512, 64, 150, 18]
ST-GCN-5:[512, 128, 75, 18]
ST-GCN-6:[512, 128, 75, 18]
ST-GCN-7:[512, 128, 75, 18]
ST-GCN-8:[512, 256, 38, 18]
ST-GCN-9:[512, 256, 38, 18]
空间维度是关节的特征(开始为 3),时间的维度是关键帧数(开始为 150)。在经过所有 ST-GCN 单元的时空卷积后,关节的特征维度增加到 256,关键帧维度降低到 38。
个人感觉这样设计是因为,人的动作阶段并不多,但是每个阶段内的动作比较复杂。比如,一个挥高尔夫球杆的动作可能只需要分解为 5 步,但是每一步的手部、腰部和脚部动作要求却比较多。”
原代码模型为:
其中st_gcn中主要包含gcn和tcn的部分。这里主要介绍比较
而ConvTemporalGraphical的init为:
而ConvTemporalGraphical的forward函数为:(这里就是真正进行图卷积操作的部分,分别对应于公式:
注意:其实ST-GCN中的图卷积公式可以简化地写成:Z = A’ XW;
其中Z为图卷积的输出,X为图卷积的输入,A’为归一化后的邻接矩阵。
在本代码中上述公式可分为两个步骤(对应于下面代码注释部分的两个步骤):
步骤一、更新信息:Z1 = XW
步骤二、聚集领域信息:Z = A’Z1
引申:其实一般图卷积操作都是先进行邻域信息聚集之后再更新的,这里ST-GCN代码与其不一致。
)
这里就是对上图代码中图卷积操作的一个全局概述。这部分是自己用ipad手写画的图,不太好看,请大家多多包涵。
作者:日知
链接:https://www.zhihu.com/question/276101856/answer/638672980
来源:知乎