
2014年,深度学习已经在图片识别上大杀四方了。
ImageNet比赛里,卷积神经网络把传统的手工特征方法打得毫无还手之力,准确率一年比一年高。所有人都以为,视频动作识别也该是深度学习的下一个囊中之物,毕竟视频不就是一帧一帧的图片吗?
但事情没这么简单。
有一件事让当时不少研究者感到困惑:在视频动作识别这个领域,深度学习居然一直打不过一种叫做"密集轨迹"的老派手工特征方法。不是差一点,是明显地、持续地落后。这听起来有点反常,毕竟深度学习在静态图像上已经证明了自己的实力,怎么换到视频上就不灵了?
这篇论文要解决的,就是这个尴尬的落差。
视频不是"会动的图片"这么简单
先说说难点在哪。
一张图片,神经网络看的是空间信息:什么形状、什么颜色、什么纹理。但一段视频除了空间信息,还多了一个维度,时间。一个人挥手和一个人举手不动,单看某一帧可能长得几乎一样,区别只在于"动作是怎么随时间变化的"。
如果只是把视频的每一帧单独扔给一个图片分类网络,再把结果平均一下,那网络压根不知道"动作"是什么,它只是在做多次静态图片分类,完全丢失了运动信息。这就是当时深度学习方法效果不好的根本原因之一。
那时候最强的手工特征方法叫密集轨迹
**密集轨迹**:一种传统手工设计的视频特征提取方法,通过跟踪视频中密集采样的点的运动轨迹,并在轨迹周围提取梯度、光流等描述子来表示动作
在UCF-101这个当时主流的动作识别数据集上,密集轨迹配合一些改进技巧能做到88%左右的准确率,而之前尝试用深度网络直接处理视频的方法,准确率普遍在65%到70%左右,足足差了近20个百分点。
20个百分点的差距,意味着什么?意味着每5个动作里,深度学习方法就要比手工特征方法多认错1个。这在当时被很多人认为几乎是深度学习在这个任务上的天花板了,毕竟连续几年的尝试都没能追上手工特征,大家开始怀疑是不是视频这种数据天生就不适合端到端学习。
这篇论文的作者是Karen Simonyan和Andrew Zisserman,他们来自牛津大学。有意思的是,这两位几个月后又发表了另一篇论文,提出了后来大名鼎鼎的VGGNet图像分类网络。也就是说,这篇视频动作识别的论文和VGGNet几乎是同一批人、同一时期的工作。研究者的思路是有延续性的,他们既在琢磨怎么把网络做深做好用来识别图片,也在琢磨怎么让网络理解视频里的运动。
把一个问题拆成两个问题:双流网络
面对"网络学不到运动信息"这个核心矛盾,作者们的思路是:既然一个网络同时学空间外观和时间运动有困难,那就干脆拆成两个网络分别学,最后再把结果合起来。
这就是这篇论文最核心的设计,双流卷积网络
**双流卷积网络**:由两个独立的卷积神经网络组成的架构,一个专门处理单帧图像获取外观信息(空间流),另一个专门处理连续帧之间的光流信息获取运动信息(时间流),两者的预测结果最后融合
具体来说,空间流网络的输入就是视频中随便一帧的RGB图像,它负责识别画面里有什么物体、什么场景,比如认出这是个游泳池、这是个人在打篮球的场地。这部分工作和普通的图片分类网络没什么区别,甚至可以直接借用在ImageNet上预训练好的模型参数,省了不少训练功夫。
时间流网络的输入不是图片,而是光流场
**光流场**:描述视频中连续两帧之间每个像素点的运动方向和速度的一种表示方式,可以理解成给画面里的每个点画一个"运动箭头"
光流场把"谁在往哪个方向动、动得多快"这个信息编码了出来。作者把连续多帧的光流叠在一起,组成一个多通道的输入,喂给专门的时间流网络去学习运动模式。
这里有个细节值得说一下。作者尝试了两种光流的编码方式,一种是常规的光流,直接记录每个点的位移,另一种叫轨迹光流,是沿着运动轨迹重新采样的光流,试图去掉一些摄像机自身晃动带来的干扰。实验发现两种方式效果差别不大,常规光流已经够用。
这个设计其实很像人类看视频的方式。你在看一段体育比赛回放时,大脑其实是同时在处理两类信息:一类是"画面里是什么",球场、球员、球衣颜色;另一类是"东西在怎么动",球飞的方向、球员跑动的轨迹。你不会用同一套脑回路去处理这两件事,它们的性质完全不同,一个是静态的空间模式,一个是动态的时序模式。如果强迫一个网络同时兼顾这两件事,又要认物体又要理解运动,它很可能哪个都学不精,顾此失彼。拆成两条独立的通路,让每条通路专心做好自己那一件事,再合并判断,这是一种"分而治之"的策略。如果不这样拆分,直接把原始视频帧序列硬塞给一个网络端到端训练,会发生什么?论文里提到的早期尝试恰恰印证了这一点,那些方法效果始终不如手工特征,一个可能的原因就是网络很难在缺乏针对性结构的情况下,自己从数据里"顿悟"出运动模式该怎么提取。
数据不够怎么办:多任务学习撑场子
双流网络这个思路听起来不错,但马上撞上了另一个现实问题:数据不够。
当时能用来训练视频动作识别模型的数据集,规模比ImageNet小得多。UCF-101只有大约13000个视频片段,HMDB-51更小,只有约7000个。这个规模对于训练一个深层卷积网络来说是相当吃紧的,容易过拟合,也就是模型死记硬背了训练集里的细节,换到新视频上就不灵了。
图片识别领域能靠ImageNet的百万级数据量把网络喂饱,视频领域没这个条件。
作者们想了个办法,叫多任务学习
**多任务学习**:让同一个网络同时在多个相关数据集上训练,共享网络的大部分参数,但针对每个数据集保留独立的输出分类层,以此利用不同数据集之间的共性来缓解单个数据集数据量不足的问题
具体做法是,把UCF-101和HMDB-51两个数据集拿来一起训练时间流网络,网络的主干部分是共享的,但最后接了两个不同的分类输出层,一个对应UCF-101的101个动作类别,一个对应HMDB-51的51个类别。训练的时候,每个视频样本只更新它所属数据集对应的那个输出层,但共享主干会同时从两边的数据里学到东西。
这就好比一个厨师同时在两家风格不同但食材有重叠的餐厅兼职。虽然两家餐厅的菜单不完全一样,一家主打川菜一家主打粤菜,但基础的刀工、火候控制这些底层功夫是通用的。厨师在处理两家餐厅的订单时,那些通用技能会被反复锤炼得更扎实,即使单独某一家餐厅的订单量不够让他把刀工练到位。如果不让这个厨师兼职两家,只让他守着一家订单量本就不多的小餐厅,他练刀工的机会就少了很多,进步自然更慢。
实验证明这招确实管用。在HMDB-51上,加入多任务学习后,时间流网络的准确率有明显提升,这说明当数据量是瓶颈时,借用相关但不完全相同的数据来源确实能帮网络学到更泛化的特征。
融合的方式:简单相加也很有效
两条流各自训练好之后,怎么把它们的判断结果合到一起?
作者试了几种融合方式,包括直接对两个网络输出的类别得分做平均,以及训练一个额外的支持向量机来学习怎么组合两条流的得分。有意思的是,结果显示无论用哪种融合方式,效果都相当接近,简单的平均和加权求和已经能拿到很不错的表现,这说明双流架构的收益主要来自"两条流各自学到了不同的、互补的信息",而不是来自某种精巧的融合技巧。
这一点其实也符合直觉。就像一个案件的判断,如果目击证人和物证专家各自独立给出了可靠的结论,案子破得顺不顺利,主要取决于这两方证据本身够不够扎实、够不够互补,而不是取决于法官汇总证词时用了多华丽的表达方式。汇总的方式当然重要,但如果两边证据本身信息量有限或者高度重叠,再怎么调整汇总方法也无济于事。
实验结果:数字说话
最终这套双流网络在两个主流数据集上的表现,直接刷新了当时深度学习方法在这个任务上的纪录。
| 方法 | UCF-101准确率 | HMDB-51准确率 |
|---|---|---|
| 仅空间流网络 | 72.6% | 40.5% |
| 仅时间流网络 | 81.0% | 54.6% |
| **双流网络(融合)** | **88.0%** | **59.4%** |
| 密集轨迹(手工特征,当时最强) | 87.9% | 57.2% |
这组数字很值得细看。
首先,仅用空间流网络的表现是72.6%,这基本反映了"只看画面内容、完全不管运动信息"能做到什么程度。而仅用时间流网络能达到81.0%,反而比空间流更高。这个结果其实有点反直觉,按常理你可能觉得"这是什么场景"应该比"这东西怎么动"更容易判断动作类别,但实验说明运动信息本身对于区分动作类型的贡献可能更大。
如果只用空间流,会发生什么?准确率停留在72.6%,比双流融合后的88.0%整整低了15个百分点。这说明单靠外观信息去判断动作,天花板确实不高,漏掉运动信息是个硬伤。
而把两条流融合起来之后,UCF-101上的准确率冲到了88.0%,反超了密集轨迹的87.9%,虽然只领先了0.1个百分点,但这是深度学习方法第一次在这个任务上追平甚至反超手工特征方法。在HMDB-51上,双流网络的59.4%对比密集轨迹的57.2%,领先幅度更明显一些。
这个反超放到当时的历史节点里看,分量不小。要知道深度学习在图像分类上早已经证明自己了,但在视频动作识别这个更复杂的任务上,一直被一种诞生于传统计算机视觉时代的手工方法压着打,压了好几年。这篇论文相当于宣告,只要给深度网络找到合适的架构设计,让它能显式地捕捉运动信息,而不是指望网络凭空自己领悟,深度学习照样能在视频理解上追上甚至超越手工特征。这个意义,某种程度上不亚于AlexNet在图片分类上证明深度学习可行性的那个时刻,只是发生在一个更难的任务上,又晚了两年。
后续的故事:这条路走了多远
双流网络这个思路提出之后,并没有就此打住,后面的研究者接着往下走,还走出了几条挺有意思的分支。
2016年,Feichtenhofer等人发表的论文进一步研究了空间流和时间流之间应该在网络的哪一层进行融合,而不是等到最后输出层才合并。他们发现,让两条流在网络中间层就开始交换信息,能进一步提升效果,这个思路后来被称作时空融合网络。
再往后,2017年Carreira和Zisserman(同样有Zisserman的身影)提出了I3D网络,把双流网络里的二维卷积扩展成三维卷积,让网络直接在时间和空间两个维度上同时做卷积操作,不再需要单独计算光流这一步,同时结合大规模视频数据集Kinetics做预训练,进一步把准确率往上推。这也从另一个角度说明,双流网络提出的"运动信息需要专门处理"这个核心洞察是站得住的,后续工作只是在寻找更高效、更端到端的方式去实现这个洞察,而不是否定它。
从这个角度看,这篇论文更像是一个起点,它没有解决所有问题,光流的计算本身就很耗时,而且是提前算好的,不是端到端学出来的,这也是它后来被I3D这类工作改进的地方,但它证明了一件事:深度学习要想在视频理解上真正走通,得先想清楚"运动"这个东西该怎么表示给网络看,而不是简单地把图片识别那套东西搬过来用。
写在后面
读这篇论文最让我意外的一点是,时间流单独跑起来比空间流还强,81.0%对72.6%。这多少打破了一种直觉,我原以为"认出画面里有什么"应该是比"看懂动作怎么变化"更基础、更容易的任务,结果数据反过来了。这说明动作识别这件事,很大程度上真的是关于"变化"本身的,而不是关于场景里有什么东西。
另一个值得琢磨的细节是,融合方式(简单平均还是训练SVM)对最终效果影响很小。这提示了一个更普遍的道理,当两路信息本身足够独立、足够互补时,合并的手法反而没那么重要了。这跟很多"特征工程决定成败,模型只是锦上添花"的场景是相通的。
光流预处理这一步始终是个甩不掉的负担,直到I3D之类的工作才慢慢把它端到端化。这也提醒人,一个漂亮的思路提出来之后,往后几年的工作往往是在填补它留下的"手工痕迹"。
Q&A
Q1:双流卷积网络是什么?
A:双流卷积网络是2014年由牛津大学Simonyan和Zisserman提出的视频动作识别模型,由空间流和时间流两个独立卷积网络组成,空间流处理单帧RGB图像获取外观信息,时间流处理光流场获取运动信息,两者结果融合后输出动作类别。
Q2:双流网络的效果比传统手工特征方法密集轨迹好吗?
A:在UCF-101数据集上双流网络达到88.0%准确率,略高于密集轨迹的87.9%;在HMDB-51上达到59.4%,也高于密集轨迹的57.2%。这是深度学习方法在视频动作识别任务上首次追平并反超手工特征方法。
Q3:为什么双流网络要把空间信息和时间信息分开处理?
A:因为一个网络同时学习画面内容和运动模式很困难,容易顾此失彼。拆成两条独立通路,让空间流专注认物体场景,时间流专注学运动模式,再合并判断,能让每部分学得更精,实验证明这比直接端到端处理原始视频帧效果好得多。
好文章,需要你的鼓励
ARCHead是一种专门压缩大语言模型输出层的方法,通过量化低秩核心与激活度量修正,将LM-head存储压缩至BF16的约25%,质量损失极小。
这项研究发现AI投票推理在多答案问题上会系统性失效,提出用因果数学规则直接验证候选答案的CALVER方法,准确率比投票提升约11至19个百分点,且差距随尝试次数持续扩大。
这项来自港科大与腾讯视频的研究提出WorldCycle框架,通过可逆动作循环构造无标注自验证奖励,将视频世界模型的长程漂移误差降低最高44%,复合动作准确率提升约四倍。
哥本哈根大学团队构建了首个同时覆盖三种引用粒度、屏蔽信息泄露、包含全量段落候选库的法律信息检索数据集LegalPincite,用于评估法律判决段落精确检索任务。