微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 视频里的动作,是"看"出来的还是"动"出来的?

视频里的动作,是"看"出来的还是"动"出来的?

2026-08-20 15:13
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-08-20 15:13 科技行者

2014 年秋天,如果你去问任何一个计算机视觉领域的研究者"深度学习能不能做视频动作识别",你大概会得到一个礼貌但保留的回答。

那一年,深度学习已经在图像识别上打了一场大胜仗。ImageNet 比赛里,卷积神经网络把传统方法按在地上摩擦,几乎没人再怀疑深度学习在静态图片上的实力。可一旦把图片换成视频,事情就不对了。

当时视频动作识别领域最强的方法,不是神经网络,而是一套叫做"密集轨迹"的手工特征方法。

> 密集轨迹(Dense Trajectories)*:一种传统的视频特征提取方法,通过跟踪视频里密集分布的点随时间的运动轨迹,人工设计特征来描述动作,不依赖神经网络学习。

这套手工方法在标准数据集上能做到接近九成的准确率,而当时所有尝试用深度学习做视频动作识别的工作,效果都明显更差。用卷积网络硬啃视频帧序列,效果始终追不上那些精心设计的手工轨迹特征。

这事儿说起来有点讽刺。深度学习在图片上是碾压级的胜利,换到视频上却成了吊车尾。

问题出在哪儿?视频比图片多了一个维度,时间。一张图片里,猫的样子摆在那儿不会动,网络只需要学会识别形状、纹理、颜色。可视频里的动作,本质上是"变化",是这一帧和下一帧之间发生了什么。如果只是把视频帧一张张喂给一个原本为静态图片设计的网络,网络看到的是一堆孤立的画面,根本抓不住"动"这件事。

这就是这篇论文要解决的核心问题:怎么让神经网络真正学会看懂动作,而不是只看懂画面。

把视频拆成两条流:一条看形状,一条看运动

论文提出的方法叫双流卷积网络。

> 双流卷积网络(Two-Stream Convolutional Networks)*:把视频识别任务拆分成两个独立的卷积神经网络,一个处理静止画面,一个处理运动信息,最后把两者的判断结果融合起来。

这个设计的思路,其实来自于对人类视觉系统的一个长期观察。神经科学早就发现,人类和其他哺乳动物的视觉皮层里存在两条相对独立的通路,一条处理物体是什么、长什么样,另一条专门处理物体在怎么动。这两条通路分别叫腹侧通路和背侧通路,前者负责识别物体形态,后者负责感知运动信息。

论文作者 Karen Simonyan 和 Andrew Zisserman 显然是被这个生物学结构启发了。他们的想法是,如果人脑用两套系统分别处理"形状"和"运动",那神经网络为什么不能照着这个结构来设计?

于是双流网络诞生了。第一条流叫空间流,输入是视频里的单帧静止图像,任务是识别画面里的物体、场景、人物姿态,本质上和普通的图片分类网络没什么区别。第二条流叫时间流,输入不是图像,而是光流场。

> 光流(Optical Flow)*:描述视频中相邻两帧之间,画面上每个点是如何移动的一种表示方法,本质上是一张记录了运动方向和速度的场。

光流场把"动作"这个抽象概念变成了一张可以被卷积网络直接处理的图。想象你录了一段挥手的视频,光流场会在手臂挥动的区域画出一串箭头,指向手臂移动的方向,速度快的地方箭头长,速度慢的地方箭头短。这样一来,原本藏在帧与帧之间、稍不注意就溜走的运动信息,被显式地提取出来,变成了一个网络能直接学习的输入。

这里有一个特别关键的设计决策。研究者没有直接把原始视频序列扔给一个网络,而是先用传统的光流算法把运动信息计算出来,再把这个结果喂给网络。

这就好比你想训练一个人通过看手势猜谜语,但这个人色弱,很难从颜色变化中察觉细微差别。你有两个选择,一是硬让他盯着彩色画面慢慢琢磨,指望他自己练出辨色能力,二是提前用仪器把颜色差异转换成他能看清的黑白对比度,再让他去判断。第二种方式看起来"作弊",用了额外的预处理工具,但效果立竿见影,因为你没有指望网络从零开始,从像素的细微变化里,自己反推出运动这个概念,而是直接把运动信息喂到它嘴边。如果不这么做,网络要同时学会"什么是运动"和"这个运动是什么动作"两件事,负担太重,效果自然打折扣。

