为啥说"大的"?因为视频数据太特么大了。一张 224x224 的图算起来轻松,一段 10 秒的 1080p 视频每秒 30 帧,那就是 300 张图,像素量是单张图的 300 倍。处理视频,本质上是在处理一个三维信号——高度、宽度、时间。这个额外的"时间维度"既是视频的宝藏(包含了丰富的运动信息),也是算力的噩梦。
视频理解最早期的思路特别朴素:把视频当成一堆独立的图像,每帧分别过 2D 分类器,然后对结果做投票或者平均。这就是Frame-based 视频分类,简单、有 baselines,但完全忽略了帧与帧之间的时序关系。你要是做一个"跑步"和"走路"的分类,单帧看有时候人都是同一个姿势,根本分不出来,必须靠前后帧的运动速度来判断。
所以大家开始做3D 卷积。核心就是把 2D 卷积的 kernel 扩展一个维度,变成 3D,同时对空间和时间进行卷积。C3D是早期代表作,用 3x3x3 的卷积核,同时提取空间和时间特征,在 UCF101 上比 2D 方法有了明显提升。但 C3D 的参数量巨大,计算量更是天文数字——一个 3D 卷积层的 FLOPs 是等效 2D 卷积层的 3 倍以上,而且随着网络加深,这个差距呈指数级放大。你在 ResNet-50 上做 3D 卷积的版本,参数量轻松突破 1 亿,训练一个模型需要几百块 GPU 跑好几个星期。
后来I3D(Inflated 3D ConvNet)提出了一种巧妙的"膨胀"方法——把在 ImageNet 上预训练好的 2D 卷积核沿着时间维度复制一份并做平均,变成 3D 核,然后在大规模视频数据集(Kinetics)上 fine-tune。这样既利用了 ImageNet 的海量预训练知识,又适应了视频的时序特性。I3D 在当时的动作识别任务上直接拉开第二名一大截,成了那个时代的"标准 backbone"。
但 3D 卷积依然太慢了。于是TSN(Temporal Segment Networks)和TSM(Temporal Shift Module)这类方法试图走"伪 3D"的路线——用 2D 卷积处理空间,然后用 shift 操作沿着时间维度做特征置换,模拟时序上的信息流动。TSM 的精妙之处在于它不需要额外的参数,只是把特征图在通道维度上做一次移位(shift),就能让网络感知到前后帧的信息。这个操作的 FLOPs 增加几乎为零,但效果接近 I3D,在当时简直是神来之笔。
再后来SlowFast网络出来了,FAIR 做的,把视频处理分成了两条路:一条"慢路径"以低帧率捕捉空间语义,另一条"快路径"以高帧率捕捉运动变化,两者再融合。这设计灵感来源于生物视觉的"P 通路"和"M 通路",一个管色彩纹理、一个管运动感知。SlowFast 在 Kinetics-400 上达到了很高的精度,推理速度比 I3D 快,架构设计也很优雅,算得上是 3D 卷积时代的巅峰之作。
2021 年之后,Video Transformer开始取代 3D CNN 成为视频理解的主流。TimeSformer用自注意力机制分别在空间和时间两个维度上做 attention,把 O(T²H²W²) 的复杂度假解耦成了 O(T² + H²W²),让 Transformer 处理视频变得可行。VideoMAE则用掩码自编码器的思路,只对可见的 patch 做编码、对掩掉的 patch 做重建,用极少的计算量学到了很好的视频表示,在 Kinetics 上性能碾压了很多全监督的方法。ViViT也是类似的路子,把时空注意力拆解,在计算效率和精度之间找平衡。
但是(这个但是太重要了),视频理解到现在也没有一个真正的"杀手级应用"。动作识别这玩意儿,实验室里刷 Kinetics 刷得飞起,到了真实安防场景,一个"摔倒检测"的精度惨不忍睹——因为真实场景里的"摔倒"姿态千奇百怪,而且一半以上被遮挡了。短视频推荐倒是用到了视频理解,但人家用的是很轻量化的模型,只做粗粒度的场景和动作类别判断,根本不需要 SOTA 的精度。自动驾驶里的行为预测确实需要视频理解,但人家的 sensor fusion pipeline 里视频只是其中一路信号,还要融合 LiDAR、雷达、高精地图,单独的视频模型只需要在嵌入式设备上跑得非常快、非常轻。
视频理解的商业化困境在于:它解决的任务,要么用 2D 图像就能解决个七七八八,要么需要极致的精度但算力不允许。卡在一个高不成低不就的位置上。
还有一个致命的问题——视频标注成本比图像高一个数量级。图像标注一张几十秒,视频标注一个动作需要标注员看完整段视频,确定动作的起止帧、标注关键帧、做时序定位。ActivityNet 的标注单价是图像标注的 5-10 倍。所以视频领域的数据集规模远小于图像领域——Kinetics-400 也就 30 万段视频,而 ImageNet 有 1400 万张图。这个数据量差距直接限制了视频模型的发展潜力。
另一个被严重忽略的问题是视频帧率的标准化。你训练的时候用的是 30 FPS 的 Kinetics,部署的时候摄像头可能是 60 FPS 的工业相机,也可能是 10 FPS 的监控设备。不同帧率下同一个动作的运动速度快慢完全不同,模型直接迁移过去就崩了。所以现在很多工作开始做帧率自适应的训练,或者干脆用光流作为运动信息的替代,但光流算起来又贵得要死,简直是拆东墙补西墙。
视频理解的未来方向,我个人觉得在以下几个方面:
第一,高效的时空 Token 化。不要把所有帧的所有 patch 都塞进 Transformer,你得智能地选择"哪些帧重要、哪些 patch 重要",用稀疏注意力和可变形采样来降低计算量。第二,自监督预训练。视频里有天然的时间顺序和空间对应关系,不需要标签就能做很多自监督任务(预测被遮挡的帧、判断帧序是否被打乱、做时空对比学习)。VideoMAE 已经证明了这条路走得通,而且潜力还远未挖尽。第三,和语言模型的融合。给视频配文字描述,做 Video-Text 对齐,这样可以用语言的先验来辅助视频理解,这也是当下多模态大模型热潮的一部分。
但说句实在话——如果你现在要入视觉识别这个行当,我劝你别在视频理解上花太多精力,除非你的导师或者公司在这条路上有明确的资源和数据积累。因为视频理解的投入产出比太低了——你要投入的算力、标注成本、工程复杂度都比 2D 任务高一个量级,但带来的商业价值在大多数场景下并不匹配。它是个"富人游戏",只有 Google、Meta、字节跳动这种级别的公司玩得起。
六个方向全聊完了。图像分类、目标检测、实例分割、ReID、视觉跟踪、视频理解,每个都是一本书的体量,我这六篇文章最多只能算是"随性版的入门导读 + 实战吐槽"。想真的入行?别光看我写的,去跑代码、踩坑、看真实场景的脏数据,那些才是真正让你成长的东西。