> 硬件 >

双流卷积网络:当深度学习第一次在视频动作识别上赢了

时间:2026-08-17 17:26:58       来源:科技行者

2014 年,深度学习已经在图像识别上打得对手找不到北。AlexNet 横空出世两年后,卷积网络几乎统治了静态图片的分类比赛,识别一只猫、一辆车、一栋房子,交给深度网络基本没有悬念。

但如果给你的不是一张照片,而是一段视频呢。一个人从椅子上站起来,一个人挥手打网球,一个人跳进泳池,这些动作光看一帧画面根本看不出来。你需要看到画面怎么随时间变化。

奇怪的事情发生了。在这个问题上,深度学习居然打不过一种叫做"密集轨迹"的手工设计方法。


(资料图片仅供参考)

密集轨迹*:一种传统的视频动作识别方法,通过跟踪视频中密集分布的点随时间移动的轨迹,并计算轨迹周围的手工设计特征来判断动作类别。

具体差多少?在当时最具挑战性的 UCF-101 数据集上,密集轨迹这类手工特征方法能做到 87% 左右的准确率,而已有的深度学习尝试,比如直接把 3D 卷积网络怼上去的方法,只能做到 65% 上下。整整 20 个百分点的差距,意味着什么?意味着每 5 个动作里,深度学习就要比手工方法多认错 1 个。这在图像识别领域是不可想象的差距,AlexNet 当年也没输给传统方法这么多。

这篇论文的两位作者,Karen Simonyan 和 Andrew Zisserman,来自牛津大学的 VGG 组。没错,就是那个几个月后发表了 VGGNet、把图像分类刷到新高度的团队。这两篇论文几乎是同期的工作,一个在攻克图片,一个在攻克视频,而攻克视频这一仗,打得比想象中艰难。

他们要回答一个问题:为什么深度学习在图片上这么强,到了视频上反而不灵了。

问题出在哪:网络学不好"动"这件事

先说说当时的深度学习方案是怎么做视频识别的。最直接的想法是把 2D 卷积网络扩展成 3D,让卷积核不仅在图像的长宽方向滑动,还在时间维度上滑动,指望网络自己从连续帧里学出运动的规律。

这个想法听起来很合理,但实际效果很差。原因也不难理解。图像识别的成功建立在一个基础上,那就是有海量标注数据,ImageNet 有超过一百万张标注图片。而视频数据集小得多,动作识别常用的数据集只有几千到一万多个视频片段。让一个本来就参数庞大的 3D 卷积网络,从这么少的数据里,自己学会什么是"运动",这相当于要求一个学生只看了几页教材就要总结出整个学科的规律,学不好是必然的。

Simonyan 和 Zisserman 的思路是,既然网络自己学不好运动信息,那就不要让它自己学,直接把运动信息喂给它。

这就引出了整篇论文最核心的设计,光流。

光流*:描述图像中每个像素点在连续两帧之间的运动方向和速度的一种表示方法,用一张"运动图"来记录画面里哪里在往哪个方向移动、移动了多快。

光流不是什么新东西,计算机视觉里研究了几十年,专门用来描述画面里的运动。它把每一帧图像里每个像素的位移,编码成一张类似图片的东西,横向位移和纵向位移各占一个通道。这样一来,运动信息不再需要网络自己从像素变化里费力推测,而是被预先计算好,直接摆在网络面前。

这里就要问一个问题了,如果不用光流,网络能不能自己学到同等质量的运动信息?论文用实验回答了这个问题,答案是不能,或者说,非常难,需要多得多的数据和更复杂的结构才能勉强逼近。这也是为什么在数据有限的情况下,把光流这种领域知识直接注入网络,比让网络从零开始摸索要划算得多。

双流架构:把一个问题拆成两个网络来解决

既然运动信息要单独处理,那静态的外观信息呢?比如画面里有没有网球拍,有没有游泳池,这些信息其实也很重要,一个人挥拍的动作旁边有球拍,这个先验信息本身就是很强的线索。

于是论文提出了双流卷积网络这个核心架构。

双流卷积网络*:一种把视频动作识别拆分成两个独立卷积网络的架构,一个网络专门处理单帧静态画面(叫空间流),另一个网络专门处理连续帧之间的光流场(叫时间流),两个网络最后的判断结果做融合,得出最终的动作类别。

![论文中的双流架构示意图,展示了空间流网络接收单帧RGB图像,时间流网络接收多帧光流叠加,两条支路分别输出softmax分数后融合]

