网络建站行业怎么样,修改wordpress博客,一个网站开发的流程图,ui设计学费多少 要学多久前言
参考资料
本文基于以下四个李沐 AI 论文精度视频#xff0c;对视频理解领域做初步调研 双流网络论文逐段精读 I3D 论文精读 视频理解论文串讲#xff08;上#xff09; 视频理解论文串讲#xff08;下#xff09; 相关论文 02014CVPRDeep VideoPDF12014NIPSTwo-Str…前言
参考资料
本文基于以下四个李沐 AI 论文精度视频对视频理解领域做初步调研 双流网络论文逐段精读 I3D 论文精读 视频理解论文串讲上 视频理解论文串讲下
相关论文 02014CVPRDeep VideoPDF12014NIPSTwo-Stream 双流网络PDF1.12015CVPRBeyond Short SnippetsPDF1.22016CVPRTwo-Stream FusionPDF1.32016ECCVTSNPDF22015ICCVC3DPDF2.12017CVPRI3DPDF2.22018CVPRNon-localPDF2.32018CVPRR(21)DPDF2.42019ICCVSlowFastPDF32021ICMLTimeSformerPDF2020综述包含 ViT 之前的大部分工作PDF
数据集简介
视频理解实际是做视频动作分类类似图像分类输入为视频图像序列输出为类别。
数据集类别数视频数平均时长链接UCF-101101133207.21sPaper | DownloadHMDB-515168492~5sPaper | DownloadSports-1M48711331585m36sPaper | DownloadKinetics-40040030624510sPaper | DownloadSmth-Smth1742208474sPaper | Download
关于动作的类别值得一提动作的主体都是人通常可以大致分为人体单独的动作、人和人的交互动作、人和物的交互动作。不同数据集的动作难度有所不同这里不太好说明个人将其分为活动动作和一般身体动作 UCF-101 中的大多为活动动作即动作属于一种活动像运动跳水、跳远、乐器演奏弹钢琴、拉小提琴、日常活动剃须、遛狗等等HMDB-51 中就有些一般身体动作例如行走、跑步、推等Sports-1M 都是运动相关的动作主要是运动的种类比较细粒度像6种不同的保龄球和7种不同的美式足球。这里的类别主要是运动类别的区分基本不会对某个运动中的不同动作进行分类例如篮球中的运球、抢断等体操、滑冰中的不同技术动作。另外表格中的 5m36s 指的是原视频的平均长度在论文中说每个视频最多使用100个半秒的切片we only use a random collection of up to 100 half-second clips from every video and our videos are 5 minutes and 36 seconds in length on average。Something-Something 的类别较为特殊标签基于模板例如 Dropping [something] into [something]论文中说每个类别平均620个视频Holding [something] 视频数最多986个Poking a hole into [some substance] 视频数最少77个。 表中视频数指的不是数据源的视频数而是切片Clips的数量多个切片可以来源于同个视频。Kinetics 的一个特色就是每个切片都来源于不同视频。UCF-101 和 HMDB-51 较小是早期使用的数据集在 I3D 将其刷爆后不再常用。Kinetics-400 后续拓展到了 K-600、K-700类别更多数据量更大并且在K-400时每个类别的切片就都超过400个。
发展脉络
Deep Video 最先把神经网络用到视频领域但是效果不好还不如手工特征 IDT。Two-Stream 双流网络加入光流作为时序运动特征得到了不错的效果后续有许多方法对其改进 Beyond Short Snippets 通过结合 LSTM 来获得更长的时序理解能力Two-Stream Fusion 对 Fusion 即融合方式做了深入的研究提出了一种 Early Fusion 的方式TDD 改进了对光流的使用利用了光流的轨迹TSN 提出了一种方法用于处理较长的视频后续又有许多在 TSN 基础上的改进如 DOVF 加入了全局编码例如 Fisher Vector Encoding、VLADTLE 使用了 Bilinearing EncodingAction VLAD 利用了 VLAD2017年 I3D 出现后双流网络逐渐退出历史舞台。 C3D 最先使用了 3D 卷积神经网络但是效果不好 I3D 主要在模型参数初始化方面做了改进使模型的训练简单化直接刷爆 UCF-101 和 HMDB-51后续有了许多工作跟进R3D 为 3D 版 ResNetMFNet 为 3D 版 ResNextSTC 为 3D 版 SENet由于 2D 卷积便宜且有一定的效果出现了将 2D 和 3D 结合使用的方法如 S3D、R(21)D、ECO、P3D基本都是将 3D 切分成 2D 和 1D在保持准确度的同时提高计算效率和训练速度为了处理更长的视频出现了 LTC、T3D、Non-local、V4DCSN、SlowFast、X3D 注重高效率X3D 通过 Auto ML 搜索得到的网络效果好且参数小后续研究遇到了瓶颈此时出现了 Vision Transformer。 基于 Transformer 出现了 TimeSformer、VIVIT、VIDTR、MVIT
Deep Video Deep Video 的想法就是把 CNN 从图像分类迁移到视频分类并制作了 Sports-1M 数据集。由于多了时序上的信息就想到了下图所示的一些方法进行尝试。 1Single Frame 从视频中抽出一帧做图像分类完全不利用时序信息 2Late Fusion 在网络的输出层面做一些结合例如从视频中随机抽取若干帧每一帧通过 CNN 提取特征合并特征后通过 FC 得到分类结果 3Early Fusion 在这里非常 Early在输入层面做融合直接将多张图像在 RGB 通道维度拼接起来 4Slow Fusion 结合了 Late 和 Early在特征提取过程中逐步融合 直观上看 Slow Fusion 最合理最终实验结果也是他的精度最高但实际上这四种方法的差别都不大Early 和 Late 甚至不如单帧图像分类的 Baseline。而且在 Sports-1M 这样的大数据集上做预训练后迁移到 UCF-101 上的效果远不如手工特征作者得到最好的结果只有 65.4%而当时最好的手工特征有 87%。
Sports-1M 测试结果 Two-Stream
双流网络
方法 双流网络认为 CNN 直接学习时序特征难度太高于是计算光流作为时序特征喂给网络。整个结构具有空间流和时间流两个 CNN空间流就是做单帧图像分类时间流则是输入光流也是做分类最后把两个分类结果通过加权平均或 SVM 等 Late Fusion 的方式合并起来。
光流 假设视频帧的形状为 [ H , W , 3 ] [H,W,3] [H,W,3]前后帧两张图像可以计算得到光流的形状为 [ H , W , 2 ] [H,W,2] [H,W,2]。光流可以理解为像素在 x y xy xy 方向的移动量假设 t t t 帧中某个像素的坐标为 ( x , y ) (x,y) (x,y)光流中该坐标位置的数值为 ( u , v ) (u,v) (u,v)那么 ( x u , y v ) (xu,yv) (xu,yv) 就是在 t 1 t1 t1 帧中该像素的所在位置。因此光流可以很好的描述运动信息。 如上图作者提出了两种使用光流的方式。左侧就是简单的把多帧光流拼接到一起右侧是根据光流的轨迹做拼接因为根据光流可以知道这个点在下一帧的位置这样可以看作同一个点在不同时间的光流值。但是实验结果中左边的方法更优作者也难以理解后续 TDD 解决了这个问题。 双流网络计算 L 1 L1 L1 帧的光流得到 [ H , W , 2 L ] [H,W,2L] [H,W,2L] 作为时间流的输入前半部分为 x x x 方向数值后半部分为 y y y 方向数值。由于原始的光流数据所占空间太大作者这里将它的数值变换到 0~255 保存为图片于是可以用 JPEG 压缩大幅度降低了光流文件的存储空间1.5TB → 27GB。
测试阶段 无论视频共有多少帧会等间距抽取 25 帧做空间流预测每一帧后面连续的 11 帧用来做时间流预测。
实验 上图在 UCF-101 上分别对时间流和空间流做了消融实验。表 a 中测试了是否使用 ImageNet 预训练模型、整个网络微调和最后层微调、不同 Dropout 之间的差异。表 b 中前三行先测试了1、5、10帧光流长度的影响后面分别测试了沿轨迹叠加光流和使用 Bi-directional optical flow 反向光流。 双流网络基本可以和过去最好的手工特征打平。值得注意得是仅使用光流做预测也能得到相当高的精度。
研究方向
1目前是在两个网络 Softmax 后做 Late Fusion可以对 Fusion 的方式进行研究直观上在前期的特征中做空间与时间的交互会更好 2目前的网络还是 AlexNet尝试 ResNet 等更深的网络研究如何在小数据集上训练大模型如何控制过拟合 3目前将 CNN 抽取的特征直接做分类可以尝试在抽到的特征后面加上 RNN 或 LSTM 来提取时序信息 4目前的时序很短10帧也就0.5s左右通常动作的持续时间会更长研究如何处理长视频。
Beyond Short Snippets
方法 Short Snippets 代表两三秒内的视频切片按照双流网络的方法能够处理的视频帧很少。当有特别多的视频帧时通常会用 CNN 抽取特征问题在于如何对这些特征做 Pooling文章探索了多种 Pooling 方式也尝试了使用 LSTM。具体来说就是 CNN 抽取特征后不是连接 FC 做分类而是接上 5 层 LSTM 做时序融合后再做 Softmax 分类。
实验 在 Sports-1M 上与单帧和 Deep Video 做了对比使用的帧数大幅度提高但效果的提升其实主要因为使用了光流如果仅对比 Conv Pooling 和 LSTM 其实并没有什么区别。 在 UCF-101 上第一项为手工特征能达到 87.9%Deep Video 只有 65.4%双流网络SVM 能达到 88% 与手工特征打平。这里可以看出 LSTM 在这里也没什么效果朱老师这里分析认为 LSTM 更擅长处理 High Level 的语义特征给 LSTM 的输入要具有一定的变化。UCF-101 的平均时长为 7s在这样较短的视频上多帧的语义信息可能没有什么变化讲许多相似的特征传给 LSTM它也学不到什么东西。在长视频或变化剧烈的视频上LSTM 应该还是有用武之地的。
Two-Stream Fusion
方法 双流网络用的是简单的 Late Fusion于是这篇文章在 Fusion 上做研究。
1Spatial fusion 在空间维度如何融合特征
Sum fusionMax fusionConcatenation fusionConv fusionConcat 后接一个 1 × 1 1\times 1 1×1 卷积最终表现最好Bilinear fusion相同位置的特征做外积然后对所有位置的特征求和 y bil ∑ i 1 H ∑ j 1 W x i , j a ⊤ x i , j b ∈ R D 2 \mathbf{y}^{\text {bil }} \sum\limits_{i1}^{H} \sum\limits_{j1}^{W} \mathbf{x}_{i, j}^{a \top} \mathbf{x}_{i, j}^{b}\in \mathbb{R}^{D^{2}} ybil i1∑Hj1∑Wxi,ja⊤xi,jb∈RD2
2Where to fuse the networks 在网络的哪个部分做特征融合 作者做了大量的消融实验后得到了两个较好的方法。左图为传统意义上的 Early Fusion图像和光流分别经过各自的网络提取特征后合并然后输入统一网络做预测。右图则是保留了空间流的信息在 fc8 后再做一次融合可以简单理解为在网络还没有学习到特别深层的语义特征前做一次融合来帮助时间流学习而在 fc8 已经是深层语义特征时再做一次融合。
3Temporal fusion 多帧特征如何在时间维度融合 在对上述细节进行研究后提出网络框架最终设计了两个分支左边融合了空间和时间的特征右边单独保留了时间特征最后再对两个分支的结果做 Late Fusion。
实验 实验中测试了将双流网络替换为 VGG-16以此作为 Baseline 进行对比在 HMDB-51 上有较大提升可能是 Early Fusion 的方式可以让时间流和空间流在早期进行互相学习在一定程上弥补了数据不足的问题。
TSN
方法 文章提出了一个简单但有效地方法对于一个视频可以切分成若干段每段抽取图像和光流经过双流网络得到分类得分这些分类得分通过 segmental consensus function 做融合最后空间流和时间流做 Late Fusion 得到分类结果。 这个思想还可以用到无监督学习中以往会在一段视频中随机抽取两帧作为正样本其他帧作为负样本但对于较长的视频这两帧不一定是正样本。运用 Temporal Segment 可以先把视频分段每段抽取一帧作为一个样本再从每段抽取一帧作为第二个样本这两个样本作为正样本对。 作者还提供很多有用的技巧
1Cross Modality Pre-training 预训练 空间流可以使用 ImageNet 预训练的模型而时间流以光流为输入没有在大数据集上的预训练模型。作者发现直接把 ImageNet 预训练的模型搬到时间流上也很好但是一个输入是 RGB 3 通道一个是 10 张光流图 20 通道无法直接使用。作者的方法是将模型 3 通道的权重求平均变为单通道然后再 20 通道的权重上复制 20 份这种初始化方式对模型的提升非常显著。
2Regularization Techniques 正则化 由于数据集较小使用 BN 虽然能让模型训练加速但也带来了严重的过拟合。作者提出了 partial BN 的做法冻结除了第一层以外的 BN由于原始的 BN 来源于图像开放第一层 BN 可以学习一下新的视频输入适应新的数据集。
3Data Augmentation 数据增强
corner cropping常用的 random cropping 经常在图像的中间区域附近很难覆盖边角区域。过去边角区域的裁剪主要用在测试这里用到了训练中的数据增强。scale jittering通过改变图片的长宽比来增加数据多样性。具体先把所有帧 resize 到 256 × 340 256\times 340 256×340然后再图片上做裁剪裁剪区域长宽的数值从 { 256 , 224 , 192 , 168 } \{256,224,192,168\} {256,224,192,168} 随机挑选例如 256 × 256 256\times 256 256×256、 192 × 168 192\times 168 192×168 等。
实验 表格中顶部为传统方法中间为深度学习方法底部为 TSN3 modalities 是多使用了另一种形式的光流。
3D
C3D
方法 作者使用了一个较深的 3D CNN 在 Sports-1M 这样较大的数据集上进行训练。网络结构与 VGG 非常类似基本就是每个 Stage 删除一层卷积然后把 3 × 3 3\times3 3×3 的 2D 卷积变成了 3 × 3 × 3 3\times3\times3 3×3×3 的 3D 卷积。Pooling 层中除了 Pool1 是 1 × 2 × 2 1\times2\times2 1×2×2即不对时间维度做下采样其余都是 2 × 2 × 2 2\times2\times2 2×2×2。 作者发现 fine-tune 网络费时费力且效果不好后续就以 FC6 的输出作为抽取的特征后续再训练一个 SVM 做分类效果很好。
实验 左侧为 C3D 在 UCF-101 上的结果右侧为同期 TDD 的实验结果。从精度上看 C3D 并不突出但文章主要的卖点在于开放了 C3D 抽取特征的接口可以用于各种下游任务当时的算力不足以大多数人去训练或 fine-tune 视频模型C3D 以 Facebook 的算力训练了一个月。
I3D
方法 作者制作了 Kinetics 数据集模型通过选取优秀的 2D 网络 inflate 到 3D 来构建。文中回顾了过去的一些方法最终提出了图 e 所示的网络结构可以看出是个 3D 版的双流网络。 I3D 是从 2D 网络扩张到 3D也就是保持网络整体结构不变卷积、池化操作扩张为 3D这看起来很简单但关键的是用 2D 的网络来初始化 3D 的网络从而降低训练难度。之前 C3D 效果不好很可能是因为没有类似 ImageNet 这样的预训练模型做初始化。 作者提出了一个巧妙的初始化方式将一个静止的视频即每帧都是同一张图像 I I I 的视频作为 3D 的输入而 I I I 同时作为 2D 的输入目标是让两者的输出保持一致。对于 3D 卷积来说比 2D 卷积多了时间上的维度 N N N那么就把 2D 的参数复制 N N N 份作为 3D 的参数。如此得到的 3D 输出会是 2D 的 N N N 倍因此将参数都除以 N N N 即可。输出一致意味着后续网络的输入也是一致的使得后续的参数也是有效的。
实验
Table 1 Table 2 表1 对上文提到的 5 种方式做了实验值得注意的是将图像和光流做 Late Fusion 效果总是有提升的证明了光流对于动作识别是很有效的只是计算光流的成本较高。表2 证明了在 K-400 上使用 ImageNet 做初始化的有效性。
Table 3 表3 对迁移学习做了测试。Original 代表不使用迁移学习直接在 UCF-101 或 HMDB-51 上训练Fixed 代表冻结 Backbone 做微调Full-FT 代表在整个网络上微调。
Table 4 表4 除了与现有方法作对比还体现了 K-400 数据集的价值。在 K-400 数据集上直接训练作为预训练模型不使用 ImageNet 也能得到很好的效果这样一来网络可以从头训练网络的设计可以有更大的空间。
Non-local
方法 卷积和递归RNN、LSTM的操作都是在局部区域进行处理如果能覆盖更长的上下文肯定会更好。受 Non-local means 操作的启发提出了一个 Non-local 算子。这是一个即插即用的模块可以用到视频、检测、分割等各种任务中。结构上其实和自注意力完全一致。 实验 作者做了大量的消融实验
(a) 注意力的计算方式最终使用 dot-product也是 Transformer 中的默认方式(b) 尝试在网络的不同位置插入一个模块res5 的效果最差原因可能是特征图太小包含的空间信息少而在 res2 插入模块计算开销较大最终确定在 res3 和 res4© 尝试插入多个模块对于 Resnet-50 的层数分别是 3、4、6、310-block 就是在每个卷积层后面都插入5-block 就是一个隔一个插入(d) 对比了时间、空间和时空三种方式证明本文这种在时间和空间上同时做自注意力的操作更好(g) 在更长的上下文 128 帧上做测试证明了 Non-local 同样可以提高性能确实对远距离的上下文理解有帮助 对比实验在 K-400 数据集上做可以看到 Non-local I3D 只使用图像作为输入的情况下可以和之前使用图像、光流加音频的方法打平且在原始 I3D 上提升很多。
R(21)D
方法 主要研究在动作视频中如何使用时空卷积。由于 2D 卷积也能得到不错的结果而且计算开销比 3D 卷积小很多于是测试了各种结构来组合使用 2D 和 3D 卷积最后发现把 3D 卷积拆分为空间上的 2D 和时间上的 1D 效果最好。 从消融实验中可以看出单纯使用 2D 和 3D 的方法效果最差组合使用 2D 和 3D 效果稍好拆分的 3D 的 R(21)D 方式效果最佳。其中 R(21)D 的参数量是为了和 R3D 的参数量保持一致从而做公平的对比。 具体的拆分方法就是把一个 t × d × d t\times d \times d t×d×d 的卷积拆分成 1 × d × d 1 \times d \times d 1×d×d 的 2D 空间卷积和 t × 1 × 1 t \times 1 \times 1 t×1×1 的 1D 时间卷积中间的 M i \mathrm{M}_i Mi 是做特征维度映射使得参数量逼近 R3D。 作者分析拆分成两个卷积可以增加一次激活函数提高网络的非线性能力并且直接学习 3D 卷积比较困难拆分成空间和时间会更容易优化。基本是先射箭后画靶
实验 在 K-400 上R(21)D 单独使用图像或光流都优于 I3D但是两者做 Late Fusion 后反而不如 I3D。在 UCF-101 和 HMDB-51 上只在使用图像上优于 I3D作者给出的解释是预训练比 I3D 少用了 ImageNet而实际上 I3D 只使用 K-400 做预训练也优于 R(21)D。不过 R(21)D 的输入为 112 × 112 112\times112 112×112而 I3D 的输入为 224 × 224 224\times224 224×224并且 R(21)D 的方式确实更容易训练和抑制过拟合。
SlowFast
方法 人的视觉系统中 P 细胞占视觉细胞的 80% 负责处理静态图像M 细胞占 20% 处理高频率的运动信息与双流网络很像。于是在 3D 网络中如法炮制设计了 Slow 和 Fast 两个分支但两个分支输入的都是图像。 具体来说对于一个视频先用较长的间隔取少量帧作为 Slow 分支的输入再用较短的间隔区大量帧作为 Fast 分支的输入并且 Slow 分支的模型更大参数更多Fast 分支的模型更小参数更少在过程中使用 Lateral connections 做特征融合和信息交互。从表中的详细数据可以看出模型结构是 ResNet 版 I3DFast 的输入量是 Slow 的 8 倍而 Fast 中的卷积通道数也是 Slow 的 1/8 降低计算开销另外在时间维度上不做下采样。
实验 SlowFast 除了在精度上很高在计算开销上比过去的方法低很多。并且使用更大的模型做 Backbone 和添加 Non-local 模块后精度能进一步提高。
Transformer
TimeSformer
方法 作者主要探索如何把 ViT 从图像领域迁移到视频领域主要尝试了以下 5 种方式
只在空间维度做注意力也就是原始 ViT 使用的方式属于图像上的 Baseline在空间和时间维度上一起做注意力但明显 GPU 吃不消时空切分先在时间上做再在空间上做局部切分先在局部上做再在全局上做类似 Swin Transformer 在局部窗口中做轴方向切分现在时间维度做再分别在宽高维度做 这里的可视化图像非常直观蓝色块作为基准点其余为不同步骤参与注意力计算的元素。 经过消融实验后作者选择了 Divided Space-Time 的方式作为 TimeSformer 网络。 实验 这里进行了选择性对比从精度而言 SlowFast 有 R101NL 的版本达到 79.8 的精度但是训练时间ViT 做微调和推理开销输入少确实更好。并且作者在更大的模型和数据集上将 K-400 刷到了 80.7。 后续的一些相关工作其实想法也差不多核心还是直接使用自注意力计算量太大通过探索不同的拆分方式来提升效果。