微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

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

首页 视频里的动作,机器怎么才能看懂

视频里的动作,机器怎么才能看懂

2026-09-16 21:46
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-09-16 21:46 • 科技行者

2014 年秋天,如果你去问计算机视觉领域的研究者一个问题:深度学习能不能看懂视频里的动作,他们大概会摇头。

这不是因为没人尝试过。卷积神经网络在静态图像识别上已经把传统方法打得没有还手之力,AlexNet 在 2012 年一战封神。但视频不一样。视频多了一个维度,时间。一张图片能看出一个人举着手,但要分辨他是在打招呼还是在扔东西,你需要看到他手臂的运动轨迹。这种"运动"到底该怎么喂给神经网络,没人想明白。

更尴尬的是,当时最好的深度学习方案在动作识别这个任务上,打不过一个笨办法。这个笨办法叫密集轨迹

> 密集轨迹:一种手工设计的视频特征提取方法,通过在视频画面里密集采样大量点,追踪它们随时间移动的轨迹,再统计轨迹周围的图像和运动信息来判断动作类型。

密集轨迹不需要学习,全靠人工设计的规则和统计直方图,却能在标准测试集上拿到 85% 以上的准确率。而当时试水的深度学习方法只能徘徊在 65% 到 70%。这中间差了将近 20 个百分点。

20 个百分点是什么概念?意味着每 5 个动作里,深度学习方法就要比手工特征多认错 1 个。对于一个号称要取代手工方法的新技术来说,这个差距足以让人怀疑它到底行不行。

这就是 Karen Simonyan 和 Andrew Zisserman 在 2014 年发表那篇论文时面对的局面。他们后来做出了 VGGNet,那个几个月后震动 ImageNet 竞赛的深度网络架构。但在写这篇动作识别论文的时候,他们还在思考一个更基础的问题:怎么让神经网络理解视频里的运动。

问题出在哪:一张图不够,那就给两条信息通道

要理解他们的解法,得先理解问题出在哪。

一段视频,说到底就是一帧一帧的图片按时间顺序排列。最直接的想法是,把这些图片直接喂给卷积神经网络,让它自己去发现规律。但这样做有个致命伤:网络看到的永远是孤立的画面,它可能能认出画面里有个人有个球,却很难感知这个人的手臂正在往哪个方向挥。

打个比方。你把一叠照片摊在桌上,闭着眼睛随机摸出一张,看一眼再摸下一张。你能看清每张照片里的内容,但很难把这些照片串成一个连贯的动作。你缺的不是画面信息,而是画面之间"变化"的信息。如果只靠单张图片硬猜运动方向,猜错的概率会非常高,因为运动本身根本没有被编码进单张图片里。

Simonyan 和 Zisserman 的思路是,既然运动信息藏在帧与帧之间的变化里,那就单独把这个变化提取出来,做成一种新的输入,交给一个专门的网络去学。

这就是这篇论文最核心的设计:双流卷积网络

> 双流卷积网络:把视频理解任务拆成两条独立的处理通道,一条专门看静态画面内容,一条专门看运动信息,两条通道各自训练一个卷积神经网络,最后把两边的判断结果融合起来。

空间流:看画面里有什么

第一条通道叫空间流,工作内容很直接:输入视频里的单帧画面(一张普通的 RGB 图片),像做图像分类一样去判断这张图里可能对应什么动作。

这条通道本质上和当时做图像分类的网络没有本质区别,因为它要解决的问题也差不多:看到球拍就往打网球那个方向猜,看到泳池就往游泳那个方向猜。很多动作光靠背景和物体线索就能猜个七七八八,你不需要看到运动过程,看到一张有秋千的照片,大概就能猜到是荡秋千。

这条通道的价值在于它能借力。因为它和图像分类任务形式一致,可以直接用 ImageNet 上预训练好的模型做初始化,相当于站在了几百万张标注图片积累出来的经验之上。这在当时是个聪明的取巧办法:视频数据集普遍偏小,从零训练容易过拟合,借用图像识别的预训练权重能省下大量功夫。

时间流:看画面在怎么变

