微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

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

首页 2014年,两条流打败了所有手工特征

2014年,两条流打败了所有手工特征

2026-08-26 11:40
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-08-26 11:40 科技行者

2014年之前,如果你想让机器识别视频里的人在做什么动作,比如判断这是在打网球还是在游泳,最靠谱的方法不是深度学习。

这句话现在听起来有点奇怪。毕竟AlexNet已经在2012年用深度学习刷爆了图像识别的记录,整个学术圈都在往神经网络这个方向猛冲。可是到了视频动作识别这个领域,深度学习却栽了跟头,连续两年打不过一个叫"密集轨迹"的手工特征方法。

这不是深度学习不努力,是视频这个东西太难啃了。

视频比图片难在哪

图片识别只要搞懂一张静态画面里有什么东西就行,猫是猫,狗是狗。视频不一样,视频的核心信息是动作,而动作这个东西天生就是跨越时间的。

> 动作识别:让计算机判断视频片段里的人正在做什么动作,比如跑步、拍球、弹钢琴。

当时最强的手工特征方法叫密集轨迹,它的思路是在视频里追踪成千上万个小点的运动轨迹,然后统计这些轨迹的形状、方向、速度这些信息,拼出一套特征描述子交给分类器。这套方法在标准测试集UCF-101上能拿到87%左右的准确率,而当时所有尝试用深度学习硬啃这个问题的方法,包括直接把3D卷积网络怼上去,准确率都卡在65%到70%之间,足足差了近20个百分点。

20个百分点的差距,意味着什么?意味着每5个动作视频里,深度学习方法就要比手工方法多认错一个。这在学术圈里几乎等于宣判深度学习在这个任务上不适用。

问题出在哪儿?研究者们后来意识到,深度网络在视频上失败,不是因为网络不够深或者数据不够多,是因为大家一直在让网络自己从原始像素里"悟出"运动的规律,而这件事对网络来说太难了。一段视频里,背景在变、光线在变、镜头可能还在晃,网络很难把真正代表动作本质的运动信息从这堆噪声里挑出来。

这时候,两位来自牛津大学的研究者,Karen Simonyan和Andrew Zisserman,想到了一个听起来简单到有点"作弊"的办法。

两条腿走路:空间流和时间流

他们的核心想法是,既然网络自己学不好运动信息,那就别让它从零开始学,直接把运动信息喂给它。

具体来说,他们把一个视频拆成两路完全独立的信号来处理。

第一路叫空间流,处理的是普通的RGB图像帧,也就是视频里的某一帧画面本身。这一路负责认出画面里的场景和物体,比如看到网球场、球拍,就能猜到这大概是打网球。

第二路叫时间流,处理的不是图像,而是光流场。

> 光流:描述视频中相邻两帧之间每个像素点是如何移动的一种信号,本质上是一张记录了运动方向和速度的图。

光流场直接把"什么在动、往哪个方向动、动得多快"这些信息用图像的形式表达出来。网络不需要再费劲从像素变化里反推运动规律,运动信息已经被预先计算好,明明白白摆在那里了。

这两路分别用独立的卷积神经网络处理,最后把两边的判断结果做个融合,谁的预测更有信心就多听谁的。

这个设计叫做双流网络。

> 双流网络:由两个独立的卷积神经网络组成的架构,一个处理静态画面识别场景和物体,一个处理光流识别运动模式,最后融合两者的判断结果。

如果只用空间流会怎样?论文里给出了答案,单独用空间流网络,在UCF-101上的准确率是72.6%。这个数字几乎踩在之前深度学习方法失败的那条线上,说明只看画面不看动作,网络确实抓不住动作识别的核心。而把两条流融合起来之后,准确率跳到了88%,一举超过了统治这个领域两年的密集轨迹方法。

这就好像你想判断一个人是在跳舞还是在摔倒,只看一张照片很可能判断错,因为跳舞的某个瞬间姿势和摔倒的瞬间姿势可能长得很像。但如果你还知道他的四肢正在往哪个方向、以多快的速度移动,答案立刻就清楚了。如果不给这份运动信息,网络就只能死磕单张画面里那些容易混淆的姿态,识别率自然上不去。

为什么不干脆把两条流塞进一个网络

这里有一个自然会冒出来的疑问,既然运动信息这么重要,为什么不设计一个网络同时接收图像和光流,一次性学完?

作者们确实考虑过这个问题,但他们选择了分开训练两个独立网络再融合的方案,原因和数据量有关。

当时能用于动作识别的标注视频数据集规模都不大,UCF-101和另一个数据集HMDB-51加起来也就一万多个视频片段。这个规模对于训练一个从头学习时空特征的深层网络来说太小了,模型很容易过拟合,也就是在训练集上表现很好,换到新视频上就不灵了。

把任务拆成两个相对独立、结构更简单的网络,每个网络只需要学一件事,一个专注认场景,一个专注认动作模式,这样每个网络需要学习的东西更少,对数据量的要求也就低了很多。

> 过拟合:模型在训练数据上表现优异,但因为记住了太多训练集特有的细节而无法在新数据上泛化的现象。

这就好比让一个人同时学做菜和学修车,如果时间和练习机会有限,他大概率两件事都学得半生不熟。但如果把这两件事拆开,找两个人分别专精,各自练得精通了,最后组队干活反而效果更好。时间流网络还可以借助一个额外的好处,光流本身可以从大量没有动作标签、只是普通视频的数据里计算出来,间接扩充了可用于训练的信息量,缓解了标注数据稀缺的问题。

