笔者从人工智能小白的角度,力求能够从原文中解析出最高效率的知识。
之前看了很多博客去学习AI,但发现虽然有时候会感觉很省时间,但到了复现的时候就会傻眼,因为太多实现的细节没有提及。而且博客具有很强的主观性,因此我建议还是搭配原文来看。
请下载原文《Actional-Structural Graph Convolutional Networks for Skeleton-based Action Recognition》搭配阅读本文,会更高效哦!
若要更好地理解此篇文章,请参考其改进的前身:
【读前请读】:《论文超详细精读|六千字:ST-GCN》
以及,同样以ST-GCN为基础改进的:
【读后再读】:《论文超详细精读|万字:2s-AGCN》
首先,看完标题,摘要和结论,我了解到了以下信息:
ST-GCN缺点
较远关节关系被忽略。ST-GCN虽然提取了通过骨骼直接连接的关节的特征,但结构上的距离较远的关节可能包含关键的动作模式,在很大程度上被忽略了。例如,在走路时,手和脚是紧密相关的。虽然ST-GCN试图用分级GCN聚合范围更广的特征,但节点特征在长时间扩散过程中可能会减弱。
上图展示了AS-GCN模型的特点,其中它学习了A-link行为链接并扩展了行为识别的S-link结构链接。
优点如下:
如上图。提出了A-link链接推理模块(AIM)来推断行为链接,捕捉动作特定的潜在依赖。将A-link 活动链接与S-link 结构链接组合为广义骨架图。
如上图。提出了A动作-S结构图卷积网络(AS-GCN)来提取基于多图的有用的时空信息。
引入一个额外的未来姿态预测Head来预测未来姿态,通过捕捉更详细的动作模式来提高识别性能;
在两个大规模数据集上,AS-GCN优于几种最先进的方法。作为一个副产品,ASGCN还能够精确预测未来的姿态。
骨架动作识别中许多算法都是基于两种方法开发的:基于人工的和基于深度学习的。
为了获取更精细的位置信息,文章将一个根节点及其邻居分成三个集合:
(1)根节点:
A
r
o
o
t
A^{root}
Aroot。
(2)向心群节点:
A
c
e
n
t
r
i
p
e
t
a
l
A^{centripetal}
Acentripetal,它们比根更接近身体重心。
(3)离心群节点:
A
c
e
n
t
r
i
f
u
g
a
l
A^{centrifugal}
Acentrifugal,它们远离重心。
建议阅读《论文超详细精读|六千字:ST-GCN》
广义图:A动作-S结构图,定义为
G
g
(
V
,
E
g
)
G_g(V, E_g)
Gg(V,Eg),其中
V
V
V 为原始关节集,
E
g
E_g
Eg为广义链接。
在Eg中有两种类型的链接:结构链接(S-link),显式地派生自主体结构,和动作链接(A-link),直接从骨架数据推断。
背景:人类的许多动作都需要相隔很远的关节才能协同移动,这导致了关节之间的非物理依赖性。为了捕捉各种动作的对应依赖关系,论文引入了动作链接(A-links),它由动作激活,可能存在于任意一对关节之间。
为了从动作中自动推断出A-link,论文开发了一个可训练的A-link推理模块(AIM),该模块由一个编码器(Encoder )和一个解码器(Decoder)组成:
C
C
C 指的是A-link 的种类数量,每个
A
\mathcal{A}
A 表示的是在特定节点与
c
−
t
h
c-th
c−th 种类的连结性。这边的encode(·) 会先对3D 的关节点信息抽出特征后,再转换为连结的概率。
为了要抽取连结的特征,该论文刻意使节点于连结之间交替地传递信息,若将
T
T
T 个帧 的第
i
−
t
h
i-th
i−th 的节点表示为Vector:
则节点特征p 可表示为:
而在第k 次的迭代中,连结与节点的资讯传递则可表述为:
f
v
(
⋅
)
f_v(·)
fv(⋅) 和
f
e
(
⋅
)
f_e(·)
fe(⋅) 都是多层感知器,而
⊕
⊕
⊕ 是向量拼接,
F
(
⋅
)
\mathcal{F}(·)
F(⋅) 则是聚合链接特征并获得联合特征的操作,比如平均和元素最大化。
在传播K次之后,编码器输出链接概率为:
r r r 是一个随机变量,它的元素是从Gumbel(0,1)分布中采样的 i.i.d。 τ \tau τ 则控制 A i , j 的离散化 A_{i,j}的离散化 Ai,j的离散化,最终透过Gumbel softmax得到一个近似类别机率的结果$A_{i,j}。
基本的想法是将A-link 的特征转换为下个时间点(
t
+
1
t+1
t+1 ) 的关节点位置,若将第
i
i
i 个节点在第
t
t
t 个Frame 的特征定义为:
那上个式子的decode(·) 则可以表述为:
此时
f
v
(
⋅
)
f_v (·)
fv(⋅)、
f
e
(
⋅
)
f_e (·)
fe(⋅)、
f
o
u
t
(
⋅
)
f_out (·)
fout(⋅) 都是多层感知器
那么AIM 的Cost function 定义如下:
在实际操作上,该论文有先对AIM 做pretrain ,因此在公式最右边的分母有个A 上标(0) 的prior。
在实验过程中有发现,A 的机率分布越稀疏,整体的表现就越好,作者们推测原因是,过多的连结可能捕捉到一些无用的资讯,进而造成模型混淆。
然而在Encoder 的定义中,有透过softmax 确保这边的数值加总为1,而当每个C 都是一个很小的数值时,其实比较难促进稀疏的状态产生。
为了要能控制稀疏程度,该论文在两节点并没有连结的状态中,以较大的机率加入了一个Ghost link,但同时确保所有机率加总为1 。
再来为了捕捉节点之间的关联性,该论文有在A-link 上做Actional Graph Convolution ( AGC ) ,公式定义如下:
下方展开的式子中,
X
i
n
X_in
Xin 左边的
A
a
c
t
A_act
Aact 是graph convolution kernel,右边的
W
a
c
t
W_act
Wact 则是可被训练的权重,用于捕捉这个特征的重要性。
另外,对AIM 做预训练比较像是个暖身的动作,在整体模型训练时,A-links 只会透过Encoder的Forward-passing 进行更新。
该论文在 S-links 上,为了比 ST-GCN 更能获得远程的信息,对采用高次作法,让信息方扩散到较远的节点上,再做 Structural Graph Convolution (SGC),公式定义如下:
这里的
L
L
L 为次数,
A
A
A 是第
p
p
p 部分的图,
M
M
M 和
W
W
W 都可以是每个次方里被训练方的参数,目的是要在每个次方里捕捉每个方的参数权重与特征。
为了综合地获取任意关节间的运动和结构特征,作者将AGC和SGC相结合,发展了动作-结构图卷积(ASGC)。
λ
λ
λ 是个超参数,可控制使用 Actional feature 的影响程度。
为了捕捉帧之间的行为特征,有沿时间轴对每个关节点使用(T-CN时间轴,通过共享参数的口轴轴上的特征)。
结合 ASGC 与 T-CN 形成了 Actional-Structural block (AS-GCN block),可同时图形空间与时间轴上的特征,如上图。
1.骨架:
完整的 AS-GCN 是由多个不同的块组成的:
经过多个时空特征聚合后,AS-GCN可以跨时间提取高级语义信息。
2.动作识别head:
为了对动作进行分类,我们在backbone network后面构造一个识别head。我们对backbone network输出的特征图的关节维度和时间维度进行全局平均池化(global averaging pooling),得到特征向量,最后将特征向量输入到softmax分类器中,得到预测的类标签noisy,用于动作识别的损失函数为标准交叉熵损失:
3.未来姿态估计head:
以往对骨架数据分析的研究大多集中在分类任务上。
这里作者还考虑了姿态预测,如上图。
位置是标准的链接在对的信息贯穿的一个高层次的骨干,多个SGCN层级的获取点之后,获取到关节3D点的位置,在损失函数上的点是L2损失:
4.实践:
将识别头和未来预测头结合起来训练,可以提高识别性能。其背后的直觉是,未来预测模块促进了自我监督,避免了识别中的过拟合。
为了更可以把这个值地有A-links到底都学的设计,论文的链接在0.9的链接以橘色线表示
一个特别的线粗线与是大小,确实在动作机更准确的相关率上,比较大的反应,表示可以给模型与行为更相关,更相关的特征信息。
除了 A-links 的观察外,该论文还对每个个体如何影响最终的分类决策,所以好奇也对特定动作的特征图做视觉化:
这图的(a)部分是「挥手」行为在不同时间点的状态,由左至右看会发现,一开始的时间对上半身有比较均等的强度,但随着动作持续越久,对挥动中的不同结果有的反应。
(b) 那部分另外还有远程信息的动作,可以看到手和两个人的反应是比较大的。
(c) 是使用 CN 上 ST-GCN 的差异部分,可同样是正确的与论文之间的反应,但在就信息的比较中,AS-GCN 的功效与作用比较高。
未来姿势预测
逆向预测模组的效果表演可视化:
图中的上图的目标,下排是预测的结果,看起来结果并不差,因为作者希望看到的结果是,AS-GCN 保留了特征的能力,并在与行为的细节上进行了预测相关的部分(头部、多人)效果更好。