微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

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

首页 2014年,一段视频里藏着两条完全不同的线索

2014年,一段视频里藏着两条完全不同的线索

2026-08-26 12:50
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-08-26 12:50 科技行者

你有没有想过,一段视频里到底藏着多少种信息?

一种是画面里的样子:一个人的脸,一个杯子的形状,背景是客厅还是操场。另一种是动作本身的样子:手臂挥动的轨迹,腿部摆动的节奏,这些东西跟画面里"有什么"没关系,只跟"怎么动"有关。

2014年之前,几乎所有做动作识别的深度学习方法,都在犯同一个错误。它们把视频当成一堆图片的堆叠,一张张地喂给卷积网络,指望网络自己从这堆图片里学出"动作"这个概念。

结果呢?

打不过手工特征。

这句话放在2014年,分量很重。那一年,AlexNet在图像识别上已经把手工特征打得溃不成军,深度学习看起来要统治整个计算机视觉领域了。但在视频动作识别这个子领域,情况完全反过来。

当时最强的手工特征方法叫做

> 密集轨迹*:一种手工设计的动作识别算法,通过追踪视频中密集采样的点的运动轨迹,并结合方向梯度直方图等描述子,来捕捉动作特征。

密集轨迹在UCF-101数据集上能做到88%左右的准确率,而当时最好的深度学习方法,普通的3D卷积网络,只能做到65%上下。

差了20多个百分点。

这不是小差距。20个百分点意味着什么?意味着每5个动作,深度学习方法就要比手工方法多认错1个还不止。放在实际应用里,这种错误率的方法几乎没法用。

问题出在哪?为什么深度学习在图像上碾压一切,到了视频动作识别这里却抬不起头?

单流网络的死胡同:网络学不会"动"这件事

先说说当时的深度学习方法到底是怎么做的。

最直接的思路是把视频的每一帧当成一张独立的图片,用卷积网络提取特征,然后把这些特征在时间上做个平均或者投票,得出最终的动作类别。这种方法完全依赖卷积网络自己去发现帧与帧之间的关联。

问题就出在这里。卷积网络擅长的是空间模式识别,比如这是不是一只猫,这是不是一辆车。但"动作"这个概念本质上是时间上的变化,是这一帧到下一帧发生了什么位移。让一个只看静态画面的网络,自己去推断运动信息,相当于让一个只会看照片的人去猜照片拍摄前后发生了什么。

Karen Simonyan和Andrew Zisserman,两位来自牛津大学VGG研究组的研究者,意识到这条路可能从根上就走歪了。

有意思的是,这两位几个月后又发表了另一篇论文,提出了后来家喻户晓的VGGNet。也就是说,他们同一时期同时在推进两条战线:一条是把卷积网络做得更深更强,另一条是重新思考卷积网络该怎么用在视频这种带时间维度的数据上。这两条线其实是同一个问题的两个侧面,都是在问"网络的结构该怎么匹配数据的本质"。

回到视频识别的问题上,他们的判断是:如果运动信息对判断动作这么关键,那为什么要让网络自己去猜,直接把运动信息喂给它不就行了?

这个想法听起来简单,但简单背后是一次思路上的转弯。此前的研究者默认"深度学习应该端到端地从原始像素学习一切",而Simonyan和Zisserman的做法带着一点"妥协"的味头,先用传统方法把运动信息提取出来,再让深度学习去处理这个提取好的信息。

这就带来了这篇论文最核心的设计:双流网络。

双流网络:让两条网络各管一段

这篇论文的核心贡献,是提出了一种叫做

> 双流卷积网络*:Two-Stream Convolutional Networks,一种同时使用两个独立卷积网络分别处理视频的空间信息和时间信息,再融合两者结果的动作识别架构。

的架构。听名字就能猜到,这个网络有两条流水线,一条专门处理"画面里有什么",另一条专门处理"画面在怎么变"。

具体来说,第一条叫

