首页 > 基金> 正文

双流网络如何解决视频动作识别的十年难题

2026-09-20 22:30:44来源:科技行者

双流网络如何解决视频动作识别的十年难题,卷积,光流,双流网络,视频动作

2014年之前,如果你想让机器认出一段视频里的人在做什么,比如是在挥拳还是在鼓掌,最靠谱的方法居然不是深度学习。


(资料图片)

这句话现在看起来有点奇怪。毕竟就在两年前,2012年的AlexNet已经在图像识别上把所有传统方法打得毫无还手之力,深度学习几乎成了计算机视觉的代名词。但视频动作识别是个例外。当时最强的方法叫密集轨迹

密集轨迹:一种手工设计的特征提取方法,通过追踪视频中密集分布的点的运动轨迹来描述动作。

它靠人工设计的运动轨迹特征,在UCF-101等标准测试集上能拿到85%以上的准确率,而当时所有尝试用深度学习做这件事的团队,成绩都要差上一截。深度学习的神经网络理论上应该能自动学出比人工设计更好的特征,但现实是它连一个老式方法都打不过。这种落差持续了两年,直到2014年,Karen Simonyan和Andrew Zisserman这两位来自牛津大学的研究者,发表了一篇论文,第一次让深度学习在这个任务上反超了手工特征。

有意思的是,这两位作者几个月后又发表了另一篇更出名的论文,VGGNet,也就是后来几乎人人都用过的那个经典卷积网络结构。两篇论文出自同一个课题组,同一段时间,这不是巧合,而是说明他们当时正在系统性地琢磨"卷积网络到底该怎么用在各种视觉任务上"这个问题,动作识别只是其中一块拼图。

视频比图片难在哪

要理解这篇论文的巧妙之处,得先明白视频识别和图片识别到底差在哪里。

图片识别本质上是个静态问题:给你一张照片,判断上面有没有猫。卷积神经网络在这方面已经证明了自己,通过一层一层的滤波器提取边缘、纹理、形状这些视觉特征,最后拼出"这是猫"的判断。

但视频不一样,视频的核心信息是运动。同样一张"手举起来"的照片,可能是在打招呼,也可能是要打人,区别不在这一帧的画面里,而在于前后帧之间手是怎么动的。

如果直接把卷积网络用在视频上,一个自然的想法是把很多帧堆在一起塞进网络,让网络自己去学运动信息。研究者确实试过这个思路,但效果并不理想。原因也不难猜:网络要同时学会"识别静态物体"和"理解时间上的运动关系",这两件事需要的滤波器形态差别很大,混在一起学,谁也学不精。

这就像让一个人同时兼职厨师和会计。厨师需要的是对火候、口感的敏感度,会计需要的是对数字规则的严谨性,这两种能力如果硬塞进同一套培训流程里,大概率两头都学得半生不熟。如果不把这两件事分开处理,网络就会在"认物体"和"认动作"之间反复拉扯,学不到真正干净的运动特征。

双流网络:把问题拆成两半

Simonyan和Zisserman给出的解法叫双流卷积网络

双流卷积网络:将视频动作识别拆分成两个独立的卷积网络分支,一个处理静态画面,一个处理运动信息,最后融合两者结果的架构。

思路简单粗暴,但极其有效:既然一个网络很难同时学好"认物体"和"认动作",那就干脆分给两个网络来做。

第一个分支叫空间流,输入是视频里单独的一帧画面,就像普通的图片分类任务一样,负责识别画面里有什么东西,比如一个球拍、一片草地、一个人的轮廓。这部分网络结构几乎就是照搬当时图片识别领域已经验证过的卷积网络架构,因为这件事本来就是卷积网络的拿手好戏。

第二个分支叫时间流

光流:描述图像中每一个像素点从一帧到下一帧移动方向和速度的向量场,是一种直接编码运动信息的表示方式。

它的输入不是原始画面,而是光流场。光流这个东西本质上是给每个像素点标一个箭头,告诉你这个点接下来会往哪个方向、以多快的速度移动。把连续几帧的光流场叠在一起喂给一个卷积网络,这个网络就专门负责学"动作模式",完全不用操心画面里到底有没有草地或者球拍。

