
2014年,深度学习已经在图像识别上称王称霸两年了。AlexNet在2012年横空出世,把ImageNet图像分类的错误率从26%砍到15%,整个计算机视觉圈都被震动了。
但有一件事一直让研究者们脸上挂不住。
在视频动作识别这个任务上,深度学习居然打不过一个手工设计的老方法,这个方法叫做密集轨迹
密集轨迹*:一种手工设计的视频特征提取方法,通过追踪视频里密集分布的点的运动轨迹,统计轨迹周围的图像和运动信息来判断动作类别
密集轨迹在当时的标准测试集UCF-101上能达到接近87%的准确率,而当时的深度学习方法,包括一些专门为视频设计的3D卷积网络,只能做到65%左右,差了整整20个百分点。
20个百分点意味着什么。意味着如果你让密集轨迹和深度学习各识别100个视频动作,密集轨迹能认对87个,深度学习只能认对65个,多认错了22个。这不是小差距,这是碾压式的差距。
问题出在哪里。图像识别一张静态照片,网络只需要学会认物体的形状、纹理、颜色。但一段视频里有动作,动作的核心是运动本身,是时间维度上的变化。直接把3D卷积扔到一堆视频帧上,网络很难自己学出"什么叫挥拍""什么叫踢腿"这种时间模式,数据量不够,网络也太难训练。
牛津大学的Karen Simonyan和Andrew Zisserman,两位后来因为VGGNet闻名的研究者,在这个时候提出了一个思路。他们没有硬啃时间信息这块硬骨头,而是选择拆分问题,把一个视频拆成两条完全独立的信息流分别处理。
这篇论文的名字叫做《双流卷积网络用于视频中的动作识别》,发表在2014年的NeurIPS上。它做的事情不复杂,但换了一个角度看问题,结果就完全不一样了。
一个视频里到底藏着什么信息
先说说动作识别到底难在哪。
你看一段视频,比如一个人在打网球。你的大脑同时在处理两件事:一是这个场景看起来像什么,球场、球拍、白色的球衣,这些是静态的外观信息;二是这个人的身体在怎么运动,手臂挥动的轨迹、球飞出去的方向,这些是动态的运动信息。
外观信息告诉你"这大概是网球相关的场景",运动信息告诉你"这个动作具体是挥拍还是发球还是接球"。
单靠外观容易搞混。一张静止的截图里,一个人举着球拍站着,你分不清他是准备发球还是刚打完一拍愣住了。单靠运动也不够,你看到一个挥动的轨迹,但不知道挥的是网球拍还是高尔夫球杆还是一把剑。
两种信息缺一不可,而且性质完全不同。这是理解这篇论文设计思路的关键。
拆开来做:空间流和时间流
Simonyan和Zisserman的做法是,不逼一个网络同时学会看懂外观又看懂运动,而是训练两个独立的卷积网络,一个专门看外观,一个专门看运动,最后把两边的判断结果加权融合。
第一个网络叫空间流
空间流*:双流网络中负责处理静态外观信息的分支,输入是视频里单独一帧的RGB图像,结构上就是一个普通的图像分类卷积网络
它的输入很简单,就是视频里随便抽出来的一帧图片,长得跟普通的图像分类任务没什么区别。这个网络负责回答"这个场景、这个物体大概是什么"。因为本质上就是图像分类,所以可以直接借用在ImageNet上预训练好的网络,用少量视频数据微调就行,不需要从零开始学。
第二个网络叫时间流
时间流*:双流网络中负责处理运动信息的分支,输入不是图像而是光流场,专门捕捉像素在连续帧之间的位移信息
这是这篇论文真正的巧思所在。时间流不直接吃视频帧,而是吃一种叫做光流的东西。
光流*:描述视频中相邻两帧之间每个像素点移动方向和速度的向量场,可以理解成给每个像素画一个箭头,指出它接下来往哪个方向、移动了多远
想象你在看一段慢动作回放,把每一个像素点都做个记号,记录它在下一帧里跑到了哪里,这些记号连起来的箭头场就是光流。手臂往上抬,对应区域的箭头就朝上;球往前飞,对应区域的箭头就朝前。这张箭头图本身完全不含颜色、纹理这些外观信息,它纯粹描述"动"这件事。
论文里把连续10帧计算出来的光流叠在一起,变成一个多通道的输入,喂给一个结构类似的卷积网络。这个网络因此可以专心学习"这种运动模式对应哪个动作类别",不会被背景颜色、球衣款式这些无关信息干扰。
这里必须提一个类比,而且要讲清楚代价。
如果你想学会分辨一个人是在挥高尔夫球杆还是挥棒球棒,只看一张静态照片,你可能会被握杆姿势、场地颜色误导,因为高尔夫球场和棒球场看起来完全不一样,你的判断可能变成"背景绿油油就是高尔夫",这是走了捷径,并没有真正学会动作本身。但如果你只看一段抽掉了所有颜色信息、只剩运动箭头的动画,你就被迫盯着挥动的轨迹形状、速度变化去判断,这时候你学到的才是动作真正的规律。
如果不拆成两条流会怎样。网络会倾向于走捷径,用背景和场景信息代替真正的动作理解,遇到背景相似但动作不同的视频就会翻车,这恰恰是之前3D卷积方法效果不好的一个重要原因。
融合方式:两个网络各自打分再加权
空间流和时间流是分开训练的,预测的时候各自给出一个分类概率分布,最后按经验设定的权重把两边的分数加起来,得到最终判断。
论文里试验发现,单独用空间流,在UCF-101上大概能到73%左右;单独用时间流,能到83%左右;两者融合后能冲到88%左右。
这组数字值得细品。运动信息单独看比外观信息单独看更管用,差了差不多10个百分点,说明动作识别里"动"本身比"背景长什么样"更关键。但两者加起来又比单独用时间流高出5个百分点,说明外观信息不是没用,它能补上运动信息判断不了的部分,比如区分两个运动模式相似但场景完全不同的动作。
数据不够怎么办:多任务训练
另一个不起眼但很重要的细节是,当时能用来训练动作识别模型的视频数据集非常小,UCF-101只有一万多个视频片段,根本喂不饱一个深层卷积网络。
Simonyan和Zisserman的解法是多任务学习
多任务学习*:让同一个网络同时在多个相关但不完全相同的数据集或任务上训练,共享底层特征,提升在数据量较小任务上的表现
具体来说,他们让网络同时在UCF-101和另一个数据集HMDB-51上训练,两个数据集的类别不完全重合,但网络的底层特征提取部分是共享的,只在最后分类层上分开。这样网络能从两份数据里都学到东西,相当于把两个小数据集拼成了一个更大的训练资源池。
这就像两个班的老师资源有限,分别开班效果都一般,但如果两个班共用同一批老师,只在最后阶段分开辅导各自班级的重点内容,整体教学质量反而会提升,因为老师见过的学生案例更多,总结出来的经验更普适。如果不这样做,每个数据集单独训练,模型很容易过拟合到那一万多个样本的特定分布上,遇到测试集里没见过的拍摄角度或者背景就容易翻车。
这篇论文出来之后发生了什么
这篇论文的意义不只是刷了一个更高的分数,而是证明了一件事,深度学习是可以在视频动作识别上打败手工特征的,只要方法设计对了路子。这是深度学习在这个具体任务上第一次翻盘,时间点是2014年,跟AlexNet在图像分类上的意义类似分量。
三年后,Carreira和Zisserman在2017年发表了I3D网络的论文,他们把双流的思路和3D卷积结合起来,用膨胀的3D卷积核同时处理时空信息,并且在更大规模的Kinetics数据集上预训练,把动作识别的准确率进一步推高,这篇论文后来成了视频理解领域最常被引用的基线之一。
再往后,2016年Feichtenhofer等人发表了关于时空残差网络的研究,探索怎样让空间流和时间流在网络中间层就开始互相交流信息,而不是等到最后一步才简单加权融合,这解决了双流网络里两条流"各自为战"、信息交流太晚的问题。
这些后续工作有一个共同的出发点,都是在双流网络证明"分开处理外观和运动是可行的"这个基础上,去解决双流网络本身还没解决好的问题,比如两条流之间的信息能不能更早融合,光流的计算能不能更高效。
方法 空间流准确率 时间流准确率 融合准确率
密集轨迹(手工特征) — — 约87%
早期3D卷积网络 — — 约65%
双流卷积网络 约73% 约83% 约88%
从这张表能看出来,双流网络不仅追平了密集轨迹,还小幅超过了它,这在当时是个不小的心理突破,深度学习终于在这个战场上站稳了脚。
Q&A
Q1:双流卷积网络是什么?
A:双流卷积网络是2014年由Simonyan和Zisserman提出的视频动作识别方法,把视频拆成外观信息和运动信息两条流分别用卷积网络处理,最后融合两边的判断结果。
Q2:双流卷积网络里的时间流为什么不直接用视频帧?
A:因为直接用视频帧容易让网络学到背景、场景等无关信息,而用光流场可以让网络专注于像素运动本身的模式,避免被外观信息干扰,更准确地捕捉动作特征。
Q3:双流卷积网络对后续研究有什么影响?
A:它启发了2017年的I3D网络等后续工作,这些研究把双流思路和3D卷积结合,或者让两条流更早交换信息,进一步提升了视频动作识别的准确率。
好文章,需要你的鼓励
本文介绍LT-OPD训练框架,通过让极限压缩的多模态大模型在自己生成的内容上接受满血版模型指导,并配合渐进式课程学习,在仅保留5%视觉token时把性能保留率从68.6%提升到82.3%,且不增加推理成本。
本文解读ALIGNOPSD方法,该方法针对AI智能体训练中"决策与时间戳错配"问题,通过先对齐功能相同的决策场景再打分,并按可变长度决策段分配信用,在ALFWorld、WebShop、Search-QA三大任务上相比GRPO提升5.5%至8.7%。
本文介绍自适应一致性图(ACG)方法,通过持久化执行记忆图与预算感知的上下文构建,帮助AI智能体在长任务中减少信息失联,在多项基准测试中相比ReAct等基线方法提升了任务成功率。
多智能体AI协作时重复计算KV缓存浪费严重。PReCache提出预计算低秩缓存和中性基础缓存重构两项设计,免训练实现最高3.1倍加速、2.3倍吞吐提升,且准确率仅比不共享方案低1.1个百分点。