> 空间流*:Spatial stream,输入单帧RGB图像,负责识别视频中出现的物体、场景、人物外观等静态视觉信息。

它的输入很简单,就是视频里随便抽出来的一帧图像,跟普通的图像分类网络没什么本质区别。它学的是"这个场景大概是什么样子",比如看到游泳池,看到球拍,这些静态线索本身就能帮着猜出一部分动作类别。

第二条叫

> 时间流*:Temporal stream,输入连续多帧计算出的光流场,负责捕捉视频中的运动信息,即物体和人体各部分的运动方向与速度。

它的输入不是原始画面,而是

> 光流*:Optical flow,描述图像序列中像素点在连续帧之间的运动方向和速度的向量场,常用箭头图表示,每个箭头指向该点接下来的运动方向。

光流场记录的是每一个像素点从这一帧到下一帧移动到了哪里,方向是什么,速度有多快。把这些光流信息叠在一起送进另一个卷积网络,这个网络学的完全是运动本身的模式,跟画面里到底是什么东西没有直接关系。

这两条网络分别训练,分别得出对动作类别的判断,最后用一种简单的方式把两边的判断结果融合起来,可以是直接平均,也可以再训练一个小分类器来学习怎么加权。

这个设计好在哪?

好在它把一个复杂的问题拆成了两个相对简单的问题。让网络同时学会"认物体"和"辨运动",相当于让它一边处理空间模式一边处理时间模式,这对当时的网络结构和训练数据量来说负担太重。拆开之后,每条网络只需要专注一件事,学习难度直接降下来了。

这就像让一个新手司机同时练习"看路标"和"控制方向盘力度",两件事都不是特别难,但同时练很容易手忙脚乱。如果分成两个阶段,先专心练熟看路标反应,再专心练手感,最后把两种技能组合起来开车,效果反而更好。如果不这么拆分,继续让一个网络同时兼顾两件事,后果就是论文里提到的那种情况:准确率卡在65%左右,涨不上去,因为网络的注意力被两种完全不同性质的模式来回拉扯,谁都学不精。

光流场:把"动"这件事翻译成网络能懂的语言

光流这个概念值得多说两句,因为它是这篇论文能成功的关键前提。

光流场本质上是一张跟原图大小一样的图,但每个位置存的不是颜色,而是一个方向和一个大小,表示这个点接下来会往哪儿动,动得多快。如果你把它画出来,会看到密密麻麻的箭头,箭头的方向和长度就是运动信息的可视化。

论文里给时间流网络的具体输入,是连续多帧计算出来的光流场堆叠在一起,通常是10帧,每帧有横向和纵向两个方向的光流分量,所以输入通道数是20。

这个设计的巧妙之处在于,它相当于帮网络提前完成了最难的那一步。原始像素里其实也包含运动信息,但这种信息是隐藏的,需要网络自己去对比前后帧才能发现。而光流场已经把这种对比做完了,直接把"运动"这个抽象概念翻译成了具体的数字。

网络看到光流场,就像一个人看到了别人标好的路线图,而不是自己去猜路怎么走。如果没有这一步预处理,网络要自己从像素里挖出运动模式,难度会陡增,这也正是之前那些直接堆叠RGB帧的方法效果不好的原因之一,它们指望网络自己去挖,但网络没挖出来。

论文还专门做了个实验,看看这个光流到底该怎么算才最好。

他们试了两种方式,一种是普通的光流,另一种叫做

> 双向光流*:同时计算视频正向播放和反向播放时的光流场,让网络能看到运动在两个时间方向上的信息。

结果发现双向光流效果更好一点,这也符合直觉,因为一个动作往前看和往后看包含的信息其实是互补的,比如一个人挥手的动作,正着看是手臂展开的过程,反着看则强调了手臂收回的过程,两种视角合在一起,网络能捕捉到更完整的运动模式。

融合两条流:1加1为什么大于2

两条网络各自训练完,分别对视频的类别做出预测,这时候就要面对一个问题:怎么把两边的意见综合起来?