两个网络各自输出一个分类结果,最后把两个结果加权融合,得到最终判断。

这个设计的巧妙之处在于,它没有让网络自己去"发现"运动信息,而是提前用光流算法把运动信息提炼出来,直接喂给网络。这相当于省去了网络从零学习"什么是运动"这一步,让它可以直接站在一个已经被处理好的运动表示上继续深挖。

这就像教一个学生做物理实验,你可以让他从头搭建整套测量仪器,也可以直接给他一台校准好的传感器,让他专注在数据分析上。前者理论上更彻底,但耗时耗力还容易走偏;后者效率高得多,代价是你得先有一台靠谱的传感器。光流场就是这里的传感器,如果没有它,时间流网络就得从原始像素的连续变化里自己摸索运动规律,那基本上等于重新发明轮子,而且效果大概率不会好。

论文里还有个细节值得说一说。研究者对比了两种光流计算方式,一种是逐帧计算光流,叫光流堆叠,另一种是让光流的计算轨迹跟着运动物体走,叫轨迹堆叠。实验发现光流堆叠的效果反而更好,这个结果多少有点反直觉,因为轨迹堆叠听起来更"聪明",更贴合运动的物理直觉,但复杂的设计不一定带来更好的效果,简单直接的方案有时候更稳。

单独看每条流,谁更重要

双流网络的另一个价值在于,它让研究者第一次能够拆开来看,静态信息和运动信息各自对识别动作贡献了多少。

答案相当清楚:只用空间流,也就是只看画面里有什么东西,在UCF-101上的准确率是72.6%。只用时间流,也就是只看运动模式,准确率能到81%以上。两者融合之后,准确率冲到88%左右。

这组数字挺说明问题的。72.6%和88%之间差了将近15个百分点,这意味着每识别7、8个动作,只靠画面信息的网络就会比融合网络多认错一个。

单独看时间流比单独看空间流表现更好,这说明对动作识别这件事来说,运动信息本身携带的判别力,比画面里的场景和物体信息更强。这也符合直觉:如果你去猜一个人在做什么动作,光看一张静止照片,经常会猜错,但如果给你看一段连续的运动轨迹,哪怕看不清背景,大概率能猜对。

不过运动信息不是万能的。有些动作光靠运动轨迹本身也不好区分,比如"喝水"和"刷牙"这两个动作,手部动作模式可能高度相似,这时候画面里到底有没有杯子或者牙刷,就成了决定性的线索。这正是为什么两条流缺一不可,如果去掉空间流,那些依赖场景和物体线索的动作就会大量识别出错。

小数据集下的补救办法

这篇论文还面临一个现实困境:当时能用来训练视频识别网络的标注数据集,规模远远比不上ImageNet那种上百万张图片的量级。UCF-101总共才1万3千多个视频片段,这种规模想训出一个靠谱的深度网络,非常容易过拟合。

过拟合:模型在训练数据上表现很好,但换到没见过的新数据上表现急剧下降,本质是模型记住了训练数据的细节而不是学到了普遍规律。

研究者的解法是多任务学习

多任务学习:让同一个网络同时在多个相关任务的数据集上训练,共享底层特征表示,以此增加有效训练数据量。

具体来说,他们把网络的最后一层拆成两支,一支对应UCF-101的类别,另一支对应另一个动作识别数据集HMDB-51的类别,两个数据集的样本混在一起训练,共享前面所有层的参数。这样等于是把两个小数据集拼成了一个更大的训练集,虽然任务标签不完全一样,但底层的运动和视觉特征是可以共用的。

这个做法背后的逻辑,有点像一个厨师同时在两家餐厅积累经验。这两家餐厅的菜单不完全一样,但刀工、火候这些基本功是通用的,在任何一家餐厅练出来的手艺,都能带到另一家去用。如果只死磕一家餐厅的菜单,练习机会有限,手艺很容易停滞不前,但同时接触两份不同菜单的实践,反而能让基本功涨得更快。多任务学习的效果证实了这一点,加入这个策略之后,两个数据集上的准确率都有明显提升。

