视频里藏着两条线索,AI 学会了同时看两条

2026-08-14 19:30:43 来源:科技行者

2014 年,如果你去问任何一个做计算机视觉的研究者,深度学习能不能识别视频里的动作,大概率会得到一个摇头。

这听起来有点反直觉。毕竟就在两年前,AlexNet 已经在图像识别上把传统方法打得没有还手之力,深度学习的旗号已经插满了图像领域的山头。可是一旦换成视频,情况完全反过来了。当时最强的视频动作识别方法,叫做密集轨迹

> 密集轨迹*:一种手工设计的视频特征提取方法,通过追踪视频里密集分布的采样点在时间上的运动轨迹,再手工计算这些轨迹周围的图像和运动统计特征,拼起来判断视频里发生了什么动作。


(资料图)

密集轨迹在标准测试集上能做到接近 88% 的准确率,而当时人们尝试过的深度学习方法,只能做到 65% 左右。

这个差距有多大?意味着每识别 5 个动作,深度学习就要比手工方法多认错超过一个。整整 20 个百分点的落差,这在当时几乎被当成了一个定论:深度学习不适合处理视频里的运动信息。

牛津大学的 Karen Simonyan 和 Andrew Zisserman 就是在这个背景下,拿出了一篇论文,题目叫《用于视频动作识别的双流卷积网络》。这篇论文做的事情,说出来你可能会觉得简单得不可思议:他们没有去发明什么全新的网络结构,而是想明白了一件事,视频里其实藏着两种完全不同性质的信息,过去的深度学习方法,一直在用同一双眼睛看这两种信息,而这双眼睛,其实只擅长看一种。

视频里到底藏着什么,为什么一个网络看不懂

先说说视频到底是什么。

一段视频,说到底就是一帧一帧的静止图片连续播放。你可能会想,那深度学习既然能看懂单张图片,把每一帧丢进去识别不就行了?

问题就出在这里。单张图片能告诉你的,是"这是什么"。一个人站着,一只手举着,这可能是在打招呼,也可能是要打人,也可能只是伸懒腰。图片本身回答不了这个问题,因为动作的本质不在某一帧里,而在帧与帧之间的变化里。

这就是视频识别真正难的地方,你需要的不只是空间信息,更需要时间信息,也就是画面是怎么随着时间变化的。

在这篇论文之前,大部分深度学习方法的思路是,把连续几帧图像叠在一起,当成一个"厚一点的图片"扔进卷积网络,让网络自己去学习帧与帧之间的关系。听起来挺合理,但效果很差,因为普通的卷积网络天生是为了识别静态图案设计的,边缘、纹理、色块,这些东西它很擅长。可是运动这件事,不是靠堆叠图像就能学出来的,运动的本质是位移,是速度,是方向,这些概念在卷积网络的"视野"里根本不存在合适的表达方式。

这就好比让一个只会看照片的人去判断一场足球比赛谁进球了。你把十张连续的照片摆在他面前,他能看出球在不同位置,但要他从静态画面里"感觉"出球飞行的速度和轨迹,这几乎是在为难他。他缺的不是眼力,缺的是一种专门针对运动设计的感知方式。如果不给他补上这一课,他永远只能靠猜。

拆成两条流,一条看形状一条看运动

Simonyan 和 Zisserman 的思路是,既然一个网络同时处理空间信息和时间信息效果不好,那就干脆拆成两个网络,一个专门负责空间,一个专门负责时间,最后把两边的判断结果合并起来。

这就是论文标题里"双流"的来源。

> 双流卷积网络*:把视频识别任务拆分成两条独立的卷积神经网络处理通道,一条处理静态画面信息,一条处理运动信息,两条通道各自输出预测结果,最后融合成最终判断。

第一条流叫空间流,输入很简单,就是视频里随便抽出的一帧静止图片。它的任务和普通的图片分类网络没什么区别,负责识别画面里有什么物体、什么场景、什么姿态。比如画面里有游泳池,有个人在挥臂,这条流基本上能判断出"这可能是游泳"。

第二条流叫时间流,这才是整篇论文真正的巧思所在。它的输入不是图片,而是光流场

> 光流场*:描述视频画面中每一个像素点从上一帧到下一帧移动方向和移动距离的一种表示方式,可以理解成给画面里每个点画一个"运动箭头"。

光流场这个概念不是这篇论文发明的,在传统计算机视觉里早就有,通常用来做视频压缩、机器人导航之类的任务。但把光流场喂给卷积神经网络,让深度学习直接从运动轨迹里学特征,这是这篇论文的关键一步。