第二条通道才是整篇论文真正的创新所在,时间流,它要处理的不是画面本身,而是运动信息。

具体做法是用光流

> 光流:描述视频中相邻两帧之间,画面上每一个点大致往哪个方向、移动了多远的一种运动场表示,通常用一个水平方向和一个垂直方向的数值场来表示。

来编码运动。简单说,光流就是给画面里的每一个像素点算一个"运动箭头",这个箭头指向它在下一帧里大致移动到了哪个方向。把这些箭头铺满整张画面,你就得到了一张记录着运动方向和幅度的图。

这个设计的关键在于,时间流网络吃的不是原始像素,是提前算好的光流场。研究者没有指望神经网络自己去学会怎么从两张相邻帧里推算运动,而是先用传统计算机视觉里成熟的光流算法把运动信息计算出来,做成一个多通道的输入图像,再交给卷积网络去从这些运动模式里学习动作分类的规律。

为什么要这么做,而不是让网络自己去学运动?答案藏在数据规模里。当时能用来训练的视频数据集非常小,最大的 UCF101 也只有一万三千多段视频。让网络从零学会"如何从像素变化里推导运动"这件事本身就需要海量数据,数据不够,网络学不出稳定的运动检测能力。而光流算法已经被研究了几十年,成熟可靠,直接把这部分工作外包给传统算法,能让神经网络专注在它擅长的事情上:从已经算好的运动模式里挖掘和动作类别相关的规律。

这就像装修房子的时候,你不需要自己去炼钢造门窗,直接买成品门窗回来装。你的精力应该花在设计和搭配上,不是从头造材料。如果非要神经网络自己从像素里学出运动感知能力,在当年那点数据量下,大概率会因为学不到足够稳定的运动模式而效果堪忧,这也部分解释了为什么早期直接把原始视频帧堆叠喂给网络的尝试效果一直不理想。

论文里还有个细节值得说一说。研究者尝试了两种光流的表示方式,一种是常规的逐帧光流,只看紧邻两帧之间的运动;另一种是轨迹叠加的光流,沿着一个点的运动轨迹去采样光流,而不是固定在画面同一个位置采样。实验发现后一种方式效果更好,因为它更贴近物体实际的运动路径,而不是简单地在画面固定网格上采样。这说明即便是"外包"给传统算法的部分,怎么组织和呈现这些运动数据,依然大有讲究。

两条流怎么拼在一起

空间流看画面内容,时间流看运动信息,两边各自训练出一个卷积网络,各自给出一个动作分类的判断。剩下的问题是,怎么把两个判断合并成一个最终结果。

论文里试了两种融合方式,一种是直接对两个网络输出的分类分数做平均,另一种是训练一个额外的分类器,把两条流的输出当作特征输入进去,学习怎么加权组合。实验结果显示,用额外分类器融合的效果略好于简单平均,但差距不大。这说明两条流各自已经学到了相对独立且互补的信息,简单的组合方式就能有效发挥出叠加的效果,不需要太复杂的融合机制。

这里有个直觉上的验证,如果两条流学到的东西高度重复,融合起来应该不会有什么提升。但实验显示,单独用空间流大约能到 73%左右的准确率,单独用时间流能到 83%左右,而两条流融合之后能冲到 88%左右。这个提升幅度说明两条流确实各自捕捉到了对方没有的信息,空间流靠场景和物体线索判断,时间流靠运动模式判断,两者互相补充,而不是互相重复。

数据说话:88% 是怎么来的

论文在两个标准数据集上做了测试,一个是 UCF101,一个是 HMDB51,两个都是当时动作识别领域的标准考场。

| 方法 | UCF101 准确率 | 说明 |

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

| 密集轨迹(当时最强手工方法) | 85.9% | 无需学习,纯手工特征 |

| 仅用空间流 | 72.6%左右 | 只看单帧画面 |

| 仅用时间流 | 83.7%左右 | 只看光流运动信息 |

| **双流网络融合** | **88.0%左右** | 空间流+时间流融合结果 |

