Token导航 LogoToken导航TokenDH.com

深度学习打败手工特征的那一天:双流网络如何看懂视频里的动作

更新时间 2026-09-18来源 科技行者正文 5191字阅读约 17分钟1 张图片


2014 年秋天,如果你去问一个做计算机视觉的研究者,深度学习能不能识别视频里的动作,大概会得到一个尴尬的笑容。

图像识别领域,深度学习已经风光无限。2012 年的 AlexNet 一战成名,把图像分类的错误率从 26% 砍到 15%,整个学界为之震动。可是把同样的思路搬到视频上,结果却很难看。

问题出在哪?一张图片是静态的,网络只需要认出"这是一只猫"。而一段视频里藏着动作,认出"这个人在做什么",光靠一帧一帧看图片是不够的,你还得看懂时间上的变化,谁的手在往哪个方向挥,腿在怎么弯曲。当时最好的手工特征方法,一种叫做

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

的技术,能在标准数据集上做到 85% 以上的准确率。而深度学习方法呢?普遍卡在 65% 到 70% 之间,足足落后了 15 到 20 个百分点。

20 个百分点的差距意味着什么?意味着每 5 个动作里,深度学习就要比手工方法多认错 1 个。这在学术圈已经不是"暂时落后",而是快要被判定成"这条路走不通"的信号。

牛津大学的 Karen Simonyan 和 Andrew Zisserman 就是在这个背景下,交出了一篇让整个领域改观的论文,《用于视频动作识别的双流卷积网络》。这两人不是无名之辈,几个月后他们又发表了 VGGNet,那个后来几乎人人用过的图像分类网络。也就是说,这篇论文和 VGGNet 几乎是同期的工作,出自同一个实验室的同一批人手里。

问题到底难在哪里

先说清楚一件事,深度学习不是没试过处理视频。

最直接的想法是把视频的每一帧塞进卷积神经网络,让网络自己从像素里学出动作的规律。这个思路听起来没问题,毕竟图像识别就是这么做的。但视频和图片有个本质区别。

图片里,猫的样子写在像素的空间排列上,耳朵在上面,尾巴在下面,这种空间结构网络学得很好。可动作不是长在某一帧的空间结构里的,动作是"变化"本身。你给网络看一张运动员抬腿的静态照片,它甚至分不清这是在踢球还是在下楼梯的中间一帧。

早期研究者试过让 3D 卷积网络直接吃进连续多帧,让网络自己从像素堆里学出时间变化的规律。听起来很优雅,但实际训练出来的效果并不理想,卡在 65% 上下就是这类尝试的天花板。

这里有个容易被忽略的对比。手工设计的密集轨迹方法早就想明白了一件事,单看图像的外观信息不够,还得专门算一遍每个像素的运动方向和速度,这个信息叫

光流*:描述视频中相邻两帧之间,画面里每一个像素点是往哪个方向、以多快速度移动的一种运动场表示。

密集轨迹会先算出光流场,再顺着光流去跟踪像素点,把跟踪轨迹周边的信息编码成特征。这套流程明确地把"这是什么东西"和"这个东西怎么动"拆成了两件事分别处理,而当年的深度学习方法却想用一个网络囫囵吞枣地把两者一起学出来。

Simonyan 和 Zisserman 的洞察就在这里。他们觉得,深度学习不是学不会动作,而是被逼着用错误的方式去学。如果手工特征已经证明了"外观"和"运动"应该分开处理,为什么不干脆设计两个网络,一个专门看外观,一个专门看运动,最后把两边的判断合并起来?

双流网络:让两个专家各干各的活

这就是双流网络的核心设计。

第一条流叫

空间流*:双流网络中专门处理单帧静态图像的卷积网络分支,负责识别画面里的物体、场景和人物外观信息。

它的输入很简单,就是视频里挑出来的一张彩色图像。这条网络本质上跟做图像分类的网络没什么区别,它要学会认出画面里有一个人,周围是篮球场,手里有个球。这些信息帮网络判断这可能是投篮、运球或者传球这类和篮球有关的动作,但没法精确区分到底是哪一种。

第二条流叫

时间流*:双流网络中专门处理连续多帧光流场的卷积网络分支,负责捕捉画面中物体和人体各部位的运动方向与速度信息。

这条网络吃进去的不是彩色图片,而是提前算好的光流场,通常是连续 10 帧的水平和垂直方向运动信息堆叠在一起。它不关心画面里那个东西是人还是球,它只关心手臂是往上抬还是往下压,腿是在蹬地还是在收回。

