微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

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

首页 深度学习曾经打不过一个叫"密集轨迹"的老方法,直到这两个人用了一招"作弊"

深度学习曾经打不过一个叫"密集轨迹"的老方法,直到这两个人用了一招"作弊"

2026-09-22 10:32
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-09-22 10:32 • 科技行者

2014 年之前,如果你是一个研究视频动作识别的学者,你大概会觉得深度学习这套东西,好用是好用,但在视频这件事上,好像不太灵。

这话听起来有点奇怪。因为就在两年前,2012 年,AlexNet 靠着深度卷积网络在图像识别比赛上把所有传统方法按在地上摩擦,直接把整个计算机视觉领域的研究范式给掰了个弯。从那以后,深度学习几乎是所向披靡的存在。

但视频动作识别这个赛道,深度学习却一直打不过一个叫"密集轨迹"的手工设计方法。

密集轨迹*:一种手工设计的视频特征提取方法,通过跟踪视频里密集分布的像素点,沿着运动轨迹计算局部的外观和运动统计量,再组合成特征来判断动作类别。

这个方法在当时的公开数据集上,识别准确率能做到 88% 左右。而同期尝试用深度网络硬啃视频的研究者们,最好的结果只能做到 65% 上下。

20 多个百分点的差距,这意味着什么?意味着每 5 个视频动作,深度学习方法就要比手工方法多认错 1 个以上。这不是一点点差距,这是量级上的落后。

这件事让很多人困惑:图像识别上深度学习明明赢了,为什么换成视频就不灵了?

牛津大学的 Karen Simonyan 和 Andrew Zisserman 就是被这个问题卡住的人之一。他们后来在同一年发布了另一篇论文,提出了 VGGNet,也就是后来几乎人尽皆知的那个深度卷积网络架构。这两篇论文几乎是同期完成的工作,一篇解决图像分类,一篇解决视频动作识别,用的是同一套底层直觉。这个背景细节很有意思,说明这两位作者当时脑子里装的是同一套问题:怎么让卷积网络学会"看懂"视觉世界里那些复杂又动态的模式。

而视频动作识别这篇论文,就是这篇要讲的东西。它给出的答案,后来被称为"双流网络"。

视频比图片难在哪

先说清楚一件事,为什么视频比单张图片难识别这么多。

一张静态照片,网络只需要认出"画面里有什么东西",比如一只猫,一辆车。但一段视频里,网络需要认出的是"画面里的东西在做什么"。

区别在哪?

想象你看一张照片,照片里有个人张开双臂,双脚离地。这个画面本身模糊得要命,你完全猜不出这个人是在跳舞、在摔倒,还是在做体操落地的瞬间动作。单张画面丢掉了时间信息,而动作恰恰是随时间展开的东西。

如果不解决这个问题会怎样?答案就是前面提到的那 65% 的准确率。当时的深度网络大多是把视频的每一帧单独喂给卷积网络,然后把结果做个平均或者投票。这种做法相当于把一部电影拆成一张一张的截图,然后试图靠看单张截图猜整部电影讲了什么故事。信息全在,但组织方式错了,时间维度上的动态线索完全丢失。

那手工方法密集轨迹为什么能做到 88%?因为它从设计之初就是专门追踪像素点如何随时间移动的,运动信息是它的第一公民,而不是附加品。

这就是当时深度学习在这个赛道上的困境:图像识别里成功的那一整套卷积网络思路,直接搬到视频上,漏掉了最重要的一环。

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

Simonyan 和 Zisserman 的思路很直接,甚至可以说带着一点"作弊"的味道。

他们没有去死磕怎么让一个网络同时学会外观和运动,而是干脆分成两个网络,一个专门负责看"这个画面里有什么东西",另一个专门负责看"这个东西在往哪个方向动"。

第一个网络叫空间流,输入是普通的 RGB 视频帧,负责识别场景和物体,比如网球场、游泳池、钢琴这些背景和道具信息,这些信息本身就能提示很多动作线索。

第二个网络叫时间流,这是整篇论文真正的巧思所在。它的输入不是原始画面,而是光流场。

光流*:描述视频中相邻两帧之间,画面里每个像素点是如何移动的,用一个方向和大小的向量场来表示,本质上是把"运动"这件事直接可视化成一张张图片。

光流场把"运动"这个抽象概念,变成了一张具体的图片,每个像素点上都记录着一个方向箭头。网络看到的不再是原始画面里的颜色和形状,而是一整张纯粹的"运动轨迹图"。这样一来,网络不需要自己去悟运动信息藏在哪里,运动信息已经被显式地摆在了它面前。

