微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

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

首页 视频里的动作,AI是靠"看图"还是"看动"认出来的?

视频里的动作,AI是靠"看图"还是"看动"认出来的?

2026-08-19 13:39
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-08-19 13:39 科技行者

2014年,如果你问计算机视觉领域的研究者一个问题:给你一段视频,让机器判断视频里的人在"打网球"还是"拉小提琴",深度学习和手工设计的特征相比,谁更强?

大多数人会告诉你,深度学习赢不了。

这句话放在今天听起来有点不可思议,毕竟深度学习早就统治了图像识别。但在动作识别这个具体问题上,情况完全不同。当时最厉害的方法叫**密集轨迹**

> 密集轨迹:一种手工设计的视频特征提取方法,通过追踪视频中密集分布的像素点的运动轨迹,并结合轨迹周围的图像和运动信息来描述动作,在深度学习流行之前长期占据动作识别准确率榜首。

这个方法在权威的UCF-101数据集上能做到88%左右的准确率,而当时几个尝试用深度学习做动作识别的工作,准确率普遍卡在65%到70%之间,差距接近20个百分点。

20个百分点的差距意味着什么?意味着每5个动作里,深度学习方法就要比手工特征多认错1个。这不是简单的参数没调好,而是整个思路可能有问题。

问题出在哪儿?卷积神经网络在图像识别上表现出色,靠的是能从静态画面里学出物体的形状、纹理、边缘这些视觉模式。但动作,顾名思义,核心信息不在某一帧画面里,而在画面和画面之间的变化里。你给网络看一张照片,它能认出这是个人在挥手臂,但它怎么知道这个人是在挥手打招呼,还是在挥手打网球?答案藏在时间维度上,藏在连续帧之间的运动模式里。而当时的卷积网络,天生就是为处理单张静态图片设计的,让它去理解"运动"这个概念,相当于让一个只会看照片相册的人去判断一段舞蹈跳得好不好,他能看出舞者的姿势,但看不出节奏和流动感。

这就是Karen Simonyan和Andrew Zisserman在2014年面对的局面。他们俩当时都在牛津大学的视觉几何组,顺带一提,几个月之后他们俩又发表了另一篇论文,叫VGGNet,后来成了图像识别领域最常被引用的网络结构之一。这两篇论文几乎是同期完成的工作,这个细节挺有意思,说明这个团队当时同时在图像和视频两条线上都在攻坚。

他们提出的方法后来被称为**双流网络**

> 双流网络(Two-Stream Network):一种同时使用两个独立卷积神经网络分支处理视频的架构,一个分支处理静态画面,另一个分支专门处理运动信息,最后把两者的判断结果融合起来。

这篇论文的核心思路,说起来其实很朴素:既然一个网络很难同时学会"这是什么"和"它怎么动",那就别逼它一个人干两份活,干脆训练两个网络,一个专门看"长什么样",一个专门看"怎么运动",最后把两边的判断结果加起来。

空间流:负责认出场景和物体

第一个分支叫**空间流**

> 空间流(Spatial Stream):双流网络中负责处理静态画面信息的分支,输入是视频里的单帧图像,用来识别场景、物体和人物外观等空间特征。

这个分支干的事情,说白了就是传统的图像分类。输入一帧画面,输出这帧画面里可能包含什么物体、什么场景。网络能看出网球场的绿色场地,能看出小提琴的形状,能看出游泳池的水波,这些视觉线索对判断动作类别其实帮助很大,毕竟很多动作和特定的场景、道具是强绑定的,你在游泳池边多半不是在打篮球。

这部分网络的结构基本沿用了当时图像分类领域已经验证过的卷积网络设计,因为这本质上就是个图像分类任务,只是把输入换成了视频里抽出来的某一帧。既然图像分类这条路已经被AlexNet证明走得通,那就没必要重新发明轮子。

时间流:专门盯着"动"这件事

真正的创新在第二个分支,叫**时间流**

> 时间流(Temporal Stream):双流网络中专门处理运动信息的分支,输入不是原始图像,而是相邻帧之间计算出的光流场,用来捕捉动作的运动模式。

这里有个关键问题:网络要怎么"看到"运动?直接把连续几帧图像堆在一起喂给网络,效果并不好,因为背景、光照这些无关信息会淹没掉真正重要的运动信号。他们的解法是先把视频转换成**光流**

> 光流(Optical Flow):描述图像中每个像素点在连续两帧之间移动方向和速度的向量场,本质上是把"哪里在动、往哪个方向动"这个信息可视化成一张图。

