Token导航 LogoToken导航

2014年双流卷积网络让深度学习首次实现视频动作识别

更新时间 2026-09-22来源 科技行者正文 5295字阅读约 17分钟

2014年秋天,如果你问计算机视觉圈子里的人一个问题:深度学习能不能识别视频里的动作,比如区分一个人是在挥手还是在鼓掌,大概率会得到一个谨慎的摇头。

这听起来有点奇怪。毕竟就在两年前,2012年,AlexNet已经在图像分类上把传统方法打得溃不成军,深度学习的旗子插遍了整个计算机视觉领域。可是到了视频动作识别这个子领域,情况完全不一样。

当时最好的深度学习方法,在UCF-101这个标准动作识别测试集上,准确率大概在65%左右。而一个叫做"密集轨迹"的手工设计方法,用的是完全传统的思路,靠人工设计的特征加上编码技巧,能做到超过85%的准确率。

这个差距接近20个百分点。什么概念?意味着每5个动作视频,深度学习模型就要比手工方法多认错1个。深度学习在图像上称王称霸,在视频动作识别上却像个初学者,被一个"老古董"方法按在地上摩擦了整整两年。

这篇文章要讲的,就是Karen Simonyan和Andrew Zisserman在2014年发表的论文,《用双流卷积网络进行视频中的动作识别》,这是深度学习第一次在动作识别任务上打赢手工特征的方法。这个时间点的分量,不亚于两年前AlexNet在图像分类上的横空出世。

问题出在哪里:视频比图片难在哪

要理解这篇论文的巧思,得先搞清楚一件事:为什么给深度学习一张图片,它能认得又快又准,可给它一段视频,它就变得笨手笨脚?

图片识别本质上是个静态问题。一张猫的照片,猫就在那里,轮廓、毛色、姿态全部凝固在一帧里,卷积网络只需要学会识别形状和纹理的组合模式。

视频动作识别不一样。一个"挥手"动作,光看单独一帧,你可能只看到一只举起的手,跟"举手提问"或者"投篮"这些动作的某一帧长得几乎一样。动作的本质信息不在某一帧的静态画面里,而在帧与帧之间的变化里,是那个手臂从下往上又左右摆动的运动轨迹,才让这个动作变成"挥手"而不是别的什么。

这就是问题的核心矛盾:卷积网络天生擅长处理空间信息,一张图里什么东西长什么样、在哪个位置,但它并不擅长处理时间信息,也就是东西是怎么随着时间变化的。

在这篇论文之前,研究者们试过很多办法让卷积网络理解时间信息。最直接的想法是,把好几帧图像堆叠起来,一起塞进一个3D卷积网络里,让网络自己去学习帧与帧之间的运动规律。这个思路听起来合理,但实验结果一直不理想,训练出来的模型效果始终追不上手工特征。

问题出在哪?后来人们意识到,直接从原始像素里学习运动信息,对网络来说太难了。原始像素堆叠在一起,运动信息被摄像机抖动、背景变化、光照差异这些噪音淹没了,网络很难从中提炼出真正有用的运动模式。

这就好比让一个刚学开车的新手,同时盯着方向盘、后视镜、路况和仪表盘去判断车速,他的注意力会被分散得七零八落。反过来,如果你直接把一个"车速表"摆在他眼前,告诉他现在时速多少,他立刻就能做出准确判断。手工设计的运动特征,某种程度上就是这样一个提前算好的"车速表",而让网络从原始像素里自己去悟出运动规律,则是让新手同时处理所有原始信息,自然就慢了、也容易出错。

双流架构:把一个难题拆成两个简单题

Simonyan和Zisserman想到的办法,说出来其实很朴素:既然让一个网络同时学会空间外观和时间运动太难,那就干脆用两个网络,一个专门负责看"长什么样",另一个专门负责看"怎么动的",最后把两边的判断结果合并起来。

这就是双流卷积网络*,Two-Stream Convolutional Networks,一种用两条独立的卷积网络分支分别处理静态外观信息和动态运动信息,再融合两者输出结果的架构。

第一条流叫空间流,Spatial Stream,它的输入很简单,就是视频里的单独一帧RGB图像。这条流本质上跟普通的图像分类网络没什么区别,它学习的是场景里有什么物体、什么背景、人物的姿态大致是什么样,说白了,它捕捉的是"这个动作发生在什么场景里",比如游泳这个动作,背景往往是水,篮球运动背景往往是球场。

第二条流叫时间流,Temporal Stream,它的输入不是原始图像,而是光流场*,Optical Flow Field,一种描述图像中每个像素点在连续两帧之间移动方向和速度的向量场,可以理解成一张"运动地图"。

