论文笔记《Deep Feature Flow for Video Recognition》

1515674206560

Abstract

深度卷积网络在许多特性识别任务上取得成果,然而在视频任务上单帧检测太慢,因此将先进的图像识别网络迁移到视频任务上意义重大。我们提出深度特征流(Deep Feature Flow)框架用于快速精确的视频识别。该框架仅在稀疏关键帧上运行卷积网络的子网络,并通过流场将特征传递到其他帧,由于流场计算相对较快因此速度得到显著提升。端到端训练整体框架,识别精度显著提升。深度特征流框架灵活且通用,该方法在两个视频数据集上验证。

  • MSA
  • 视频识别
  • Deep Feature Flow

1. Introduction

随着深度神经网络在图像识别任务上的成功,识别任务也从图像拓展到了视频,例如语义分割Cityspaces数据集和物体检测ImageNet VID数据集。对于重要场景,快速精确的视频识别非常重要,例如自动驾驶、视频监控。然后采用当前图像识别网络对视频单帧进行识别,对于大部分应用计算量都无法承担。

一般认为图像内容在视频上的变化是缓慢的,尤其是高级语义[^45][^51][^21]。因此在特征学习时采用means of regularization,认为视频是一种无监督的数据源。并且,数据冗余和连续性也可以用于减少计算开销。但是相关的研究在视频识别的CNN上却较少。

现代CNN具有相同的架构,大部分层为卷积计算,卷积特征与原图具有空间对应性,因此有机会通过空间扭曲将特征传播到邻近帧。

本文的工作中,我们提出深度特征流(Deep Feature Flow)框架用于快速精确的视频识别,通过流场将关键帧的深度特征传播到其他帧。如图1,特征图对汽车和行人有响应,且邻近两帧相似,通过传播后特征也与原始的特征相似。

1515485794145

一般,流场估计和特征传播比卷积特征计算快得多。因此能够避免计算瓶颈,速度得到显著提升。整个系统通过端到端训练,显著提升识别精度。

总结,深度特征流是一个用于视频识别的快速、精确、同样的端到端框架。其采目前先进的图像识别网络。据我们所知,这是第一次在深度学习框架中联合训练流和视频识别任务。后续的实验证实了该框架在视频物体检测和语义分割任务上的有效性。与单帧方法比,实现了巨大的提升(10X),精度稍有损失。

据我们所知,我们的工作很特别没有相似的工作进行直接比较。但是,在部分内容有一些相关工作如下所示。

  • 图像识别:目标检测领域代表方法是基于区域方法(R-CNN, Fast R-CNN, SPP-Net, Faster R-CNN, R-FCN),语义分割领域代表方法是全卷积神经网络(FCN,[^4], [^50] )。
  • 网络加速:矩阵分解,量化权重。
  • 光流:相关方法研究主要进行了10多年,且光流主要针对小偏移。目前一些针对大偏移并组合匹配的方法(DeepFlow和EpicFlow),但是都是手工设计。最近,深度学校和语义信息用于光流。FlowNet第一次使用CNN估计运动。在文献[^32]网络结构简化为空间金字塔网络。另一些工作尝试开发语义分割信息帮助光流估计[^37][^1][^19] ,即根据区域的类别对运动流程进行特定的约束。光流信息可用于如姿势估计等视觉任务。本工作开发光流用于加快一般视频识别任务。
  • 开发时序信息:T-CNN在视频的tubelets中融合时序和上下文信息。密集3D CRF提出大范围的时空归一化进行语义视频分割。STFCN[^10]考虑时空FCN,用于视频语义分割。这些工作能够提升精度但是也极大的增加计算开销。然而,我们的方法旨视频上通过时序信息减少计算量。
  • 缓慢特征分析:高级语义特征一般比低级语义特征的变化更慢,因此在连续视频帧上,深度特征变化非常缓慢且连续。这个发现已经被用于视频特征学习的调整中[^45][^21][^51][^49][^40] 。我们推测,我们的方法也能从这个特性上受益。
  • Clockwork卷积网络[^38] 该工作与我们的工作最接近,其对于特征视频帧抑制某些网络层,并实验之前的特征。但是我们的方法更简单且有效。从速度上该方法仅减少了一些帧的一些层的计算(1/3 or 2/3)。而我们工作是节省大部分帧的大部分层的计算。
    对于准确性,Clockwork没有考虑多帧和简单复制特征的关系,并且仅对一个现成的网络进行计算编排,没有fine-tuning或再训练。其一点速度的提升都带来较大的精度下降。我们的工作重新端到端训练了一个考虑运动的两帧网络,并且在速度提升3倍的情况下仅带来很小的精度下降。
    Clockwork仅应用于FCN的语义分割,我们的工作将一般的图像识别网络迁移到视频领域。

