这是ACMMM2020的一篇文章,题目为:Stronger, Faster and More Explainable: A Graph Convolutional Baseline for Skeleton-based Action Recognition
原文地址
CODE PA-ResGCN
一作 Yi-Fan Song 也曾提出RA-GCN(Richly Activated Graph Convolutional Network)的两个版本,分别发在了IEEE ICIP2019 和 IEEE TCSVT2020.
从abstract中我们可以关注到几个点:SOTA;Model;Dataset 我们就这样一步步分析这篇论文的贡献。
首先来看模型的效果吧,
分别在NTU RGB+D 60 & 120 Dataset 上取得了SOTA成果。可以看到,在高准确率情况下参数也是较少的。作者还给出了高性能模型PA-ResGCN & 轻量模型ResGCN,最后在消融实验中将详细说明。
就Model而言,ResGCN主要由三个部分组成,分别为:MIB(早起融合多输入分支)、ResGCN(残差GCN---->轻量)、PartAtt(发现整个动作序列上最基本的身体部分---->提高可解释性与稳定性)。
首先,骨架数据是多个骨架关节的3D坐标的时间序列,可以通过姿态估计方法从2D图像中估计,也可以通过Kinect等多模态传感器直接收集。
基于骨架的动作识别主要可以分为两个阶段。一、早期,传统的方法是采用递归神经网络RNNs或基于CNNs的模型来分析骨架序列。例如使用分层双向RNN来捕获不同身体部位之间的丰富依赖关系;一种简单有效的CNN架构用于修剪骨架序列的动作分类;虽然CNN模型轻量,但这一类模型性能较差。二、近年来,由于描述结构数据的极大表达能力,提出了基于图形的模型进行动态骨架建模。最早的一篇可以追溯到2018年提出的ST-GCN(the Spatial Temporal Graph Convolutional Networks)。基于图卷积的相关文章在上一篇文章中有归纳过,可见基于骨架的动作识别----论文总结,这次主要是复现了这一篇ResGCN的文章。
针对现有模型的高复杂度问题,
作者主要采取了三种方式来解决这些问题:Multiple Input Branches(MIB)、Residual GCN(ResGCN)、Part-wise Attention(PartAtt)。首先,提出了早期融合多输入分支(MIB)架构,从骨架数据中获取丰富的空间配置和时间动态,其中三个分支分别包括关节位置(相对和绝对)、骨骼特征(长度和角度)和运动速度(一个或两个时间步骤),随后在整个模型的早期阶段进行融合,以降低模型的复杂性;其次,受启发的Res网[8]的成功基于cnn的图像分类,我们引入一个残余GCN(ResGCN)模块,剩余链接使模型优化早于原始的未引用特征投影和瓶颈结构可以显著减轻参数调整的成本;最后,替代了现有模型中的联合注意力机制,提出了一个部分注意(PartAtt)模块来发现整个动作序列上最基本的身体部分,从而增强了不同动作序列的学习表示的可解释性和稳定性。
主要贡献总结如下:1.设计了一种早期融合的多分支体系结构,可以从原始骨架数据中获得的三个独立的时空特征序列(关节、速度和骨骼)中获取输入,使基线模型能够提取足够的结构特征。2.为了进一步提高模型的效率,在GCN中引入了残余瓶颈结构,其中残余链路减少了模型训练的困难,瓶颈结构降低了参数调整和模型推理的计算成本。3.提出了一种部分注意块来计算不同人体部位的注意权重,以进一步提高特征的识别能力,同时通过类激活图的可视化为分类结果提供了解释。4.在两个大规模的骨架动作数据集,即NTU RGB D60和120上进行了广泛的实验,其中GCN可以实现SOTA性能,具有瓶颈结构的GCN可以以更少的参数获得竞争性能。
=========================================================================================
这里要提一下这篇文章的注意力模块。
Attention Models 注意机制已经成为各种任务中强制序列建模的一个组成部分,如动作识别。将注意力机制引入基于RGB的动作识别模型,该模型利用人体姿态计算时空注意。还有研究首先将注意模块引入基于骨架的动作识别,建立了时空注意长期短期记忆(LSTM),为每个帧内的区分关节分配不同层次的注意。另一个研究还在LSTM单元中加入了注意模块。这两种模型都分别为每一帧应用注意模块,这可能会涉及到一些不稳定的噪声特征。此外,传统的注意模块通常通过多层感知来实现,它不考虑时间注意的密集局部依赖性和空间注意的密集局部依赖性。
Part-based Attention 人体骨架是一个具有五个主要身体部位的自然图.因此,研究人员通常会设计基于部分的方法来单独提取身体部位的特征。Du等人提出了一种双向RNN来分层次地连接身体部位的特征。Thakkar等人利用GCN对不同的身体部位进行建模,然后将它们聚集在一起以识别动作。最近,Huang等人提出了一种基于部分的骨架模型,该模型能够同步探索来自关节和身体部位的鉴别特征。所有这些基于部分的模型都旨在从身体部分中单独提取特征,而本文的工作则集中在发现具有关注机制的信息最丰富的部分上。
对骨架序列中每一帧的空间GCN操作表示为
其中是预定义的最大图距离,和表示输入和输出特征映射,⊗表示元素乘法,表示用图距离标记关节对的阶邻接矩阵,Λ用于规范化。和都是可学习的参数,分别用于实现卷积操作和调整每条边的重要性。
对于时间特征提取,设计了一个×1卷积层来聚合嵌入在相邻帧中的上下文特征。在此操作中,是一个预定义的超参数,它定义了时间窗口的长度。时空卷积层接着是批规范层和ReLU层,完全构造了一个基本块。
上图给出了一个MIB架构的例子,可以用一组超参数来总结[B1、N2、N3、N3]。第一个参数表示我们使用一个带有基本(B)块的ResGCN模块来处理初始输入数据。另外三个参数代表具有瓶颈(N)块的ResGCN模块,而差异位于输入和输出通道的数量上。第三部分和第四部分中的每个ResGCN模块后面跟着一个部件Att块。此外,在第三和第四部分的开始模块中,使用2的时间步幅进一步降低复杂性,这在实验中避免过度拟合。
应该注意的是,目前的高精度模型通常应用具有各种输入数据的多流架构。然而多流网络通常意味着高的计算成本和大规模数据集参数的困难。因此,本文在模型的早期阶段融合了三个输入分支,并在三个特征分支的连接后,应用一个主流来提取鉴别特征。这种体系结构不仅保留了丰富的输入特性,而且显著地抑制了模型的复杂性,并使训练过程更容易收敛。
Data Prepocessing 根据之前的研究,数据预处理对于基于骨架的动作识别至关重要。各种预处理方法后的输入特征主要分为三类:1)关节位置、2)运动速度、3)骨骼特征。
Bottleneck He等人提出了一种名为Bottleneck的微妙块结构,它分别在公共卷积层前后插入两个1×1卷积层,以便在卷积计算中以降低速率减少特征通道的数量。
本文用瓶颈结构替换了时空基本块,并获得了一个显著更快的模型训练和推理的实现。假设输入和输出信道均为256,且信道缩减率为4,时间窗口大小为9。然后,基本块包含256×256×9=589824参数,而瓶颈块仅包含256×64+64×64×9+64×256=69632参数,比基本块小近8.5倍。在上图中在GCN中的每个模块分别包含一个空间块和一个时间块的顺序执行。
Residual Links 基于上述的时空块,在这些块上添加残余链接后,很容易构建一个ResGCN模块。上图右下角有三种ResGCN链接,即Block块、Module模块和Dense密集。2.正如我们所看到的,块剩余链接连接每个块前后的特征,而模块链路跳转整个模块。密集链路似乎具有其他两个链路的两个优势,但更多的链接可能会损害模型的紧凑性,并需要更多的内存成本。因此,有必要选择一种适当类型的残余链接。
以前的基于部分的模型通常的目的是从身体部分单独提取特征,而本文专注于发现不同身体部分对整个动作序列的重要性。PartAtt Block 设计如图所示;首先,通过手动选择相应的关节,从输入特征中获得五个单独的身体部位(如图所示)。1).然后,将所有部分的特征连接起来,并在时间维度上平均汇集,然后通过具有批处理规范层和ReLU函数的完全连接层。随后,采用五个全连通层来计算注意力矩阵,并利用软最大函数来确定最基本的身体部分。最后,将五个部分的特征连接为具有不同注意权值的整体骨架表示。本部分Att块可以表述为
其中和表示输入和输出特征映射,⊗表示元素级乘法,(·)表示时间平均池和部分池操作,(·)和(·)表示部分级Softmax和ReLU激活函数。而,都是可学习的参数,其中被所有部分共享用来减维,而特定于每个部分来计算最终的注意权重。
分割Att和分割Att的主要区别是分割Att的基本群是通过分离特征通道得到的,而Att部分的基本群则从空间视图中对应于身体的各个部分。与其他注意模型相比,本文的部分Att及其方法之间有两个明显的区别。一方面,使用这个块来处理身体部位,而先前工作中的注意力块集中于关节。另一方面,传统的空间注意块分别工作于每一帧,而本文的空间注意块是基于在整个时间序列上的平均池化获得的全局上下文特征图。
作者所有实验室在两块 GTX TITAN X GPUs 上进行的
最大图距离和时间窗口大小分别设置为2和9。训练时期的最大次数设置为70个。初始学习率设置为0.1,在20和50时代衰减10。此外,在前10个时期使用了warmup strategy,使训练过程更加稳定。采用Nesterov动量为0.9,权重衰减为0.0001的随机梯度下降来调整参数。此外,还删除了原始ST-GCN模型中的退出层。
Bottleneck Block
Residual Links
MIB Module
Model Architecture
PartAtt Block
环境 (anaconda, >=3.5) and PyTorch (>=1.2.0).
其他库可以通过 pip install -r scripts/requirements.txt
数据集 NTU RGB+D 60 & 120 在这里下载 http://rose1.ntu.edu.sg/datasets/actionrecognition.asp
作者github上有提供预训练模型。
scripts/modify_configs.py用于修改configs中的统一路径。数据集路径
生成预处理的数据
bash scripts/auto_gen_data.sh
开始训练
python main.py -c
(例如python main.py -c 1002)
目前是这样啦~后续训练完了再更新后续。
=========================================================================================
【1002 N51 Xview】训练结果93.30%(作者93.5%)
【1006 B19 Xview】训练结果95.03%(作者94.8%)训练时长05h-00m-16s(2*3090ti GPU)
【 PA-ResGCN-N51 X-sub】训练结果89.80%(作者90.3%)训练时长05h-17m-16s