CVPR 2018: 基于压缩视频的动作识别

CVPR 2018: 基于压缩视频的动作识别

paper code

1. 概述

传统的视频相关的识别\分类\理解都是基于视频解压出来的帧进行操作,而视频本身是经过压缩的。

  1. 视频有非常低的信息密度,解压后的数据量大,例如一个1G压缩视频解压后可能达到200多G,里面充斥着大量的重复的冗余的信息,而且压缩其实也是通过视频的一些pattern来减少冗余信息的存储占用。如果经过解压后的数据来训练,似乎是增加了额外的计算开销和存储开销。
  2. 现有的方法都是把视频当作图片序列,这样来学习时序信息是困难的,大量的模型架构也并没有很好的解决这个问题,很有趣的是使用光流一般就能提升模型的性能,因为光流体现了帧间的变化,视频的时序信息可能更多蕴含在此。

本文的思路就在于通过直接使用压缩后的视频进行训练。采用的是经过有损压缩的预测编码方式MPEG-4压缩的视频,直接利用其中的Iframe和Pframe(包含motion vector 和residual),通过累计motion vector 和 residual,拆开pframe的前向依赖,使能够并行训练。h.263压缩方式应该也是可以的,但是,IPB帧的编码方式,模型的结构需要稍稍修改)

本文在实践中发现直接使用压缩后的内容进行训练相较于解压后的图片序列训练效果,认为是

  1. 压缩视频减少移除了两个数量级的冗余信息,让重要的有趣的信息更为突出
  2. 压缩视频中的motion vector提供了原始的RGB图像序列所没有的运动的信息,还能减少了额外的空间的变量能够提高模型的泛化能力
  3. 利用压缩视频,可以解释帧间的关系,只注重于真实的信号而不是重复的类似复制的信息,更加高效。

2. 视频压缩背景知识

  1. 预测编码方式【2】

2. I,P,B帧编码模式
I 帧(Intra),B帧(Bi-direction Prediction,双向预测帧)和P(Prediction)帧,有一定的排列顺序 。

    • I-frame记录着完整的画面信息,只作帧内压缩。
    • P-frame仅仅是记录下与之前一帧的差值,编码时使用运动补偿和运动估计,参考前面的I帧或P帧来预测。
      • motion vector: 在时间t中像素块的从源帧到目标帧的移动,记作 T^{(t)}
      • residual: 尽管经过motion vector和前一帧的计算后得到的预测帧依然和目标帧存在差别,这些差别记作 \Delta^{(t)}
      • 所以重构的时间t的帧I^{(t)} 在i位置像素,就是前一帧的i- T_i^{(t)} 位置的像素,再加上在i位置上的残差
    • B-frame可以理解是一个特殊的p-frame,既可能跟前一帧有关也可能跟后一帧有关,只要不发生循环依赖。

Motion Vector 相对于Optical Flow显得有噪音和粗糙,我们很容易联想到能否直接利用Motion Vector来产生optical flow 或者是优化Motion Vector 来表示帧间运动,这在【3】,深圳先研院就做这种尝试,将optical flow的迁移到motion vector network上,优化motion vector来表示帧间运动,但这种做法产生的结果相对于optical flow稍差些,但是速度是有了挺大的提升

下面有Motion Vector 和 Residual的可视化的样子,其中前者是映射在HSV空间,和optical flow一样。

3.模型介绍

3.1 为并行化的预处理

压缩视频的结构是为了减少压缩的空间存储,这个是否能够直接然应用在深度模型当中呢?文中说他们曾经尝试过直接去利用Pframe中的内容,利用多种混合策略都没有得到很好的效果。究其本质认为是可能是每一个P-Frame其实都是回溯到最近的I-Frame那,这就存在矛盾。所以简单的方法就是去除这种关联。

P-frame只记录上一帧和本帧的差别,就依赖于上一帧,所以文中采用了累积的方法让每一个P-frame与最接近的前一个I-frame产生关联而不是与前一个P-frame。

