1.提出ST-GCN的思路
现有的基于骨架的动作识别方法已经验证了在建模中引入身体部位的有效性。作者认为,这种改进很大程度上是由于与整个骨架相比,部件限制了“局部区域”内关节轨迹的建模,从而形成了骨架序列的层次表示。在图像对象识别等任务中,层次表示和局部性通常是通过卷积神经网络的内在属性来实现的,而不是手动分配对象部分。它促使我们将 CNN 的吸引人的特性引入基于骨架的动作识别。这次尝试的结果就是ST-GCN模型。
2.模型构建的流程概述 (Pipeline Overview)
从输入视频到动作分类的整个流程,包括使用姿势估计算法从视频中提取骨架数据,构建时空图,然后应用多层时空图卷积,最后通过Softmax分类器进行动作分类。
3.骨架图构建 (Skeleton Graph Construction)
- 骨架序列由每帧中每个人体关节的2D或3D坐标表示。
- 构建一个无向的时空图G=(V,E),包含关节作为图节点和人体结构及时间的自然连接作为图边。
- 节点集V包含序列中的所有关节,特征向量F(vti)包含第ii个关节在帧t的坐标向量和估计置信度。
-
边集E由两部分组成:空间边ES表示帧内关节的连接,时间边EF连接连续帧中相同的关节。
4.空间图卷积神经网络 (Spatial Graph Convolutional Neural Network)
- 论文首先介绍了在单个帧上的空间图CNN模型,然后扩展到时空图卷积。
- 定义了采样函数p和权重函数w,以适应图结构数据。
- 空间图卷积通过结合采样函数和权重函数来重新定义,允许信息在图节点及其邻居之间整合。
5.分区策略 (Partition Strategies)
论文提出了三种分区策略,这三种策略提供了不同级别的空间信息处理能力,从简单的统一处理到复杂的基于人体解剖学特性的分区,使得ST-GCN模型能够灵活地适应不同的动作识别任务和数据特性。通过这些策略,ST-GCN能够有效地从数据中学习到关节之间的空间关系和时间动态,进而提高对复杂人体动作的识别能力。
1. 单标签分区 (Uni-labeling)
- 描述:这是最简单的分区策略,其中整个邻居集合被视为一个单一的子集。在这种策略下,每个相邻节点的特征向量与同一个权重向量进行内积运算。
- 特点:实现简单,但在处理关节数据时可能不够精细,因为它忽略了不同关节之间可能存在的重要性或角色差异。
2. 距离分区 (Distance Partitioning)
- 描述:这种策略根据节点到根节点的距离将邻居集合划分为多个子集。例如,可以简单地将邻居节点分为两组:根节点本身(距离为0)和其他邻居节点(距离为1)。
- 特点:能够捕捉到关节间的相对位置变化,如相对平移,从而更好地理解人体动作的动态特性。
3. 空间配置分区 (Spatial Configuration Partitioning)
- 描述:这种策略考虑到人体骨架的空间结构,将邻居集合分为三组:根节点本身、比根节点更靠近骨架质心的节点(向心组),以及比根节点离质心更远的节点(离心组)。
- 特点:这种分区方式考虑到了人体运动的向心和离心特性,能够更细致地模拟人体各部分的运动模式,从而提高动作识别的准确性。
6.ST-GCN的实施
1. 图卷积的实现
- 邻接矩阵:首先,使用邻接矩阵 A来表示图中的边,其中 Aij表示节点i和节点j之间是否存在边。对于时空图,还需要考虑时间维度上的连接。
- 自连接:每个节点都有一个指向自己的边,这通过添加身份矩阵 I 来实现,以确保每个节点在卷积中考虑自己的特征。
- 归一化:为了使模型更加稳定,对邻接矩阵进行归一化处理。通常使用的形式是
,其中,
2. 时空卷积操作
- 扩展到时空:在空间卷积的基础上,将时间维度也纳入考虑,使得卷积操作不仅在空间上进行,也在时间上进行,这样可以捕捉到动作的时间序列特征。
- 时间核大小:通过参数 Γ 控制时间卷积的窗口大小,即考虑多长的时间范围内的关节位置信息。
3. 可学习的边缘重要性加权
- 边缘权重:引入可学习的权重矩阵 M来调整每个边上的信息流动量,使得模型可以自动学习哪些关节间的联系对于动作识别更为重要。
- 实现方式:在卷积操作中,将边缘权重与邻接矩阵相乘,即 A⊙M,其中 ⊙表示元素级乘法。
4. 网络架构和训练
- 层数和通道:ST-GCN由多层图卷积层组成,每层具有一定数量的输出通道,这些通道数逐层增加,以捕获更复杂的特征。
- 批量归一化和残差连接:为了提高训练的稳定性和性能,每层之后使用批量归一化,并且采用残差连接来避免深层网络训练中的梯度消失问题。
- Dropout:为了减少过拟合,在使用图卷积层之后应用dropout。
- 全局池化:在最后一层图卷积之后,使用全局池化操作(如平均池化或最大池化)来得到整个序列的全局特征表示,用于最终的分类。
5. 损失函数和优化
- 损失函数:通常使用交叉熵损失函数来训练模型,以最小化预测类别和真实类别之间的差异。
- 优化器:使用如随机梯度下降(SGD)或Adam等优化算法来更新网络权重。
7.ST-GCN的网络架构和训练过程
当然,ST-GCN的网络架构具体细节如下:
-
输入层:网络的输入是人体骨架关节的时空图序列,其中每个节点代表一个关节,边代表关节之间的自然连接以及关节在连续帧之间的连接。
-
图卷积层:ST-GCN由多层图卷积单元组成,每层图卷积单元都使用图卷积操作。这些层通过堆叠来提取骨架序列的时空特征。
-
批量归一化:输入数据首先通过批量归一化层,以稳定训练过程并提高模型的收敛速度。
-
残差连接:为了缓解深层网络训练中的梯度消失问题,ST-GCN在每个图卷积单元后使用残差连接。
-
Dropout:为了减少过拟合,网络在每个图卷积单元后应用Dropout。
-
池化层:在某些图卷积层后使用池化操作,以降低特征维度并提取更重要的特征。
-
全连接层:在所有图卷积层之后,通常会有一个全局池化层,将多维特征向量降维到一个固定长度的特征向量。
-
分类器:最后,使用Softmax分类器对提取的特征进行分类。
网络架构的具体细节
-
图卷积层:ST-GCN模型由9层图卷积层组成,每层的图卷积操作包括空间和时间两个维度的卷积。这些层可以捕捉关节之间的空间关系以及关节随时间的运动模式。
-
通道数:前三层图卷积层的输出通道数为64,中间三层为128,最后三层为256。这些通道数逐层增加,以捕获更复杂的特征。
-
时间核大小:每层图卷积层的时间核大小为9,这意味着每层卷积操作会考虑当前关节以及周围关节在连续9帧内的信息。
-
残差连接:每个图卷积层后面都跟着一个残差连接,以促进深层网络中信息的流动并缓解梯度消失问题。
-
Dropout:在每个图卷积层后面使用Dropout,概率为0.5,以减少过拟合。
-
池化层:在第4层和第7层图卷积层后面使用步长为2的池化操作,以降低特征维度并提取更重要的特征。
-
全局池化:在所有图卷积层之后,使用全局平均池化将特征图降维到一个固定长度的特征向量。
-
全连接层:全局池化后的特征向量通过一个全连接层,然后通过Softmax分类器进行分类。
-
损失函数:使用交叉熵损失函数来计算预测类别和真实类别之间的误差。
-
优化器:使用随机梯度下降(SGD)作为优化器,学习率为0.01,并在每10个训练周期后将学习率乘以0.1。
-
数据增强:在训练Kinetics数据集时,为了模拟相机运动和增加模型的泛化能力,采用了随机仿射变换等数据增强技术。
-
端到端训练:整个网络采用端到端的方式进行训练,即直接从输入的骨架序列到最终的动作分类标签,通过反向传播算法来更新网络权重。
训练过程
-
数据预处理:
- 首先,对于Kinetics数据集,使用OpenPose工具箱估计视频中的人体关节位置,并将视频帧率转换为30 FPS。
- 对于NTU-RGB+D数据集,使用Kinect深度传感器提供的3D关节位置数据。
-
数据表示:
- 将每个关节表示为一个包含2D或3D坐标和估计置信度的元组。
- 将骨架序列表示为一个张量,维度为 (通道数, 帧数, 关节数, 坐标数)。
-
批量归一化:
- 在输入层之后,使用批量归一化来稳定训练过程,确保不同关节输入数据的一致性。
-
图卷积层配置:
- ST-GCN由9层图卷积层组成,前三层输出64个通道,中间三层输出128个通道,最后三层输出256个通道。
- 每层图卷积操作考虑了当前关节以及周围关节在连续9帧内的信息。
-
残差连接和Dropout:
- 每个图卷积层之后使用残差连接,以促进深层网络中信息的流动并缓解梯度消失问题。
- 在每个图卷积层后面应用Dropout,概率为0.5,以减少过拟合。
-
池化层:
- 在第4层和第7层图卷积层后面使用步长为2的池化操作,以降低特征维度并提取更重要的特征。
-
全局池化和分类器:
- 在所有图卷积层之后,使用全局平均池化将特征图降维到一个固定长度的特征向量。
- 将全局池化后的特征向量输入到一个全连接层,然后通过Softmax分类器进行分类。
-
损失函数和优化器:
- 使用交叉熵损失函数来计算预测类别和真实类别之间的误差。
- 使用随机梯度下降(SGD)作为优化器,初始学习率为0.01。
-
学习率调度:
- 在每10个训练周期后,将学习率乘以0.1,以在训练后期细化模型参数。
-
数据增强:
- 在训练Kinetics数据集时,为了模拟相机运动和增加模型的泛化能力,采用了随机仿射变换等数据增强技术。
-
端到端训练:
- 整个网络采用端到端的方式进行训练,即直接从输入的骨架序列到最终的动作分类标签,通过反向传播算法来更新网络权重。
-
训练周期和评估:
- 训练多个周期(Epochs),在每个周期中,模型会看到全部训练数据多遍。
- 在验证集上定期评估模型的性能,并在测试集上进行最终的性能测试。
3932

被折叠的 条评论
为什么被折叠?



