
2014年,如果你去问一个计算机视觉领域的研究者,深度学习能不能看懂视频里的动作,大概率会得到一个尴尬的沉默。
那一年,深度学习已经在静态图片识别上打得风生水起。AlexNet两年前横空出世,把图片分类的错误率拉低了一大截,整个学术圈都在往卷积神经网络的方向狂奔。但奇怪的是,一旦把"图片"换成"视频",神经网络就突然没那么灵了。
最好的深度学习视频识别方法,准确率停留在65%左右。而一种叫做"密集轨迹"的老派手工特征方法,能做到88%。
这个差距有多大?如果你在做100个动作识别的测试,深度学习方法会比手工方法多认错23次。这不是一点点落后,这几乎是让人怀疑深度学习这条路是不是走错了方向。
这就是Karen Simonyan和Andrew Zisserman两位研究者在2014年面对的局面。他们后来发表的论文,标题叫《用于视频动作识别的双流卷积网络》,而这篇论文做的事情,说得直白点,就是想明白一件事:视频比图片多了什么,而神经网络又漏掉了什么。
问题出在哪:视频不是"会动的图片"
要理解这篇论文的巧妙之处,得先搞懂一件事:为什么直接把处理图片的方法搬到视频上会失效。
最直觉的做法是什么?把视频的每一帧当成一张图片,丢进卷积神经网络里识别,再把结果综合一下。这个思路听起来合理,但实际效果很差。
问题在于,这种做法完全忽略了动作本身的信息。想象你只看一张照片,照片里一个人的胳膊抬到半空,手里拿着杯子。这张照片可以是"举杯庆祝",可以是"往上够东西",也可以是"正在放下杯子的中间瞬间"。单张画面里,静止的姿势是模糊的,真正决定这是什么动作的,是这个姿势前一瞬间和后一瞬间发生了什么变化。
换句话说,动作的本质藏在运动里,而不是藏在某一帧的外观里。可是当时的神经网络,天生擅长学习"这是什么东西"(外观特征),却不擅长学习"这东西在往哪儿动"(运动特征)。
有一种早期尝试是用3D卷积,直接把时间维度也塞进卷积操作里,让网络自己从原始像素里学出运动的规律。这个想法很自然,但当时数据量不够大,网络学不出稳定的运动模式,效果并不理想。
这时候,Simonyan和Zisserman做了一个听起来简单甚至有点"偷懒"的决定:既然网络自己学不好运动信息,那就不逼它学了,直接把运动信息计算好喂给它。
光流:提前算好的运动地图
这里要引入这篇论文最核心的一个概念。
> 光流*:描述视频中每个像素点从一帧到下一帧移动方向和速度的一张"运动地图",通俗理解就是给每个像素画一个箭头,指出它接下来往哪儿动、动多快。
光流不是这篇论文发明的,它在计算机视觉里已经是个成熟的老工具,专门用来捕捉画面中物体的运动轨迹。Simonyan和Zisserman的洞察是,既然光流已经能把运动信息提炼得这么干净,为什么不直接把光流图丢给卷积神经网络,让网络在这张"运动地图"上学习动作模式,而不是逼着网络从原始视频像素里自己摸索运动规律。
这就好比你要教一个刚学开车的人判断路况,你有两种方式。第一种是直接给他一堆行车记录仪的连续视频,让他自己去总结"什么样的画面变化意味着前车在刹车"。第二种是先给他装一个雷达测速仪表,直接告诉他"前车正在以每秒3米的速度减速",他只需要学会看这个仪表就行。第二种方式明显更容易学会,因为你已经帮他把最难提炼的那部分信息处理好了。
如果不用光流,只让网络自己从像素堆里挖运动信息,会发生什么?论文里的对照实验很直接地回答了这个问题:只用外观信息的网络,准确率是72.6%,加上运动信息之后跳到接近88%。这十几个百分点的差距,几乎全部来自"提前算好运动地图"这一个决定。
双流架构:一个看"长什么样",一个看"怎么动"
搞清楚运动信息的重要性之后,接下来的问题是,怎么把外观信息和运动信息都用起来,又不互相干扰。
Simonyan和Zisserman的答案是搭两条完全独立的卷积神经网络,一条专门吃视频帧的原始画面,另一条专门吃光流图,两条网络各自训练,最后把两边的判断结果加权融合在一起。
> 空间流*:处理单张视频帧图像的神经网络分支,负责识别画面里有什么,比如场景、物体、人物的外观。
> 时间流*:处理连续多帧光流图的神经网络分支,负责识别画面里的东西在怎么动,比如挥手、跑步、跳跃这类动态模式。
这种"分工"的设计思路,你可以联想成一个乐队的两个乐手各管各的声部。一个人专门弹主旋律(空间流负责识别场景和物体是什么),另一个人专门打节奏鼓点(时间流负责识别动作的运动模式),两人各自练好自己的部分,最后合奏出来的效果远比一个人同时兼顾旋律和节奏要清晰。如果强行让一个网络同时学两件事,就像让一个人一边唱主旋律一边打鼓,两件事互相抢注意力,学什么都学不精。
论文里给出了具体数据支撑这个设计的价值。单独用空间流,准确率是72.6%。单独用时间流,准确率能到81%左右,说明运动信息本身比外观信息对动作识别更管用。而两条流融合之后,准确率跳到接近88%,比单独任何一条流都高出一大截。这说明两种信息不是互相替代的关系,而是互补的关系,外观信息负责回答"这是什么场景",运动信息负责回答"这是什么动作",两者合力才能给出准确判断。
论文中展示的网络结构图上可以看到,两条流的卷积层结构其实很相似,都是几层卷积加池化再接全连接层,区别主要在输入。空间流输入是单帧RGB图像,时间流输入是若干帧堆叠起来的光流图。这种结构上的相似性也说明,双流网络的关键创新不在于卷积层设计本身有多复杂,而在于"喂给网络什么样的输入"这个选择。
训练数据不够怎么办:用图片数据"借"来的知识
深度学习一个绕不开的老问题是,网络越大越深,需要的训练数据也越多。而当时能用的视频动作数据集规模都不大,比如UCF-101只有13000多个视频片段,这个规模对于训练一个深层卷积网络来说是偏小的,容易导致过拟合。
> 过拟合*:模型在训练数据上表现很好,但换到没见过的新数据上表现明显变差,相当于死记硬背了考试题目却没真正掌握知识点。
Simonyan和Zisserman采取的办法是,把空间流网络先在超大规模的静态图片数据集ImageNet上做预训练,再迁移到视频动作数据集上做微调。这是因为空间流本质上处理的是单帧图像,识别的是场景和物体外观,这和图片分类任务的性质是相通的,ImageNet上学到的"认识猫狗汽车"的能力,可以直接迁移过来帮助理解视频帧里的场景内容。
这个做法背后的道理,类似一个已经会说流利英语的人去学德语。他不需要从零开始学"什么是名词、什么是动词"这些语言的基础结构,因为这些认知能力已经在学英语时打好了底子,他只需要专注学习德语特有的词汇和语法规则。如果不做这层预训练,直接在小规模视频数据上从零训练空间流网络,网络很可能因为见过的样本太少,学出一堆记住了训练集细节但泛化能力很差的参数,一到测试集上表现就崩。
时间流由于输入是光流图而不是自然图像,不能直接套用ImageNet预训练的参数,所以这条流的训练更依赖视频数据集本身,论文里也用了一些数据增强手段来缓解数据不足的问题,比如对训练样本做裁剪、镜像翻转等变化,人为扩充训练样本的多样性。
结果说话:第一次让深度学习追上手工特征
这篇论文最终在两个当时主流的动作识别数据集UCF-101和HMDB-51上做了测试。
> UCF-101*:一个包含101类人类动作的视频数据集,涵盖运动、乐器演奏、日常活动等场景,是当时动作识别研究的标准测试集之一。
> HMDB-51*:另一个包含51类动作的视频数据集,视频来源更加多样,包括电影片段和网络视频,识别难度相对更高。
以下是论文中报告的关键对比结果:
| 方法 | UCF-101准确率 |
|---|---|
| 之前最好的深度学习方法 | 约65% |
| 密集轨迹(手工特征方法) | 约87% |
| **本文双流网络(融合)** | **约88%** |
这个结果在当时的意义,不亚于AlexNet在图片识别上的那次突破。它第一次证明了深度学习方法在视频动作识别这个任务上,可以打平甚至略微超过精心设计了十几年的手工特征方法。要知道,密集轨迹这类手工特征,是研究者们一点点摸索、调参调出来的,凝结了大量领域经验。深度学习用一个相对"暴力"的端到端学习框架,追上了这套精细打磨的老方法,这说明只要给网络喂对了信息(也就是光流这种提前算好的运动线索),它是完全有能力学出好的动作识别模型的。
后续的故事:双流思想被一路发展下去
这篇论文发表之后,双流网络的思路成为接下来几年动作识别领域最重要的基础框架之一,很多后续工作都是在它的骨架上继续添砖加瓦。
2016年,Feichtenhofer等人发表了《用于视频动作识别的时空残差网络》,把ResNet这种更深的残差网络结构引入双流框架,同时改进了两条流之间融合的方式,不再是简单地把最后结果加权平均,而是让两条流在网络中间层就开始信息交互,这让准确率进一步提升到93%以上。
2017年,Carreira和Zisserman(同一个Zisserman)发表了《Quo Vadis动作识别》,提出了I3D网络,把双流网络里手工设计的光流计算和2D卷积,替换成了直接在时间维度上做3D卷积,并且同样沿用了ImageNet预训练迁移的思路,把它扩展到3D卷积核上。这篇论文报告的准确率在UCF-101上进一步提升到98%左右,这个数字已经逼近人类标注者的一致性水平。
从这两个后续工作可以看出一条清晰的演化路径,从"手工计算光流加双流融合",到"更深的网络加更巧妙的中间层融合",再到"用3D卷积让网络自己学会捕捉时间维度的运动模式"。双流网络提出的核心问题,也就是"外观信息和运动信息要分别处理还是一起处理",一直是后续研究反复回来讨论和改进的焦点。
写在后面
读这篇论文最触动我的地方,不是双流架构本身有多精巧,而是研究者面对"深度学习打不过手工特征"这个尴尬局面时选择的解法。他们没有执着于把网络做得更深更复杂去硬啃这个问题,而是先冷静地问了一句,手工特征方法到底比神经网络多知道了什么。答案是运动信息,而运动信息可以用光流提前算出来。这种"先搞清楚差距从哪来,再针对性补齐"的思路,比单纯堆砌模型复杂度要聪明得多。
另一个值得琢磨的细节是,这篇论文某种程度上也在提醒我们,深度学习不是万能钥匙,它擅长从数据里学模式,但如果关键信息压根没有以合适的形式出现在输入里,网络再深也学不出来。把光流这种领域知识提前算好喂进去,某种程度上是承认了纯粹的端到端学习在数据有限时是有边界的。这个边界后来随着数据规模和算力增长在不断后退,但那种"该出手工先验时就出手"的实用主义,至今仍值得回味。
如果你现在打开手机拍一段慢动作视频,想想看,当年那些研究者盯着一堆光流箭头图,琢磨着怎么让机器读懂"挥手"和"抬手"的区别时,大概不会想到十年后手机相册会自动帮你把所有跳水视频归到一个文件夹里。
Q&A
Q1:双流卷积网络具体是指哪两条流?
A:一条是空间流,处理单张视频帧的原始图像,负责识别画面里有什么物体和场景;另一条是时间流,处理连续多帧的光流图,负责识别画面里的东西在怎么运动,两条流的判断结果最后加权融合得到最终答案。
Q2:光流在这篇论文里起到什么作用?
A:光流是提前计算好的运动信息地图,标出画面里每个像素从一帧到下一帧的移动方向和速度。论文发现直接把光流喂给神经网络,比让网络自己从原始像素里学运动模式效果好得多,单独用外观信息的准确率是72.6%,加上光流后能提升到接近88%。
Q3:这篇论文的双流网络效果到底怎么样?
A:在UCF-101数据集上,双流网络融合后的准确率达到约88%,第一次追平甚至略微超过了当时最好的手工特征方法密集轨迹(约87%),而此前最好的深度学习方法只有约65%,这是深度学习在视频动作识别上第一次真正打赢手工特征方法。
好文章,需要你的鼓励
论文提出CAST框架,通过多智能体系统把任务成败的粗略反馈转化为逐步动作的详细批评理由,训练出更懂节制的批评模型,再用它优化执行策略,让8B小模型在可靠性指标上反超120B大模型,提升智能体在真实动态环境中的稳定表现。
论文提出NavMCP框架,用意图、观察、记忆三条通道把VLM推理与导航基础模型NFM结合,解决具身问答中长距离探索问题,在多个基准和真实机器狗测试中均取得最优效果。
研究发现教师模型批改学生生成内容时噪声率高达50%,但学生依然能进步。作者发现真正起作用的是压制学生自己低概率词,据此提出无需外部监督的OPSA方法,在AIME24等数学测试上带来最高307%的提升。
PaperGym提出一套把科研论文转化为AI训练环境的方法,解决科研计划生成缺乏可验证奖励的难题,通过问题答案分离降低评分标准泄露,结合自蒸馏与强化学习两阶段训练,让小模型在多个基准上超越更大规模的商业模型。