2014 年的计算机视觉圈子里,有一件事让很多人心里不太舒服。
卷积神经网络在图像识别上已经把传统方法打得溃不成军,AlexNet 横空出世才两年,图像分类的准确率被一次次刷新。可是一旦把静止的图片换成动态的视频,风向完全变了。
在动作识别这个任务上,深度学习居然连着两年打不过一种叫做"密集轨迹"的手工特征方法。
**这在当时是个相当尴尬的事实:手工设计的特征,靠着人类对运动规律的理解精心搭建出来,反而比神经网络自己学出来的特征更准。**
密集轨迹*:一种传统的视频特征提取方法,通过跟踪视频中密集分布的像素点的运动轨迹,并结合方向梯度、光流方向等信息来描述动作,在深度学习出现前是动作识别领域的主流方法。
要理解这件事有多奇怪,可以类比一下。图像识别就像认人脸,一张照片给你,你看五官、轮廓,一眼就能认出这是谁。而动作识别是要认出一个人正在做什么,这需要看的不是一张照片,而是一连串照片里"发生了什么变化"。神经网络在处理单张照片时游刃有余,可一旦涉及到时间维度上的变化,它反而变得像个不擅长动态推理的孩子,能看清每一帧长什么样,却抓不住帧与帧之间到底发生了什么运动。
这篇论文的作者是 Karen Simonyan 和 Andrew Zisserman,来自牛津大学。这两个名字你可能觉得有点熟悉,没错,他们几个月后又发表了另一篇几乎人人都听过的论文,提出了 VGGNet。这两项工作几乎是同期进行的,某种程度上,这篇动作识别的论文可以看作是同一个研究小组在探索卷积网络边界时留下的另一个脚印。
问题出在哪:视频比图片多了一个维度,却被网络忽略了
要设计一个能处理视频的神经网络,最直接的想法是什么?
把视频看成一堆图片,一帧一帧地喂给卷积网络,或者把好几帧叠在一起,当成一张"更厚"的图片输入进去。
这个想法听起来合理,但实际做起来效果很差。当时已经有研究尝试过这类方法,比如直接用 3D 卷积去处理连续帧,但准确率始终没能超过手工特征。
问题出在哪?
单张图片能告诉你画面里有什么东西,但没法直接告诉你这个东西正在往哪个方向、以多快的速度移动。而动作恰恰是由运动定义的,同一个静态姿势,可能是"正在坐下",也可能是"刚站起来准备坐下的前一刻"。
**如果网络只看画面内容,不看运动信息,它其实是在用静态图像识别的思路硬解一个动态问题,这就好比让一个只会看照片的人去猜一段哑剧演员在表达什么,他能看清演员的表情和姿势,却抓不住那个"正在发生"的动态过程,如果动作全靠单帧姿势去猜,很多本质不同的动作看起来会一模一样。**
这就是这篇论文要解决的核心矛盾:怎么让神经网络真正"看懂"运动,而不只是看懂画面。
解法:把网络拆成两条独立的流
论文提出的方法叫做双流卷积网络。
双流卷积网络*:Two-Stream Convolutional Networks,一种把视频识别任务拆分成两个独立卷积网络分支来处理的架构,一条处理静态画面信息,一条处理运动信息,最后融合两者的判断结果。
思路其实很直白:既然一个网络很难同时处理"画面内容"和"运动信息"这两种性质完全不同的信息,那就干脆别让它们挤在一起,分成两条独立的通道,各自专注做好一件事。
第一条通道叫空间流,输入是视频里的单帧图像,负责识别画面中的场景和物体,比如这是在球场上,画面里有一个球、一个球拍。这条通道跟普通的图像分类网络几乎没有区别,可以直接借用在 ImageNet 上训练好的模型。
第二条通道叫时间流,这才是这篇论文真正的巧思所在。它的输入不是原始画面,而是光流。
光流*:Optical Flow,描述图像序列中每个像素点在连续帧之间移动方向和速度的向量场,本质上是把"运动"这件事用数值的方式表达出来。
光流场把每个像素在两帧之间往哪个方向移动、移动了多远都算出来,变成一张记录运动方向和速度的图。把这样的光流图连续堆叠十帧,作为时间流网络的输入,网络就能直接"看见"运动的模式,而不需要自己费力从像素变化里去猜测运动信息。
这就相当于给了网络一副专门用来看运动的眼镜。
打个比方,你让一个人光靠盯着一张张照片来判断球是往左飞还是往右飞,他得反复对比好几张照片才能推断出方向,这个过程又慢又容易出错。但如果你直接在照片上画好了箭头,标出球在这一瞬间的运动方向和速度,他一眼就能看懂。光流图做的就是这件事,它把"运动"这个抽象概念,提前计算好、可视化出来,直接喂给网络,网络就不用再费劲从静态画面的细微差异里反推运动了。如果不这么做,网络就必须自己在层层卷积里隐式地学习运动模式,这件事被证明相当困难,效果也差很多。
两条流各自训练好之后,最后用一个简单的方法把两边的判断结果融合起来,可以是直接平均,也可以再训练一个小的分类器去决定怎么加权。
论文里还专门放了一张示意图,展示时间流网络第一层卷积核学到的滤波器形状,你会发现这些滤波器大多呈现出明显的方向性纹路,像是专门用来捕捉某个特定方向的运动模式。这不是设计者刻意安排的,而是网络在训练光流数据时自己学出来的规律,说明网络确实学会了从光流信息里提炞方向性特征,这恰恰印证了整个设计思路是对的。
数据说话:这套方法到底提升了多少
论文在两个当时的标准动作识别数据集上做了测试,UCF-101 和 HMDB-51。
UCF-101*:包含 101 类人体动作、共 13320 段视频片段的公开数据集,是当时动作识别领域最常用的评测基准之一。
HMDB-51*:包含 51 类动作、约 7000 段视频片段的数据集,视频来源更加多样,难度普遍被认为比 UCF-101 更高。
先看单独用空间流会怎样,也就是只让网络看静态画面,不给它任何运动信息。在 UCF-101 上,单独的空间流只能达到 72.6% 的准确率。
再看单独用时间流,只给运动信息,不给画面内容,准确率能到 81.0%,反而比只看画面更高,这本身就说明了运动信息对动作识别有多重要。
而把两条流融合起来之后,准确率跃升到 88.0%。
这组数字背后的意义值得细品。20 个百分点的差距,意味着什么?意味着如果只靠静态画面去判断动作,每 5 个动作里,就要比结合运动信息的方法多认错 1 个。而单独的运动信息比单独的静态画面更管用,这个结果本身就在提示我们:过去那些只处理单帧图像的神经网络方法,其实一直都缺了最关键的一块拼图。
| 方法 | UCF-101 准确率 |
|---|---|
| 空间流(仅画面) | 72.6% |
| 时间流(仅运动信息) | 81.0% |
| 双流融合 | **88.0%** |
| 当时最强手工特征(改进版密集轨迹) | 87.9% |
看最后一行,这才是真正让人激动的地方。当时最好的手工特征方法能达到 87.9%,而双流网络融合之后是 88.0%,几乎打平,甚至略微超出。
这是深度学习第一次在视频动作识别任务上打平并超越手工特征方法。在 2014 年,这句话的分量,不亚于两年前 AlexNet 在图像分类上的横空出世。
这篇论文之后发生了什么
双流网络提出的架构思路,后来被反复验证、扩展、改进,成了视频理解领域延续多年的一条主线。
3 年后,Feichtenhofer 等人在他们的论文里,提出了一种让空间流和时间流不再是训练结束后简单相加,而是在网络中间层就相互交流信息的融合方式,准确率进一步提升,证明了两条流之间越早"对话",效果越好。
再往后,Carreira 和 Zisserman(同一个 Zisserman)在 2017 年提出了 I3D 网络,把双流的思路和 3D 卷积结合起来,并且提出了 Kinetics 这个大规模视频数据集用于预训练,这篇论文进一步把动作识别的准确率推高,也让"双流思路 + 大规模预训练"成了后续几年的标准范式。
**双流网络真正留下的遗产,不是某个具体的准确率数字,而是它证明了一件事:面对一个复杂任务,把它拆解成几个性质不同、各自专精的子任务分别处理,往往比硬塞给一个网络让它自己去学更有效。**
这个思路后来在很多地方都能看到影子,比如后来的多模态模型,把视觉、语言、音频分别用不同的网络处理再融合,某种程度上都延续着双流网络当年那套"分而治之"的哲学。
写在后面
读这篇论文时,最让我意外的一点是,两条流单独跑的效果都不算特别惊艳,时间流 81%,空间流 72.6%,但融合之后直接跳到 88%,超过了这两个数字简单加权能达到的水平。这说明两条流学到的东西确实是互补的,不是重复信息的叠加。这种"1+1 大于 2"的效果,在深度学习的融合方案里其实并不常见,很多时候多模态融合带来的提升是边际递减的,双流网络这里反而是一个比较干净的正例。
还有一个细节值得单独说一下,时间流网络的输入光流,本身是靠传统算法预先计算出来的,并不是端到端学习的产物。这意味着这篇论文其实是"深度学习 + 传统计算机视觉"的一次混合,光流计算这一步完全依赖手工设计的算法。某种意义上,双流网络并没有彻底摆脱手工特征,只是把手工计算的光流,喂给了一个学习出来的分类网络。这个"混血"的设计后来也确实成了被批评和改进的对象,那些想做端到端光流学习的工作,比如 FlowNet,某种程度上就是想把这最后一块手工设计的部分也交还给网络自己去学。
这大概也是这类奠基性论文常有的命运:它解决了当时最紧迫的问题,同时留下了一个足够明显的缺口,让后来的人有事可做。
Q&A
Q1:双流卷积网络是什么?
A:双流卷积网络是 2014 年提出的一种视频动作识别方法,把识别任务拆成两条独立的卷积网络分支,一条处理单帧画面的空间信息,一条处理光流表示的运动信息,最后融合两者结果做出判断。
Q2:双流网络和传统手工特征方法相比效果如何?
A:在 UCF-101 数据集上,双流网络融合后达到 88.0% 的准确率,而当时最强的手工特征方法(改进版密集轨迹)是 87.9%,这是深度学习第一次在视频动作识别上打平并超越手工特征方法。
Q3:为什么双流网络要单独设计一条时间流处理光流?
A:因为单帧图像很难体现动作中的运动信息,光流能直接表示像素在连续帧间的运动方向和速度,把运动信息提前计算好喂给网络,比让网络自己从画面变化里推断运动效果更好,实验显示单独时间流准确率达到 81%,比单独空间流的 72.6% 还高。







