Deep Feature Flow -CVPR 2017

Video Detection and Segmentation

这是一篇很有想法(novel)的工作,尤其是在video领域,作者是来自MSRA的Xizhou Zhu 和DaiJifeng,他们的一系列工作我将在本博客中给予更多介绍,这次介绍的是他们的工作:deep feature flow

Deep Feature Flow

Deep feature flow 正如其名,它是用了deep feature (appearance 信息)和 光流(motion 信息)来对视频中的每一帧做建模,它的核心思想是利用指定的关键帧(key frame)和其他帧(current frame)到关键帧的光流信息,把关键帧送入到deep CNN中得到deep feature,而对于其他帧算出与关键帧的光流,再用光流把关键帧的deep feature propagate (相加,在做双线性差值)到当前帧,这时候就可大大减少计算量,因为对于非关键帧的话就不用再去过CNN了。对于新得到的特征,接下来就可对其进行不同任务处理,比如分割或者检测。整个思路如下图:

Deep Feature Flow -CVPR 2017

首先看它的Motivation:

Deep Feature Flow -CVPR 2017
作者是通过观察resnet-101 模型 deep feature,发现通过光流把前一帧warp到后一帧,发现和用resnet-101 直接inference很接近,于是就想到这种方法。

Inference:

首先给出它的formal notation(ps:就是为了更加正式,其实想法很简单)

Deep Feature Flow -CVPR 2017

Deep Feature Flow -CVPR 2017

N 代表后续任务网络,分割或者检测,取决于当前的task,N 代表提取特征的网络。

重点是第11行,做propagation。

Deep Feature Flow -CVPR 2017

c代表channel, 它是对每个channel做相同的差值(双线性差值,为啥用,是因为这种差值方式是可微的,为了后续的end to end trainning)操作,G代表双线性差值核函数,S代表scale 是用来对key frame feature 和 current frame feature做scale 操作。最后整个式子可以写成 f = W(f, M,S), M代表warp后的feature。

Training

考虑一种情况,为啥不用类似与在video action recognition 任务中方法先把光流计算出来直接做warp呢?作者认为这种作为不适合recognition task,会有很大的variation,个人理解是分割和检测任务不适合这么做,因为相对action recognition,分割和检测的任务是更细粒度的场景理解和目标理解,所以作者使用了flow net作为光流计算, flow net是可以学习,可以自适应不同场景的运动物体建模。他采用的最简单的flow net版本(flow net-S)。

接着作者分析了加速时间,就是可以理解为,warp的时间要远远小于用deep CNN做inference的时间。

不足

1,很明显一点就是key frame的选择,作者这里用了固定的策略,所以今年CVPR2018有很多文章在key frame选择上提出新方法。

2,feature representation的不足,由于flow warp后的feature会变弱,所以对于非关键帧的地方,效果肯定比单帧做检测或分割效果要差。

实验结果

作者进行了2个任务的实验:

1,Cityscapes (分割)

2,ImageNet VID (视频目标检测)

结果如下:

Deep Feature Flow -CVPR 2017Deep Feature Flow -CVPR 2017

其中还对比了如下不同的架构: (SFF 算法->一种计算光流的方法,这样可以把光流提前计算好)

Deep Feature Flow -CVPR 2017

代码:

https://github.com/msracver/Deep-Feature-Flow

第一次写论文笔记:多多包涵,不足之处请指出~~