3. Deep Feature Flow

表1总结了本文的符号,图2为方法示意图。

1515659482706

深度特征流DFF推理(Deep Feature Flow Inference)

对于给定的前馈神经网络$N$ ,$I$为图像输入,结果$y=N(I)$,我们将$N$分解为两个连续的子网络。第一个子网络为$N_{feat}$特征子网络,该网络是全卷积且输出一些中间特征图$f=N_{feat}(I)$。第二个子网络为任务网络,对于特定任务有特征的结构,并基于上述特征图$y=N_{task}(f)$。

连续的视频帧具有高度的相似性,且越深的特征层相似性越高,我们通过该相似性减少计算开销。具体的,$N_{feat}$仅在特定稀疏关键帧上计算,非关键帧$I_i$的特征通过其之前的关键帧传播得到。

$M _ {i \rightarrow k}$ 是一个二维的流场,其通过一个流估计算法 $F$ 得到。然后通过双线性缩放到与特征图相同的大小,用于传播。当前帧i的位置p通过流场得到其与关键帧k的位置偏差 $\delta p=M _ {i \rightarrow k}(p)$ 。

因此特征扭曲可以通过双线性差值得到:

$$ f_i^c(p) = \sum_q G(q,p+\delta p)f_k^c(q) $$

c表示特征通道,q是特征图的所有空间位置,$G(·,·)$为双线性差值核,其为二维,因此将其分解为两个一维核:

$$ G(q,p+\delta p)=g(q_x,p_x+\delta p_x)\cdot g(q_y, p_y+\delta p_y) $$

$g(a,b)=max(0,1-|a-b|)$。

空间扭曲可能由于流估计错误导致不准确。为了更好估计特征,其强度通过尺度场(scale field)进行调节。尺度场通过尺度函数$S$得到$S_{i\rightarrow k}=S(I_k,I_i)$。最后,特征传播方程定义为:

$f_i=W(f_k,M_{i\rightarrow k},S_{i \rightarrow k}) (3)$

该函数对所有位置、所有通道的特征进行处理,并对特征乘以尺度因子。

该视频识别算法被称为深度特征流,如算法1所示。$F$流场函数是手工设计的低级别流,如SIFT-Flow,不需要训练,马上可用。尺度函数S的每个位置为1。

1515663944929

DFF训练

流函数一般用于低级图像像素的相关性,计算快,但是对于识别任务不够准确,并且高级特征的改变比像素小。因此为了对此建模,我们也使用一个CNN来估计流场和尺度场,所有的组件都能够端到端训练。

1515674206560

架构如图2(b)所示。使用SGD训练,在每个mini-batch,随机选择一对邻近帧,${I _ k,I _ i},0\le i-k \le 9$。前向传播时,特征网络$N _ {feat}$对关键帧图像$I _ k$计算特征图$f _ k$,之后流网络$F$计算流场和尺度场。当$i>k$时,根据式(3)计算特征$f _ i$,否则不传播。最后,任务网络$N _ {task}$基于特征图生成结果,并产生损失值。反向传播损失到所以组件。可以发现,当$i=k$时即退化为每帧训练。

流网络比特征网络快,在Fly Chair dataset[^9]上进行预训练。通过最后一层卷积适当的增加通道数,我们在网络最后增加了一个尺度函数输出。尺度函数都使用(权重0,偏置1进行初始化)。流网络然后按照图2(b)fine-tuned。

