![]()
2014 年,如果你问计算机视觉领域的研究者一个问题:深度学习能不能看懂视频里人在做什么动作,大概率会得到一个尴尬的回答。
不是因为没人试过。恰恰是因为试过的人,都被现实教育了一遍。
那一年深度学习已经风光无限,AlexNet 在图片分类上把传统方法打得溃不成军,整个计算机视觉圈子都在往神经网络这条路上冲。可是动作识别这个领域有点特殊,大家发现深度学习模型死活打不过一种叫做密集轨迹的老派手工特征方法。差距还不小,好几个百分点,而且持续了很长时间没人能填平这条沟。
这事儿说起来挺讽刺的。图片分类已经被深度学习攻陷,视频不就是一张一张的图片加上时间顺序吗,为什么就是啃不动。
问题出在哪:视频比图片多的那个维度,恰恰是最难吃透的
一张静态图片里,猫是猫,狗是狗,神经网络靠学习颜色、纹理、形状这些空间信息就能分辨。可视频里的动作不一样,一个人挥手和一个人挥拳,单看某一帧画面可能长得几乎一样,真正区分它们的是动作的轨迹,是这一帧和下一帧之间发生了什么变化。
这个"变化"就是运动信息,专业上叫做时序信息。
> 时序信息:视频中随时间变化的动态信息,比如物体运动的方向和速度,区别于单帧图像里的静态外观信息。
问题是,当时的神经网络架构天生就是为处理静态图片设计的,卷积层擅长抓取空间上的图案,但对"前后帧之间发生了什么"这种时间维度上的规律毫无办法。研究者试过很多办法把时间信息硬塞进网络里,比如把多帧图像直接堆叠起来一起输入,但效果始终不理想。
这就好比你想教一个只会看照片的人理解一段舞蹈。给他看几十张舞蹈过程中的单张照片,他或许能猜出这是在跳舞,但让他准确分辨这是华尔兹还是探戈,几乎不可能,因为区分两种舞蹈的关键根本不在某一张照片的姿势里,而在姿势变化的节奏和轨迹上。如果你不给他时间维度上的信息,只给静态快照,他能做的只有瞎猜。
牛津大学 VGG 组的 Karen Simonyan 和 Andrew Zisserman 在 2014 年发表的这篇论文,就是冲着这条鸿沟去的。有意思的是,这两位几个月后又发表了另一篇论文,提出了后来大名鼎鼎的 VGGNet。也就是说,这篇动作识别的论文和 VGGNet 几乎是同期的工作,出自同一个研究小组的手笔。
核心思路:把一个难题拆成两个好解决的题
Simonyan 和 Zisserman 没有去死磕"怎么让一个网络同时理解空间和时间",而是选择了一条更聪明的路:干脆用两个网络,一个专门看空间,一个专门看时间,最后把两边的判断结果加权融合。
这个架构被称为双流网络。
> 双流网络:由两个独立的卷积神经网络组成的架构,一个处理静态图像的空间信息,另一个处理运动信息的时序信息,两者的预测结果最后融合得出最终判断。
空间流很直接,拿视频里的某一帧原始画面,像做普通图片分类一样丢进一个卷积网络,让它学习画面里的人物、背景、物体这些静态线索。这一路其实和当时做图片分类的网络架构没什么本质区别。
真正的巧思在时序流上。
光流:把"运动"这件事翻译成机器能读的语言
时序流要处理的输入不是原始画面,而是一种叫做光流场的东西。
> 光流场:描述视频中每个像素点从一帧到下一帧移动方向和速度的向量场,可以理解为给画面中每个点画一个箭头,箭头指向它接下来要往哪儿动。
具体来说,论文用的是密集光流,给画面里几乎每一个像素点都计算出一对数值,分别代表这个点在水平方向和垂直方向上的位移量。把连续多帧,论文里用的是 10 帧,这样计算出来的水平位移和垂直位移堆叠在一起,就形成了一个专门描述运动信息的输入,喂给第二个卷积网络去学习。
这里有个细节特别值得说。作者还试了两种堆叠方式,一种是让光流场跟着画面中的物体走,叫做轨迹堆叠光流,另一种是简单地在固定的像素位置上堆叠,叫光流堆叠。实验发现两者效果差别不大,最后选择了更简单的后者。
为什么要单独把光流提取出来当输入,而不是让网络自己从原始帧序列里学习运动信息?
这就好比让一个学生做数学题,你可以直接给他十道原始的应用题让他自己去发现规律,也可以先帮他把关键的数量关系提取出来,列成算式,再让他去解。前者理论上可行,但特别费劲,学生可能要看几百道题才能摸索出门道。后者相当于你把最有用的信息先萃取出来,他学起来立刻就轻松了。光流场做的就是这个"预先萃取"的工作,它把散乱在像素变化里的运动信息,提炼成了一个结构清晰、信息密度很高的表示,网络不需要自己去费力发现"哪些像素在动、往哪个方向动",这些答案已经写在光流场里了。
如果不做这一步会怎样?论文里其实间接给出了答案。此前有研究尝试直接把连续的原始帧堆叠起来输入网络,让网络自己学运动模式,但效果远不如用光流场,这也印证了预先提取运动信息这一步的价值。
融合:两路判断怎么拧成一股
空间流看画面内容,时序流看运动轨迹,两个网络各自输出一个分类的概率分布,最后论文尝试了两种融合方式,一种是简单平均,另一种是训练一个线性支持向量机把两路的输出再综合判断一次。结果发现用支持向量机做融合效果更好一些。
这个设计逻辑其实很像团队协作里的分工。你可以想象一个案件里有两位侦探,一位专门负责看现场留下的物品线索,另一位专门负责分析嫌疑人行动路线的时间线。两人各自得出一个初步判断,最后案子怎么定,不是随便拍脑袋决定,而是有一个更高层的裁决机制,权衡两边证据的可信度,给出最终结论。如果只依赖一位侦探的判断,案子很容易出错,正是因为两种线索各有侧重,互补性才能发挥出来。
实验结果:数字说话的时刻
这篇论文在两个标准数据集上做了测试,UCF-101 和 HMDB-51,都是当时动作识别领域的权威测试集,收录了从跳伞到弹吉他各种各样的人类动作视频片段。
先看单独用空间流会发生什么。论文数据显示,只用空间流,在 UCF-101 上准确率是 72.6%。这个数字单独看不算差,但问题是,当时最好的手工特征方法,比如密集轨迹加上一些改进,已经能做到 87% 左右的准确率。也就是说单独的空间流深度网络,比传统手工方法差了整整十几个百分点。
再看单独用时序流。准确率提升到了 81.0%,已经比空间流高出不少,这说明运动信息本身就包含了大量对判断动作至关重要的线索,甚至比静态画面信息更关键。
而当两路网络融合之后,准确率跳到了 88.0%。
| 方法 | UCF-101 准确率 |
| 仅空间流 | 72.6% |
| 仅时序流 | 81.0% |
| **双流融合** | **88.0%** |
| 当时最好的手工特征方法 | 约87% |
这组数字背后的信息量很大。20 个百分点的差距,意味着什么?意味着单独用空间流的深度网络,每识别 5 个动作,就要比手工方法多认错 1 个以上。而一旦把运动信息补上,深度学习不仅追平了手工特征方法的表现,还小幅超越了过去几年积累下来的最优手工方案。
这是深度学习第一次在视频动作识别这个具体任务上,打赢了手工特征方法。这个时间点是 2014 年,放在整个深度学习发展的脉络里看,分量不亚于 AlexNet 当年在图片分类上引起的震动。之前深度学习在这个子领域一直被认为"打不过老方法",这篇论文算是把这个魔咒破掉了。
训练技巧:数据不够怎么办
值得一提的是,当时的视频动作识别数据集规模都不大,UCF-101 只有一万三千多个视频片段,这个量级对训练深度网络来说属于偏小的。数据不够容易导致过拟合,也就是网络记住了训练集里的细节,却学不会真正通用的规律。
论文里采取了几种应对办法。一种是多任务学习,让同一个网络同时在两个不同的数据集上训练,共享底层参数,这样相当于变相扩充了训练数据量。另一种是常规的数据增广手段,比如对图像做随机裁剪、水平翻转、色彩抖动这些操作,人为制造出更多样化的训练样本。
这些手段单独看都不算新奇,但组合起来确实缓解了小数据集训练深度网络容易崩的问题。这也提示了一个后来被反复验证的规律,深度学习模型的效果,很大程度上取决于喂给它多少高质量的数据,方法再精巧,如果数据量跟不上,照样发挥不出实力。
这篇论文之后发生了什么
双流网络提出之后,一系列后续研究开始在这个框架上继续加码。
2016 年,Feichtenhofer、Pinz 和 Zisserman 团队发表了 Two-Stream ConvNet Fusion 相关研究,进一步探索了空间流和时序流应该在网络的哪一层进行融合更有效,而不是像原始论文那样等到最后输出结果才融合,这个改进让网络能更早地让两路信息互相影响,识别准确率进一步提升。
2016 年前后,Wang 等人提出的 Temporal Segment Networks(时序分割网络)把双流网络的思路扩展到了处理更长视频片段的场景,原始双流网络一次只能处理很短的一小段视频,而 TSN 通过对整段视频稀疏采样多个片段,再把各片段的双流网络输出结果聚合起来,解决了长视频里动作识别的问题,在多个数据集上刷新了当时的最好成绩。
再往后,3D 卷积网络路线,比如 I3D,也吸收了双流网络"分别处理空间和运动信息"的思想,把这个思路和三维卷积结合了起来,进一步推动了整个领域的发展。可以说双流网络提出的"空间信息和运动信息分开处理再融合"这个基本框架,影响了后续好几年这个方向上大部分工作的设计思路。
写在后面
读这篇论文的时候,最触动我的不是最后 88% 那个数字,而是研究者面对一个复杂问题时选择拆解而不是硬啃的态度。他们完全可以尝试设计一个更复杂的三维卷积网络,试图让一个网络同时吃透空间和时间,但那条路当时其实没人走通。他们选的是相对朴素的办法,拆成两个网络,每个只解决一半的问题,再想办法拼起来。
这里有个细节我觉得值得单独说一下,光流场作为输入这件事,本质上是承认了一个事实:神经网络不是万能的,有些信息如果不经过预处理直接喂给它,它学起来效率极低。这和后来"端到端学习一切"的潮流其实有点背道而驰,但恰恰是这种"该预处理就预处理"的务实态度,让这篇论文在当时的技术条件下拿到了最好的结果。
这篇论文没解决的问题也很明显,光流计算本身很耗时,而且是和神经网络训练分开的两套流程,这在后来促使了不少工作去研究能不能让网络自己端到端学会提取运动信息,这条路走起来并不轻松,值得追问的是,我们现在的大模型是不是也存在类似的问题,某些信息表示是不是应该先人工提炼一步,而不是指望模型自己从原始数据里悟出来。
Q&A
Q1:双流网络是什么?
A:双流网络是 2014 年由牛津大学 VGG 组的 Simonyan 和 Zisserman 提出的视频动作识别模型,由两个卷积神经网络组成,一个处理单帧画面的空间信息,另一个处理光流场表示的运动信息,两者结果融合后输出最终动作分类,是深度学习首次在这个任务上超越手工特征方法的关键工作。
Q2:为什么双流网络要用光流场而不是直接用原始视频帧?
A:因为直接堆叠原始帧让网络自己学运动规律效率很低,效果不好。光流场提前把每个像素的运动方向和速度计算出来,相当于把运动信息预先提炼成结构清晰的输入,网络学习起来更容易,实验证明这样效果明显更好。
Q3:双流网络的效果到底有多好?
A:在 UCF-101 数据集上,单独空间流准确率 72.6%,单独时序流 81.0%,两者融合后达到 88.0%,超过了当时最好的手工特征方法约 87% 的水平,是深度学习第一次在视频动作识别上打赢传统方法。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
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.