空间流很好理解,输入就是视频里随便抽出来的一帧图像,网络结构和普通的图像分类网络差不多,负责判断画面里有什么物体、什么场景。

时间流是这篇论文的重点,输入不是图像,而是连续多帧计算出来的光流场,堆叠在一起,形成一个多通道的输入,论文里用的是连续 10 帧的光流,横向和纵向各一个通道,一共 20 个通道堆在一起喂给网络。这个网络专门学习"动作模式",比如挥拍这个动作在光流场上呈现出什么样的运动轨迹。

两个网络训练好之后,分别对同一个动作片段给出一个预测分数,最后把两个分数加权融合,谁给出的置信度更高,权重就更大一些,融合方式论文里试了简单平均和用支持向量机学习权重两种,后者效果更好一点。

这个设计其实映射了人类大脑处理视觉信息的一个已知事实,神经科学上早就发现,人的大脑视觉皮层里存在两条相对独立的通路,一条处理"这是什么"(物体识别),一条处理"这在往哪动"(运动感知)。这两位作者显然是借鉴了这个思路,让机器也用两套"眼睛"分别看静止的和动态的信息,而不是塞进一个网络里让它自己去分辨。

这里可以做一个类比。想象你在看一场足球比赛的回放,如果只给你一张定格的画面,你可能能看出这是个球场,有球员在场上,但你猜不出下一秒球往哪儿飞,谁要射门了。如果只给你一段没有画面内容、纯粹标注了每个点往哪个方向移动的运动轨迹图,你能看出有东西在快速移动,但你分不清到底是球还是人。你必须同时结合"这是什么"和"它怎么动",才能准确判断出这是一次射门还是一次传球。如果只用一条通路去处理,等于让你蒙着眼睛只凭运动轨迹猜比赛内容,或者盯着一张静态照片猜下一秒的动作,两种情况下你都会经常猜错。双流网络的设计,就是不让机器也陷入这种信息缺失的困境。

时间流网络怎么设计:光流该怎么堆叠

时间流网络具体怎么处理光流数据,这里面还有几个值得展开的设计细节。

第一个问题是光流怎么计算。论文用的是传统的光流算法,不是深度学习方法(当时深度学习做光流估计还不成熟),计算出来的光流场每个像素点有横向和纵向两个分量。为了让网络看到一段时间内的运动趋势,而不是单帧之间的瞬时运动,论文把连续 10 帧的光流叠在一起,变成一个 20 通道的输入(10 帧乘以横纵两个方向)。

第二个问题是要不要考虑摄像机本身的移动。很多视频是手持拍摄或者运镜的,整个画面都会有一个整体的位移,这个位移和动作本身无关,是噪声。论文尝试了减去这个整体运动的版本,效果确实有提升,说明网络确实会被这种无关的全局运动干扰,这也提示了一个更深层的问题,光流这种表示虽然比原始像素更贴近"运动"的本质,但它依然不是纯粹的,里面混杂了背景运动和物体运动,需要额外处理才能把真正有用的信号提取出来。

第三个问题是怎么应对数据量不足。前面说过,视频数据集比图像数据集小得多,UCF-101 一共只有一万多个片段。论文采用了一个巧妙的办法,用两个数据集联合训练,把动作类别少但样本相对充足的数据集和目标数据集放在一起训练,共享网络的大部分参数,只在最后分类层做区分。这个做法某种程度上是数据不够,借别处的数据来凑,类似于一个学生主科的练习题不够,就去借用相近科目的习题来巩固基础知识,虽然题目不完全对口,但锻炼的底层能力是相通的。如果不这么做,单独在小数据集上训练,过拟合会非常严重,网络记住的是训练集里的个别样本特征,而不是动作本身的规律。

结果:深度学习终于赢了一次

说了这么多设计,数据说话才是硬道理。论文在两个标准数据集上做了测试,UCF-101 和 HMDB-51,这是当时动作识别领域最常用的两个基准。

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

| 只用空间流网络 | 72.6% | 40.5% |

| 只用时间流网络 | 81.0% | 54.6% |

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

| 同期最好的手工特征方法 | 87.9% | 57.2% |

先看只用空间流会怎样。准确率只有 72.6%,比双流融合的 88% 低了 15 个百分点还多。这说明单看静态画面确实丢失了大量信息,一个挥拍的动作,如果只看一帧,网络很容易和别的手臂动作搞混。

再看只用时间流。81% 已经比空间流高出一大截,这本身就很说明问题,运动信息对判断动作类别的重要性,可能超过静态外观信息。但即便只看运动信息,也比不上两者融合的效果。

