Introduction
传统的骨架建模方法通常依赖手工制作的零件或遍历规则,因此表达能力有限,难以推广。新的动态骨架模型。通过自动从数据中学习时空模式,超越了以往方法的局限性。该公式不仅有更强的表达能力,而且有更强的泛化能力。
早期使用骨架进行动作识别的方法简单地利用各个时间步的关节坐标形成特征向量,并对其进行时间分析。这些方法的能力是有限的,因为它们没有明确利用关节之间的空间关系,这对理解人类行为至关重要。
骨架是以图形的形式出现,而不是2D或3D网格。这使得使用已被证明过的模型(如卷积网络)变得困难。最近,将卷积神经网络(CNN)推广到任意结构图的图神经网络(GCN)受到了越来越多的关注,并成功地应用于许多应用中,如图像分类,文件分类和半监督学习。
作者就结合了TCN和GCN提出了一种新的 ST-GCN(Spatial Temporal Graph Convolution Networks for Skeleton Based Action Recognition),即时空图卷积网络模型,用于解决基于人体骨架关键点的人体行为识别问题。
这篇文章的主要工作大概就是:
- 使用OpenPose预处理视频
- 结合GCN和TCN提出模型
- 提出了ST-GCN中卷积核的设计原则,以满足骨架建模要求
OpenPose
OpenPose是一个标注人体关节(颈部、肩膀、肘部等等),连接成骨骼,进而估计人体姿态的算法。
- 输入:RGB image 或 video sequence
- 输出:人体关节点位置和执行度 (x,y,confidence)
OpenPose总共估计人体18个关节点,关节点顺序和名词如下:
在一个视频中,会有很多帧(Frame)。每个帧中,可能会有很多人(Man),每个人会有很多关节(Joint)。每个关节会有不同特征(位置、置信度)。
视频中的骨骼标注
所以,对于一个batch的视频,我们可以用一个5维矩阵 (N,C,T,V,M)
- N 代表视频的数量,通常一个batch有256个视频(最好是2的指数)
- C 代表关节的特征,通常一个关节包含3个特征:x,y,acc
- T 代表关键帧的数量,一般一个视频有150帧
- V 代表关节的数量,通常一个人标注18个关节
- M 代表一帧中的人数
所以,我们只需要关注OpenPose的输出即可,因为这也是我们ST-GCN的输入。
构建图-分区策略下的邻接矩阵
邻接矩阵的影响因素:
- 数据库:不同数据库关节点个数与连接方式都不同
- 分区策略
首先,要说一下,该模型是建立在一系列的骨架图之上的,G = (V,E)。每个节点对应于人体的一个关节。但是对于边,作者进行了类型分类。 有2种类型的边,即构成关节自然连接的空间边和跨连续时间连续相同关节的时间边。在此基础上,构建多层时空卷积图。
其实有点类似“控制变量”的思想,第一种边,也就是根据人体关节之间自然连接来定义的,叫 内部边 。 只考虑一帧内的关节连接,不考虑时序问题。
第二种边,是对于连续帧内的同一个关节的位置移动的边,叫 帧间边
生成标准邻接矩阵
邻接矩阵就是他的行和列都是点,而点与点有没有连接用对应矩阵的元素表示,1就代表有连接,0就代表没有连接。简单来说邻接矩阵就是描述点与边有无联系的一个矩阵。我们这篇论文用的是无向图,所以它的邻接矩阵是个对称矩阵。如果邻接矩阵的对角线都是0,这说明没有考虑自身节点的特征,只是考虑了边的特征,反之就是考虑了自身节点特征。
举一个例子:
上面是一个简易的人体关节图,是无向图,它的邻接矩阵就是根据各个关节点的连接构造的
归一化标准邻接矩阵
我们将标准的邻接矩阵进行求列和计算,继续用上面的例子进行计算,我们可以得到输出是[2.2.5.2.4.2.2] ,然后用每个元素除以所在列的列和,即可得到归一化标准邻接矩阵。
分区策略
The proposed partitioning strategies for constructing convolution operations. From left to right:(a)An example frameof input skeleton. Body joints are drawn with blue dots. The receptive fields of a filter with D= 1 are drawn with red dashed circles.(b) Uni-labeling partitioning strategy, where all nodes in a neighborhood has the same label (green).(c) Distancepartitioning. The two subsets are the root node itself with distance 0(green) and other neighboring points with distance1.(blue).(d) Spatial configuration partitioning. The nodes are labeled according to their distances to the skeleton gravity center(black cross) compared with that of the root node (green). Centripetal nodes have shorter distances (blue), while centrifugalnodes have longer distances (yellow) than the root node.
a):输入骨骼序列的示意图,红色节点是本次卷积计算的中心节点,红色虚线内蓝色节点为其采样的相邻节点。因为采用D=1,即只考虑1-邻接的节点,D=2,3,...,n留作以后的工作
b):单一划分:把节点的邻域节点全划为一个子集(包括自身)
c):基于距离划分。中心节点自身, 相邻节点为另一组
d):空间配置划分 ,也就是本文所使用的
Spatial configuration partitioning。空间配置划分。由于身体骨架在空间上是局部的,我们仍然可以在划分过程中利用这种特定的空间结构。我们设计了一个策略,将邻居集划分为三个子集:1)根节点本身;2) 向心群:邻近节点比根节点更靠近骨骼重心;3) 离心组。在这里,骨架中所有关节在一个框架上的平均坐标被视为其重心。这个策略的灵感来自这样一个事实:身体部位的运动可以大致分为同心运动和偏心运动。
其中 是邻域邻域 joint 到黑色十字 × 的距离, 为 root joint。ri是训练集中所有帧上从重心到关节 i 的平均距离.
分区邻接矩阵
讲一下第三种分区策略的邻接矩阵。同样是以上面的简易关节图为例,以节点5为例说明分区策略。节点5的邻域节点有 3,6,7.
对于分区策略1:单一划分,其实并没有变化。
分区策略2:距离划分。将邻接矩阵分成了2组,一个是只有自身节点的矩阵,另一个是只有相邻节点的矩阵。
分区策略3: 空间配置划分 。 重心点为节点3.
计算节点5与重心点之间距离d=1.节点5与重心点之间距离为1=d,所以5为根节点。 节点6、7与重心点之间距离都是2>d.所以6、7是离心点。节点3与重心点之间距离为0<d ,所以3为向心点。