光流场这个概念需要多解释一下。想象你在看一段视频,人的手从画面左边移动到右边,光流算法会计算出,画面里手所在的那些像素,在下一帧里往右边移动了多少距离。整段视频里每一个像素点都会算出一个类似的运动向量,这些向量拼在一起,就构成了光流场。它本质上是一张只记录"运动方向和速度"的地图,完全不关心颜色和纹理是什么。

时间流网络吃进去的不是一帧图像,而是连续多帧计算出来的光流场堆叠在一起,通常是10帧,对应20张光流图,因为每一帧要拆成水平方向和垂直方向两张图。这样网络看到的输入里,已经把"运动信息"从背景噪音里剥离出来了,它不需要再费力气从像素变化里猜测运动模式,因为光流算法已经把这个活干完了。

这个设计背后有一个很清楚的判断:与其逼着一个网络同时学会两件不相关的事,不如把任务拆开,让每个网络专注做一件事,这样每一件事都变得简单很多。

这就像一个餐厅后厨,如果让一个厨师同时负责炒菜和记账,他大概两件事都做不好,炒菜的时候心里想着账本,算账的时候锅里的菜可能糊了。但如果把炒菜和记账分给两个人,厨师专心炒菜,会计专心记账,最后两边配合起来出一份完整的营业报表,效率反而更高。如果不这样拆分,硬让一个网络又要看懂场景又要看懂运动,网络的注意力会被两种性质完全不同的信息互相干扰,学习效果会打折扣,这也正是之前那些直接堆叠帧数据训练3D网络效果不好的原因之一。

论文里给出的原始架构图上,可以清楚看到两条并行的卷积网络分支,最后在softmax层之后做融合,两条线各自独立训练,几乎没有中间的信息交换,这也是"双流"这个名字的来源,两条河流各自流淌,最后汇入同一片大海。

融合两条流:简单粗暴但有效

两条流分别训练好之后,怎么把它们的判断结果合起来?

论文里试了两种融合方式。一种是直接对两条流输出的类别概率做平均,另一种是用一个支持向量机*,SVM,Support Vector Machine,一种经典的机器学习分类算法,通过寻找最优分类边界来区分不同类别,把两条流的输出分数当作特征,重新训练一个分类器去决定最终结果。

实验发现,用SVM做融合比简单平均效果更好,这说明两条流的输出信息并不是简单地"各打五十分"就够了,不同动作类别里,空间信息和时间信息的相对重要性是不一样的。比如游泳这个动作,背景里的水面已经提供了很强的线索,空间流可能贡献更大;而像"挥手"和"鼓掌"这类背景相似但动作细节不同的类别,时间流的贡献会更关键。SVM能够学习到这种权重上的差异,而简单平均做不到。

这里还有一个技术细节值得说一说。时间流网络的训练数据是提前用传统算法计算好的光流场,而不是让网络自己去学习计算光流,这个决定其实相当保守,甚至可以说是向"手工特征"妥协了一部分。但恰恰是这种妥协,让时间流网络有了一个高质量、干净的输入,训练起来更容易收敛,如果不这样做,非要end-to-end从原始像素学到运动特征,效果反而可能更差,因为当时的网络结构和训练数据量都还不足以支撑这么困难的自学习任务。

结果说话:20个点是怎么被追上的

理论说得再好,最终还是要看数字。

论文在两个标准数据集上做了测试,UCF-101和HMDB-51,两个数据集都是动作识别领域公认的基准测试集,前者包含101类动作,后者包含51类。

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

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

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

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

| 双流平均融合 | 86.9% | 58.0% |

| **双流SVM融合** | **88.0%** | **59.4%** |

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

这张表格里最能说明问题的对比是仅空间流和仅时间流的差距。仅用空间流,也就是只看单帧图像不看运动信息,UCF-101上只有72.6%,比双流完整方案低了整整15个百分点。这个数字直接证明了一件事:静态外观信息远远不够,动作识别真正依赖的核心信息藏在运动轨迹里。

反过来,仅时间流已经能做到81.0%,比仅空间流高出将近9个点,这说明光流场里蕴含的运动信息本身就非常强大,甚至单独拿出来用都比只看图像外观更有效。

当两条流融合之后,UCF-101上的准确率冲到了88.0%,第一次超过了同期最好的手工特征方法。这个突破的意义不在于赢了多少个百分点,而在于这是一个信号:深度学习不是不能处理时间信息,只是之前的做法用错了方式,一旦把光流这个专门表达运动的信号交给网络,网络立刻就能把这部分信息用好。