对于motion vector来说,比如一个像素在第t帧所在位置是i,那么定义其在前一帧的位置应该是i-$T^{(t)}i$,这个我们在上一part也说过,记作$\mu{T^{(t)}}$ 。显然这个像素块的位置是不断依赖于前一帧,直到I-frame。所以对应到帧k,k<t,t中i位置的像素可写成:

残差就很简单,只需要累加就好,所以能够有,$D_i^{t}$是指累积的MV的值,$R_i^{t}$是指累积的残差值

这样我们就可以将P-frame之间的相互依赖拆开,从而实现并行化。

3.2 模型

如上,模型的输入将是一个I-Frame然后跟着T个P-Frame。认为I-Frame更为重要,为了能够节约计算,采用了ResNet-152来获取I-Frame的特征,用ResNet-18来获取MV和Residual的特征。另外对于是Video的任务,采用了【4】的Temporal Segment Networks。

下图是【4】的模型框架,本文实际上是,将Spatial ConvNet 是ResNet-152,使用I-Frame作为输入,获取到激活函数前的特征,然后P-Frame的MV 和Residual输入到ResNet-18获取激活函数前的特征,然后经过分别经过两层FC和softmax获取三个模型产生的平均分数和预测的类,三个分数经过加权相乘获得最终的混合分数和最终预测的类。文中采取了3个segment如下图

3.3 Temporal Segments Network

如上图,将输入的视频划分为K个片段,然后从每一个片段中获取一个小的切片,然后我们可以从这个视频中获得K个切片的序列内容,认为

是经过一个参数为W的ConvNet获得模型表示获得对于每一个类的分类分数。共识函数连接这些输出然后获得他们的分类猜想共识,然后基于此作最后的分类。这个函数的loss可以写为

$G_i$是指公式函数输出的分类分数

4. 实验

在UFC-101上,Accumulate的做法相对于没有做Accumulate好一点,

相比较于只用I-Frame,I+M+R有更好的性能。

相对于state-of-art的3D CNN而言更狂,也更准

在没使用optical flow的,motion vector 提供的帧间信息让模型超越其他不用optical flow的模型

有趣的是,用上了optical flow,模型还是state-of-art,不过和其他差距很小,相对于没用optical flow自身提升是有的,也说明了Motion Vector还是没有替代的了Optical flow

最后在Two-stream 模型上,将CoviAR替代了原有的RGB流,同样也获得了state-of-art的效果

5. Conclusion

本文提出直接基于压缩视频训练深度模型的方法,主要在于降低了模型的参数量,速度得到了提升。motion vector提供的一些帧间运动信息,让模型相对于其他不用optical flow的模型更加准确,这种准确可能来自于压缩视频的相对较低的维度,信息密度更高,泛化能力更好。但是optical flow还是没法被完全替代。

一些联想

  1. 既然optical flow依然是很重要的,那么直接基于压缩视频做optical flow是否能够加速optical flow model
  2. 基于压缩视频来进行视频的各项任务,可能是未来提升模型速度,实时性,减少计算负载的一个方向。在今年的PRCV workshop美图视频分类中,第一名的作者就是直接对压缩视频的I-Frame进行识别的。
  3. 基于压缩内容进行识别,是否可以拓展到其他类型的文件。这里面可能跟有效信息密度有关,怎样将压缩的内容并行化,基于压缩提高模型速度,可能也是模型轻量化的一种方法。

一家之言,难免纰漏,望各位斧正~

6. Reference

【1】Compressed Video Action Recognition

【2】MPEG-4标准视频压缩算法研究

【3】Real-time Aciton Recognition with Enhanced Motion Vector CNNs

【4】Temporal Segments Networks:Towards Good Practices for Deep Action Recognition




本文首发于个人专栏 CV上手之路


------------------------------------------------

知乎专栏:Paper Reading,集聚自动驾驶知名大咖的前沿知识分享平台,欢迎申请加入或直接投稿。

zhuanlan.zhihu.com/c_15

编辑于 2018-12-07

文章被以下专栏收录