两条网络各自独立跑完,各给出一个分类结果,最后把两个结果按权重加在一起,得到最终判断。这个融合可以简单到直接平均,也可以训练一个小型的支持向量机来学习怎么加权更合理,论文里两种方式都试过。

这个设计说起来简单,甚至有点"笨",毕竟深度学习的魅力本来就在于让网络自己学会所有该学的东西,人为把任务拆成两半,看起来像是对网络能力不自信的妥协。但恰恰是这种"妥协",成了整篇论文最关键的转折点。

打个比方,你让一个人同时听一段录音里说的内容,又要他判断说话人的情绪,如果只让他集中精力听一次,他很容易顾此失彼,内容记住了情绪判断得含糊,或者反过来。但如果让两个人分别专注做这两件事,一个人只负责听懂说的是什么字,另一个人只负责感受语气和停顿的节奏,最后把两人的结论拼在一起,往往比一个人同时兼顾两件事做得更准。如果不这样拆开会怎样?答案就在前文提到的数字里,当时把时间和空间信息混在一起丢给一个网络自己学的方法,普遍卡在 65% 到 70%,而拆开处理之后,双流网络直接跳到 88%。

值得追问的是这个设计到底解决了什么根本矛盾。矛盾在于,一个卷积网络的每一层滤波器学的是"在这个局部区域里,什么样的像素排列组合是有意义的"。外观信息的有意义排列组合,和运动信息的有意义排列组合,规律完全不同,一个关心颜色纹理形状,一个关心方向和速度。让同一套滤波器同时学两种不同规律的模式,效果会互相干扰。拆成两个网络,就是让每套滤波器只专注学一种规律,学得更纯粹,也更容易学好。

数据不够怎么办:从图像识别里借力

双流网络刚设计出来时,研究者们撞上了另一个麻烦,训练数据不够。

当时主流的动作识别数据集,比如 UCF101,只有一万多个视频片段。相比之下,ImageNet 图像分类数据集有上百万张标注图片。用一万多个视频去从零训练一个深层卷积网络,很容易

过拟合*:模型在训练数据上表现很好,但因为训练数据太少或模型太复杂,学到了很多训练集里的噪声和偶然规律,导致在没见过的新数据上表现明显变差的现象。

研究者们的解法是站在巨人的肩膀上。空间流网络的结构和已经在 ImageNet 上训练好的图像分类网络非常接近,所以直接借用那些网络在图像识别任务上学到的参数作为起点,再用视频数据做进一步的

微调*:在一个已经用大规模数据训练好的模型基础上,用规模较小的目标任务数据继续训练,让模型的参数适应新任务,而不是从随机初始状态重新训练。

这个思路听起来理所当然,但在当时其实是个挺聪明的取巧。ImageNet 训练出来的网络已经学会了怎么识别边缘、纹理、物体轮廓这些通用的视觉基础能力,这些能力对认人、认球、认场景同样有用,不需要从头再学一遍。

这就好比一个已经精通中文阅读的人去学广东话,他不需要从认字开始,因为汉字系统他早就掌握了,只需要专门去适应发音和一些特有词汇的差异。如果非要假装自己完全不懂中文,从零开始学广东话的每一个字,那才是真正的浪费。反过来说,如果没有借用 ImageNet 预训练的参数,直接在一万多个视频上从零训练空间流网络,模型很可能因为数据太少而学得很差,准确率会明显掉下来,论文里的对比实验也验证了这一点。

时间流网络因为输入是光流场而不是彩色图像,没法直接套用 ImageNet 的预训练参数,但研究者们发现了另一个办法,用多个数据集联合训练。他们把 UCF101 和另一个动作识别数据集 HMDB51 放在一起训练时间流网络,即便两个数据集的动作类别定义不完全一致,共享底层网络参数、只在最后分类层区分数据集来源,依然能有效扩充可用的训练数据量,让时间流学得更扎实。

结果如何:一次教科书级别的反超

说了这么多设计思路,最终结果才是硬道理。

在 UCF101 数据集上,双流网络融合后的准确率达到了 88.0%,而在 HMDB51 数据集上达到了 59.4%。这两个数字放在 2014 年的语境里,意义非同一般。

|方法|UCF101 准确率|HMDB51 准确率|

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

|仅时间流|81.0%|54.6%|

|**双流融合(SVM 加权)**|**88.0%**|**59.4%**|

|同期密集轨迹类手工特征方法|约 85-87%|约 57%|

表格里最值得盯着看的一行,是仅空间流那一栏,72.6%。这个数字直接印证了前面说的判断,单靠看静态画面,网络确实只能猜个大概,篮球场加上一个人,可能是投篮也可能是运球,模型经常猜错。而仅时间流达到 81.0%,比空间流高了将近 9 个百分点,说明运动信息本身对于识别动作类别的贡献比外观信息更大。这也解释了为什么最终融合时,时间流的权重往往要设置得比空间流更高。

