李沐论文精度系列之八:视频理解论文串讲

Posted 神洛华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了李沐论文精度系列之八:视频理解论文串讲相关的知识,希望对你有一定的参考价值。

文章目录


传送门:

一 、前言

1. 为什么要做视频?

  • 视频包含更多信息,符合多模态发展趋势:视频包含了时序信息、声音&图像等多模态信息,而且自然界也都是连续信息而非静止的图像。
  • 视频天生能提供一个很好的数据增强,因为同一个物体在视频中会经历各种形变、光照变换、遮挡等等,非常丰富而又自然,远比生硬的去做数据增强好得多
  • 视频处理是未来突破的方向:目前计算机视觉领域,很多研究热衷于在ImageNet等几个榜单刷分,往往训练了很大的模型,使用很多的策略,也只能提高一点点,类似深度学习出现前CV领域中机器学习的现状,已经达到了一个瓶颈期。要想突破必须有新的网络结构,指标之一就是要能很好地处理视频数据。

总之,如何更好的利用视频数据,如何更好的做视频理解,可能是通往更强人工智能的必经之路。

2. 视频领域发展历程

  《A Comprehensive Study of Deep Video Action Recognition》是2020年视频领域的一篇综述论文,总结了 Video Transformer之前的约200篇用深度学习做视频理解的论文。本文基于此,讲解视频理解领域的发展。下图时间线概括了从早期卷积神经网络做视频理解的DeepVideo,到双流网络及其变体、3D网络及其变体的一系列过程。最后会讨论一下基于 Video Transformer的工作。

本文分四个部分来讲解:

  1. DeepVideo(早期视频领域的CNN工作)
  2. Two-Stream及其变体
  3. 3D CNN及其变体
  4. Video Transformer:将image transformer延伸到video transformer。其中很多方法都是从2或者3里面来的,尤其是借鉴了很多3D CNN里面的技巧。

二、 DeepVideo(IEEE 2014)

论文《Large-Scale Video Classification with Convolutional Neural Networks》

2.1 模型结构

  DeepVideo是深度学习时代早期,使用CNN处理视频的代表工作,其主要研究的,就是如何将CNN从图片识别领域应用到视频识别领域。
  视频和图片的唯一区别,就是多了一个时间轴,也就有很多的视频帧。下面是作者用CNN处理视频帧的的几种尝试:

红色、绿色和蓝色框表示卷积层、归一化层和池化层
  • Single Frame:单帧方式的baseline。从视频帧中任取一帧,经过CNN层提取特征,再经过两个FC层得到图片分类结果。所以这种方式完全没有时序信息、视频信息在里面
  • Late Fusion:多个单帧特征融合:
    • 之所以叫Late,就是在网络输出层面做的融合。
    • 具体来说,就是任选一些帧,单独通过CNN得到图片特征(这些CNN权值共享);再将这些输出特征融合之后,过一个FC层得到分类结果。
    • 这种单帧输入方式还是比较像图片分类,但毕竟融合了多帧的结果,还是包含一些时序信息的
  • Early Fusion:直接在输入层面做融合。
    • 将五张视频帧在RGB层面融合,融合后channel从3增加到15(CNN第一层的卷积核通道数也得改成15),后面结构不变
    • 直接在输入层面就融合时序信息
  • Slow Fusion:网络中间的特征层面做融合。
    • 输入10个连续的视频帧,每4帧通过一个CNN抽特征,每个CNN都是权值共享,这样得到4个特征片段。再通过两个CNN网络,两两融合成为2个特征,直到最后融合成一个视频特征,加上两个FC层做分类。
    • 网络从头到尾都是对整个视频在学习,这种方式最麻烦,效果也最好

2.2 实验结果

  只是作者没想到的是,这四种方式的最终结果差别都不大,而且即使在Sports-1M(100万视频)这么大的数据集上预训练,最终UCF-101(13000+视频)这个小数据集上微调,结果也只有65%,效果还远远比不上之前的手工特征。

  作者又试了一下,使用一些图片处理上的trick,比如输入多分辨率的图片,看能否在视频分类上也得到更好的结果。如下图所示,使用了两个网络(权值共享),输入分别是原图和center crop之后的图片,作者希望借此学习全局信息和中心重点区域信息。加入多分辨率操作,精度大概提升了一个点。

  从下图可以看到,Early Fusion和Late Fusion效果还不如Single Frame的baseline,Slow Fusion经过一顿操作之后,才提高了一点点。

