这篇文章用到了transformer来对视频帧进行时序信息探索,网络结构是基于原型网络进行改进的,代码已开源。
paper: https://arxiv.org/abs/2101.06184
code: https://github.com/tobyperrett/trx
Motivation
在该文章之前,小样本学习方法都是将query视频和support集视频中最好的 视频相比,或是和所有视频匹配,最后取平均。该方法带来的问题是,同一个动作不同的视频有着不同的长度和速度,因此此种匹配方式不太符合视频的特点。因此作者提出了TRX来解决该问题,同时作者还探索了视频的时序关系。
方法
首先对视频进行稀疏采样,每个视频采样8帧,使用resnet50提取帧特征,得到一个8×2048的特征。因为动作在不同时刻有着不同的外观、很难用单帧表示,因此需要用至少两帧表示(论文中作者通过实验验证了选取2帧和3帧效果最好)。
接来下先介绍取2帧的操作。公式(1)中Φ是一个卷积操作,将C×W×3的特征转换为D维特征(此处D=2048)。选取两帧特征,进行拼接得到动作
Q
p
{Q_p}
Qp。
公式(2)、(3)、(4)描述了如何构建support集的动作表征,对于第c类中的第k个视频,挑选任意两帧,计算
S
k
m
c
{S_{km}^c}
Skmc作为动作特征,将第c类动作中的k个视频的
S
k
m
c
{S_{km}^c}
Skmc进行拼接,得到第c类动作的表征
S
c
{S^c}
Sc。
基于spatial CrossTransformer作者提出temporal CrossTransformer,前者基于图像像素块,后者基于视频图像对。CrossTransformer包含 Υ Υ Υ,Γ和Λ,分别将2×D的特征转化为 d k d_k dk维和 d v d_v dv维。
定义query视频和support集视频 S k m c {S_{km}^c} Skmc的相似度为 a k m p c {a_{kmp}^c} akmpc,公式(6),其中L是一个标准的正则化层。对其应用一个softmax层获得一个注意力向量 a k m p c {a_{kmp}^c} akmpc。对 S k m c {S_{km}^c} Skmc做一个value映射得到 v k m c {v_{km}^c} vkmc=Λ⋅ S k m c {S_{km}^c} Skmc。接着将前面得到的注意力向量与其结合得到公式(8), t p c t_p^c tpc即代表与搜索视频p对应的第c类prototype。最后T计算查询视频 Q p Q_p Qp和支持集视频 S c S^c Sc的距离,通过公式(10)定义这二者的距离。
该过程其实和self-attention有点类似,只不过其query、key和value不是来自同一输入,因此将其称为cross-transformer。
Υ
Υ
Υ和Γ讲特征经过线性变换后转化为
d
k
d_k
dk维特征,即query_key和support_key,通过点积操作求得二者之间的相似度即
a
k
m
p
c
{a_{kmp}^c}
akmpc。Λ是将特征转化为
d
v
d_v
dv维,即得到query_value和support_value。query_value往后传用于计算与prototype之间的距离,而前面求得的相似度经过softmax层转化为分数后,作为一个注意力向量与support_value相乘,这样便得到了query-specific prototype。最后计算欧式距离,距离最小的类即为query类别。
训练时,每个query-class距离取负作为损失进行传播,在预测时,选取最小距离的类作为query视频的类,即
a
r
g
m
i
n
T
(
Q
p
,
S
c
)
arg minT(Q_p,S^c)
argminT(Qp,Sc)
Temporal Relational CrossTransformers
前面讲的是从query视频中选取一对将其与support视频比较,但是想要找到一对能最好的表示该视频动作是一件非常困哪的任务,因为作者提出构建多个随机选取的帧对来进行比较。同时作者通过考虑任意长度的有序子序列将temporal crossTransformer扩展到temporal Relational CrossTransformer。流程和temporal crossTransformer是一样的,不过考虑了3帧、4帧等情况。
Π
ω
=
{
(
n
1
,
…
,
n
ω
)
∈
N
ω
:
∀
i
(
1
≤
n
i
<
n
i
+
1
≤
F
)
}
\Pi^{\omega}=\left\{\left(n_{1}, \ldots, n_{\omega}\right) \in \mathbb{N}^{\omega}: \forall i\left(1 \leq n_{i}<n_{i+1} \leq F\right)\right\}
Πω={(n1,…,nω)∈Nω:∀i(1≤ni<ni+1≤F)} (11)
Q
p
ω
=
[
Φ
(
q
p
1
)
+
PE
(
p
1
)
,
…
,
Φ
(
q
p
ω
)
+
PE
(
p
ω
)
]
∈
R
ω
×
D
Q_{p}^{\omega}=\left[\Phi\left(q_{p_{1}}\right)+\operatorname{PE}\left(p_{1}\right), \ldots, \Phi\left(q_{p_{\omega}}\right)+\operatorname{PE}\left(p_{\omega}\right)\right] \in \mathbb{R}^{\omega \times D}
Qpω=[Φ(qp1)+PE(p1),…,Φ(qpω)+PE(pω)]∈Rω×D (12)
Υ
ω
,
Γ
ω
:
R
ω
×
D
↦
R
d
k
\Upsilon^{\omega}, \Gamma^{\omega}: \mathbb{R}^{\omega \times D} \mapsto \mathbb{R}^{d_{k}}
Υω,Γω:Rω×D↦Rdk and
Λ
ω
:
R
ω
×
D
↦
R
d
v
\Lambda^{\omega}: \mathbb{R}^{\omega \times D} \mapsto \mathbb{R}^{d_{v}}
Λω:Rω×D↦Rdv (13)
T
Ω
(
Q
,
S
c
)
=
∑
ω
∈
Ω
T
ω
(
Q
ω
,
S
c
ω
)
\mathbf{T}^{\Omega}\left(Q, \mathbf{S}^{c}\right)=\sum_{\omega \in \Omega} T^{\omega}\left(\mathbf{Q}^{\omega}, \mathbf{S}^{c \omega}\right)
TΩ(Q,Sc)=∑ω∈ΩTω(Qω,Scω) (14)
实验
作者在四个数据集上进行了实验,也是行为识别里非常常用的四个数据集:UCF101、HMDB51、Kinectics和Something to Something。
结论
1、Trx采用两帧或3帧特征进行拼接表示动作特征;将简单的拼接操作使用类似卷积等网络提取出两帧之间的运动信息;
2、损失函数简单地采用的是query到prototype的距离乘以-1