Token导航 LogoToken导航TokenDH.com

2014年,卷积网络在视频识别上第一次打败了手工特征

更新时间 2026-09-17来源 科技行者正文 5636字阅读约 18分钟

2014年之前,如果你去问一个做视频动作识别的研究者:深度学习能不能用在视频上,大概会得到一个礧尬的笑。

不是因为没人试过。是因为试了,效果不好。

当时最强的视频识别方法,用的是一种叫做密集轨迹的手工特征。

**密集轨迹**:一种手工设计的视频特征提取方法,通过追踪视频画面中密集分布的点在时间上的运动轨迹,并统计轨迹周围的图像和运动信息来描述动作。

在权威的UCF-101动作识别数据集上,这类手工方法能做到接近88%的准确率。而当时人们尝试直接把图像分类用的卷积网络搬到视频上,效果只有可怜的三四十个百分点,差了一大截。

这就好比一个刚学会下棋规则的新手,直接去挑战下了三十年棋的老棋手。规则一样,但经验和直觉完全不在一个量级上。深度学习在图片识别上已经把传统方法打得溃不成军,AlexNet 2012年的成功让整个学界沸腾,可这套办法搬到视频上却完全失灵。这中间到底发生了什么?

这就是Karen Simonyan和Andrew Zisserman在2014年那篇论文要回答的问题。论文题目叫《Two-Stream Convolutional Networks for Action Recognition in Videos》,中文可以译作《用于视频动作识别的双流卷积网络》。这篇论文最后做到了什么程度?在UCF-101上把深度学习的准确率从三四十分直接拉到88%,第一次追平甚至超过了手工特征的方法。

这是深度学习在视频动作识别领域第一次真正打赢手工特征。在2014年,这句话的分量不亚于两年前AlexNet在图像识别上引发的震动。

顺便说一句,Simonyan和Zisserman当时都在牛津大学同一个视觉几何组(VGG组),他们几个月后又合作发表了VGGNet,那篇论文后来成为深度学习历史上最常被引用的图像分类网络之一。这两篇论文几乎是同期完成的工作,一篇解决静态图片,一篇解决动态视频,出自同一个团队的手。

问题到底难在哪:视频比图片多了什么

要理解这篇论文的巧妙之处,得先搞清楚为什么直接把图像识别的网络搬到视频上会失败。

图片识别网络学的是什么?是空间结构。一张猫的照片,网络学会识别毛发的纹理、耳朵的轮廓、眼睛的位置,这些都是空间信息,在一帧画面里就能看全。

但动作是什么?动作是随时间展开的东西。你看一张照片,静止的一帧,很难判断这个人是在挥手还是在挡阳光,是在跳跃还是刚摔倒。真正定义"动作"这个概念的,是画面随时间的变化,是运动本身。

早期直接把2D卷积网络套在视频帧序列上,或者简单地把很多帧堆叠起来输入网络,本质上还是在让网络学空间纹理,网络并没有被专门设计去捕捉运动信息。这就像让一个只会看照片的人去评价一段舞蹈,他能说出舞者穿了什么衣服、站在什么背景前,但很难判断舞蹈动作本身是流畅还是笨拙的,因为流畅和笨拙这些信息藏在帧与帧之间的变化里,不在单张照片里。

那怎么才能让网络"看到"运动呢?

核心思路:把运动信息直接喂给网络

Simonyan和Zisserman想到的办法,说出来其实很朴素:既然运动信息藏在帧与帧的变化里,那就别让网络自己去猜这个变化,直接算出来,喂给它就行。

这个"算出来的运动",用的是一种叫光流的技术。

**光流**:描述视频中每个像素点从一帧到下一帧移动方向和速度的向量场,可以理解为给画面里每个点都画一个箭头,箭头指向它接下来会往哪儿动、动多快。

于是论文提出了一个叫双流网络的架构,这也是整篇论文最核心的设计。

**双流网络**:由两个独立的卷积神经网络组成,一个专门处理原始的视频帧画面(叫空间流),另一个专门处理算出来的光流场(叫时间流),最后把两边的判断结果融合起来做最终决策。

空间流网络吃的输入就是普通的RGB图片,网络架构和当时做图像分类的网络几乎一样,学的是画面里的物体、场景、人物姿态这些静态信息。比如看到游泳池,就能猜到这个人可能在游泳;看到球拍,就能猜到可能在打网球。这部分信息其实很多时候光靠一张静止画面就能提供不少线索。

时间流网络吃的输入不是图片,而是提前算好的光流场,通常是连续十帧左右计算出来的运动向量堆叠在一起。这部分网络专门学习运动模式,比如挥拍的弧线轨迹、走路和跑步在腿部摆动频率上的区别。

这两路网络各自独立训练,各自输出一个针对动作类别的预测分数,最后用一个简单的加权平均把两边的分数融合起来,得到最终结果。

为什么要分成两路,而不是想办法用一个网络同时学空间和时间信息?