而两者融合之后跳到 88.0%,比单独任何一条流都高出至少 7 个百分点,这就是"专家分工再协作"的威力,单独看外观的专家和单独看运动的专家各有盲区,但他们的盲区不完全重叠,合在一起判断,就能互相弥补对方漏掉的信息。

更关键的是,88.0% 这个数字第一次超过了同期最好的手工特征方法。这是深度学习在视频动作识别这个具体任务上,第一次正面击败精心设计了多年的手工特征系统。放在 2014 年,这句话的分量不亚于两年前 AlexNet 在图像分类上掀起的那场地震,只不过这次战场换成了视频,而对手是密集轨迹这种耕耘已久的传统方法。

论文里还做了一个很实在的补充实验,把双流网络的判断结果和传统的密集轨迹特征做进一步融合,结果又往上蹿了一截,说明深度学习学到的模式和手工特征捕捉到的模式并不完全重合,两者还有互补空间。这个发现后来也启发了不少工作去研究"深度特征和手工特征到底在学不同的什么"。

后来的故事:双流网络开的这条路

双流网络之后,视频动作识别领域几乎所有重要工作都在这条"分开处理外观和运动"的思路上继续深挖。

2016 年,Feichtenhofer、Pinz 和 Zisserman(是的,Zisserman 又来了)发表了《卷积双流网络融合用于视频动作识别》,他们发现原始双流网络在网络末端才把两条流的结果简单相加,其实浪费了中间层可能存在的互补信息,于是设计了让两条流在网络中间层就开始互相交流的融合方式,进一步把准确率往上推了几个百分点。

2017 年,Carreira 和 Zisserman(Zisserman 的名字第三次出现在这条脉络上)提出了 I3D 网络,把双流网络里原本的二维卷积扩展成三维卷积,让每条流本身也能直接感知时间维度上的变化,同时借助一个新建的大规模视频数据集 Kinetics 做预训练,这一波直接把准确率推到了 95% 以上的区间,彻底把手工特征方法甩在了后面,成为后续好几年视频理解领域的标准起点。

这两篇后续工作有个共同点,都是在双流网络"拆分处理外观和运动"这个基本框架内做细化和优化,而不是推翻重来。这从侧面说明了 2014 年这个设计决策的判断有多准。

写在后面

读这篇论文最触动我的地方,其实不是最终 88% 这个数字,而是那个"仅空间流 72.6%"的对照实验。

研究者完全可以只报告融合后的最好成绩,但他们把两条流单独拆开测试的结果也老老实实放出来了。这种拆解式的验证,恰恰是判断一个设计到底有没有真正解决问题,还是只是靠堆参数蒙对了答案的关键。

另一个让我一直在想的问题是,这篇论文其实隐含了一个更大的哲学,复杂问题的答案,有时候不是造一个更大更聪明的单一系统,而是先想清楚这个问题里有几种不同性质的子问题,再分别用最适合的方式去解决。这个思路后来在很多领域反复出现,从多模态大模型里视觉和语言分开编码再融合,到自动驾驶里感知和决策分开训练。双流网络算是这条思路在深度学习时代很早期、也很干净的一次示范。

如果外观和运动可以分开处理效果更好,那还有哪些我们现在习惯用一个模型囫囵吞枣解决的问题,其实也藏着两种甚至更多本质不同的子任务,只是我们还没想到该怎么拆?

Q&A

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

A:双流卷积网络是牛津大学 Simonyan 和 Zisserman 在 2014 年提出的视频动作识别方法,把视频理解拆成两条独立的卷积网络分支,一条处理单帧图像的外观信息,一条处理光流场的运动信息,最后融合两者的判断结果。

Q2:双流网络为什么比之前的深度学习方法准确率高很多?

A:因为之前的方法试图用一个网络同时学习外观和运动两种性质完全不同的规律,容易互相干扰。双流网络把两者拆开专门处理,空间流单独能做到 72.6%,时间流单独能做到 81.0%,融合后达到 88.0%,比混在一起处理的方法高出十几个百分点。

Q3:双流网络后来被哪些工作改进了?

A:2016 年 Feichtenhofer 等人提出让两条流在中间层就开始融合而不是最后才合并;2017 年 Carreira 和 Zisserman 提出 I3D 网络,把二维卷积换成三维卷积并结合大规模 Kinetics 数据集预训练,把准确率推到 95% 以上。

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

继续浏览更多资讯

返回资讯目录

相关资讯

更多