视频是在二维图像上加入时间维度。若每帧为三通道图像,一个片段可写成 T×3×H×WT\times3\times H\times W,也常写成 3×T×H×W3\times T\times H\times W。时间维带来的信息不是简单多了几张图片:单帧中的姿态可能相同,帧间变化的方向和速度却能区分“坐下”与“站起”;同时,游泳池、球场等静态背景又足以为许多动作提供强线索。视频模型需要决定在多大程度上依赖外观、局部运动和长程事件顺序。

视频的原始数据量很大。按每秒约 30 帧、每个像素 3 字节估计,640×480640\times480 的标清视频每分钟约为 1.5 GB,1920×10801920\times1080 的高清视频每分钟约为 10 GB。实际训练通常从较短、较低帧率和较低分辨率的片段开始,例如 T=16T=16H=W=112H=W=112;在 5 fps 下这对应约 3.2 秒的视频,数据量约 588 KB。

训练时通常从长视频采样短片段,让一个批次在显存中容纳足够多样本;测试时再对多个时间位置分别预测并聚合。这样的结果近似对整段视频的预测,但稀疏采样可能漏掉短暂关键动作,采样密度、片段长度和计算预算必须一起选择。

短片分类

最简单的单帧网络对每帧独立运行普通 2D CNN,并平均类别概率。它没有显式建模运动,却是很强的基线,因为人物姿态、场景和物体常与动作标签高度相关;只有确认单帧基线不足,时间模型带来的额外计算才有意义。后期融合先把每帧压缩成高层语义特征,再拼接给 MLP 或沿时空平均。它能利用多帧证据并复用图像预训练模型,但帧在汇合前已经丢掉细粒度位置,网络更容易知道“先后出现了哪些东西”,较难比较同一局部如何连续移动。

前期融合TT 帧沿通道维拼接,把输入改为 3T×H×W3T\times H\times W。第一层卷积可以直接对相邻帧做差分式比较,此后仍沿用成熟的 2D CNN;但时间位置被当成不同输入通道,动作整体向前或向后平移时,模型看到的是另一组通道,需要另行学习相似模式。第一层过后独立时间轴也消失了,深层网络无法逐级构造从短运动到长动作的层次表示。

3D CNN 在卷积和池化中同时处理时间、空间方向,每层仍保留 D×T×H×WD\times T\times H\times W。浅层核可以检测短时边缘移动,深层再组合成挥手、跳跃等较长动作;保留时间轴让时间感受野像空间感受野一样随深度扩大。

设输入特征为 XX,三维卷积核为 WW,忽略偏置时,输出位置 (t,h,w)(t,h,w) 可写为

Yo,t,h,w=iτ,u,vWo,i,τ,u,vXi,t+τ,h+u,w+v.Y_{o,t,h,w}=\sum_i\sum_{\tau,u,v} W_{o,i,\tau,u,v}X_{i,t+\tau,h+u,w+v}.

求和中的 τ\tau 遍历相邻时间,u,vu,v 遍历空间邻域,同一组 WW 沿三条轴共享。因此相同动作无论出现在片段前后都能激活同一滤波器,这正是前期融合缺少的时间平移等变性;代价是每个空间卷积又要对 KtK_t 帧累加,计算、激活显存和数据读取都随帧数增长。

三维卷积网络

下面三种方法的时间感受野形成方式不同:

方法 时间信息进入位置 时间感受野
后期融合 最后汇合各帧特征 前面各层没有时间交互,末端一次覆盖全片段
前期融合 第一层将全部帧拼接 起始就覆盖全片段,之后不再保留时间轴
3D CNN 每层使用时空卷积或池化 随网络深度逐步扩大

早期融合把时间并入输入通道,其二维卷积核形状应写为 Cout×(3T)×Kh×KwC_{out}\times(3T)\times K_h\times K_w,只在空间方向滑动。相同的运动若出现在片段的不同时间位置,模型需要学习不同通道上的滤波器来处理,因而缺少时间平移等变性。3D 卷积核则为 Cout×Cin×Kt×Kh×KwC_{out}\times C_{in}\times K_t\times K_h\times K_w,它会沿时间和空间滑动,因此同一个滤波器可在任意时间位置检测相同的运动模式。第一层的时空卷积核本身也可看成很短的视频片段。