融合之后的 88%,第一次让深度学习方法在 UCF-101 上追平甚至略微超过了手工设计的密集轨迹类方法。这是一个历史节点,深度学习在视频动作识别这个子领域,第一次不再是被手工特征按在地上打的那一方。这句话放在 2014 年,分量不亚于两年前 AlexNet 在图像识别上掀起的那场革命,只是这次战场换到了视频。

值得多说一句的是 HMDB-51 上的结果,双流网络拿到 59.4%,超过手工方法的 57.2%,差距不算大,但这个数据集样本量更小、动作更难区分,深度学习能在这种小样本条件下也追上甚至反超,说明双流架构确实抓住了问题的本质,而不是靠堆数据蛮力取胜。

这篇论文之后:光流思路被继续放大

双流网络提出之后,光流加静态画面的这个思路成了后续很多工作的起点。

3 年后,Feichtenhofer 等人在 2017 年提出了时空融合网络,把双流网络里两个独立训练、最后简单融合的做法改成了更早期就开始交互融合,让空间流和时间流在网络的中间层就开始信息交换,而不是等到最后一步才合并结果,这个改进进一步提升了准确率,也证明了两条流之间不应该是完全割裂的,中间层的信息共享能带来额外收益。

同样在 2017 年前后,Carreira 和 Zisserman(还是同一位作者)提出了 I3D 网络,这个工作干脆放弃了单独计算光流的思路,而是把 2D 卷积网络直接膨胀成 3D 卷积网络,让网络在一个更大规模的视频数据集 Kinetics 上直接学习时空特征,某种程度上是回到了最初"让网络自己学运动"的思路,但这次因为有了 Kinetics 这种规模大得多的数据集做支撑,3D 卷积终于跑赢了双流网络。这个转折也挺耐人寻味,双流网络当年之所以要引入光流这种手工先验,本质上是因为数据不够,一旦数据规模上来了,先验知识的必要性反而下降了,这某种程度上印证了深度学习领域一直存在的一个规律,数据量足够大的时候,很多手工设计的技巧会显得没那么关键。

再往后,各种基于双流思路的变种持续涌现,光流这个概念也被质疑过是否必要,一些研究开始尝试用更轻量、计算更快的运动表示方式来替代传统光流,因为计算光流本身是很耗时的一步,会拖慢整个系统的实际部署速度。这也是双流网络留下的一个明显短板,光流计算这一步没法端到端训练,必须先用传统算法算好光流再喂给网络,整个流程不是一体化的,训练和部署都因此变得更麻烦。

写在后面

读这篇论文最让我意外的一点,是深度学习在视频领域曾经输得这么彻底。习惯了深度学习一路碾压的叙事,很容易忘记它也有过被传统方法按住打的阶段,而且不是输一点点,是输了 20 个百分点的量级。

另一个值得琢磨的地方是,这篇论文解决问题的方式不是"设计一个更大更深的网络硬train一发",而是先想清楚问题的结构,运动信息和外观信息本质上是两类不同的东西,再设计架构去匹配这个结构。这种"先理解问题再设计模型"的思路,比单纯堆参数堆算力更值得学习。

论文里还有一个小细节挺有意思,融合空间流和时间流的时候,用支持向量机去学融合权重,效果比简单平均要好,这说明"两个信息源谁更可信"这件事本身也是可以学出来的,不需要人为拍死一个固定比例。这个小设计后来被很多多模态融合的工作继承了下来。

Q&A

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

A:双流卷积网络是牛津大学团队在2014年提出的视频动作识别方法,把识别任务拆成两个独立的卷积网络,一个处理单帧静态画面判断场景和物体,另一个处理连续帧的光流场判断运动模式,两者结果融合得出最终动作类别,在UCF-101上准确率达到88%。

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

A:因为当时视频数据集规模太小,只有几千到一万多个样本,网络很难仅从原始像素变化中自己学出运动规律,直接把传统算法计算好的光流场喂给网络,相当于把运动信息预先处理好,大幅降低了网络的学习难度。

Q3:双流卷积网络后来被哪些工作超越了?

A:2017年前后,时空融合网络让两条流在中间层就开始交互,而不是等到最后才融合结果;同期的I3D网络则用更大规模的Kinetics数据集直接训练3D卷积网络,跳过了光流计算这一步,最终在准确率上反超了双流网络。

标签: 算法 卷积 光流 深度学习 视频动作识别

消息推送