摘要
目前,基于骨架序列的动作识别大多都是用CNN,RNN,Graph-based CNN作为模型的,但是现在的问题是,这些模型都无法捕捉到我们视频的长期联系信息。为了能够让模型有更好的表示,作者提出了3种类型的Self-Attention网络(SAN),分别是SAN-V1,SAN-V2,SAN-V3。SAN 有比较强的提取高阶长期语义信息的能力。基于此,作者还加入了Temporal Segment Network(TSN)来提高模型的能力。
介绍
在提取骨架序列信息时,现有模型一般都是
- 利用RNN来提取时序上的动态信息
- 利用CNN来提取某一帧的骨架序列信息(这里一般是将3D骨架当作一个2D图像,即坐标当作通道)
- 将骨架序列构建为图模型,GCN
但是这3种方法都有一个缺点:
这些操作无论在空间还是在时间上都是基于邻接点的局部操作
文章模型概述:
本文作者提出了一个Self-Attention Network(SAN)来解决以上的问题,并且能够得到更好的特征信息。
-
原始特征信息需要首先经过Encoder层,提取出encoded 特征信息。
-
Encoded signals 再输入到SAN-Variants,计算序列每一个位置的关系密切层度。
-
结构化的SAN结果综合在一起,能够更好的捕捉更高层的语义理解信息。
本篇文章主要贡献:
- 为了从人体骨骼序列中提取到更加有效的深层语义关系,作者提出了SAN-Variants(SAN-V1,SAN-V2 and SAN-V3)
- 将SAN-Varants与Temporal Segment Network(TSN)相结合,提升了模型的表现。
- 可视化自注意力下的各帧联系紧密程度。
- 在当先的两大数据集上取得SOTA
Self-Attention Network
本节简要回顾Self-Attention Network
SAN是用来计算表征输入序列任意位置之间的联系程度。这篇文章的SAN机制参考了之前这篇文章。即该注意力函数也包含了query A Q A_Q AQ,keys A K A_K AK,values A V A_V AV,这里query,keys都有相同的维度 d k d_k dk,values以及output有相同的维度 d v d_v dv.
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d K ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_K}})V Attention(Q,K,V)=softmax(dKQKT)V
这里的 d k \sqrt{d_k} dk是一个缩放因子,目的在于起调节的作用,使得内积不易过大
Muti-head attention:
多头attention:
- 对query,key,value进行线性变换
- 输入到缩放点积attention机制,重复做h次,每次的输入为线性变换后的原始输入,这里,多头就是指做多次attention之后进行拼接,每一次算一个头,每次Q、K和V的线性变换参数W是不一样的;
- 最后,将拼接后的模型做一次线性变换,得到的值为多头attention的结果。可以看出,多头attention与传统的attention区别在于计算了h次,这样可以从不同的维度和表示子空间里学习到相关的信息,可通过attention可视化机制来验证。
同时本篇文章还做了残差连接、layer normalization。
Approach
该模型是基于SAN的,并且在前面需要有一个Encoder,在这里作者采用了简单的非线性操作或者CNN操作来原始的关节序列进行一个编码,得到encoded 特征。
在这里原始关节序列有两个,即Position Data 、Motion Data.
Raw Position and Motion Data
Position Data:
原始的关节点序列数据。定义为: x p ∈ R F ∗ J ′ ∗ C x_p \in R^{F *J^{'}*C} xp∈RF∗J′∗C
其中
F表示帧数
C表示每个节点的坐标数
J ′ = S ∗ J J'=S*J J′=S∗J,S表示在一帧画面中有人数,J表示每个人的节点个数。所以在这里 J ′ J' J