Sports-1M 提供了约一百万个带 487 类运动标签的 YouTube 视频。课件用它比较单帧、前期融合、后期融合和 3D CNN:3D CNN 的准确率更高,但计算代价也更大。

代表性的 C3D 几乎全部使用 3×3×33\times3\times3 卷积和 2×2×22\times2\times2 池化,只有第一层池化为 1×2×21\times2\times2。它在 Sports-1M 上预训练后常被当作视频特征提取器。

C3D 通常接收 16 帧、112×112112\times112 的短片段。连续堆叠小核能用较少参数增加非线性层数,并逐层扩大时空感受野;第一层池化不压缩时间,避免动作刚进入网络便被过早合并。它学到的仍是数秒范围内的局部时空描述子,跨越数十秒甚至数分钟的因果和事件顺序需要循环、注意力或片段聚合继续建模。

三维卷积的计算开销很高。课件给出的例子中,AlexNet 约为 0.7 GFLOP,VGG-16 约为 13.6 GFLOP,而 C3D 约为 39.5 GFLOP,是 VGG-16 的约 2.9 倍。

运动线索

人可以仅凭关节点的运动识别动作,说明“长什么样”和“怎样移动”是互补信号。直接让有限数据上的网络同时学会视觉识别与像素对应并不容易,光流先把相邻帧压缩为显式位移场。设第 tt 帧为 ItI_t,则每个像素的流为

F(x,y)=(dx,dy),It+1(x+dx,y+dy)=It(x,y).F(x,y)=(d_x,d_y),\qquad I_{t+1}(x+d_x,y+d_y)=I_t(x,y).

其中 dx,dyd_x,d_y 是水平和垂直位移,等式表达同一表面点移动后亮度近似不变。光流丢掉大量颜色和纹理,却把运动方向与速度直接暴露给分类器;当训练数据不足以让 RGB 网络自行学出对应关系时,这种人工归纳偏置尤其有价值。

对亮度恒常假设做一阶泰勒展开,可得到经典的光流约束

Ixu+Iyv+It=0,I_xu+I_yv+I_t=0,

其中 (u,v)(u,v) 是像素速度,Ix,IyI_x,I_y 表示沿两个空间方向改变像素会带来多大亮度变化,ItI_t 表示当前观察到的时间变化。一个像素只提供一个方程,无法唯一确定两个速度分量,这就是孔径问题;邻域平滑假设让相邻像素共享运动,才补足约束。光照变化、遮挡和相机运动会破坏这些假设,所以光流是一种有用但带偏差的中间表示,并不等于物体真实三维运动。

双流网络让两个 2D CNN 分工:空间流从 RGB 判断人物、物体与场景,时间流接收 2(T1)×H×W2(T-1)\times H\times W 的光流堆叠,判断局部怎样移动。两条流独立形成类别证据,再平均或用 SVM 融合;一个分支在静态线索模糊时可由另一个补足。它还允许空间流直接继承 ImageNet 预训练,时间流专门吸收运动先验,早期小型视频数据集上往往比从头训练大型 3D CNN 更有效。

空间流可以直接借用 ImageNet 预训练,时间流则需要适配光流输入;两条流既可在 logits 层融合,也可在高层特征上联合训练。显式运动输入在数据量较小时很有效,但预计算光流耗时较高,流估计误差也会传到动作分类器中。

双流视频网络

长时序建模

此前的时间卷积通常只观察约 2 到 5 秒的短片段,只能建模局部运动。长视频还包含事件之间的顺序和依赖关系,例如一个动作结束后才会出现另一个动作。

一种做法是先用 2D 或 3D CNN 把每个局部片段压缩为语义特征,再用 LSTM 等循环网络按顺序更新状态。局部编码器负责识别短动作,循环状态负责记录此前发生过什么,因而无需一次把整段高分辨率视频放入网络。分类任务可在末尾汇总为一个类别,逐帧任务则在各时刻输出;若冻结 CNN 可以显著节省显存,但编码器也无法再为长时序目标调整特征。

