这篇文章用到了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,在loss设计上进行改进。