光流场长什么样?你可以想象成给视频里每个像素点画一个箭头,箭头指向这个点接下来往哪个方向移动,箭头长短代表移动速度快慢。把这些箭头拼在一起,就得到一张只包含运动信息、不包含颜色和纹理的图,论文里通常是把水平方向和垂直方向的运动分量分别存成两张灰度图。

这就是双流网络最巧妙的地方。他们没有指望卷积网络自己从原始像素里领悟出运动概念,而是先用传统的光流算法把运动信息显式地计算出来,提取成一张"运动地图",再让卷积网络去学这张地图里的模式。这相当于把一个很难的问题拆解成两步:先用成熟的老方法把运动信息可靠地抠出来,再用深度学习去从这些运动信息里总结规律。

这里可以做个类比。假设你想训练一个新员工判断顾客是不是在生气,你有两种办法。第一种,直接把监控录像整个丢给他看,让他自己从画面里悟出"生气"是什么样子,这样他要同时处理光线、背景、顾客穿着这些无关信息,学习效率很低,而且容易被干扰。第二种,你先用心理学总结好的规律,把顾客的表情变化、手势幅度这些关键动态特征标注出来,再让他去学这些标注好的动态特征和情绪的关系。第二种方法明显更快更准,因为你帮他提前过滤掉了噪音,只留下真正有用的信号。光流场干的就是这个过滤噪音的活,如果直接把原始视频帧序列丢给网络,网络要花大量精力去分辨哪些像素变化是真正的动作,哪些只是光影晃动,而光流已经把这个"提炼动态"的工作提前做好了。

论文里还有个细节值得一提,他们没有只用两帧之间的光流,而是把连续10帧计算出的光流场堆叠在一起,作为时间流网络的输入。这样做的原因是单独两帧之间的运动信息太短促,很多动作光看一瞬间的位移根本分不清,比如挥手和挥拳的初始动作可能差别很小,得看一小段连续的运动轨迹才能区分开。

两条流怎么融合

两个分支各自训练好之后,怎么把它们的判断结果合并成最终答案?论文里试了几种融合方式,包括直接把两个网络最后输出的分类分数做平均,或者训练一个小的分类器去学习怎么组合两边的分数。实验发现,用一个额外的支持向量机去融合两条流的输出,效果比简单平均要好一些。

这里其实反映了一个更深的问题:空间信息和时间信息到底应该在哪个层级融合?是应该让两个网络各自独立判断到底,只在最后一步合并结论,还是应该让它们在中间层就开始交流,互相参考对方看到的信息?这篇论文选择了最简单的方案,两条流从头到尾完全独立,只在最后的分类分数上融合。这个选择在当时是合理的,因为先把"分头判断能不能work"这件事验证清楚,比一开始就搞复杂的融合机制更稳妥,但这也留下了一个明显的改进空间,后来的研究者们花了不少功夫去探索更早期的融合方式。

数据不够怎么办

深度学习一个绕不开的问题是需要大量标注数据才能训练好,而当时动作识别领域最大的数据集UCF-101也只有大概1.3万段视频,分成101个动作类别,这个规模跟图像分类领域动辄百万级的ImageNet比起来小了两个数量级。

论文里用了两个办法应对这个问题。第一是多任务学习,把两个不同的数据集(UCF-101和另一个叫HMDB-51的数据集)放在一起训练,共享网络的底层参数,只在最后的分类层区分是哪个数据集的任务,这样相当于变相扩充了训练数据量。第二是大量使用数据增强手段,比如对训练样本做裁剪、翻转、色彩抖动等变换,人为制造出更多样化的训练样本。

数据不够这个问题放在任何一个深度学习项目里都是老大难。这就像你想教一个孩子认识100种不同的鸟,但你手头能找到的鸟类照片总共才1000张,平均每种鸟只有10张照片可看,这个孩子很容易记住这10张照片的细节,却学不会真正区分鸟类的规律。多任务学习相当于你同时找了另一个类似的任务,比如认识100种不同的树,让孩子在学认鸟的同时也学认树,两个任务共享一部分基础的观察能力训练,这样孩子锻炼出的基础视觉分辨能力会更扎实,再回头看认鸟这个任务,效果也会好一些。如果不做这一步,单靠1.3万段视频去训练一个原本设计给百万级数据用的网络结构,大概率会出现过拟合,网络记住的是训练集里的细枝末节,而不是动作本身的规律。

结果如何,真的追上手工特征了吗

这篇论文最终在UCF-101数据集上,双流网络的准确率达到88.0%,首次追平甚至略微超过了当时最好的手工特征方法。

来看几个关键的对比数字。如果只用空间流,不用时间流,准确率是72.6%。如果只用时间流,不用空间流,准确率是81.0%。两条流融合之后,达到88.0%。