2.3 总结

  DeepVideo把使用CNN直接处理视频的各种方式都试了一遍,为后续工作做了一个很好的铺垫。除此之外,作者还提出了一个特别大的视频数据集——Sports-1M数据集(有一百万视频,但是基本都是运动类,应用场景有些受限)。

三、双流网络及其变体

3.1 Two-Stream(NeurIPS 2014)

论文《Two-Stream Convolutional Networks for Action Recognition in Videos》、视频《双流网络论文逐段精读》

3.1.1 简介

这部分详细内容,请参考我上一篇帖子《李沐论文精度系列之七:Two-Stream双流网络、I3D》

  视频相比图片的区别,就是多了一个时序信息(运动信息),如何处理好时序信息,是视频理解的关键。当一个网络无法很好地处理时序信息的时候,可以考虑再加一个网络专门处理时序信息就行。

  光流包含了非常准确和强大的物体运动信息在里面,双流网络通过额外引入一个时间流网络,巧妙的利用光流提供的物体运动信息,而不用神经网络自己去隐式地学习运动特征,大大提高了模型的性能(UCF-101精度达到88%,基本和手工特征IDT的精度87.9%持平,远高于 DeepVideo 65.4%的精度)。

双流网络结构

模型效果对比

3.1.2 改进工作

从上面双流网络的结构图,可以看到会有几个明显可以改进的地方:

  • Slow Fusion:理论上来说,在中间的特征层面做融合,肯定比最后在网络输出上简单的进行加权平均的效果要更好
  • 优化backbone:双流网络使用的backbone是Alexnet,所以自然想到可以使用更优的backbone
  • 融入LSTM:考虑在网络抽取特征后加入LSTM模型,进一步处理时序信息,得到更强的视频特征
  • 长时间视频理解:双流网络输入的光流只有10帧,算下来不到0.5秒,非常的短。一般一个动作或者事件可能会更长。如果要做长时间视频理解,还需要改进

下面针对每个方向,分别介绍一个代表性工作。

3.2 Two stream +LSTM(CVPR 2015 )

3.2.1 模型结构

  原始的双流网络,空间流输入是一帧或几帧视频帧,时间流输入是10帧光流,只能处理很短的视频。如果是长视频,有特别多的视频帧,首先想到的还是用CNN去抽取视频特征,但关键是抽取的特征如何去做pooling。本文探索了6种pooling方法,最后结果差不多,conv pooling稍微好一点。另外还作者还试了使用LSTM做特征融合,最后提升有限。作者做的pooling和LSTM操作,如下图所示:

  具体的LSTM操作如下图所示,C表示最后一层CNN输出的特征,每个视频帧都对应了一个特征。这些特征是有时序的,所以将其用5层的LSTM处理抽取的视频特征,最后的橘黄色这一层代表直接做softmax分类了。
  简单说,就是从双流网络抽取特征之后直接做softmax分类,改为抽取特征后进行LSTM融合,再做softmax分类。

3.2.2实验结果

  1. conv pooling效果最好


  • Slow Fusion就是DeepVideo的结果,Single Frame就是DeepVideo论文中的baseline。
  • conv pooling和LSTM:都能处理非常多的视频帧,模型效果相比光流网络,稍有提升。

  也就是说,在UCF-101这种只有六七秒的短视频上,LSTM带来的提升非常有限。这也是可以理解的,因为LSTM操作,应该是一个更high level,有更高语义信息的一种操作,其输入必须有一定的变化,才能起到应有的作用,才能学到时序上的改变。如果视频太短,可能其语义信息基本没有改变,对LSTM来说,各个时序上的输入基本都是一样的,所以它也学不到什么东西。如果是在长视频或者变化比较剧烈的视频上,LSTM可能更有用武之地。

3.3 Two-Stream+Early Fusion(CVPR 2016 )

  双流网络叫Two-Stream Convolutional Network,这篇论文题目是将其颠倒了一下,但关键词是Fusion。本文非常细致的讨论了如何去做双流网络特征的合并,主要是三个方向:

  • spatial fusion(空间融合):下图展示了如何在空间上做Early Fusion,即如何将两个特征图上相同位置的点做合并
  • temporal fusion(时间融合)
  • 特征融合位置

  作者通过解决这三个问题,得到了一个非常好的Early Fusion网络结构,比之前直接做Late Fusion的双流网络,效果好不少。