这两个网络各自独立训练,各自输出一个动作分类的判断,最后把两边的判断结果做加权融合,谁的判断更有信心就多听谁的。

为什么要这么拆?

这里有个很朴素的直觉。让一个网络同时学会"认物体"和"认运动",相当于让一个人同时用一双眼睛去做两件完全不同性质的观察任务。而人类的视觉系统里,恰好也存在类似的分工。生物学研究早就发现,人脑处理视觉信息时,腹侧通路负责识别物体是什么,背侧通路负责判断物体在空间里怎么移动。这两条通路在生理结构上就是分开的。

双流网络某种程度上是把这个生物学发现,直接翻译成了两个并行的卷积网络。

这里可以做一个类比,但要说清楚代价和收益,不能只是好看。

假设你要评价一场足球比赛,你可以雇一个人从头到尾盯着看,同时判断球员是谁、球往哪跑、跑动速度多快。这个人的注意力会被分散,既要认脸又要追踪运动轨迹,两件事互相抢资源。

但如果你雇两个人,一个专门负责看清楚场上有哪些球员和道具,另一个专门盯着球和人的移动轨迹不看别的,只看动态,两人各自做好一件事,最后把两份报告拼起来,判断的准确度反而更高。

如果不这么拆会怎样?实验数据摆在那里:只用空间流,单独跑一遍,准确率是 73%左右。只用时间流,单独跑,准确率能到 83.7%。两者融合起来,总准确率跳到 88%,和当时最强的手工方法密集轨迹打成平手,在某些数据集设置下甚至反超。

这组数字本身就很值得琢磨。时间流单独跑就已经比空间流高出 10 个百分点,这说明一件很反常识的事:运动信息本身,比画面里的物体外观信息,对判断动作类别更重要。这跟很多人的直觉是反的,大部分人第一反应会觉得"认出画面里是什么东西"应该更关键,但数据说的是另一件事。

论文里还专门放了一张第一层卷积核的可视化图。看那张图,你会发现时间流网络学到的卷积核,大多呈现出方向性的条纹结构,像是专门在捕捉某个方向上的边缘变化。这不是巧合,这是网络自己从光流数据里学出来的,它发现光流场里最重要的信息就是运动的方向和强度模式。网络没有被告知"你要去关注方向",它是自己摸索出这一点的。

数据不够用怎么办:多任务训练的救场

双流网络还面临一个很现实的麻烦,当时能用来训练动作识别模型的标注视频数据集,规模小得可怜。

主流的两个数据集,UCF101 大约 1 万多段视频,HMDB51 更小,只有几千段。相比之下,图像识别领域用来训练 AlexNet 的 ImageNet 数据集有上百万张图片。

数据量差了两个数量级,直接拿小数据集去训练一个深层卷积网络,大概率会过拟合,网络记住的是训练集里的具体细节,而不是真正学会了识别动作的通用规律。

Simonyan 和 Zisserman 用了一个叫多任务学习的技巧来缓解这个问题。

多任务学习*:让同一个网络同时在多个相关但不完全相同的数据集或任务上训练,共享底层特征,借此扩充有效的训练信号。

具体做法是,他们把网络的最后一层拆成两个分支,一个分支对应 UCF101 数据集的类别标签,另一个分支对应 HMDB51 数据集的类别标签。网络的前面绝大部分层是共享的,只有最后的分类层是各自独立的。

这样训练的时候,网络能同时从两个数据集里吸收信息,相当于把原本分散的两小笔训练数据,拼成了一笔更大的训练数据,虽然两个数据集的类别定义不完全一样,但底层的运动模式和视觉规律是相通的。

这个做法在教育场景里也很好理解。假设你要教一个学生学好英语,但你手头能找到的教材很有限,一本教材词汇量不够。这时候你找来另一本教材,虽然它侧重的话题和考试形式跟第一本不完全一样,但语法和核心词汇是重叠的。你让学生同时学两本书,总的语言积累量就上去了,即便两本书的具体测验内容不同。

如果不用这个技巧会怎样?论文里做了对比,单独用小数据集训练的网络,过拟合现象明显,验证集上的表现会随着训练轮数增加先升后降。加入多任务训练之后,HMDB51 上的准确率从 54.6% 提升到 59.4%,提升了将近 5 个百分点。这个提升幅度看起来不算特别夸张,但在数据极度稀缺的情况下,这是实打实靠"借用"另一份数据换来的免费收益。