数据说话:双流网络到底强在哪

| 方法 | UCF-101准确率 |

| 密集轨迹(手工特征,此前最优) | 85.9% |

| 仅空间流 | 72.6% |

| 仅时间流 | 81.0% |

| **双流网络融合** | **88.0%** |

这张表格里最关键的一行是最后一行。88%这个数字第一次超过了此前统治这个领域的手工特征方法,差距虽然只有两个百分点,但意义不小,这是深度学习在视频动作识别任务上第一次真正意义上打赢手工方法。在这之前,深度学习在这个赛道上试了两年都没跑赢,这次终于翻身。

后来的故事

双流网络这个思路影响相当深远,后面几年,好几个重要工作都是在这个框架基础上继续往前推。

2016年,Christoph Feichtenhofer等人发表了时间片段网络

时间片段网络:将一个视频切成若干个时间片段,分别提取特征后再融合,用来捕捉更长时间跨度的动作信息的网络结构。

这个方法解决了双流网络的一个明显短板:原始双流网络每次只看一小段连续帧,很难捕捉一个动作从头到尾的完整过程。时间片段网络把整段视频切成几段分别处理再融合,识别准确率进一步提升到94%左右。

2017年,Joao Carreira和Andrew Zisserman(还是同一个Zisserman)发表了I3D网络

I3D网络:把二维卷积网络直接扩展成三维卷积网络,让网络能够同时在空间和时间维度上做卷积操作的架构。

这个方法某种程度上是对双流网络思路的升级,它不再依赖单独计算光流,而是用三维卷积直接从原始视频帧里学习时空特征,同时保留了双流的框架,一条流处理RGB画面,一条流处理光流,两者依然融合。I3D在Kinetics这个更大规模的数据集上预训练之后,迁移到UCF-101上能拿到98%左右的准确率。

这两个后续工作有个共同点,它们都没有彻底抛弃双流网络提出的"分离处理空间信息和时间信息"这个核心想法,而是在这个框架上做加法,加长时间跨度、加更强的时空建模能力。这也说明双流网络当年提出的这个拆分思路,抓住了视频理解问题里一个相当根本的矛盾,后来的工作解决的是"怎么拆得更细、融合得更好",而不是推翻这个拆分本身。

写在后面

重新看这篇论文,最让我意外的一点是,深度学习在这个任务上落后了整整两年,而追上来的方式不是造一个更大更深的网络,而是换了一种"喂数据"的方式。光流场这个中间表示的引入,本质上是承认了一件事:end-to-end不是万能的,有些先验知识提前算好喂给网络,比让网络自己从零学更划算。

这跟后来大模型时代很多人默认"数据量够大、模型够大就能学会一切"的信念,其实是有点矛盾的。双流网络提醒我们,在数据有限的情况下,把问题拆解、把已知的先验结构提前编码进输入表示里,可能比死磕端到端更实际。

一个没细想过的问题是:如果光流算法本身出错了怎么办?双流网络的效果本质上是绑在光流质量上的,这个依赖关系在论文里没有被充分讨论。

Q&A

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

A:双流卷积网络是2014年由Karen Simonyan和Andrew Zisserman提出的视频动作识别方法,它把识别任务拆成两个独立的卷积网络分支,一个分析单帧画面识别场景和物体,一个分析光流场识别运动模式,最后融合两者结果做出判断。

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

A:因为光流场直接编码了每个像素点的运动方向和速度,相当于把运动信息提前提炼出来喂给网络,省去了网络从原始像素变化中自己摸索运动规律的过程,这样学出来的运动特征更干净,效果也更好。

Q3:双流网络的识别准确率比之前的方法提高了多少?

A:在UCF-101数据集上,双流网络融合后的准确率达到88%,超过了此前统治该领域两年的手工特征方法密集轨迹的85.9%,这是深度学习首次在视频动作识别任务上超过手工方法。

关键词: 卷积 光流 双流网络 视频动作

责任编辑:hnmd004