|方法|准确率|

|---|---|

|只用空间流|72.6%|

|只用时间流|81.0%|

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

|同期密集轨迹方法|约87.9%|

这组数字本身就很说明问题。单独的时间流(81.0%)比单独的空间流(72.6%)高出8个多百分点,说明运动信息对判断动作类别的贡献比静态画面信息更大,这也反过来证明了一开始的判断是对的,动作识别的关键信息确实更多藏在"怎么动"里,而不是"长什么样"里。而两条流融合之后又比单独任何一条流高出至少7个百分点,说明这两种信息确实是互补的,静态画面能提供场景和物体线索,运动信息能提供动态模式线索,两者结合起来才能更全面地判断。

这是深度学习在视频动作识别这个具体任务上,第一次真正打平手工设计的特征方法。放在2014年这个时间点看,这个意义不亚于两年前AlexNet在图像分类上证明深度学习可以碾压传统方法。区别在于,AlexNet那次是碾压式的胜利,而双流网络这次更像是艰难地追平,但追平本身已经证明了这条路走得通,深度学习不是不能处理时序信息,只是需要用对方法。

后来的故事

双流网络这篇论文发表之后,直接催生了一大批后续工作,几乎奠定了后来好几年视频动作识别研究的基本框架。

2016年,Feichtenhofer等人发表的论文进一步研究了两条流应该在哪个层级融合效果最好,他们发现让空间流和时间流在网络中间的卷积层就开始交换信息,比原来只在最后融合分类分数效果更好,这个改进后来被称为**时空融合**

> 时空融合(Spatiotemporal Fusion):让处理空间信息和处理时间信息的网络分支在中间层就开始交互,而不是等到最后才合并结果,从而让两种信息更早地互相校准。

同样在2016年,Wang等人发表了**时序分段网络**

> 时序分段网络(Temporal Segment Network,TSN):将一段视频切分成若干时间段,分别在每个片段上运行双流网络,再把各片段的结果聚合起来,从而让网络能利用视频里更长时间跨度的信息,而不是只看几帧画面。

这个改进解决了双流网络原本的一个局限,原始双流网络每次只看很短的一段光流,难以捕捉持续时间较长的动作模式,而时序分段网络通过在整段视频里均匀采样多个片段,再综合判断,大幅提升了长时间动作的识别效果,在UCF-101上把准确率进一步推到94%以上。

再往后,光流本身计算成本高、依赖传统算法这个问题也被质疑,于是后来出现了大量试图让网络直接从原始视频帧里学出运动信息、彻底抛弃显式光流计算的三维卷积网络,比如I3D等工作,某种程度上是在回答双流网络留下的那个问题:能不能让网络自己学会捕捉运动,而不需要人为先算出光流。

写在后面

这篇论文让我印象最深的一个细节,是空间流和时间流单独拿出来对比的那组数字。时间流单独跑,81.0%,已经比同时期很多完整的深度学习方法都强了。这说明当时深度学习不是不擅长视频理解,而是之前的人一直在用错误的方式喂数据给网络,直接扔原始像素序列,而不是先转换成运动信息。

这让我想起一个更普遍的问题,很多时候一个模型"学不会"某件事,未必是模型能力不够,而是数据的呈现方式本身就没有把关键信号暴露出来。这在很多领域都成立,不只是视频理解。

光流这一步靠的仍然是传统算法,不是端到端学习出来的,这也是这篇论文留下的一个明显缝隙。如果有一天,网络真的能完全脱离任何手工设计的中间表示,直接从像素学出所有需要的东西,那会是什么样子?后来的三维卷积网络某种程度上在回答这个问题,但代价是需要更多的数据和算力,这笔账到底划不划算,可能到现在都没有一个绝对的答案。

Q&A

Q1:双流网络是什么?

A:双流网络是2014年由Simonyan和Zisserman提出的视频动作识别方法,用两个独立的卷积神经网络分支分别处理静态画面(空间流)和运动信息(时间流),最后融合两者结果来判断视频中的动作类别。

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

A:因为直接输入原始视频帧序列会让网络被光影、背景等无关信息干扰,难以专注学习真正的运动模式。光流提前把运动方向和速度计算出来,相当于帮网络过滤掉噪音,让它只需要学习运动信息里的规律。

Q3:双流网络的效果和当时最好的手工特征方法比怎么样?

A:双流网络在UCF-101数据集上达到88.0%准确率,追平甚至略微超过了当时最强的手工方法密集轨迹(约87.9%),这是深度学习首次在视频动作识别任务上打平传统手工特征方法。

分享至
0赞

好文章,需要你的鼓励

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