论文的实验也证实了这一点。如果只用空间流,也就是只看静止画面来判断动作,在 UCF-101 数据集上的准确率是 72.6%。而加上时间流之后,融合模型的准确率跳到了 88.0%。

> UCF-101*:一个包含 101 类人类动作的视频数据集,是当时评测动作识别算法的标准基准之一。

这中间差了 15.4 个百分点。放在实际场景里理解一下这个差距,如果你用只看画面的方法去识别 100 个动作视频,会有大约 27 个判断错误,而加上运动信息之后,错误数量降到 12 个左右,少犯了 15 次错。这说明一件事,单靠画面里的静态线索,比如背景、场景、人物的姿态,是远远不够分辨很多动作的。想象两个视频,一个人站在游泳池边,另一个人在游泳池里游泳,画面构图可能高度相似,但一个是静止的,一个是运动的动作,只有看运动信息才能分得清。

时间流网络的输入设计:堆叠光流

时间流具体怎么处理光流信息,这里面还有一层设计考量。

单独一帧的光流场只能反映相邻两帧之间的瞬时运动,信息量有限。研究者的做法是把连续多帧的光流场堆叠在一起,作为时间流网络的输入。

> 堆叠光流(Stacking Optical Flow)*:把连续若干帧计算出的光流场按顺序叠放在一起,形成一个多通道的输入,使网络能感知一段时间窗口内的运动变化,而不只是某一瞬间的运动。

论文里实验了不同的堆叠帧数,发现堆叠 10 帧左右的光流效果最好。这个数字不是随便定的,它对应大约几分之一秒到半秒左右的时间窗口,正好覆盖了很多动作的一个完整周期或者关键片段。堆叠帧数太少,网络看到的运动信息太短促,抓不住动作的走势,堆叠太多,又会引入过多冗余和噪声,让网络难以聚焦。

这就像你想通过几张连续快照判断一个人是在挥手还是在挠头。只看一张快照,两个动作可能长得一模一样,看十张连续快照,动作的完整轨迹就清楚了,可如果给你两百张,信息反而变得杂乱,你得花更多精力去筛选哪些是关键帧。堆叠帧数的选择,本质上是在信息量和噪声之间找一个平衡点。

论文还比较了两种光流的表示方式,一种是光流场本身的方向分量堆叠,另一种是把光流按运动方向拆成正负两个方向的通道分别处理。实验显示,把方向拆开处理的方式效果更好一些,这说明网络在学习运动模式时,对运动方向的区分是有意义的信息,而不是可以随意压缩掉的细节。

为什么两条流要分开训练,而不是从一开始就融合

另一个值得琢磨的设计选择是,空间流和时间流是两个完全独立的卷积网络,各自训练,最后只在结果层面做融合,而不是在网络内部的某一层就把两种信息混在一起处理。

这个选择背后有现实的考量。空间流处理的是静止画面,训练数据基本等于普通的图片分类任务,可以借用大规模图片数据集来预训练,效果很好。而时间流处理的是光流场,这是一种和自然图像统计特性完全不同的输入,自然图像有丰富的颜色、纹理,光流场基本是稀疏的运动向量场,这两种数据分布差异很大,如果强行把它们塞进同一个网络的早期层一起处理,网络很难同时兼顾两种截然不同的模式。

另外,由于视频动作数据集的规模在当时远小于图片分类数据集,直接训练一个大型融合网络很容易过拟合。分开训练两个相对独立的网络,再做后期融合,是在数据量有限的条件下更现实的选择。

融合方式上,论文尝试了几种,包括简单平均两个网络的预测分数,以及用一个额外的支持向量机把两条流的输出结果作为特征再做一次分类。后一种融合方式效果稍好,最终在 UCF-101 上达到 88.0% 的准确率,在 HMDB-51 数据集上达到 59.4%。

> HMDB-51*:另一个视频动作识别的标准数据集,包含 51 类动作,视频质量和背景变化比 UCF-101 更复杂,是当时评测算法鲁棒性的重要基准。

拿这个成绩去对比同期最强的手工特征方法,密集轨迹方法在 UCF-101 上大约是 87.9%。这意味着双流网络第一次让深度学习方法在这个任务上追平甚至略微超过了手工特征方法。这句话放在 2014 年的语境下分量很重,因为在此之前,几乎所有尝试用深度学习做视频动作识别的工作,都明显落后于手工特征。这是深度学习在这个具体任务上第一次不再输给传统方法。