普通 RNN 把每帧压成向量,会丢失人物位于画面何处。循环卷积网络把状态保留为 C×H×WC\times H\times W 特征图,并用 2D 卷积代替矩阵乘:第 LL 层、时刻 tt 同时读取同层上一时刻与前一层当前时刻。时间共享权重使它可以处理可变长度序列,每递推一步又把历史向前传递,在保留空间布局的同时获得理论上无限的时间范围。

这种记忆通过一条递推链传递,远距离信息和梯度必须依次经过许多时间步,而且第 tt 步必须等待第 t1t-1 步,长序列既难优化也无法充分并行。

自注意力提供了另一种处理长时序的方式。对于 3D CNN 的特征 C×T×H×WC\times T\times H\times WNonlocal Block1×1×11\times1\times1 卷积生成查询、键和值,通道数降为 CC';将时空位置展平后,注意力权重的形状为 (THW)×(THW)(THW)\times(THW)。注意力聚合后的特征经 1×1×11\times1\times1 卷积恢复到 C×T×H×WC\times T\times H\times W,并与输入做残差连接。

自注意力让位置 ii 直接从所有位置 jj 汇总信息,其一般形式为

yi=1C(x)jf(xi,xj)g(xj),zi=Wzyi+xi.y_i=\frac{1}{\mathcal{C}(x)}\sum_j f(x_i,x_j)g(x_j), \qquad z_i=W_zy_i+x_i.

其中 f(xi,xj)f(x_i,x_j) 衡量位置 ii 应该关注 jj 的程度,g(xj)g(x_j) 提供要取回的内容,C(x)\mathcal C(x) 负责归一化,残差项 xix_i 让模块只需学习补充信息。若 ff 使用 embedded Gaussian,归一化就对应于对 QKQK^\top 做 Softmax。远隔多帧的两个位置可以一步交换信息,路径比 RNN 短得多且所有位置可并行;代价是 THWTHW 个位置两两比较,需要 O((THW)2)O((THW)^2) 的时间与显存。

这样每个时空位置都能直接读取其他时空位置的信息。Nonlocal Block 可以插入现有的 3D CNN,但同时也带来一个问题:什么样的 3D CNN 主干最适合作为视频模型。

Nonlocal 时空注意力

架构演进

I3D 从成熟的二维图像网络出发,将每个 Kh×KwK_h\times K_w 的二维卷积或池化层替换为 Kt×Kh×KwK_t\times K_h\times K_w 的三维版本。例如 Inception 模块中的 1×11\times13×33\times35×55\times5 卷积以及池化,都可以相应扩展为三维操作。

视频标注远少于图像,直接训练 3D 网络容易浪费已经学好的空间滤波器。I3D 把成熟二维网络的算子“膨胀”为三维,并将二维核沿时间复制 KtK_t 次后除以 KtK_t

若二维核为 W2DW^{2D},膨胀后的初始化可以写成

Wτ,:,:3D=1KtW2D,τ=1,,Kt.W^{3D}_{\tau,:,:}=\frac{1}{K_t}W^{2D}, \qquad \tau=1,\ldots,K_t.

除以 KtK_t 保持各时间切片权重之和不变;若每帧完全相同,三维卷积初始输出就与原二维卷积一致。初始化时模型仍像图像网络,随后再从视频数据学习真正的时间变化,避免一开始破坏预训练特征。I3D 也可保留 RGB 与光流双流,以更多计算换取外观和显式运动的互补。

完整 3D CNN 对每一帧都投入相近的通道容量,但识别物体和场景不需要如此高的时间采样率,快速手势和碰撞又会被稀疏帧遗漏。SlowFast 据此使用两条不同时间尺度的路径:Slow 路径低帧率、高通道容量,负责稳定的外观与语义;Fast 路径以更高帧率读取画面,但通道数明显更少,专门捕捉快速变化。Fast 特征通过侧向连接注入 Slow 路径,最终共同分类。它不依赖预计算光流,运动表示可以端到端学习,并把算力从重复的高分辨率外观编码转给时间采样;若任务几乎由静态场景决定,Fast 路径收益有限,而极长事件顺序仍超出两条局部卷积路径的范围。

视频 Transformer 将视频划分为时空 token,并在时间和空间上应用注意力。课件列出三条继续扩展的路线:

若每帧划分为 P×PP\times P 的图像块,token 数约为

N=THPWP.N=T\frac{H}{P}\frac{W}{P}.

