视频理解学习笔记(三)
时间梳理
Paradigm: Time | Paper |
---|---|
传统到CNN | DeepVideo |
Two-Stream:2014-2017 | Two-Stream |
3D-ConvNet:2017-2020 | I3D |
ViT-based:2020-present |
结果对比
Model | UCF101 (acc, %) |
---|---|
Improved Dense Trajactories (IDTF)S | 87.9 |
Deep Video (Slow Fusion) | 65.4 |
Two-Stream CNN (Optical Flow + Image Frames, SVM Fusion | 88.0 |
Beyond Short Snippets (LSTM Fusion) | 88.6 |
TDD + FV | 90.3 |
3DConv + 3DPool | 93.5 |
TSN | 94.0 |
TLE | 95.6 |
从hand-crafted到deep-learning
DeepVideo论文概览 (Slow Fusion)
论文链接:Large-scale Video Classification with Convolutional Neural Networks by Andrej Karpathy, Li Fei-Fei and etc. from Google Research and Computer Science Department, Stanford University.
Part 1:
- Single Frame:从视频里面抽取一帧出来,喂进卷积网络中得到结果。相当于普通的2D图像分类。
- Late Fusion:从视频里面抽取多帧出来,分别喂进权重共享的卷积网络中,在结果层面做信息融合。比如说Two-Stream在logits处做average或者SVM,因此算是有时序信息在其中。
- Early Fusion:直接在输入层面做信息融合,如图所示,将consecutive 5 frames在channel维度concatenate起来,相当于输入总共拥有15个channel(每个frame有3个channel)。
- Slow Fusion:在学习过程中,即特征层面做时序信息融合。
以上4种方法中,Slow Fusion效果最好,但其实4种方法的效果差别很小。
Part 2: Multisolution CNN Architecture.
如上图所示,
- 上面的分支:学习核心信息。从原始图中间crop出来(认为物体一般在图片中心),让fovea stream来学习这种核心信息。fovea意味视网膜中央凹,该部位对外界变换最为敏感。
- 下面的分支:学习整体的全局信息。没有特殊处理。
上下两个分支权重共享。
该网络在某种程度上也算是一种双流网络。这其实是早期的一种注意力机制,强制让模型去关注图片中心区域。
Two-Stream and Its Variants
Two-Stream CNN (Late Fusion)
由双流网络的启发(效果不一定好,探索):
- Early fusion and late fusion
- 换backbone,尝试更深的网络;如何在小数据集上训练大模型,控制过拟合。
- 怎么更好地处理时序信息,比如说用RNN或者LSTM等。
- 怎么做长视频
Beyond Short Snippets (Two-Stream + LSTM/ConvPooling)
探究时序信息Fusion的方法,怎么做pooling,主要提出了Conv Pooling和尝试了LSTM。这两者都可以处理非常多的帧,所以叫做beyond short snippets。
论文链接:Beyond Short Snippets: Deep Networks for Video Classification_CVPR’15 by Joe Yue-Hei Ng etc. from University of Maryland, College Park, University of Texas at Austin and Google, Inc.
方法:
实验:
和其他方法做对比:基于双流网络做出的改进,带来的效果提升非常有限。
消融实验:
结论:LSTM这种看似能够很好融合时序信息的方法,其实和ConvPooling的效果差不了多少(因为LSTM学的是更high-level的语义信息,需要一个比较长的序列和比较明显的变化);上表中最好两排相比前面两排的增益,主要来自光流的利用。
3DConv + 3DPool, Early Fusion (Conv Two-Stream)
即在卷积中做fusion。
探究Early Fusion,非常细致地讲了如何去做信息融合。具体来讲,如何基于双流网络去做时间流和空间流的early fusion。
论文链接:Convolutional Two-Stream Network Fusion for Video Action Recognition_CVPR’16 by Christoph Feichtenhofer and Axel Pinz from Graz University of Technology, Andrew Zisserman from University of Oxford.
-
Spatial Fusion
- 怎么合并
- Max Fusion
- Concatenation Fusion
- Conv Fusion (表现最好)
- Sum Fusion
- Bilnear Fusion
- 在哪里合并
- 空间流和时间流先分别做,然后在中途合并
- 先两个网络分别做,然后把空间流的特征拿去和时间流的特征做合并。(表现更好)
- 空间流和时间流先分别做,然后在中途合并
- 怎么合并
-
Temporal Fusion
- 3D Pooling
- 3D Conv + 3D Pooling
实验:
和其他方法做对比:
结论:Early Fusion可能算是一种对网络的变相的约束,在一定程度上弥补了数据集不足的问题。
贡献:
- 大量消融实验,在哪里做fusion,怎么做fusion
- 展现了3D CNN的可行性
TSN
如何处理更长的视频和一些好用的技巧
论文链接:Temporal Segment Networks: Towards Good Practices for Deep Action Recognition_ECCV’16 by Limin Wang etc. from ETH, CUHK, CAS
方法:
给长视频分段,从每个段抽取一帧rgb和对应的光流,喂进权重共享的双流网络。
- 如何利用输入不同的预训练好的模型进行初始化(如何利用在ImageNet上预训练好的模型参数对TSN进行初始化):RGB是3个channel,而TSN的输入是N个channel。方法:在第一层对3个channel的参数取平均,得到一个channel的参数;将这个参数重复N次。
- 正则化的技巧
- 问题:BN虽然能加速训练,但加重过拟合。解决:partial BN,即把部分BN冻住。具体来讲,把第一层BN打开(因为输入变化了),其他BN全部冻住。
- 数据增强:防止过拟合。
- coner cropping:强制在边边角角做crop;
- jittering:改变视频帧的长宽比。具体操作:resize到固定大小,然后去做裁剪。
实验:
和其他方法对比:
总结
- 上半支:传统方法
- STIP: Spatial Temporal Interest Point
- DT/IDT: Dense Trajectory / Improved Dense Trajectory
- IDT + FV: Fisher+ Vector
- 下半支:深度学习
- DeepVideo’14
- Two-Stream
- 利用光流轨迹做堆叠:TDD_CVPR’15
- 利用时序模型LSTM和做Pooling(late fusion):Beyond Short Snippets_CVPR’15
- Early Fusion: 3DConv + 3DPool, Conv Two-Stream_CVPR’15
- 对长视频的理解:TSN_ECCV’16
- 将全局编码加到TSN中,学习一个更全局的video-level特征
- DVDF:非端到端
- TLE_CVPR’17:端到端
- 将全局编码加到TSN中,学习一个更全局的video-level特征