原因其实很实际。空间信息和运动信息在统计规律上差别很大,一个是关于物体外观和场景语义的,一个是关于像素位移的几何量,硬塞进同一个网络里学,网络很难兼顾好两头,尤其是在当时训练数据还很有限的情况下(UCF-101一共才101类动作,几千个视频片段,对深度网络来说数据量并不算大)。让两个网络各自专注一件事,学习目标更清晰,也更容易训练好。

这有点像团队分工。如果让一个人同时负责设计产品外观和调试后台算法,这个人可能两头都做得不够精。但如果拆成两个人,一个专门抠界面细节,一个专门抠性能优化,各自做深做透,最后拼在一起往往效果更好。如果不拆分,让一个网络同时扛两种完全不同性质的信息,在当时数据量有限、算力有限的条件下,网络很可能顾此失彼,这也正是之前直接套用图像网络到视频上会失败的原因之一。

时间流网络:光流怎么被喂进卷积网络

时间流这一部分的设计还有些值得展开的细节。

首先,光流不是算一帧和下一帧之间的一个箭头场就完了,论文里是把连续多帧(论文实验里用到10帧)的光流场堆叠在一起作为输入,这样网络能看到的不是某一个瞬间的运动,而是一小段时间窗口内运动的演变过程。这就好比你要判断一个人是在挥手还是仅仅是手抖了一下,看一瞬间的动作很难分辨,但看连续十几帧,趋势就很清楚了。

论文还测试了两种光流表示方式。一种是常规的光流,直接描述像素怎么移动;另一种叫"轨迹堆叠光流",是沿着运动轨迹去采样光流值,而不是简单地在固定像素位置堆叠。实验发现两种方式效果相差不大,说明网络对这种细节上的差异并不敏感,只要运动信息被合理编码进输入里,网络就能学出来。

另外论文还处理了一个实际问题:相机本身的运动。如果拍摄的人在移动镜头,那么整个画面里所有像素都会有一个整体的位移,这个位移和被拍摄对象真正的动作没关系,是噪声。论文里做了处理,减去相机运动带来的平均位移,让光流更纯粹地反映对象自身的运动。这一步听起来细枝末节,但对准确率有实际帮助,说明魔鬼真的在细节里。

数据不够怎么办:借用图像识别的数据

这篇论文还有一个不那么起眼但很关键的贡献,就是怎么解决训练数据不足的问题。

当时的视频动作数据集都很小,UCF-101一共只有大约13000个视频片段。相比图像识别领域动辄百万张图片的ImageNet,这个规模差了两个数量级。深度网络是数据饥渴的模型,数据不够,很容易过拟合,学出来的东西泛化能力差。

**过拟合**:模型在训练数据上表现很好,但因为记住了太多训练集特有的细节而没有学到普遍规律,导致在没见过的新数据上表现变差。

论文对空间流网络采取的策略是,用在ImageNet上预训练好的网络权重做初始化,然后在动作识别数据集上做微调。这个思路现在看是深度学习的标准操作,但在2014年,把图像分类学到的视觉特征直接迁移到视频动作识别任务上,还是一个相对新鲜且被验证有效的做法。

对于时间流网络,因为光流数据和图像数据长得完全不一样,没法直接借用ImageNet的预训练权重,论文就用了多个数据集联合训练的办法,把不同来源的动作视频数据放在一起训练,尽量把能用的数据都用上,缓解数据不足的问题。

这就像学一门新语言。如果你已经精通一门语言,学第二门语言时会天然借助第一门语言里学到的语法直觉和逻辑框架,起步会快很多。但如果这门新语言用的是完全不同的书写系统,比如从字母语言换成象形文字,你之前学的拼读经验就用不上了,只能靠尽量多接触新语言本身的素材来慢慢积累语感。空间流是能借力的那门语言,时间流是几乎要从头学的那门,论文分别用了不同的策略去应对,这个区分本身也说明作者对问题的理解相当细致。

实验结果:拆开看每一块的贡献

论文在三个数据集上做了实验:UCF-101、HMDB-51,还有一个更早的动作识别数据集。核心结果集中在UCF-101上。

下面这张表格是这篇论文最关键的数字,展示了不同配置下的准确率对比:

| 方法配置 | UCF-101准确率 |

|---|---|

| 仅空间流网络 | 72.6% |

| 仅时间流网络 | 81.0% |

| 双流网络融合(加权平均) | **88.0%** |

| 当时最好的手工特征方法 | 87.9% |

这组数字信息量很大,值得一条一条说。

先看仅用空间流会怎样。准确率是72.6%,比双流融合掉了15个百分点还多。这说明单靠画面里的物体和场景信息,确实能猜出不少动作类别,但天花板很明显,因为很多动作光靠背景和物体是分不出来的,比如各种不同的舞蹈动作,背景可能都差不多,物体也可能都没有,区分点全在动作本身的运动模式上。

再看仅用时间流。准确率反而比空间流更高,达到81.0%。这个结果在当时其实有点反直觉,因为传统认知里运动信息一般被认为是辅助性的,主要信息应该来自画面内容。但实验证明,对于"动作识别"这个具体任务,运动本身包含的判别信息比静态画面更丰富,这也算是从数据角度佐证了这篇论文最初的假设:想做好动作识别,必须让网络专门去看运动,而不是指望它从静态画面里隐式地猜出运动。