空间流网络的架构选择,一个悄悄的巧合

论文里空间流网络用的架构,是一个和当时流行的图片分类网络结构相似的卷积网络。这里有个值得一提的背景,Simonyan 正是几个月后发表 VGGNet 的那个研究团队的成员,Zisserman 也是同一个实验室的负责人。双流网络这篇论文和 VGGNet 论文几乎是同期完成的工作,两者出自同一个团队,这也从侧面说明,这个团队当时对卷积网络架构设计的探索,是在图片识别和视频识别两条线上同时推进的。

数据表格:关键实验结果一览

| 方法 | UCF-101 准确率 | HMDB-51 准确率 |

|---|---|---|

| 只用空间流 | 72.6% | 40.5% |

| 只用时间流 | 81.2% | 54.6% |

| 双流网络(平均融合) | 86.9% | 58.0% |

| **双流网络(SVM 融合)** | **88.0%** | **59.4%** |

| 同期最强手工特征方法(密集轨迹) | 约 87.9% | 约 57.2% |

这张表格里最能说明问题的一行对比是只用空间流和只用时间流。单独的时间流,也就是只看运动信息,准确率反而比只看画面的空间流更高,81.2% 对 72.6%。这说明对于很多动作类别来说,运动模式本身比画面内容更具区分度,而两者融合之后又比任何单独一条流表现更好,说明两种信息确实是互补的,不是谁替代谁的关系。

这篇论文之后发生了什么

双流网络提出之后,成为了视频动作识别领域接下来几年里最重要的基础框架之一,后续大量工作都在这个骨架上做扩展。

2016 年,Feichtenhofer 等人发表的论文对双流网络的融合方式做了改进,提出在网络的中间层就进行跨流的信息交互,而不是等到最后结果层才融合,这种更早、更深层次的融合让网络能捕捉空间和时间信息之间更细粒度的关联,进一步提升了准确率。

同样是在这个方向上,2016 年 Wang 等人提出的时序分段网络,针对双流网络处理长视频时的局限做了改进。原始双流网络在处理时间流时依赖的是短时间窗口内堆叠的光流,对于时间跨度较长的复杂动作,这种局部时间窗口的建模能力有限。时序分段网络的做法是把整段视频切成多个时间片段,从每个片段里稀疏采样再做联合建模,从而让网络能够感知整段视频的时间结构,而不只是局部片段,这个思路后来也成为视频理解领域的一个常用范式。

写在后面

读这篇论文时最触动我的一点是,光流预处理这一步看起来像是绕了个远路,先用传统算法算出运动信息,再喂给网络,而不是让网络自己从原始像素里学会感知运动。这和后来深度学习的一个主流叙事,端到端学习、让网络自己发现一切特征,是有点矛盾的。

但双流网络的成功恰恰说明,在数据和算力有限的阶段,人为把问题拆解、把已知的先验知识显式注入系统,反而比死磕端到端更划算。这让我想到,端到端学习的胜利不是必然的,而是建立在数据规模足够大之后才逐渐显现优势的。在数据不够多的年代,聪明地借用人类已有的知识,往往比硬算更有效。

后续基于 3D 卷积和 Transformer 的视频模型逐渐走向了更端到端的方向,某种程度上是数据规模跟上之后的自然结果。双流网络更像是那个中间阶段的一个聪明妥协,值得记住它当年解决问题的方式,而不只是记住它最终被更强的方法超越。

Q&A

Q1:双流卷积网络是什么?

A:双流卷积网络是 2014 年提出的一种视频动作识别方法,把视频拆成空间流和时间流两个独立的卷积神经网络分别处理,空间流看静止画面识别物体和场景,时间流看光流场感知运动信息,最后融合两者的判断结果。

Q2:双流网络为什么要用光流而不是直接输入原始视频帧?

A:因为原始视频帧序列很难让网络自己学会捕捉运动信息,光流场提前用传统算法把每一帧之间的运动方向和速度计算出来,相当于把运动信息显式地提取出来喂给网络,大大降低了网络的学习难度,实验显示加入时间流后准确率从 72.6% 提升到 88.0%。

Q3:双流网络的效果比传统手工特征方法好吗?

A:双流网络在 UCF-101 数据集上达到 88.0% 的准确率,略微超过了同期最强的手工特征方法密集轨迹的 87.9%,这是深度学习方法第一次在视频动作识别任务上追平甚至超越手工特征方法。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-