![]()
2014 年秋天,如果你问计算机视觉领域的研究者一个问题:深度学习能不能识别视频里的动作,大多数人会犹豫。
不是因为深度学习不行,而是因为它在这件事上已经输了两年。
图像识别领域,深度学习早就靠 AlexNet 打穿了所有传统方法。可是一旦换成视频,换成"识别一个人正在做什么动作"这个任务,情况完全反过来。当时最强的方法叫密集轨迹
**密集轨迹(Dense Trajectories)**:一种手工设计的特征提取算法,通过跟踪视频里密集分布的点随时间移动的轨迹,再结合这些轨迹周围的图像和运动信息来判断动作类别。
这个方法在标准测试集上能做到 85% 以上的准确率,而当时所有试图用深度神经网络做动作识别的尝试,都被它按在地上摩擦。
这事儿说起来挺打脸的。深度学习明明在图像上大获全胜,换个视频任务却水土不服,原因到底是什么?
Karen Simonyan 和 Andrew Zisserman 这两位牛津大学的研究者,决定啃一啃这块硬骨头。顺带一提,他们俩几个月后又发表了另一篇论文,叫 VGGNet,后来成了整个深度学习图像识别领域的教科书级架构。这两篇论文其实是同期的工作,出自同一个实验室,这个细节值得留意,因为它说明这批人当时正在系统性地重新思考"卷积网络到底该怎么设计"这件事,视频只是他们探索的一个战场。
问题出在哪:动作到底是"看"出来的,还是"动"出来的
先想清楚一件事:识别一张静态图片里有没有一只猫,和识别一段视频里的人是不是在"打网球",本质上是两种不同的任务。
猫是个物体,它长什么样子,一张照片就能说清楚。可动作是一个过程,它发生在时间轴上。你给我一张照片,照片里一个人手举着球拍站着,这个人到底是在准备发球,还是刚打完球在收拍,还是根本没在打球只是摆了个姿势拍照,单张照片经常说不清楚。
早期把深度学习用到视频上的思路很直接,把视频的每一帧当成一张图片扔进卷积神经网络,然后把结果做个平均或者投票。这个思路听起来合理,但效果很差。
问题就在于,这种做法完全依赖外观信息,它只是在看"画面里有什么东西",却没有真正利用"东西怎么动"这条信息。而动作恰恰是靠"怎么动"来定义的。举高胶带和挥拍击球,可能某一帧看起来长得几乎一样,区别只在于接下来几帧,手臂是慢慢放下还是快速挥出。
这就好比你去看一场哑剧表演,如果给你的只是几张剧照,你很可能猜不出演员在表演开车还是在表演划船,因为两个动作举手投足的静态姿势可能很相似。但如果给你看的是一段动图,哪怕只有半秒,你几乎立刻就能分辨出来,因为动作的节奏、方向、速度这些信息,只有在连续的时间序列里才会暴露出来。如果只看静态画面就下判断,你丢掉的恰恰是动作识别里最关键的那部分信息。
Simonyan 和 Zisserman 的核心洞察就在这里。他们认为,想让深度网络理解动作,必须给它一个专门的通道去看"运动"本身,而不能指望它从一堆静态帧里自己脑补出运动信息。
双流架构:让两个网络各管一段
基于这个洞察,他们设计了一个叫双流网络的架构。
**双流网络(Two-Stream Network)**:由两个独立的卷积神经网络组成,一个专门处理静态画面(空间流),一个专门处理运动信息(时间流),两者各自输出预测结果,最后融合。
思路听起来简单,但拆开看每一部分都有讲究。
先说空间流。这一路就是普通的图像分类网络,输入是视频里抽出来的单帧画面,任务是识别画面里的场景、物体、人物姿态这些静态视觉信息。比如画面里有没有游泳池,有没有球拍,人的身体姿势大致是什么样。这一路本质上和做图片分类没什么区别,可以直接借用在大规模图片数据集上预训练好的网络权重,这样即使动作识别的训练数据不够多,也能有个不错的起点。
再说时间流,这是整篇论文真正的创新所在。这一路的输入不是原始画面,而是光流场
**光流(Optical Flow)**:描述视频中相邻两帧之间,画面上每一个像素点是如何移动的一种表示方法,本质上是一张记录了"运动方向和速度"的图。
光流场把"谁在往哪个方向动,动得多快"这件事直接量化成了数据,输入给网络的不再是像素的颜色和亮度,而是一张画满了箭头的运动地图。网络看到的不再是"这里有一只手",而是"这个位置的东西正在往右上方快速移动"。
这个设计的巧妙之处在于,它把运动信息从一堆连续画面里预先提炼了出来,变成一种更直接、更容易被网络消化的形式。如果不用光流,而是直接把好几帧原始画面叠在一起扔给网络,让网络自己去学"哪几个像素是同一个东西在移动",这个任务对网络来说太难了,尤其是在训练数据有限的情况下。这就像你想教一个刚学做饭的人判断"这锅汤火候够不够",你可以直接告诉他"现在温度是 85 度",这是光流的做法,提前把关键信息计算好喂给他。你也可以让他自己盯着锅里冒的气泡去猜温度,这是让网络直接啃原始帧的做法。前者显然更容易学会,后者理论上也能学会,但需要更多的经验和数据积累,在数据不够的时候大概率学不好。
论文里还专门讨论了两种光流的表示方式,一种是普通光流,一种是去掉了镜头本身运动干扰的光流。因为很多视频是手持拍摄或者镜头会摇晃平移,如果不处理这个因素,整张画面看起来都在"动",网络很难分辨出哪部分运动是摄像机造成的,哪部分是被摄主体自己在动。实验证明去掉镜头运动干扰之后效果更好,这也印证了一个朴素的道理,信号越干净,模型越容易学到真正有用的规律。
![双流架构图]
论文里那张架构图画得很直白,左边一路输入单帧图像经过一个卷积网络,右边一路输入堆叠起来的光流图经过另一个结构类似的卷积网络,两边分别输出对动作类别的预测分数,最后把两个分数融合起来,得到最终判断。这个融合可以简单粗暴地取平均,也可以再训练一个小的分类器来学习怎么融合更好,论文里两种都试了。
值得说一下的是,这两路网络是完全独立训练的,彼此之间在训练阶段没有任何交互,只是在最后输出阶段合并。这种"各自为战,最后开会"的设计虽然简单,却已经足够有效,这也说明了运动信息和外观信息在识别动作这件事上,确实提供了两种互补而非重叠的证据。
数据不够怎么办:借用图片,也借用视频
深度网络最大的胃口就是数据,而 2014 年的时候,视频动作识别领域最大的标注数据集也就几千到一万多段视频,这个规模跟图像分类动辄百万张图片的数据集比起来差得很远。
数据不够,直接训练大网络很容易过拟合,也就是网络在训练集上表现很好,换到没见过的新视频上就掉链子。
Simonyan 和 Zisserman 用了两招来缓解这个问题。
第一招是空间流直接借用在超大规模图片数据集上预训练好的网络。这个数据集里有一百多万张标注了物体类别的图片,虽然这些图片跟动作识别没有直接关系,但网络在这些图片上学到的"如何识别边缘、纹理、物体轮廓"这些基础视觉能力,是通用的,可以迁移过来当作动作识别任务的起点,然后再用动作识别的数据做微调。
第二招更巧妙,是针对时间流的。因为专门标注了动作类别的视频数据太少,他们额外找了一个没有精细动作标签,但是数据量大得多的视频数据集,用一种叫多任务学习的方式,让时间流网络在训练时同时学习两个数据集上的分类任务,共享底层的特征表示,只在最后输出层分开。
**多任务学习(Multi-task Learning)**:让同一个网络同时学习多个相关任务,通过共享底层特征表示来提升每个任务的学习效果,尤其是在某个任务数据不足时,可以借助其他任务的数据来补充学习信号。
这个做法背后的道理也不难理解。运动模式这种东西,不管是在标注精细的数据集里,还是标注粗糙的数据集里,底层的视觉规律是相通的。举高手臂的光流特征,不会因为它出现在哪个数据集里就发生本质变化。让网络多看一些运动样本,即便标签没那么精确,也能帮它把"动作的运动模式长什么样"这个基础能力打得更扎实,类似于一个学生除了做本校的模拟卷,还去做了隔壁学校的卷子,虽然出题风格不完全一样,但对巩固基本功是有帮助的。如果不借助这个额外数据集,单靠一万来段视频去训练一个上百万参数的深度网络,大概率会学成一个"背题"型的网络,记住了训练集里的细节,却没学到能推广到新视频上的规律。
结果说话:深度学习第一次赢了
方法讲完了,最关键的问题是,这套东西到底行不行。
论文在两个当时标准的动作识别数据集上做了测试,一个叫 UCF-101,包含 101 类动作,一个叫 HMDB-51,包含 51 类动作,难度更大一些,因为这个数据集里的视频拍摄条件更复杂,动作类别之间也更容易混淆。
结果是,双流网络在 UCF-101 上达到了 88.0% 的准确率,在 HMDB-51 上达到了 59.4%。
这两个数字放在当时是什么概念?
之前最好的深度学习方法,准确率在 UCF-101 上只有 65% 左右。而当时最强的手工特征方法,密集轨迹及其改进版本,在 UCF-101 上能做到 85% 到 87% 之间。
也就是说,双流网络第一次让深度学习在这个任务上超过了手工特征方法,而且不是小幅超过,是实打实地拉开了差距。
**这是深度学习在视频动作识别上第一次赢过手工特征方法,发表时间是 2014 年,分量不亚于两年前 AlexNet 在图像识别上的横空出世。**
论文里还做了一个很关键的对比实验,拆开来看两路网络各自单独能打多少分。单独用空间流,只靠画面外观信息,UCF-101 上的准确率是 72.6%。单独用时间流,只靠光流运动信息,准确率反而更高,达到了 83.7%。而两路融合起来是 88.0%。
这组数字挺有意思,值得多说两句。空间流单独打 72.6 分,时间流单独打 83.7 分,说明光运动信息本身就已经比外观信息更能说明"这是什么动作"。这也从数据层面证实了前面那个直觉,动作首先是一个"动"的过程,外观信息固然有用,但不是决定性的。而两路一融合,直接冲到 88 分,比单独最好的那一路还高出四个多百分点,说明外观信息和运动信息确实提供了彼此互补的线索,不是简单的重复劳动。
这里也能看出一个反差。如果只用空间流,相当于扔掉了整套运动信息,准确率从 88% 掉到 72.6%,足足少了 15 个百分点。15 个百分点是什么概念,意味着每七八个动作视频里,单靠外观信息的网络就要比双流网络多认错一个。这个差距足够说明,单纯把视频当成一堆图片来处理,是一种信息浪费。
| 方法 | UCF-101 准确率 | HMDB-51 准确率 |
| 之前的深度学习方法 | 约 65% | - |
| 密集轨迹(手工特征) | 85%-87% | 约 57% |
| 仅空间流 | 72.6% | - |
| 仅时间流 | 83.7% | - |
| **双流网络(融合)** | **88.0%** | **59.4%** |
论文里还专门可视化了网络第一层卷积核学到的样子,发现时间流网络的第一层滤波器,大多呈现出明显的方向性模式,像是专门用来捕捉某个特定方向上的运动强度。这不是人工设计出来的,是网络自己从光流数据里学出来的。这个细节挺打动人的地方在于,它说明网络确实"理解"到了运动信息里最关键的成分是方向和强度,而不是随便学到了一堆没有意义的模式。
这篇论文之后发生了什么
双流网络这个思路提出之后,很快成了视频动作识别领域接下来好几年的主流框架,后续大量工作都是在这个骨架上做改进。
2015 年,Wang 等人发表的论文把双流网络和之前提到的密集轨迹方法结合起来,用轨迹信息去指导网络提取更精准的特征,进一步把准确率往上推了一截,证明手工特征和深度网络在那个阶段还是可以相互借力的,不是非此即彼的关系。
2016 年,Feichtenhofer、Pinz 和 Zisserman(还是同一个团队的延续)发表了一篇专门研究"两路网络应该在哪一层融合"的论文,他们发现如果让空间流和时间流不是等到最后才合并,而是在网络中间层就开始做交互融合,效果会更好。这个发现直接推动了后续一系列关于"多流网络中间层怎么融合"的研究。
同样是 2016 年,还有一篇很有影响力的工作叫 Temporal Segment Networks,提出不需要把整段视频的每一帧都塞进网络,而是把视频切成几个片段,每段抽一帧代表,这样既保留了长时间跨度的信息,又大大降低了计算量,进一步把双流网络的思路推向了效率更高的方向。
再往后,3D 卷积网络逐渐兴起,直接用三维卷积核在时间和空间两个维度上同时提取特征,试图用一个网络同时搞定外观和运动信息,不再依赖单独计算光流。但即便到了这个阶段,双流网络提出的核心洞察,也就是"运动信息需要被显式建模,不能指望网络从原始像素里自己领悟",仍然深刻影响着后续工作的设计思路,很多 3D 卷积网络在设计时依然会参考双流架构的融合策略。
写在后面
读这篇论文时,最触动我的一点是,研究者没有一开始就去优化网络结构本身,而是先想清楚了"这个任务需要什么样的输入信息"。很多时候我们习惯性地觉得深度学习的进步靠的是更大的网络、更巧妙的结构,但双流网络提醒我们,有时候真正的突破来自于重新设计问题的输入表示,光流这个选择,比任何网络结构上的调整都更关键。
另一个值得多想一层的地方是,空间流和时间流单独打分的差距,时间流明显更强。这其实暗示了一件更大的事情,深度学习一开始在视频上打不过手工特征,可能根本不是网络能力不够,而是喂给它的信息就不对。方法论上的落后,有时候比不过输入设计上的落后。这个教训放到别的领域大概也适用,先别急着换更强的模型,先看看你给模型看的东西对不对。
Q&A
Q1:双流网络是什么?
A:双流网络是 Simonyan 和 Zisserman 在 2014 年提出的视频动作识别方法,由两个独立的卷积神经网络组成,一个处理静态画面(空间流)负责识别外观信息,一个处理光流场(时间流)负责识别运动信息,两者输出融合后得到最终动作分类结果。
Q2:双流网络的效果比之前的方法好多少?
A:在 UCF-101 数据集上,双流网络达到 88.0% 准确率,超过之前最好的深度学习方法(约 65%),也超过了当时最强的手工特征方法密集轨迹(85%-87%),是深度学习首次在视频动作识别任务上超越手工特征方法。
Q3:为什么双流网络要用光流而不是直接用原始视频帧?
A:因为动作识别的关键在于"怎么动"而不只是"长什么样",光流能把运动方向和速度直接量化成数据交给网络,比让网络自己从连续帧里学习运动模式要容易得多,尤其是在训练数据有限的情况下效果更好。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.