资讯动态

你以为AI只能靠画面认人,直到有人教它靠“走路的样子“识别动作

发布时间:2026/9/19 22:35:11 来源:尧图企业网站定制
2014年的深度学习圈子里有件事挺让人下不来台的。那一年AlexNet已经红了两年卷积神经网络在图像分类上把传统方法打得几乎没有还手之力。可换到视频动作识别这个任务上情况完全反过来了。当时最强的深度学习方法准确率只有65%左右而一个叫密集轨迹的手工特征方法能做到88%左右。差了23个百分点。这不是小差距。23个百分点意味着什么呢意味着如果你让深度学习方法和手工特征方法各看100个动作视频去分类深度学习会比手工特征多认错23次。这在当时几乎成了一个尴尬的常识深度学习能看懂图片里是猫是狗,但一到动作这种带时间维度的东西,就完全不灵光了。这篇论文的两位作者Karen Simonyan和Andrew Zisserman就是在这个背景下动手的。有意思的是这两人同一年还发表了另一篇后来大名鼎鼎的论文,VGGNet。也就是说他们一边在琢磨怎么把卷积网络做得更深更准一边在琢磨怎么让卷积网络理解视频里的动作。这两条线其实是同一个问题的两个侧面网络到底该怎么看。问题出在哪网络看得到画面看不到动作要理解这篇论文的巧思,得先搞清楚为什么当时的深度学习方法在动作识别上会输得这么惨。早期的做法很直接把视频拆成一帧一帧的图片然后扔进卷积神经网络让网络学着从图片里认出这是在打网球还是这是在游泳。问题是一张静止的图片能告诉你多少关于动作的信息一个人举着球拍站在网球场上这张照片可能是准备发球也可能是刚打完一拍也可能只是在摆拍。单张图片里挤满了背景、衣服颜色、场地信息这些东西对分类是有帮助的但它们帮的是识别场景不是识别动作。动作的本质是变化是一个东西从一个状态移动到另一个状态的过程而单张静态图片根本不包含移动这件事。**卷积网络在这个任务上表现差不是因为网络不够深而是因为喂给它的信息里根本没有运动这个维度。**这就好比你想判断一个人是不是在跑步,但只给你看他某一帧的定妆照。哪怕这张照片拍得再清楚你也很难确定他是在原地站定,还是正在冲刺。你需要看到他连续几个瞬间的姿态变化才能判断出跑这个动作。如果不给网络看运动信息网络就只能靠猜场景蒙对答案蒙对了是走运蒙错了才是常态。核心思路把运动本身单独抽出来,喂给一个专门的网络Simonyan和Zisserman的解法说出来其实挺朴素的既然单张图片里没有运动信息那就别指望网络自己从图片里学出运动直接把运动信息算出来,喂给网络。具体怎么算答案是光流。 光流*指的是视频里像素点从一帧到下一帧的移动方向和移动速度本质上是一张运动地图每个像素都带着一个箭头告诉你这个点往哪个方向动了多远。光流场不是靠网络学出来的而是靠传统的计算机视觉算法预先算好的算出来之后这张运动地图看起来就像一张彩色的、布满箭头方向信息的图片可以直接喂给卷积神经网络去学习。这个思路带来的直接后果是网络不再需要自己去猜什么叫动因为运动信息已经被显式地摆在了它面前。它只需要学习什么样的运动模式对应什么样的动作就够了。论文把这套结构叫做双流网络。 双流网络*Two-Stream Network指用两个独立的卷积神经网络一个专门处理静态画面叫空间流一个专门处理运动信息叫时间流最后把两边的判断结果加权融合得出最终答案。空间流和时间流各自训练、各自预测最后把两个网络给出的分类概率做个加权平均谁的置信度高就多听谁的意见。这个设计像什么呢想象你去看一场篮球比赛,身边坐着两个朋友,一个从来不看球只看场馆的装修风格,另一个眼睛死死盯着球员的跑动路线不看别的。散场后你问他们刚才那个进球是投篮还是扣篮看装修的朋友说不清楚因为他压根没在看动作,但他能告诉你这是在哪个体育馆,是主队还是客队的比赛。看跑动的朋友能准确说出球员起跳、出手的整个过程,但要是问他球衣颜色他可能都没注意。如果你只信一个人的判断你会经常出错但如果把两人的观察结合起来你得到的信息远比任何一个人单独给你的更完整。如果没有这种分工硬让一个网络同时兼顾场景识别和动作识别结果就是两头都学不精,这正是早期方法失败的原因。![双流网络结构图]论文里那张结构图画得很直白左边一路输入是原始的视频帧右边一路输入是提前算好的光流场两条路径完全独立地跑完各自的卷积网络最后在顶部汇合给出一个融合后的分类结果。这张图本身就在说一句话识别动作这件事得靠看画面和看运动两条腿一起走,少一条腿都走不稳。时间流具体怎么设计:光流该往前看还是往后看时间流网络的输入不是一张光流图而是连续多帧光流叠在一起的一个立体数据块。论文里试验了几种不同的输入方式。一种是直接用光流的横向和纵向分量叠成若干帧的堆栈直接喂给网络。另一种更巧妙叫做双向光流就是不仅算这一帧往后面帧的运动也算这一帧往前面帧的运动两个方向都算进去让网络看到的运动信息更完整。为什么要费这个劲算两个方向因为一个动作往往不是单向的。举个例子一次挥拍击球的动作球拍往前挥出去是一半挥出去之后的回收动作又是另一半如果光流只算未来会往哪儿动就漏掉了这个动作是怎么从哪儿来的这部分历史信息。双向光流相当于给网络补齐了运动的前因和后果而不只是当下这一瞬的趋势。实验结果证实了这个设计是有效的双向光流的版本比单向的表现更好。这不是设计者的直觉臆想而是有数据支撑的选择。这里还有一个技术细节值得说一下光流场本身是有噪声的尤其是摄像机自己在晃动或者平移的时候整张画面都会产生一种虚假的运动这种运动跟人物真正做的动作没有关系,纯粹是相机在移动导致的假象。 均值消除*论文中处理光流噪声的一个技巧做法是从光流场里减去整张图片的平均运动值相当于先把镜头晃动这个大背景的干扰减掉,剩下的才是画面里物体相对于背景真正发生的运动。这个处理有点像你在一辆行驶的火车上录视频,想拍窗外一只飞过的鸟。整个画面都在往后移动因为火车在往前开但鸟相对于火车之外的世界可能是往另一个方向飞的。如果你不把火车本身的移动减掉算法会把整块背景的移动也当成运动信息塞给网络,网络学到的可能压根不是鸟怎么飞的,而是火车开得多快。做了均值消除之后,这种背景干扰被过滤掉了留下的才是真正有意义的、相对运动的信号。如果没做这一步网络很可能在学习一堆和动作本身无关的相机抖动模式,那样训练出来的模型看着数据不错实际部署到手持拍摄的视频上就容易翻车。数据不够怎么办借用图片数据集来预训练深度学习一个绕不开的老问题是,训练数据从哪儿来。当时的视频动作识别数据集普遍偏小比如UCF-101大约有1万3千段视频覆盖101种动作类别HMDB-51则更小只有大约7000段视频、51种动作。跟同期图像分类动辄上百万张图片的规模比,这个数据量对于训练一个深层卷积网络来说是相当吃紧的,很容易过拟合,也就是网络把训练集背得很熟但换到没见过的新视频上就表现很差。 过拟合*指模型在训练数据上表现很好但因为训练数据太少或模型太复杂导致模型学到了很多训练集里的特殊细节而不是具有普遍意义的规律一旦换成新数据表现就大幅下降。论文的应对策略是先用ImageNet这个超大规模的图片分类数据集把空间流网络预先训练一遍让网络先学会基础的视觉特征识别能力然后再拿动作识别的视频数据去微调这个已经训练好的网络。这个做法背后的逻辑是识别这是一只狗和识别这个人在打网球这两件事在最底层的视觉处理上是有共通之处的,比如识别边缘、颜色、纹理这些基础视觉特征是通用的不需要为每个任务从零学起。这就像你想培养一个能看懂足球比赛战术的解说员如果你直接找一个完全没看过体育比赛的人,让他光靠看几十场足球赛的录像就总结出战术门道效果大概不会太好,因为样本量太小。但如果这个人本来就是资深体育迷,看过成千上万场各种球类比赛积累了大量关于跑位、配合、节奏这些通用体育概念的理解那么只需要再看几十场足球赛他很快就能领悟足球特有的战术细节。预训练干的就是这件事先在海量的通用视觉数据上打好基础再用相对少量的目标数据做针对性调整。如果没有预训练这一步直接用视频数据集从零训练模型很容易因为数据量不足而学得很差这也是论文里空间流网络单独测试时准确率明显偏低的一个原因。融合的方式不是简单相加,而是加权甚至用支持向量机来决定怎么融合两条流各自算出一个分类概率之后,怎么把它们合并成一个最终答案论文里试了两种方式。一种是直接对两条流的输出概率取平均另一种更精细,是把两条流的输出结果作为特征另外训练一个支持向量机分类器来学习该怎样加权融合。 支持向量机*一种经典的机器学习分类算法简单说就是找一个最优的分界线或分界面把不同类别的数据尽可能清晰地分开。结果是用支持向量机做融合的效果比简单平均更好。这说明两条流对不同类型动作的判断可靠程度是不一样的有些动作光靠画面就能猜得八九不离十,比如识别游泳泳池和泳衣这些场景线索就很有用,但有些动作比如区分扔飞盘和扔棒球光靠背景画面很难分辨,这时候运动轨迹的信息就更关键。让一个额外的分类器去学习什么情况下该多信空间流,什么情况下该多信时间流比死板地各打五十分要聪明得多。实验结果说话双流网络到底提升了多少论文在两个主流数据集上做了测试UCF-101和HMDB-51。| 方法 | UCF-101准确率 | HMDB-51准确率 ||---|---|---|| 单独空间流仅用静态画面 | 73.0% | 40.5% || 单独时间流仅用光流 | 83.7% | 54.6% || **双流网络融合后** | **88.0%** | **59.4%** || 同期最强手工特征方法 | 87.9% | 61.1% |这组数字讲了一个很清楚的故事。单独看空间流UCF-101上只有73%这跟前面说的单张图片信息不够的判断完全吻合。单独看时间流直接跳到83.7%说明运动信息本身对识别动作的贡献比单纯的画面信息大得多。两者融合之后到88%比单独任何一条流都高证明这两种信息确实是互补的,不是重复的。而更关键的一点是双流网络在UCF-101上的88%第一次让深度学习方法追平甚至反超了手工设计的特征方法。这是一个历史节点,深度学习在视频动作识别这个具体任务上,第一次不再是那个被传统方法按在地上打的角色。这句话放在2014年的语境里,分量不亚于两年前AlexNet在图像分类上掀起的那场风暴。区别是,这次深度学习没有靠更深的网络、更多的数据硬碰硬地取胜,而是靠一个更聪明的输入设计,让网络看到了它之前压根看不到的信息维度。后续影响这条思路怎么被一步步接着往前推双流网络这个框架发表之后,很快成了视频理解领域好几年里的标准范式,后续一大批工作都是在这个基础上做改进。2016年Feichtenhofer等人发表了一篇论文提出了更好的时空融合方式让空间流和时间流不再是训练完之后简单相加,而是在网络中间层就开始交互融合这个方法进一步把UCF-101上的准确率往上推了几个点。2017年DeepMind的Carreira和Zisserman对还是同一个Zisserman发表了I3D网络的论文把双流网络里的2D卷积换成了3D卷积直接在时间维度上做卷积运算同时提出了一个规模远超以往的动作识别数据集Kinetics用这个更大规模的数据集做预训练之后模型的表现又有了明显提升。这篇论文可以看作双流思路的一次升级,它保留了两条流处理不同信息的核心框架但把光流这种手工计算的运动特征,换成了让网络自己通过3D卷积直接从视频里学运动模式。这两个后续工作说明了一件事双流网络提出的分开处理静态信息和运动信息再融合这个思路本身经受住了时间的考验,后来者不断在优化的是怎么算运动信息怎么融合这两个具体环节但骨架没有变。写在后面读这篇论文的时候我一直在想一个问题为什么把光流单独算出来喂给网络这个想法在当时算是巧思,而不是显而易见的做法。后来想明白了深度学习那几年的主流信仰是让网络自己从原始数据里学一切人工去设计特征输入某种程度上是和这个信仰唱反调的。双流网络的成功其实是一次务实的妥协,先承认端到端学习在数据不够、任务特殊的情况下有短板,再用传统方法的强项去补这个短板。这种先认输再想办法的态度,可能比死磕纯端到端更值得学。论文里还有一个细节我觉得值得单独提一句,双向光流比单向光流效果好这件事,其实暗示了一个更普遍的道理理解一个动态过程,光看它将要发生什么不够,还得看它是怎么发生的。这跟很多领域的诊断逻辑是相通的。QAQ1双流网络是什么A双流网络是2014年Simonyan和Zisserman提出的一种视频动作识别方法用两个独立的卷积神经网络分别处理静态画面空间流和光流运动信息时间流最后融合两边的判断结果第一次让深度学习方法在视频动作识别任务上追平甚至超过了手工特征方法。Q2双流网络为什么要单独处理光流信息A因为单张静态图片里根本不包含运动信息网络光靠画面很难判断动作只能靠场景蒙猜。把光流场记录像素运动方向和速度的运动地图预先算好再喂给专门的网络能让网络直接学习运动模式和动作类别之间的关系大幅提升识别准确率。Q3双流网络的效果具体提升了多少A在UCF-101数据集上单独用空间流准确率是73%单独用时间流是83.7%两者融合后达到88%首次追平同期最强的手工特征方法87.9%是深度学习在这个任务上的历史性突破。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价