具体做法是,先用传统算法算出视频里连续几帧之间每个像素的位移,把水平方向的位移和竖直方向的位移分别存成两张"图",这两张图不是普通图片,每个像素的数值代表的不是颜色,而是这个点往哪个方向移动了多远。把连续 10 帧算出来的这些位移图叠在一起,喂给一个和空间流结构类似的卷积网络,让它单独学习"运动"这件事。

这个设计背后的道理是,把不同性质的信息交给不同的专家处理,比让一个人同时兼顾两件事效果好得多。

想象一家餐厅,主厨既要炒菜又要记账,结果往往是菜炒得一般,账也记得马虎。但如果分成两个人,一个专心炒菜,一个专心记账,两个人各自做到极致,最后菜好账也清楚。空间流就是那个专心"看画面"的厨师,时间流就是那个专心"看运动轨迹"的会计,他们互不干扰,各自把自己擅长的事情做到最好,最后再把结果汇总。如果硬要一个网络同时干两件事,就像逼着那位主厨一边颠勺一边记账,难免两头顾不上。

论文里还有一个细节值得说一说。作者尝试了两种计算光流的方式,一种是让画面上所有点的运动都被平等对待,另一种是先把摄像机本身的移动去掉,只保留画面里物体相对于摄像机的运动。后者的效果明显更好,因为很多视频是手持拍摄或者镜头本身在移动的,如果不把镜头晃动这个"噪音"过滤掉,时间流学到的很可能不是动作本身,而是摄像师的手抖。这提醒我们,看似简单的"运动信息",其实里面藏着好几层需要精心剥离的成分。

数据不够用,那就借别处的数据来凑

深度学习这套东西,吃的是数据,而 2014 年能用来训练视频动作识别模型的数据集非常小,像 UCF-101 这样的标准测试集,总共也就一万多段视频,分成 101 个动作类别。这个规模放到今天简单的图片分类任务里都算小,更别说要训练两个卷积网络。

数据不够,直接训练容易过拟合

> 过拟合*:模型在训练数据上表现很好,但因为训练数据太少或模型太复杂,模型记住了训练数据里的细节和噪音,导致在新数据上表现很差的现象。

Simonyan 和 Zisserman 想了两招来解决这个问题。

第一招是把空间流网络放到一个更大的图片数据集上先预训练一遍,这个数据集就是著名的 ImageNet,里面有上百万张标注好的图片。这样空间流在正式看视频之前,已经从海量静态图片里学会了怎么识别物体和场景的基本套路,再拿相对小得多的视频数据去微调,效果自然好得多。

这一招现在回头看是常识,但在当时的语境下,能想到用图片数据集去"支援"视频任务,说明作者已经意识到,空间流本质上做的事情和普通图片分类是一回事,完全可以借用图片领域已经积累的海量数据和经验。

第二招是找到另一个数据规模更大的视频数据集,叫 Sports-1M,里面有一百万段体育视频,涉及 487 种运动类别。作者先在这个更大的数据集上训练网络,再迁移到目标数据集上做微调,这种做法叫多任务学习

> 多任务学习*:让一个模型同时在多个相关任务或数据集上训练,借助任务之间的相关性,提升模型在每个任务上的表现,尤其在某个任务数据量不足时特别有用。

这两招放在一起,本质上是同一个逻辑:数据不够,就去借。借的方式可以是借图片数据给空间流用,也可以是借更大的视频数据集给整体训练用。

这就有点像准备一场重要考试,如果你手头的真题太少,一种办法是先做大量相关学科的基础题打底子,再回来做真题,另一种办法是找一份题量更大、难度相近的模拟卷先练手,最后再攻克目标考试的真题。两种办法都是在数据稀缺的情况下,想办法把"经验"从别处引进来。如果没有这两招,单靠一万多段视频去从零训练两个深度网络,大概率会训练出一个只会"背题"却不会"举一反三"的模型,遇到测试集里没见过的画面立刻露馅。

两条流合起来,效果超过了手工特征

最后到了见真章的时刻。空间流单独跑,在 UCF-101 上准确率是 72.6%。时间流单独跑,能达到 81.0%。这个结果本身已经说明,运动信息对识别动作的贡献,比单纯看画面外观还要大,这也印证了前面说的,动作的本质藏在时间变化里,不在某一帧的静态内容里。

把两条流的预测结果做加权融合以后,准确率来到了 88.0%,这个数字第一次追平甚至略微超过了当时最好的手工特征方法。

|方法|准确率|

|空间流单独|72.6%|

|时间流单独|81.0%|

|密集轨迹(手工特征基准)|约 88%|

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

这个结果放在 2014 年的分量,不亚于两年前 AlexNet 在图片识别上的横空出世。区别在于,AlexNet 证明了深度学习在图片上可以碾压传统方法,而双流网络证明的是,深度学习在视频上终于追上了传统方法,而且找到了正确的路径,接下来只会越走越远。

