研究动机
目前 3D-based 的方法在大规模的 scene-based 的数据集(如kinetics)上相对于2D的方法取得了更好的效果,但是3D-based也存在一些明显的问题:
- 3D-based 的网络参数量大,计算开销大,训练的 scheduler 更长,inference latency 明显慢于 2D-based 的方法。
- 3D卷积其实并不能很好得学到时序上信息的变化,而且3D卷积学出来的时序Kernel的weight的分布基本一致,更多的还是对时序上的信息做一种 smooth aggregation。这一点在之前的工作TANet 中有比较详细的讨论。也基于此,3D-based 的网络在Something-Something这种对时序信息比较敏感的video数据集上并不能取得很好的效果( 得靠 Kinetics 的pre-train来提点 :)
基于以上几点,我们组最近一直在探索更高效的2D-based的时序建模方法,提出了包括 TSN,TEINet,TEA,TAM 等轻量级的时序建模方法。
我们今天要介绍的这篇工作 TDN 的研究动机也很直接明了:我们能不能将时序上运动的变化显式得提取出来然后加入到网络中呢?
最早在14年 VGG 就提出了大名鼎鼎的 Two-Stream 网络,通过将光流(Optical Flow)信息做为输入去提取时序上的运动信息。但是 Two-Stream 网络需要两个独立分离的Backbone,计算量直接翻倍,而且提取光流也需要巨大的计算开销。所以我们提出了 Temporal Difference Network (TDN) 这种结构,尝试通过 Difference 这种简单的操作去强制提取出时序信息中运动的变化,然后补充到正常的 RGB 网络中去,在不增加过多的计算量的前提下去更高效得进行时序建模。
下面简单介绍一下 TDN 的方法和实验结果。
方法

TDN 是一个 Two-level 的结构,其主要包含短时和长时两个模块——Short-term temporal difference module(S-TDM) 和 Long-term temporal difference module(L-TDM):
短时建模(S-TDM):

首先,我们还是参考 TSN 的采样方式,在整个 Video-level 上均匀分段(segment)进行采样。在网络的前一个阶段,我们希望可以在段内融合局部的运动变化信息,所以我们提取原始 RGB 帧间的 difference 作为局部运动变化的一种表征,然后 CNN 去进一步提取这种运动信息,具体公式如下:
其中 \(D_i\) 由相邻帧通过 RGB Difference 得到: \(D_i=I_{i+1}-I_i\) , 然后我们将连续四个RGB Difference 的图在 channel 维度concat起来,作为 Difference 流的输入 \(D(I_i)\) 。
$$
\mathcal{H}(I_i) = Upsample(CNN(Downsample(D(I_i))))
$$
为了降低计算量,对于输入的 \(D(I_i)\) ,我们首先对它做一个空间上的下采样( Downsample ),用一层卷积去提去其中的motion信息,然后做一个空间上的上采样(Upsample),使得Difference 流的空间尺度和 RGB 流对齐,这样就可以通过一个非常简单的 add 操作将具有运动信息的 Difference 流补充到 RGB 的 Backbone 中。
长时建模(L-TDM)

相对于之前S-TDM的段内 frame-wise 形式的时序建模,在网络的后一个阶段,我们希望可以对段间的运动变化信息进行增强,去放大运动增强。所以我们参考 TEINet 的形式,设计了一种基于 feature-difference 的通道 attention 增强方法。同时,为了提升最后的效果,我们还增加了multi-scale 和 bidirectional 的结构。这部分的具体公式如下:
$$
C(F_i, F_{i+1}) = F_i − Conv(F_{i+1})\
M(F_i,F_{i+1}) = Sigmd(Conv(\sum_{j=1}^NCNN_j(C(F_i,F_{i+1})))) \ F_i ⊙G(F_i,F_{i+1}) = F_i ⊙ \frac{1}{2}[M(F_i,F_{i+1})+M(F_{i+1},F_i)]
$$