论文里试了几种融合方式,最简单的是直接把两边的预测概率取平均,复杂一点的是拿一个小型的支持向量机分类器去学习该怎么给两边加权。

实验结果显示,融合之后的效果明显好于单独用任何一条流。这个结果本身并不让人意外,毕竟两条网络学的是互补的信息,合在一起理应更强。但真正值得琢磨的是这个提升的幅度。

只用空间流,也就是只靠画面里的物体和场景信息,在UCF-101上大概能到73%左右的准确率。只用时间流,也就是只靠运动信息,能到83%左右。而两者融合之后,能冲到88%左右。

这个数字对比很能说明问题。单独看,时间流比空间流强了整整10个百分点,这说明对于动作识别这件事,运动信息本身就比画面内容更重要。你想想看,同样是在球场上,一个人站着不动和一个人在挥拍,画面里的场景和物体几乎一样,能区分开这两种情况的,只能是动作本身的运动模式。如果只看空间流,网络其实是在靠"这是网球场,所以大概率是打网球"这种间接线索猜答案,而不是真正理解了动作。

但空间流也不是没用的。加上它之后,准确率还能再涨5个百分点,说明画面信息确实提供了运动信息之外的补充,比如某些动作发生的场景本身就有很强的区分度,看到泳池基本可以排除掉一大半陆地运动的可能性。

这里有个很朴素的类比。判断一个人在做什么运动,单看他的动作轨迹已经能猜出七八成,但如果再看一眼周围环境,准确率还能再往上提一提。这两种信息不是互相替代的关系,是互相搭台的关系,少了任何一个,判断都会打折扣。如果两条流的信息完全重叠,融合之后应该不会有提升,但事实是融合带来了明显的提升,这恰好证明了两条流学到的东西确实是两种不同性质的信息,不是同一件事说了两遍。

数据不够怎么办:借来的手,补上的力

深度学习一个绕不开的问题是数据量。视频数据集在当时远远没有图像数据集那么庞大,UCF-101这类数据集只有一万多个视频片段,对于训练一个深层卷积网络来说,这个规模其实是偏小的,容易导致过拟合。

论文用了两个办法来缓解这个问题。

第一个办法是

> 多任务学习*:让同一个网络同时在多个相关数据集上训练,共享底层特征表示,以此增加有效训练数据量,缓解单一数据集数据不足的问题。

具体来说,他们让时间流网络同时在UCF-101和另一个动作数据集HMDB-51上训练,两个数据集的类别体系不完全一样,但网络的底层特征是共享的,只是最后分类的那一层是分开的。这样一来,网络能从两个数据集里一起吸收运动模式的共性,相当于变相扩充了训练数据。

第二个办法更直接,就是借用图像识别领域已经训练好的网络参数,用来初始化空间流网络。这在当时是个已经被验证过的思路,叫做预训练迁移。空间流网络本质上做的事情跟普通图像分类没有本质区别,所以完全可以借用在ImageNet这种超大规模图像数据集上训练出来的经验,不用从零开始摸索该怎么识别物体和场景。

这两个办法背后是同一个逻辑,数据不够的时候,想办法从别的地方借力,而不是硬扛着用不够的数据硬训练一个大网络。这跟人学习新技能有点像。如果你要学一门新语言,但接触这门语言的材料很有限,一个办法是找到跟这门语言相近的另一门语言,先靠着已经掌握的知识搭个框架,再往里填新内容,这样比完全从零开始要快得多。如果不借这个力,直接拿着有限的数据死磕,大概率会学出一个只会照搬训练样本、遇到新情况就懵的模型,这正是过拟合的本质。

实验结果:一次实打实的翻身

说了这么多设计细节,最终结果到底怎么样?

论文在三个数据集上做了测试,UCF-101、HMDB-51,以及后来又补充测试的其他动作数据集。核心对比对象是当时最强的手工特征方法密集轨迹,以及此前的深度学习方法。

| 方法 | UCF-101准确率 | 说明 |

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

