《TSM: Temporal Shift Module for Efficient Video Understanding》

文章地址:https://arxiv.org/pdf/1811.08383.pdf
代码地址:https://github.com/mit-han-lab/temporal-shift-module

这篇文章思路比较有意思,而且也比较实用,文章引入一个叫Temporal Shift Module(TSM)模块来处理时序上的信息,而且TSM是0计算量、0参数的模块(虽然0计算、0参数但也是会引入少量的延时的)。下面来具体看看文章是怎么做到的。

一、网络结构

1.1 思路

先拿正经的卷积操作来举例说明。假设现在有一个1维的卷积,卷积核大小为3,用符号表示为,还有一个1维无限长的向量X。那么卷积操作可以表示为,也可以写为。我们可以将卷积操作分解为:平移和乘-加两个步骤,即先将X分别移动-1,0,+1,然后分别乘以相加就得到的卷积结果。两个步骤用公式表示如下:
平移操作:

乘-加操作:

上面的平移操作是不需要计算的,而乘-加操作计算相对复杂。本文的TSM是应用在二维的,所以相对2D卷积,TSM几乎是没耗时的。

为了更好的理解上面操作,我们再说明一下,可以这样理解,上述操作可以理解为用空间换时间的思想,通过三次平移操作,可以得到三条无限的向量,然后每一条向量乘以对应的权重,最后相加就可以得到卷积结果了。

下面来看看一张图片,a表示原始的tensor。b表示offline模式的平移操作即沿着时间维度将部分通道平移-1和+1。c表示文章提供的online模型,因为online模式不能获取未来的帧,所以online只移动过去的帧。

1.2 原始的平移操作(Naive Shift)

上面讲解了文章的基本思路,那么可以想到的是在时间维度上将所有通道进行平移或者将大部分的通道进行平移。这种平移操作就是Naive Shift,使用Navie Shift操作会出现下面两问题:

  1. 因为要将大量的数据进行平移,这样虽然没有计算量,但是也会带来大量的耗时
  2. 因为将大部分的数据进行平移,那么当前帧的信息丢失太多,最终导致网络性能的下降
1.3 TSM的设计

为了解决Naive Shift引入的问题,文章解决办法也很简单,平移时不要移动大量的数据,具体移动多少根据实验确定,实验结果如下图所示:


1.png

网络输入8帧图片,文章采用了移动1/4数据。

还有一点,TSM的位置在哪,有两种选择,如下图所示,a图定义为In-place TSM, b图定义为Residual TSM,两者的区别就是一个在残差里面一个在外面。


2.png

经过实验验证(实验结果如下图所示),放在残差模块里面效果比较好,即使将所有的数据进行移动,还是可以获得较好的结果。可以理解为,将移动的操作放在残差模块里面,原始的空间信息可以得以保留。还可以从实验中看出,如果移动的比例过小,时序信息没有获得充分的提取,如果移动比例过大,空间特征的提取较差导致结果变差。所以文章选择了1/4(每个方向1/8)。


3.png

文章的精髓就在平移,为什么平移有用,可以这样理解,现在有个太阳升起的视频,当前输入网络的那几帧表示太阳刚出地平线,将这几帧的特征在时序上平移,类似于将太阳还未出地平线和太阳完全出地平线两个时间方向的特征平移出来了。

1.4 网络结构

网络结构有两种,一种是offline,一种是online

offline就是在resnet的残差块里面加入TSM,时序上的平移作用类似于在时序上进行卷积。

online不是直接进行特征平移,而是将上一次的结果保存下来,每次用上一次的特征中的1/8替换当前提取出来的特征中的1/8,通过替换来达到平移的效果。online结构如下图所示:


4.png

代码实现用的是TSN那一套,具体可以参考代码。具体实验结果可以参考原文。

你可能感兴趣的:(《TSM: Temporal Shift Module for Efficient Video Understanding》)