论文里还有个技术细节值得一提,为了让时间流网络吃得下光流数据,作者把连续多帧的光流场堆叠在一起作为输入,而不是只喂一帧的光流,这样网络能看到稍长一点时间窗口里的运动趋势,而不是某一瞬间的运动快照。

这两条流最后怎么融合

融合方式其实相对朴素,论文里尝试了几种方案,包括直接对两个网络输出的分类概率做平均,以及训练一个额外的支持向量机来学习该怎么给两路结果分配权重。

> 支持向量机:一种经典的机器学习分类算法,常用于在特征空间里找到一条最优的分界线区分不同类别。

实验发现用支持向量机融合的效果略好于简单平均,说明两条流在不同视频、不同动作类别上的可靠程度是不一样的,让机器自己学一个权重分配比死板地各打五十大板更聪明。

这也提示了一个更普遍的道理,当你手上有两种信息来源,它们各有各的优势和盲区时,最好的策略往往不是简单地各占一半,而是让系统自己学会什么时候该多相信谁。这跟医生看病时同时参考化验单和影像片是类似的逻辑,两份材料互相印证,但医生心里清楚某些情况下化验单更靠谱,某些情况下影像更说明问题,绝不是无脑各打五折。

结果说明了什么

在两个主流测试集上,双流网络的表现都实现了对当时最好方法的反超。

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

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

| 密集轨迹(手工特征) | 87.9% | 57.2% |

| 仅空间流网络 | 72.6% | 40.5% |

| 仅时间流网络 | 83.7% | 54.6% |

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

这张表格里有个细节值得多看一眼,单独的时间流网络准确率是83.7%,已经非常接近手工特征方法的87.9%,说明光流这个信息载体本身质量很高,网络一旦拿到干净的运动信号,学习能力立刻就体现出来了。而空间流单独的72.6%远低于时间流,恰恰印证了动作识别这个任务里,运动信息比静态画面信息重要得多。

这是深度学习在视频动作识别上第一次真正意义上超过手工特征方法,这个时间点是2014年,和当时的AlexNet之于图像识别有着相似的历史地位,都是证明了深度网络可以在一个此前被手工方法统治的领域里翻盘,只是前提是你得给网络喂对信息。

顺带一提,Simonyan和Zisserman是同一个研究组的搭档,几个月之后他们发表了VGGNet,那篇论文用极简的卷积结构堆叠出了当时图像识别领域的顶尖成绩。双流网络和VGGNet几乎是同期完成的工作,两篇论文放在一起看,能感觉到这个团队当时在探索的一条共同思路,就是用干净、结构化的信息输入,配合相对简单直接的网络架构,往往比堆砌复杂结构更有效。

后续的故事

双流网络这个思路影响力持续了很多年,后续研究基本都是在这个骨架上做加法。

2016年,Feichtenhofer等人的论文提出了在双流之间加入卷积层级的融合,不再等到最后才把两路结果拼起来,而是让两条流在网络中间层就开始互相交流信息,这个改动进一步提升了准确率,也说明了两条流各自学到的特征其实是可以在早期阶段互补的。

2017年,DeepMind团队提出的I3D网络,把双流的思路和更大规模的Kinetics数据集结合起来,同时把网络结构从2D卷积升级成了3D卷积,让网络能够直接对时空信息建模,这一次的提升不只是准确率数字上的进步,更是证明了当数据规模足够大时,网络确实可以学到更丰富的时空特征,双流网络当年因为数据不够而做的架构妥协,在数据充足之后可以逐步松绑。

这两项后续工作有个共同点,它们都没有推翻双流网络提出的核心洞察,运动信息需要被显式建模,而是在这个洞察之上寻找更好的实现方式。

写在后面

读这篇论文最让我意外的一点是,突破往往不是靠更复杂的模型,而是靠一个更诚实的判断,网络学不好某样东西,那就别硬逼它学,直接把答案的一部分喂给它。光流场本质上是研究者用传统算法算出来的先验知识,双流网络的成功某种程度上是承认了纯粹的端到端学习在当时的数据规模下并不总是最优解。

这让我想到一个更普遍的现象,很多领域里真正的突破点不是"更强的通用能力",而是"更懂问题结构的分工"。空间流管认物体,时间流管认动作,两者互不干扰又互相补充,这种拆解问题的思路比一味加深网络层数更接地气。

一个仍然悬着的问题是,光流场本身是通过传统算法计算出来的,这一步计算成本不低,也意味着整个系统并不是真正意义上的端到端学习。后来的3D卷积网络尝试绕开这一步,直接从原始像素里学出时空特征,这条路最终能不能完全替代显式计算光流,答案在I3D之后依然没有完全定论。

Q&A

Q1:双流网络是什么?

A:双流网络是2014年由牛津大学Simonyan和Zisserman提出的视频动作识别方法,它用两个独立的卷积神经网络分别处理静态画面和光流运动信息,再融合两者结果,第一次让深度学习在这个任务上超过了传统手工特征方法。

Q2:双流网络为什么要分成空间流和时间流两条网络,不合并成一个?

A:主要是因为当时可用的标注视频数据太少,一个网络同时学场景识别和动作识别容易过拟合。拆成两个更简单的网络分别学习,每个网络需要的数据量更小,效果反而更好。

Q3:光流在双流网络里起什么作用?

A:光流是记录视频相邻两帧之间像素运动方向和速度的信号,相当于把运动信息预先算好直接喂给网络,让网络不用自己从像素变化里推测运动规律,这也是时间流网络单独准确率就能达到83.7%的关键原因。

分享至
0赞

好文章,需要你的鼓励

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