特征传播函数是无参且可微的,我们计算特征$f _ i$的导数,对应于$f_k$,尺度场$S _ {i\rightarrow j}$,流场$M _ {i\rightarrow j}$。前两个使用链式法则容易计算。对于后一个,导数为:

$$\frac{\partial f _ i^c(p)}{\partial M _ {i\rightarrow j}}=S _ {i\rightarrow j}\sum _ q \frac{\partial G(q,p+\delta p)}{\partial \delta p}f _ k^c(q) ~ (4)$$

然后通过公式2即可计算导数,由于M是二维的,因此$\partial \delta p$可分为$\partial \delta p_x$ $\partial \delta p_y$ 。

本方法可以在稀疏标记的帧上进行训练,并利用所有的数据(这里不理解)。

复杂度分析

非关键帧计算开销与每帧计算开销的比例:

$$r=\frac{O(F)+O(S)+O(W)+O(N _ {task})}{O(N _ {feat})+O(N _ {task})}~(5)$$

由于复杂度相差较大,可简化为:

$$r\approx \frac{O(F)}{O(N_{feat})}~(6)$$

因此复杂度比例由流网络和特征网络决定,可以通过每秒浮点操作FLOPs评估,表2显示了我们实现的典型值。

1515676597477

另外,速度还跟关键帧的稀疏程度相关,我们定义每$l$连续帧选一个关键帧,则加速因子为:

$$s=\frac{l}{1+(l-1)*r}~(7)$$

关键帧安排

在本文工作中,我们简单的固定关键帧的安排,关键帧的应用区间$l$固定。然而根据图像内容的变化可能变化的$l$能够实现更好的精度和速度的权衡。一般,关键帧应该是图像内容具有显著变化时。

如何设计高效和调整关键真的安排是我们之后改进工作。不同的视频任务可能有不同的行为和需求。从数据调整关键帧的安排是一个有趣的选择。

4. 网络架构

本方法拟用于不同的网络和识别任务,因此我们采用先进的架构和重要的视觉任务。

Flow Network

我们采用基于CNN的FlowNet[^9] 作为默认方法,并设计了两个低复杂度变体 FlowNet Half,每层减少一半的卷积核,复杂度为1/4,另一个采用Inception 结构[^42] 的FlowNet Inception,复杂度减少为1/8。

三个网络都在相同的数据集上训练,输出的stride为4。输入图像为1/2,因此流网络的输出是原图的1/8。特征图的stride是16,使用双线性差值将流场降采样,双线性差值为网络的中的非参数层,且可微。

特征网络

我们使用ResNet作为特征网络,最后一层1000路分类层去掉,特征stride从32减少为16得到分辨率更高的特征图,后面接DeepLab用于语义分割和R-FCN用于物体检测。跳着第一个block的conv5,其stride从2变为1,使用holing算法,保证感知域的情况下。另外我们增加了(dilation=6)的3x3卷积核,减少特征通道维度减少为1024。该1024维的特征图作为后续任务的中间特征图。

表2显示了复杂度的比例。

1515678762441

语义分割

随机初始化1x1的卷积核得到(C+1)得分图,C是类别数。之后跟一个softmax层输出每个像素的概率。因此任务网络仅有一个可学习的网络层,整体的网络结果与DeepLab类似。

物体检测

我们采用先进的R-FCN,对于中间特征图,两个全卷积网络分别应用于前512维特征和后512维特征,分别用于区域推荐任务和检测任务。

区域推荐分支,使用RPN,我们设定9个anchors,两个并排的1x1的卷积层得到2n维的物体得分和4n的回归值。通过NMS(0.7)后得到300个ROI。

检测分支,两个并排的1x1卷积层输出位置敏感的得分图和bbox回归图。他们的维度是$(C+1)k^2$和$4k^2$。k是检测器/回归器数量,细节见[^8] 。最后使用NMS(0.3)得到最后的结果。

5. 实验

Cityscapes用于语义分割,ImageNet VID用于物体检测。

5.1 实验设置

Cityscapes

50个不同城市,帧率17fps,训练集2975,验证500,测试1525个snippets。每个snippet有30帧,第20帧一像素级的标注,可用于语义分割,30个语义类别。遵守[^5]的规则,训练集上训练,验证集上测试,语义分割的精确度使用像素级的平均交并比得分评估。