3.3.1 spatial fusion

  在有了时间流和空间流两个网络之后,如何保证这两个网络的特征图在同样的位置上的channel responses是能联系起来的(To be clear, our intention here is to fuse the two networks (at a particular convolutional layer) such that channel responses at the same pixel position are put in correspondence.),也就是在特征图的层面去做融合。作者对此作了几种尝试:(融合层有两个输入 x t a + x t b x_t^a + x_t^b xta+xtb,输出为 y y y

  • Sum Fusion : y s u m = x t a + x t b y^sum = x_t^a + x_t^b ysum=xta+xtb,两个特征图直接相加
  • Max Fusion : y m a x = m a x ( x t a , x t b ) y^max = max(x_t^a, x_t^b) ymax=max(xta,xtb),即特征图a和b在同一位置只取最大值
  • Concatenation Fusion : y c a t = c a t ( x t a , x t b ) y^cat = cat(x_t^a, x_t^b) ycat=cat(xta,xtb),将两个特征图在通道维度做合并
  • Conv Fusion : y c o n v = y c a t ∗ f + b y^conv = y^cat * f + b yconv=ycatf+b,将两个特征图堆叠之后再做一个卷积操作
  • Biliner Fusion : y b i l = ∑ j = 1 H ∑ i = 1 M x i , j a ⊗ x i , j b y^bil = \\sum_j=1^H\\sum_i=1^M x_i,j^a \\otimes x_i,j^b ybil=j=1Hi=1Mxi,jaxi,jb。在两个特征图上做一个外积,然后再做一次加权平均。

cat用来拼接矩阵, * 代表卷积操作, 代表矩阵外积。

不同融合方式的效果如下,表现最好的是Conv fusion:

3.3.2 特征融合位置

关于在哪一层做融合效果最好,作者作了大量的消融实验,效果最好的两种方式如下:

  1. 两个网络在Conv4之后,就做一次融合,然后就变为一个卷积神经网络了
  2. 在conv5和fc8两个层都分别做一次融合
    • 将空间流的conv5特征拿过来和时间流的conv5特征合并,最后时间流得到一个 spatial temporal feature(时空特征)。同时空间流继续做完剩下层,得到一个完整的空间流特征。在最后的fc8层,再做一次合并。
    • 相当于还没有学到特别high level的语义信息时,先做一次融合,用空间流特征取帮助时间流去学习。然后在fc8层high level级别上再做一次合并。

下面是试验结果,晚融合(relu5)和多融合(relu5+fc8)效果最好,但是多融合训练参数多一倍。

3.3.3 temporal fusion

  temporal fusion就是抽取多个视频帧的特征之后,如何在时间轴位置将这些特征融合。作者3尝试了两种方式:3D Pooling和3D Conv+3D Pooling,后一种方式性能最好。

  • a:2D Pooling完全忽略了时序信息
  • b:3D Pooling:先在时间维度堆叠各个特征图,再做Pooling
  • c:3D Pooling之前先做一次3D卷积

3.3.4 模型结构和最终效果

  • 网络输入是[t-τ,t+τ]时刻的RGB图像输入和对应的光流输入,蓝色代表空间流网络,绿色代表时间流网络。
  • 时空融合:先分别从两个网络抽取特征,然后在Conv5这一层先做一次Early Fusion(3D Conv+3D Pooling),融合后用FC层得到最后的融合特征,这个特征就包含了时空信息
  • 时间流融合:因为时间流特征非常重要,所以将时间流特征单独拿出来也做一次3D pooling,再接FC层,并专门设计一个时间上的损失函数Temporal Loss。

也就是这个模型有两个分支:时空学习和时序学习,对应的也有两个损失函数Spatiotemporal Loss 和Temporal Loss。推理时,两个分支的输出做一次加权平均。最后结果如下:

  • 标蓝色的两个是作者用VGG复现了双流网络,因为使用了更深的backbone,在UCF101上的效果更好,但是在HMDB51上的精度还略有下降。这是因为当训练集特别小(HMDB51只有约7000个视频)时,用一个很深的网络,就特别容易过拟合。
  • 使用本文作者提出的fusion方法之后,UCF101精度略有提升,HMDB51精度大幅提升。early fusion可能算是一种变相的对网络的约束,使网络在早期的学习中,就可以融合时空信息,一定程度上弥补了数据不足的问题,所以使early fusion效果比late fusion效果要好很多。

3.3.5 结论

  本文做了大量消融实验,从三个方面彻底研究了一下网络结构,给后续工作提供了很大的启示。另外作者尝试了3D Conv和3D Pooling,增加了后续研究者对3D CNN的信心,变相推动了3D CNN 的发展,所以不到一年,I3D就出来了,从此开始了3D CNN 霸占视频理解领域的局面。

3.4 TSN(长视频理解,ECCV 2016)

3.4.1 网络结构

  之前的双流网络,输入是单帧或几帧视频帧和10帧光流图像(大概只有半秒),只能处理很短的视频段,那该如何去处理一个更长的视频呢?

如上图所示,TSN的想法非常简单,就是把长视频分成K段来进行处理:

  • 将长视频分成K段,在每一段里随机抽取一帧当做RGB图像输入,后续连续的10帧计算光流图像作为光流输入。
  • 分别通过K个双流网络得到2K组logits(一组有时空两个logits,这些双流网络共享参数)。
  • 将K个空间流网络输出特征做一次融合(Segmental Consensus,达成共识),时间流输出特征也如此操作。融合方式有很多种,取平均、
  • 最后将两个融合特征做一次late fusion(加权平均)得到最终结果。

  如果一个视频也不是太长,里面就包括一个事件或者一个动作的话,抽出来的K帧即使表面看起来不一样,但其高层语义信息上,应该还是描述的同一个东西,所以可以分成K段之后再融合来进行处理。
  本文的想法确实非常的简单,但不代表没有新意。一个简单而又有效的方法,才是最有新意的。

3.4.2 训练技巧及效果

在论文3.2 节中的Network Training部分,作者尝试了很多的训练技巧。

  1. Cross Modality Pre-training:作者提出了使用ImageNet预训练模型做光流网络预训练初始化的技巧
    • 在这之前并没有好的光流预训练模型,只是从头训练,光流效果并不够好,因为很多视频数据集都很小
    • ImageNet预训练模型的网络输入channel=3,而光流网络输入channel=20,无法直接使用。作者先将ImageNet预训练模型第一层网络输入的RGB三个channel的权重做一个平均,得到一个channel的权重( average the weights across the RGB channels ),然后将其复制20次就行。
    • 这种初始化技巧使得光流网络也能使用预训练模型,最终模型精度提高了5个点。这种技巧后来被广泛使用,I3D中使用预训练的2D模型来初始化3D模型,也是这么做的。
  2. Regularization Techniques
    • BN层用得好,模型会工作的很好,而一旦用的不好,模型也会出各种问题。在视频领域初期,很多视频数据集都很小,使用BN虽然可以加速训练,但也带来了严重的过拟合问题(数据集小,一微调就容易过拟合)。作者由此提出了 partial BN
    • partial BN:简单说就是只微调第一层的BN,其它的BN 层全部冻住( freeze the mean and variance parameters of all Batch Normalization layers except the first one)。
        这是因为一方面存在过拟合,所以考虑冻结BN层;但是全部冻住,迁移学习的效果就不好了。Imagenet数据集和视频分类数据集还是差的很远的,之前BN层估计出来的统计量不一定适用于视频分类,所以第一层BN必须进行学习,但后面再动就有过拟合的风险了。
    • partial BN这种技巧在后续很多迁移学习中也经常用到。
  3. Data Augmentation:在传统的 two-stream 中,采用随机裁剪和水平翻转方法增加训练样本。作者采用两个新方法:角裁剪(corner cropping)和尺度抖动(scale-jittering)。
    • corner cropping:作者发现random crop经常是crop图片中间部分,很难crop到边角。作者强制使用角裁剪,仅从图片的边角或中心进行crop。
    • scale jittering:通过改变输入图像的长宽比,增加输入图片的多样性。具体来说,先将视频帧都resize到[256,340],然后进行各种裁剪,裁剪的图片长和宽都是从列表 [256,224,192,168]里随机选取(比如168×256,224×224等等)。这样丰富了图片尺寸,减少过拟合。

  下面是在UCF101数据集上,这些训练技巧的提点效果。可以看出,从零开始训练网络比双流网络的baseline方法要差很多,证明需要重新设计训练策略来降低过拟合的风险,特别是针对空间网络。对时空网络都进行预训练,再加上partial BN,效果最好。

这些技巧都非常有用,所以作者将Good Practices作为论文题目之一。

3.4.3 实验部分

作者还做了一些其它试验

  1. 比较了BN-Inception、GoogLeNet和VGGNet-16作为backbone,最终BN-Inception效果最好;
  2. 对比了三种Segmental Consensus方式,取平均效果最好
  3. 模型性能对比
  • 第一块是传统手工特征
  • 第二块是使用深度学习做视频理解
    • C3D是早期使用3D CNN做视频理解,即使使用三个网络,结果也比不上最好的手工特征。在下一章 3D CNN部分会简单介绍这个模型
    • Two stream +LSTM:就是3.2 节中的方法(Beyond Short Snippets),提升0.6%。
    • TDD+FV:就是王利明老师改进光流堆叠方式的论文(直接叠加光流改为按轨迹叠加光流,在此文1.3.2中有讲过)
    • TSN (3 modalities) 就是还使用了另外一种光流形式作为输入,本文就不做介绍了。

3.4.4 总结

  本文不仅提出了一种特别简单效果又很好的方式处理长视频,而且还确定了很多很有效的技巧( Good Practices),其贡献不亚于双流网络或者I3D。

  1. 处理更长的原始视频
      这种将视频分K段再做Segmental Consensus的方法,除了裁剪好的Vedio clip(视频段)外,还可以应用于完全没有裁剪过的长视频。如果长时间包括更多的事件,分成的K段包含不同的事件和动作,那么后续融合时不使用平均或者max这些方式融合,改为LSTM就行了。2017年的UntrimmedNet就是处理完全没有裁剪过的长视频进行视频分类的,工作的也很好。

  2. Segmental Consensus用于对比学习
      本文用长视频分段后Segmental Consensus来做有监督训练,UntrimmedNet做的是弱监督训练(Weakly Supervised),但Segmental Consensus也可以用来做对比学习。
      简单来说,之前的工作都是把视频里任意两帧当做正样本,其它视频帧都当做负样本。这样如果视频比较长,任意抽取的两帧不一定互为正样本。如果借鉴Segmental Consensus的思想,将长视频分为K段后,从K段视频段(K个Segment)中各抽取任意抽取一帧,这K帧当做第一个样本;再在这K个视频段中任意抽取剩下的一帧,当做第二个样本;这两个样本互为正样本就更为合理了。因为两个样本都是从K个视频段中抽出的,它们在视频段中的顺序和走势都是一样的(两个样本都是从Segment1→Segment2…→SegmentK),互为正样本的可能性更大。

  3. 后续进展:

    • DOVF:在TSN基础上融入了全局编码(Fisher Vectors encoding),从而获取了更加全局的特征,UCF101精度推到95%以上。
    • TLE (CVPR 2017 ):融入了temporal linear encoding (TLE)全局编码,并且把模型做到端到端。
    • Action VLAD:融入了VLAD encoding全局编码
    • DVOF:在TSN基础上融入了全局编码(Fisher Vectors encoding或VLAD encoding),从而获取了更加全局的特征,UCF101精度推到95%以上。

  也就是在2017年,I3D发表了,至此,双流网络慢慢淡出了舞台。另外I3D刷爆了UCF101数据集,且发布了Kinetics数据集,HMDB51UCF101也基本淡出舞台了。

3.5 总结

看累了就休息下

四、3D CNN

4.1 前言

  上一章讲了双流网络及其改进,双流网络这种一个网络学习场景信息,一个网络引入光流学习运动信息的方式非常合理,效果也很好,那为什么大家还一直想将其替换为3D 卷积神经网络呢?主要就是在光流抽取这一块。

  1. 光流抽取非常耗时
    • 计算光流的常用算法tvl one来自《 High accuracy optical flow estimation based on a theory for warping》这篇论文,使用的是其GPU实现,计算一帧光流需要约0.06秒,所以抽取光流是非常耗时的。
    • 比如对于UCF-101数据集,有约1万视频,每个视频约10秒,每秒30fps(30帧),一共约300万帧。每两帧抽一张光流图,总共耗时约50h。如果是Sports-1M这种更大的数据集(100万视频,视频时长长达几分钟),不做任何优化的话,抽取光流就要成千上万个小时了,这样即使是8卡GPU也要抽取一个多月。
    • 这意味着每当你想尝试一个新的数据集,都需要先抽取光流,再去做模型的开发。
  2. 光流即使存为JPEG图像,也还是非常占空间。
    在双流网络这篇论文中,作者巧妙的将光流的密集表示改为JPEG图像存储,大大减少了存储空间,并在后续工作中一直沿用。但即使如此,UCF-101数据集存储所有抽取的光流也要27GB,如果是Kinetics 400数据集,大概需要500G存储空间。这么大的数据量,训练时是非常卡IO读取速度的。
  3. 推理时无法做到实时处理
    • 推理时也需要先抽取光流。tvl one算法是一帧0.06秒,换算下来就是约15fps,低于实时要求的25fps,而且这还只是抽光流,其它还什么都没做。如果加上模型,就更不是实时了。
    • 视频处理的很多工作,都有实时性要求。

  综合以上几点因素,所以才有那么多人想要避开光流,避开双流网络的架构。如果能直接从视频里学习视频特征该多好,这也是2017年到现在,3D CNN火热的原因。因为3D CNN是直接学习视频里的时空信息,就不需要再额外用一个时间流网络去对时序信息单独建模了,也就不需要使用光流。
  但其实现在回过头来看,3D CNN 越做越大,vedio transformer也越做越大,大部分的视频模型依旧不是实时的。而如果在3D CNN或vedio transformer里加入光流,其实还是可以继续提高性能,所以光流依旧是一个很好的特征。

4.2 C3D(ICCV 2015)

论文《Learning Spatiotemporal Features with 3D Convolutional Networks》

4.2.1 前言

  论文题目意为使用3D CNN学习时空特征,而摘要的第一句话,就说到:本文的目的,就是使用一种简单的3D CNN结构来学习视频中的时空特征。主要贡献,就是使用的3D CNN还比较深,而且是在一个特别大的数据集上进行训练的(Sports-1M数据集)。

  在引言部分,作者提到,C3D并不是第一个使用3D CNN来做视频理解的,但却是第一个使用大规模的训练数据集,且使用了比较深的CNN 网络,最终取得的效果也较好。

4.2.2 模型结构和效果

1. 模型结构

  如下图所示,简单来说就是有8个conv层和5个pooling层,两个FC层和最后的softmax分类层。整个3D CNN的构造,就是把所有的2d 卷积核(3×3)都变成3d的卷积核(3×3×3),2d pooling层(2×2)换成3d pooling层(除第一个是1×2×2之外,其它pooling层都是2×2×2)。

  整体构造,就是将VGG-16的每个block都减去一个conv层,然后2d卷积、池化核变为3d 卷积核池化,所以C3D相当于是一个3D版的VGG(共11层)。所以作者才说,这种改动的方法非常简单。没有inception net那种多路径的结构,也没有残差连接(当时还没有ResNet)。

  模型输入维度是[16,112,112](也就是输入16个视频帧,每帧尺寸是112×112),其

Deep video视频理解论文串讲(上)论文精读笔记

b站源视频(视频理解论文串讲(上)【论文精读】):https://www.bilibili.com/video/BV1fL4y157yA/

0 前言

视频里将视频理解分四大方向:
1,hand-crafted --> cnn
2,two-stream
3,3D cnn
4,video transformer

1 DeepVideo

cvpr 14

论文pdf:Large-scale Video Classification with Convolutional Neural Networks

DeepVideo是在Alexnet出现之后,在深度学习时代,使用超大规模的数据集,使用比较深的卷积神经网络去做的视频理解(DeepVideo是处理视频理解的最早期工作之一)。

作者团队来自:Google Research、 Stanford University

该团队为视频领域作出很大的贡献,如:Sports-1M、YouTube-8M、AVA(action detection)等数据集。很大程度推动了视频领域的发展。

DeepVideo论文中的方法是比较直接的,论文中的想法就是如何将卷积神经网络从图片识别应用到视频识别中。视频与图片的不同在于,视频多了一个时间轴(有更多的视频帧)。所以论文中尝试了以下几个变体(下图后3种):

首先看下面的single frame的方式(即单帧的方式),其实就是一个图片分类的任务。在视频里任选一帧,然后把这一帧通过一个卷积神经网络,然后通过两个FC,最后得到分类结果,这个其实就是一个baseline。它完全没有时间信息,也没有视频信息在里面。

接着,作者做了Late Fusion,之所以叫Late,就是因为它在网络输出层做的一些结合。如下图,从视频中,随机选几帧,然后每一帧都单独通过一个卷积神经网络,这两个神经网络是权值共享的,将两个特征合并,再通过FC【全连接层】,最后做输出。 这样就稍微有一些时序上的信息了。

然后是Early Fusion,作者在输入层就做了融合。具体做法就是在RGB在Channel上直接合起来。
原来一张图片,有3个channel,现在有5张图片,就有3x5=15个channel。那就意味着网络结构要进行一定的改变了,尤其是第一层。
第一个卷积层接受的输入的通道数,就要由原来的3变成15,之后的网络都和之前的保持不变。
这样的做法,可以在输入层就可以感受到时序上的改变,希望能学到一些全局的运动或者时间信息。

Slow Fusion是在Late Fusion 和 Early Fusion的基础上提出,Late Fusion合并太晚,Early Fusion合并太早了,Slow Fusion在特征层面做了一些融合。
具体做法就是选19个视频帧的1个小的视频片段,每4个视频帧就通过一个卷积神经网络,刚开始的层也是权值共享的,在抽出最开始的这些特征之后,由最开始的4个输入片段,慢慢合并成2个输入片段,再去做一些卷积操作,去学习更深层的特征。然后在融合2个特征,最后把学习到的特征给FC。
也就是说,整个网络都是多视频的整体的学习,作者最后实验结果,Slow Fusion结果较好(相对于前三个)。

但是从总体看来,这几种方法的差别都不大。即使在100万个视频上去做了预训练之后,在UCF101小数据集上去做迁移学习的时候,效果竟然还比不上之前的手工特征。

这就十分诡异了,所以作者就开始尝试另外一条路。

作者发现,用2D卷积神经网络去学时许特征,不好学,很难学。


作者尝试了【多分辨率卷积网络】(Multiresolution CNN),作者将输入分成了2部分,一个是原图,另外一个是从原图的正中间抠出来的一部分。无论是对图片还是视频,最有用的物体大多会出现在图片或者视频的正中间。图中上面一条流称为fovea stream,下面一条流称为context stream。fovea是人眼视网膜最中心的凹陷地方,是对外界变化最敏感的一个区域。context就是指图片的整体信息。作者想通过这些操作让网络学习到网络中最有用的信息,又能学习到这个图片整体的理解。这个架构也算是双流结构。Multiresolution CNN中的两个网络是权值共享的。这种结构也可以理解为早期对注意力的一种使用方式。作者强制性想让这个网络去关注图片的中心区域。

经过在Sports-1M数据上实验后发现,多分辨率卷积网络又一定提升,比如和Single-Frame(基准 Baseline)与Single-Frame Multires相比,有一定提升,但是提升相对来说比较小。Early Fusion和Late Fusion 都比Single-Frame(基准 Baseline)差。Slow Fusion经过一系列复杂操作后,也只比Single-Frame(基准 Baseline)高一点点。


作者又在14年大家广为接受的UCF101数据集上,作者做好的变体:Fine-tune top 3 layers,也只有65.4%的准确度。而当时最好的手工方法已经可以达到87%的准确度。这样巨大的差异,让人们思考,深度学习网络在图片分类、图片检测效果都很好,为啥到了视频分类就碰壁了呢?

其实这篇文章的意义,不在于它的效果,作者不仅提出了当时最大的视频理解数据集,而且把你能想到的,最直接的方式,全都试了一遍,为后续的工作做了一个很好的铺垫。这才有了深度学习在视频领域的飞速发展。所以到了18、19年,视频理解(或者动作识别),已经是cv领域排名前5、6的关键词。

以上是关于李沐论文精度系列之八:视频理解论文串讲的主要内容,如果未能解决你的问题,请参考以下文章

Deep video视频理解论文串讲(上)论文精读笔记

gitHubDailyShare深度学习论文精读

李沐多模态串讲视频总结 ALBEF VLMo BLIP CoCa BEITv3 模型简要介绍

论文精度(李沐老师)Generative Adversarial Nets

如何把近十页的论文读成半页?

如何把近十页的论文读成半页?