这张表格里最扎眼的对比是,如果只用空间流,准确率只有 72.6%,比密集轨迹足足低了 13 个百分点。这说明单靠画面内容识别动作,深度学习并没有什么优势,因为静态图像里能提供的动作线索本身就有限。但一旦把时间流加进来,融合结果反超密集轨迹,达到 88% 左右。

这是深度学习第一次在视频动作识别这个具体任务上,正面击败当时最强的手工特征方法。放在 2014 年那个语境里,这句话的分量不亚于两年前 AlexNet 在图像分类上掀翻传统方法的那次胜利。区别是,这一次深度学习没有靠单一网络硬吃,而是承认了自己在处理时间维度信息上的短板,借助传统光流算法搭了一把手,才补齐了这块短板。

这篇论文之后发生了什么

双流网络提出之后,这个思路迅速成为视频动作识别领域接下来几年的主流范式,后续大量工作都是在这个框架基础上做改进。

2016 年,Feichtenhofer 等人发表的论文提出了时空融合网络,把空间流和时间流在网络内部更早的阶段就进行融合,而不是等到最后才把两个分数拼起来,这样网络可以在更深层次上学习空间信息和运动信息之间的相互关系,而不是等最后一步才简单相加。

2017 年,Carreira 和 Zisserman(依然是 Zisserman)发表的 I3D 模型把双流网络里的二维卷积扩展成三维卷积,让网络直接从原始视频帧序列里学习时空特征,同时依然保留了双流结构,把光流作为其中一条输入。这篇论文还提出了 Kinetics 大规模视频数据集,用更大的数据量去支撑这种端到端的时空学习方式,进一步把动作识别的准确率往上推了一大截。

从这个演进脉络能看出一件挺有意思的事,双流网络当年靠"借用"传统光流算法解决了数据不够的问题,但研究者心里始终清楚这只是权宜之计。等到数据集规模足够大之后,后续工作就开始尝试让网络自己从原始像素里学习运动信息,慢慢把外包出去的那部分工作收回来自己做。这是一个很典型的技术演化路径:先靠外部工具补齐短板,等条件成熟了再逐步把能力内化。

写在后面

读这篇论文时最触动我的地方,其实不是双流网络本身有多精巧,而是研究者面对"深度学习打不过手工特征"这个尴尬局面时选择的姿态。他们没有硬着头皮死磕端到端学习,而是很务实地承认,当时的数据量和网络设计还不足以让机器自己学会感知运动,那就先借用几十年积累下来的传统算法把这部分补上。

这种"知道自己哪里做不到,就先绕个弯"的思路,比起一味追求纯粹和优雅的解决方案,反而更早地把问题解决了。技术史上类似的例子不少,很多领域的突破不是靠一步到位的完美方案,而是靠先拼凑出一个能用的方案,再慢慢把拼凑的部分优化掉。

论文里没细说的一点是,光流计算本身其实相当耗费算力,这也是后来 I3D 等工作想要摆脱对光流依赖的一个现实动机。如果一个方法效果好但跑起来很慢,这个代价什么时候会被认为不值得?这个问题现在依然没有标准答案。

Q&A

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

A:这是 Simonyan 和 Zisserman 在 2014 年提出的视频动作识别方法,把任务拆成空间流和时间流两条独立的卷积网络处理通道,空间流看单帧画面内容,时间流看光流运动信息,最后融合两边的判断结果。

Q2:双流网络为什么要用光流而不是让网络自己学运动?

A:因为当时的视频数据集规模太小,网络很难从零学会感知运动这件事。光流算法已经很成熟,直接把运动信息计算好再喂给网络,能让网络专注在动作分类上,这也是双流网络当年能达到 88% 左右准确率、反超手工特征方法的关键原因。

Q3:双流网络之后有哪些重要的改进工作?

A:2016 年 Feichtenhofer 等人提出时空融合网络,让两条流更早在网络内部融合;2017 年 Carreira 和 Zisserman 提出 I3D 模型,把二维卷积扩展成三维卷积并配合大规模的 Kinetics 数据集,进一步提升了准确率。

分享至
0赞

好文章,需要你的鼓励

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