对于训练,图像都缩放为短边1024pixels用于特征网络,512pixels用于流网络。使用SGD训练,20K迭代,在8GPU上,每个GPU一个mini-batch,学习率前15K迭代0.001,后5K迭代0.0001。

ImageNet VID

训练集3862,验证集555,测试集937,全标注的视频段,帧率25或30,30个类别,使用mAP作为评价。

训练图像短边分别为600和300pixels,60K迭代,40K学习率0.001,20K学习率0.0001。

训练时,不仅使用VID训练集,还使用DET训练集,每个mini-batch提取图像的比例VID:DET = 2:1。

5.2 评估方法和结果

由于DFF灵活且有多种设计选择,我们为了评估,设定一些默认设置,特征网络ResNet-101,流网络使用FlowNet,关键帧$l$为5用于C的语义分割,10用于I的物体检测。对于每个snippet我们评估l个图像对,k=i-l+1,…,i,每个帧i有gt标注。

验证DFF架构

如表3所示。

1515682224218

  • Frame:在单帧上训练N
  • SFF:使用预先计算大偏移flow,SFF-fast和SFF-slow采用不同的参数。
  • DFF:N和F使用端到端训练,固定N训练,固定F训练,分别训练

1515682632317

图4整理各种方法的精度和速度。我们发现单帧方法具有很强性能可以作为参考方法。我们使用DeepLab和R-FCN作为参考。SFF方法的精度不够好,虽然采用了最优的参数,提升有限,速度下降很大。

DFF得到了最后的结果,速度相同。但是发现固定N或F,或者分别训练精度下降很大,说明联合序列的重要性。

精度与速度的平衡

我们设定了不同的关键帧区间l,看对与精度和速度的影响。结果如图3所示,DFF得到了极大的速度提升,速度和精度的变化是平滑的,因此可针对特定应用调整,例如对于检测任务ResNet-101从4.05fps增加到41.26fps,10倍的速度提升,精度仅从73.9%下降到69.5%。对于分割任务,ResNet-50的速度从2.24fps提升到17.48 fps,精度从69.7%下降到62.4%。

图3也显示我们应用使用那个流场网络,发现最小的FlowNet Inception优势最大,在相同精度下比另外两个网络更快。

应该用什么特征网络呢,在高精度区域,明显ResNet-101更好,在高速度区域,对于检测ResNet-101更好,对分割ResNet-50更好。这个差别可能与视频帧率有关,对于数据集C,其帧率更低,变化更大,因此很难采用长时间的传播,而为了获得较快的速度,ResNet-101要采用比ResNet-50更大的l才行。

上面的发现对于实际应用具有一定推荐意义,然而收到数据和任务限制,为了我们开发更多的设计得到更多的经验。

分类网络的分割点

1515683850796

我们应该在网络的什么位置对特征和任务网络进行分割,默认只保留一层网络。分割点分别为5,12,21层。5层是增加了一个维度约减层(1层)和一个瓶颈单元(conv5c,3层),21层是增加了两个单元(conv5a和conv5b),21层是增加了三个单元(conv4)。0层是把任务网络加入到特征网络中,等同于直接输出最后的结果进行传播。

表5展示了不同的结果,可以发现精度的变化可以忽略,而随着任务网络层的增加,速度降低。任务层使用1层和0基本抑制,我们设定为1是为了给特征融合后提供以小额可调的参数,使其更具一般性。

由于版面限制,更多的结果和细节请看本的在线版。

6. 未来工作

有几个研究重点用于之后的研究。首先就是联合学习对于流场质量的影响,我们无法评估由于缺少gt数据。目前的光流工作受限于合成数据或小数据,对与深度学习不足。

我们的工作在流场估计和关键帧安排上有改进空间,本文我们采用FlowNet主要是能选择的方法很少。设计更快更精确的流场网络在未来值得研究。对于关键帧的安排,好的方法能够同时显著提升精度和速度。

我们详细该项研究打开了许多新的研究问题,并希望激发更多的研究工作。