有意思的是,在HMDB-51数据集上,双流网络的59.4%还是略低于手工特征的61.1%。这说明这个方法并不是在所有场景下都能完全碾压传统方法,HMDB-51这个数据集本身样本量更小、动作类别更细粒度,深度学习方法通常在这种小数据集上更容易吃亏,因为神经网络需要大量数据才能学到稳定的特征表示。这也从侧面印证了后来深度学习在视频领域持续发展的一个核心方向:如何在数据有限的情况下依然训练出强大的模型。

意义:一次关于"如何拆解问题"的示范

这篇论文最值得记住的地方,不是某个具体的网络结构细节,而是它展示的一种解决问题的思路:当一个任务里混杂着两种性质完全不同的信息时,试着把它们拆开来分别处理,而不是硬塞给同一个模型。

这个思路后来被证明极其有生命力。三年后,2017年,Carreira和Zisserman(还是Zisserman)在论文里提出了I3D网络*,Inflated 3D ConvNet,一种把2D卷积核"膨胀"成3D卷积核的网络结构,用来更好地处理视频里的时空信息,把双流网络的思想和3D卷积结合起来,在Kinetics这个更大规模的数据集上进一步提升了准确率,也让"双流+3D卷积"成为后续几年视频理解领域的主流范式之一。

再往后,2018年,Facebook AI Research团队发表了SlowFast网络,这个名字本身就很直白地体现了双流思想的延续:一条"慢"通路用较低的帧率捕捉空间语义信息,一条"快"通路用较高的帧率捕捉运动细节,本质上仍然是把空间信息和时间信息拆成两条路径分别处理,只是拆分的维度从"图像vs光流"变成了"低帧率vs高帧率"。这个设计在动作识别任务上进一步刷新了准确率记录。

从这两个后续工作可以看出,双流网络提出的核心思想,拆分处理不同性质的信息再融合,已经变成了整个视频理解领域一个基础性的设计范式,即便具体实现方式在不断演化,这个底层逻辑一直被沿用。

值得一提的是,Simonyan和Zisserman几个月后又发表了VGGNet,这篇论文里用到的空间流和时间流网络结构,其实借鉴了同一批研究里正在打磨的深层卷积网络设计经验。两篇论文几乎是同期完成的工作,这也解释了为什么双流网络里的单流分支设计会显得如此扎实和成熟,这批研究者当时正在同时打磨两套东西,图像分类和视频动作识别互相之间在网络设计上有着经验上的借力。

Q&A

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

A:双流卷积网络是Simonyan和Zisserman在2014年提出的一种视频动作识别方法,用两条独立的卷积网络分支,一条处理单帧图像捕捉外观信息,空间流,另一条处理光流场捕捉运动信息,时间流,最后融合两条流的输出结果,第一次让深度学习在动作识别任务上超过了传统手工特征方法。

Q2:为什么当时深度学习在动作识别上一直打不过手工特征?

A:因为直接从原始像素堆叠的帧序列里学习运动信息太难了,运动信息容易被摄像机抖动、背景变化等噪音淹没,网络难以提炼出稳定的运动模式,导致训练效果一直不如人工设计的密集轨迹等特征方法,当时差距接近20个百分点。

Q3:光流场为什么对识别动作这么重要?

A:光流场是一张记录每个像素点在连续帧之间运动方向和速度的地图,它把运动信息从颜色纹理等背景噪音里剥离出来,让网络不用再费力从像素变化里猜测运动模式,实验中仅用光流场训练的时间流网络准确率就达到81%,比仅用单帧图像的空间流高出近9个百分点。

写在后面

读这篇论文的时候,最让我意外的一个细节是,时间流网络的输入光流场是提前用传统算法算好的,不是网络自己学出来的。这在当时看起来有点不够"纯粹",深度学习的卖点本来就是端到端自动学习,可这里却主动向传统方法妥协了一部分。

但正是这个妥协让整个方案跑起来了。这让我想到一个更普遍的问题:很多时候一个系统的突破,不是靠把所有环节都换成最新技术,而是靠搞清楚哪个环节该用新方法,哪个环节暂时还是老办法更靠谱,把两者接对了口子。

双流网络自己也没解决的问题是,两条流是分开训练、事后融合的,网络没有在训练过程中主动学习"什么时候该多信空间信息,什么时候该多信时间信息"。这个问题后来被更复杂的时空融合结构慢慢啃了下去,但当年这个简单的拆分方案,已经足够把手工特征时代画上一个句号。

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

继续浏览更多资讯

返回资讯目录

相关资讯

更多