这篇论文改变了什么

现在回头看这个结果的历史分量。

在 2014 年,深度学习方法第一次在视频动作识别这个任务上,追平甚至反超了手工特征方法的表现。这句话放在当年不是一句平淡的技术总结,这跟 2012 年 AlexNet 在图像分类上首次证明深度学习可行,是同一个量级的事件,只是发生在视频这个更难的赛道上,晚了两年。

这个结果直接告诉整个领域一件事:深度网络不是不能处理视频,只是之前的做法没有把运动信息喂对方式。把光流这种显式的运动表征直接交给网络,而不是指望网络自己从原始像素堆里悟出运动规律,这个思路一下子打开了后续大量工作的方向。

后续的工作证实了这条路是走得通的。2016 年,Feichtenhofer、Pinz 和 Wildes 在论文里进一步研究了双流网络里两条分支该在哪一层融合信息最好,提出了空间和时间特征在网络中间层就开始交互融合的架构,而不是像原始双流网络那样等到最后一层才简单加权合并,这个改进让准确率进一步提升了几个百分点。

2017 年,Carreira 和 Zisserman(没错,还是同一个 Zisserman)发表了 I3D 网络,把双流网络里的二维卷积核直接扩展成三维卷积核,让网络能够在一个统一的架构里同时处理空间和时间维度,不再需要手工计算光流作为单独输入。他们还配套发布了一个大规模视频数据集 Kinetics,数据量是 UCF101 和 HMDB51 的几十倍,彻底解决了当年数据稀缺逼着用多任务训练这种曲线救国办法的问题。I3D 在 Kinetics 上预训练之后,迁移到小数据集上的表现远远超过了原始双流网络。

从双流网络到中间层融合,再到三维卷积加大规模数据集,这条技术演进路线清晰地展示了一件事:2014 年这篇论文提出的核心洞察,运动信息需要被显式建模而不能指望网络隐式学到,一直是后来所有改进版本共同遵循的原则,只是实现方式越来越自动化,越来越不依赖手工计算光流这种预处理步骤。

写在后面

读这篇论文的时候,最触动我的不是双流网络这个架构本身,而是那个 10 个百分点的对比数字,时间流单独跑分数比空间流高出这么多。这个结果在当时应该是让很多人意外的,因为它暗示了一件事,人类判断一个动作是什么,靠的主要不是看清楚画面里有什么东西,而是看清楚东西怎么动。

这跟我们平时形成的直觉不太一样。我们总以为识别一个场景先要认清楚里面有什么,再去判断发生了什么。但这篇论文用数字说,运动模式本身携带的信息量,可能比静态外观更接近问题的答案核心。

还有一点值得琢磨,这篇论文选择用光流这种手工计算出来的中间表征喂给网络,某种程度上是向手工特征方法妥协了一部分,而不是追求端到端从原始像素直接学出一切。这在当年是个务实的折中方案,后来的 I3D 才真正把这一步也交给网络自己去学。方法演进的路径往往不是一步到位的理想主义,而是先接受一个局部的手工辅助,把整体问题解决了,再慢慢把手工的部分一点点替换掉。这个渐进的过程本身,可能比任何一个单独的架构设计更值得记住。

Q&A

Q1:双流网络是什么?

A:双流网络是 Simonyan 和 Zisserman 在 2014 年提出的视频动作识别方法,把识别任务拆成两个独立的卷积网络分别处理,一个负责识别画面里的物体和场景(空间流),另一个负责识别运动信息(时间流,输入是光流场),最后把两者的判断结果融合起来。

Q2:双流网络为什么要用光流而不是直接用原始视频帧?

A:因为原始视频帧里的运动信息是隐含的,网络很难自己学会提取,而光流场把每个像素点的运动方向和大小直接可视化成图片,相当于把运动信息显式地摆在网络面前,让网络不用再费力去悟。实验证明只用光流的时间流网络准确率能到 83.7%,比只用原始帧的空间流网络高出约 10 个百分点。

Q3:双流网络的准确率打平手工方法了吗?

A:打平了,甚至局部反超。双流网络融合后的准确率约为 88%,和当时最强的手工特征方法密集轨迹持平,这是深度学习方法第一次在视频动作识别任务上追上手工设计方法的表现,发生在 2014 年。

分享至
0赞

好文章,需要你的鼓励

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