| 密集轨迹(手工特征) | 约88% | 当时最强手工方法 |

| 单纯3D卷积网络 | 约65% | 此前深度学习方法代表 |

| 仅空间流 | 约73% | 本论文,只用画面信息 |

| 仅时间流 | 约83% | 本论文,只用运动信息 |

| **双流网络融合** | **约88%** | 本论文,两流融合结果 |

双流网络的最终结果,追平甚至略微超过了密集轨迹这个手工特征的天花板。

这句话放在2014年,分量不亚于AlexNet在图像识别上的横空出世。那之前,深度学习在动作识别这个子领域一直被认为是"暂时打不过"的,这篇论文第一次证明,只要网络结构设计得合理,深度学习完全有能力在这个任务上追平甚至超越几十年积累出来的手工特征方法。

在HMDB-51数据集上,双流网络的表现同样明显优于此前的深度学习方法,而且跟密集轨迹的差距也大幅缩小。

这篇论文之后发生了什么

双流网络这个思路一旦被验证有效,后续研究几乎是沿着它的框架继续深挖。

2016年,Feichtenhofer等人发表了一篇论文,专门研究双流网络里两条流该在哪个层次上融合效果最好。他们发现,如果让两条网络在更早的卷积层就开始信息交换,而不是等到最后一层才融合,效果能进一步提升。这篇论文相当于把双流网络这个大框架里"怎么融合"这个细节问题做得更精细了。

2017年,Carreira和Zisserman,注意这里又出现了Zisserman的名字,发表了I3D网络,把双流网络的思路和3D卷积结合起来,同时提出了一个规模更大的动作识别数据集Kinetics。这篇论文相当于把双流网络的想法从"两个2D网络"升级成了"两个3D网络",让时间维度上的建模能力进一步增强,在多个数据集上把准确率又往上推了一截。

这两篇后续工作有个共同点,它们都没有推翻双流网络的核心思想,都认可"空间信息和时间信息应该分开建模再融合"这个基本判断,只是在具体怎么融合、怎么建模上做了改进。这说明双流网络提出的这个框架性判断,在当时是抓住了问题本质的。

写在后面

读这篇论文时,最触动我的地方不是准确率数字,而是那个看起来"倒退"的决定,先用传统方法算光流,再让深度学习去处理光流。这跟当时深度学习圈子里"端到端学习才是正道"的主流叙事是有点拧着的。

后来的研究其实也一直在纠结这一点,有人试着让网络自己从原始像素里学出光流,想彻底摆脱这个手工步骤,但很长一段时间里,效果都不如直接用现成光流算法算出来的结果好用。这说明有些先验知识,哪怪它是"手工"的,只要真的抓住了问题本质,直接喂给网络,可能比逼着网络自己重新发明一遍更划算。

这跟"万物皆可端到端"这种信仰之间,到底该怎么权衡,我觉得这篇论文留下的这个张力,比它给出的88%这个数字更值得琢磨。

Q&A

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

A:双流卷积网络是2014年由Simonyan和Zisserman提出的视频动作识别架构,用两个独立的卷积网络分别处理画面内容(空间流)和运动信息(时间流),再把两者的判断结果融合起来,最终在UCF-101数据集上达到约88%的准确率,追平了当时最强的手工特征方法密集轨迹。

Q2:双流网络里的空间流和时间流分别是干什么的?

A:空间流输入单帧RGB图像,负责识别画面里的物体、场景等静态信息;时间流输入连续多帧计算出的光流场,专门捕捉动作的运动方向和速度。两者单独使用准确率分别约73%和83%,融合后能提升到约88%。

Q3:双流网络之后有哪些重要的后续研究?

A:2016年Feichtenhofer等人研究了两条流该在哪一层融合效果最好;2017年Carreira和Zisserman提出I3D网络,把双流思路和3D卷积结合,并推出更大规模的Kinetics数据集,进一步提升了动作识别准确率。

分享至
0赞

好文章,需要你的鼓励

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