每个 token 与其余 NN 个 token 比较使全局注意力复杂度达到 O(N2)O(N^2);帧数翻倍会让注意力代价约增至四倍,高分辨率的空间 patch 又进一步放大 NN。因此视频 Transformer 的差异很大程度上是在选择哪些交互值得显式计算:

  • 因子化注意力先在每帧内处理空间,再沿同一位置处理时间,把一次庞大的两两比较拆成较小子问题,但可能削弱即时的跨时空联合交互;
  • MViT 和 MViTv2 逐层池化 token,让浅层保留细节、深层只处理少量语义单元,思路类似 CNN 的多尺度金字塔;
  • VideoMAE 等掩码自编码器只编码少量可见 token,把预训练计算集中在从稀疏线索推断被遮内容上。

视频 Transformer

其中 VideoMAE 沿时间形成 tube mask,以 90% 到 95% 的高比例遮蔽时空块,只把可见 token 送入较重编码器,再由轻量解码器重建。相邻视频帧高度相似,低遮挡率会让模型通过复制邻帧像素轻易完成任务;tube mask 在相同空间位置连续遮挡,切断这种捷径,迫使模型利用物体与动作结构。高遮挡同时减少编码器 token 数,解码器预训练后又可丢弃,使大规模无标签视频预训练在计算上可行。

扩展任务

视频模型的可视化可以分别对图像输入和光流输入计算类别分数的梯度,从而观察模型偏好的外观和运动模式。对光流加入空间平滑约束,并调整惩罚强度,可以得到较慢或较快的运动模式。课件用举重和化妆等例子说明:外观、慢速运动和快速运动可能各自支持不同的动作判断。

短片分类只回答整段视频包含什么动作,时间动作定位还要面对长且未裁剪的视频,标出不同动作对应的时间区间。其思路可类比 Faster R-CNN:先生成时间上的候选片段,再对候选片段分类。时空检测进一步要求找出所有人物在空间和时间上的位置,并识别他们正在做的动作;AVA 数据集提供了这种原子动作的时空标注。

视频除了时间流,还可融合声音。视觉引导音源分离以混合音频和对应视频目标为输入,模型预测各声源在混合频谱上的掩码,再分别重建声音。co-separation 可用无标签多声源视频构造训练信号:不同视频的声音先被合成,网络再利用画面、混合重建约束和同类物体声音的一致性把它们分开。课件还给出乐器分离的设置:用约十万个无标签、多声源视频片段训练,再在新视频上分离声音。画面中的物体静音、被遮挡,或声音来自镜头外时,视觉对应关系就会失效。

在更一般的视听理解中,模型分别编码 RGB 帧块和音频频谱块,再通过融合结构共同预测。Audio-Visual Masked Autoencoder 会同时遮蔽并重建视觉与音频 token,利用跨模态冗余学习表示;若一种模态局部缺失,另一种模态可提供补充线索。课程列出的代表方向还包括 Attention Bottlenecks for Multimodal Fusion 和跨视频域的 Audio-Adaptive Activity Recognition。

视听联合建模

长视频的大部分相邻片段高度重复,全部执行高成本视觉编码相当于反复确认没有变化的画面。高效视频理解先用低分辨率帧、音频或轻量策略估计哪些时刻最有信息,再把主要预算投入这些片段,训练目标同时权衡任务损失与计算代价。MoViNets、X3D、SCSampler 和 AdaMML 分别从网络结构或采样策略削减冗余;Listen to Look 把便宜且连续的音频当作预览信号,在听到事件时才更仔细地查看画面,不过无声动作或音画不同步时可能漏检。

第一视角视频常来自相机和麦克风阵列。课程以自我视角与外部视角的对话图预测为例,说明视频理解还需要结合拍摄视角、声音和人物之间的关系。进一步接入大语言模型后,Video-LLaVA、Video-ChatGPT 和 VideoLLaMA 3 等视频语言模型遵循“采样帧或片段—视觉编码—时间聚合或 token 压缩—投影层—语言模型”的数据流。语言模型的上下文和注意力成本有限,视觉 token 必须采样或压缩;压得越多,能处理的视频越长,短动作、精确顺序和细粒度空间线索也越容易消失。帧采样与 token 预算因而直接规定了模型是在“看得久”还是“看得细”。