如果只用空间流会怎样?准确率停留在 72.6%,比双流融合整整低了 15 个百分点。这 15 个点意味着什么,意味着如果只靠看画面内容判断动作,每识别接近 7 个视频就要错认接近 1 个,而这个错误本可以靠给网络补一双"看运动"的眼睛来避免。

有个细节特别值得拿出来说。Simonyan 和 Zisserman 当时同属牛津大学同一个研究组,几个月后,这个组又发表了另一篇后来同样载入历史的论文,VGGNet,提出了那个后来被无数人当作基础模型使用的网络结构。这两篇论文几乎是同期完成的工作,一篇解决了视频运动信息该怎么表示的问题,一篇把图片卷积网络的深度和规整性推到了一个新高度。这不是巧合,这说明当时这个研究组正处在对卷积网络理解突飞猛进的阶段,不同方向的思考互相印证互相促进。

这条思路后来被怎样接着走

双流网络这个想法,后来被证明不是一个孤立的巧思,而是打开了一整条研究路径。

2016 年,Feichtenhofer、Pinz 和 Wildes 发表了《卷积双流网络融合用于视频动作识别》,他们指出原始双流网络的两条流是完全独立训练、最后简单加权融合的,这样空间流和时间流之间没有任何交流,信息融合发生得太晚太浅。他们提出在网络中间层就让两条流互相"对话",提前融合特征,而不是等到最后一步才拼接结果,这个改进把准确率进一步推高。

2017 年,Carreira 和 Zisserman(还是同一个 Zisserman)发表了《Quo Vadis 动作识别?一个新模型和 Kinetics 数据集》,提出了 I3D 模型,把双流网络里的 2D 卷积换成了 3D 卷积,直接在时间维度上做卷积运算,不再需要单独计算光流,同时配合他们发布的大规模数据集 Kinetics,把整个领域的训练数据规模又往上推了一个量级。这篇论文里依然保留了双流的思路,只是把"时间流"这个角色用 3D 卷积重新实现了一遍,说明双流的核心思想,分开处理静态外观和动态变化,在三年后依然被认为是对的,只是具体的实现方式在不断进化。

这条从 2014 年延伸出去的路径,一直影响到后来的视频理解模型设计,核心逻辑始终没有变过:视频里的信息天然分成两种性质,一种是静态的外观,一种是动态的变化,想让模型学好,就得让它有能力分别捕捉这两种信息,而不是囫囵吞枣地混在一起处理。

写在后面

读这篇论文最触动我的地方,不是双流这个结构本身有多复杂,恰恰相反,是它简单到几乎让人怀疑,这么直接的想法,之前怎么没人试过。

后来查资料才明白,光流场这个概念在传统视觉里已经用了几十年,真正的难点从来不是想不到,而是敢不敢把一个"老古董"技术,原封不动地塞进当时还很新潮的卷积网络里,让两种完全不同时代的技术手拉手工作。这种把旧工具和新框架强行拼接、居然拼出了突破的做法,让我想起很多工程史上的创新,往往不是凭空造出一个新零件,而是发现两个原本各自存在的零件,可以用一种没人试过的方式装在一起。

有一个问题这篇论文没有回答,后来的研究者也还在持续追问:如果光流这种运动表示本身就是有损的、不完美的,那网络学到的"运动理解"到底是真的理解了运动,还是只是学会了利用光流算法本身的某些统计规律?这个问题放到今天的视频大模型身上,依然值得继续问下去。

Q&A

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

A:双流卷积网络是 2014 年由牛津大学 Simonyan 和 Zisserman 提出的视频动作识别方法,把视频识别拆分成空间流和时间流两个独立的卷积神经网络,空间流处理静态画面识别物体和场景,时间流处理光流场识别运动信息,最后融合两者结果做出判断。

Q2:双流网络的准确率和传统手工特征方法比怎么样?

A:在 UCF-101 数据集上,双流网络融合后达到 88.0% 的准确率,首次追平甚至略微超过了当时最强的手工特征方法密集轨迹(约 88%),而在此之前的深度学习方法只能做到 65% 左右,差距达 20 多个百分点。

Q3:双流网络后来被哪些研究继续改进?

A:2016 年 Feichtenhofer 等人提出卷积双流融合网络,让两条流在中间层就开始交流特征而不是最后简单加权。2017 年 Carreira 和 Zisserman 提出 I3D 模型,用 3D 卷积直接处理时间维度,配合新发布的 Kinetics 大规模数据集,进一步推动了视频识别的发展。

标签: 算法 移动 卷积 线索

上一篇:生意社:8月14日华北地区醋酸乙酯行情偏强运行-每日短讯
下一篇:前沿热点:满贯集团(03390.HK)盈喜:预期中期除税前溢利不少于约600万港元