最后看两者融合的结果,88.0%,比单独任何一路都高出至少7个百分点,超过了空间流加时间流各自的表现之和的一部分,说明两路网络学到的信息确实有互补性,不是简单的重复。空间流补充了时间流缺失的场景语义信息,时间流补充了空间流缺失的运动动态信息,两者拼起来才是完整的画面。

而这个88.0%,终于追平并小幅超过了当时最好的手工特征方法(87.9%)。差距看起来只有0.1个百分点,似乎不起眼,但意义完全不同:这是深度学习方法第一次不需要依赖任何手工设计的特征工程,单纯靠端到端学习就打平了几十年积累下来的手工方法。这个"平"来得比看起来重要得多。

如果没有双流设计,只靠深度学习里当时常见的单流网络硬啃视频,前面提到过,准确率只有三四十分,离88分差了一倍还多。双流网络之所以重要,不是因为它多用了一路网络这么简单,而是因为它精准地识别出了视频这种数据形式里最容易被忽略、又最关键的一部分信息:运动本身。

这篇论文之后:谁接着往下走

双流网络这个思路提出之后,很快被后续研究大量借鉴和扩展。

2016年,Feichtenhofer等人发表了一篇论文,把双流网络里两路特征融合的位置从最后的分类层提前到了网络中间层,让空间和时间信息能在更早的阶段就互相交流,进一步提升了准确率。

2017年,DeepMind团队提出了一个叫I3D的网络(论文题目是《Quo Vadis, Action Recognition?》),把双流网络里的2D卷积换成了3D卷积,让网络能直接在时间维度上做卷积操作,同时提出了一个更大规模的动作识别数据集Kinetics,把整个领域的数据规模从万级别推到了几十万级别。I3D基本延续了双流的框架,只是把每一路网络本身升级成了3D卷积网络,在Kinetics上预训练之后再迁移到别的小数据集,效果大幅超过了2014年双流网络的表现。

这两篇后续工作分别从"怎么融合两路信息"和"怎么让每一路网络本身更强"这两个方向,把双流网络的思路继续往前推。可以说双流网络定义了一个框架,后来者大多是在这个框架内做优化,直到后来Transformer架构在视频理解领域兴起,才出现了不完全依赖双流思路的新范式。

写在后面

读这篇论文时最让我意外的一点是,时间流单独跑出来的准确率(81.0%)居然比空间流(72.6%)还高出接近9个百分点。这跟我们直觉里"看画面内容更重要"的预设是反的。

这说明一件事:人类在判断"这是什么动作"时,可能高度依赖动作本身的运动轨迹,而不是场景背景。想想看,蒙住一个人的眼睛只给他一段动作的骨架运动轨迹,他可能真的能猜出这是在打网球还是在游泳,即使完全看不到球拍或水池。这个实验结果某种程度上是给"动作的本质是运动模式而非场景语义"这句话提供了一个数据证据。

论文里另一个没有被过多强调,但我觉得值得单独拿出来说的细节是处理相机自身运动的那一步。很多论文会忽略这种"看起来是工程细节"的处理,但恰恰是这类细节决定了一个方法能不能在真实场景里落地,而不只是在干净的实验数据集上好看。

如果双流网络里两路信息本可以融合得更早、更深,那当年为什么没有直接这么做?可能答案很朴素:算力和数据都不允许更复杂的联合训练。这提醒我一件事,很多"经典"设计未必是当时能想到的最优解,而是当时条件下能落地的最优解。

Q&A

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

A:双流卷积网络是2014年由Simonyan和Zisserman提出的视频动作识别方法,由两个独立的卷积神经网络组成,一个处理原始视频画面(空间流),一个处理光流场(时间流),最后融合两边结果做出判断,在UCF-101数据集上准确率达到88%,首次让深度学习方法追平当时最好的手工特征方法。

Q2:为什么要把空间信息和运动信息分成两个网络处理?

A:因为空间信息(物体、场景)和运动信息(动作轨迹)在统计规律上差异很大,合并进一个网络学习会让网络难以兼顾,尤其在当时训练数据有限的情况下。分成两路各自训练,学习目标更清晰,效果也更好,实验显示融合后准确率比单独任何一路高出至少7个百分点。

Q3:光流在这个方法里起什么作用?

A:光流是描述画面中每个像素点运动方向和速度的向量场,相当于给运动信息拍了一张"专属快照"。论文把连续多帧光流堆叠起来输入时间流网络,让网络专门学习动作的运动模式,实验显示仅用光流网络的准确率(81.0%)甚至比仅用原始画面的空间流网络(72.6%)更高。

文章标签AI资讯
资讯来源:由AI资讯编辑整理自互联网公开内容,版权归原作者所有,未经许可,不得转载。

继续浏览更多资讯

返回资讯目录

相关资讯

更多