用两只眼睛看视频:当深度学习第一次学会了“动作“
2014年之前如果你问计算机视觉领域的研究者一个问题深度学习能不能看懂视频里的动作很多人会摇头。不是因为没人试过。卷积神经网络在静态图片识别上已经打得火热AlexNet 在 2012 年横空出世把 ImageNet 图片分类的错误率拉低了一大截整个领域都在欢呼深度学习的时代到来了。可一旦把图片换成视频事情就变得诡异起来那些在图片上大杀四方的网络架构一放到视频动作识别任务上,就集体哑火了。最好的深度学习方法在 UCF-101 这个动作识别数据集上,准确率只能做到 65% 左右。而同期最好的手工特征方法一个叫做密集轨迹的老派技术能做到 87.9%。**这是整整 20 多个百分点的差距。**意味着什么意味着每识别 5 个动作深度学习方法就要比手工特征多认错 1 个以上。这不是小差距,这是量级上的落后。一个被认为代表未来的技术被一个基于人工设计规则的老古董按在地上摩擦了两年。这件事在当时相当反直觉,毕竟深度学习刚刚证明了自己在图片上的统治力,没人预料到换个维度就全面崩盘。这篇论文的作者,Karen Simonyan 和 Andrew Zisserman两人来自牛津大学就是要来解决这个尴尬的问题。有意思的是这两位几个月后又发表了另一篇论文,叫 VGGNet后来成为整个视觉领域最常用的骨干网络之一。也就是说他们在同一段时间里一边琐磨着怎么让网络看懂静态图片的层次结构一边琐磨着怎么让网络看懂视频里的运动。这两条线其实是同一群人脑子里同时转的两个问题。问题出在哪视频比图片多了一个维度但这个维度很难学先说清楚这件事到底难在哪。一张图片本质上是一个空间信息的矩阵猫的耳朵在哪眼睛在哪轮廓怎么走这些空间关系是静态的、可以被卷积核一层一层抓取出来的。视频不一样。视频是一堆图片按时间顺序排列多出来的那个维度是时间而时间维度里藏着的是运动信息,也就是动作本身。你要判断一个人在挥手还是鼓掌光看单独一帧图片经常看不出来你需要看这个人的手在连续几帧里怎么移动的。问题是卷积神经网络天生擅长抓取空间结构却不擅长直接从像素的时间变化里提炼出运动模式。之前的研究者尝试过很多办法比如把视频的多帧图像直接堆叠起来喂给三维卷积网络,让网络自己去学习时空特征。听起来合理,但实际效果很差,因为直接从原始像素学习运动信息,对网络来说太难了,数据量又不够大,网络根本学不出稳定的运动模式。 密集轨迹Dense Trajectories*一种手工设计的传统动作识别方法通过跟踪视频里密集分布的点在连续帧之间的运动轨迹并计算轨迹周围的方向梯度和光流特征拼出一套描述动作的特征向量是深度学习之前的主流方法。而密集轨迹这类手工方法为什么强因为它不需要网络自己去发现运动的存在人已经提前把光流计算好了直接告诉网络看这里的像素往这个方向移动了这么多。这是一种作弊但作弊得很聪明直接绕开了最难的那一步。Simonyan 和 Zisserman 的洞察就在这里。他们想如果手工方法能靠光流赢为什么不干脆把光流直接喂给神经网络而不是逼着网络从零开始学习运动双流架构让一个网络专心看长什么样另一个专心看怎么动的这篇论文最核心的贡献就是提出了一个叫双流卷积网络的架构。 双流卷积网络Two-Stream Convolutional Networks*一种把视频动作识别拆分成两条独立处理路径的神经网络架构,一条处理静态画面空间流,一条处理运动信息时间流,最后把两者的判断结果融合起来。具体来说整个系统被拆成两个互相独立的卷积网络。第一条叫空间流,直接吃视频里的单帧 RGB 图片学习的是这个场景长什么样,谁在场景里背景是什么物体的外观特征是什么。这条路径本质上跟普通的图片分类网络没什么区别甚至可以直接借用在 ImageNet 上训练好的模型做迁移。第二条叫时间流输入不是原始图片而是提前用传统算法计算好的光流场。 光流Optical Flow*描述视频中每个像素点在连续两帧之间移动方向和速度的向量场,可以理解成给每个像素画一个箭头,指出它接下来往哪儿跑,跑多快。时间流网络看到的不是画面,而是一张张由无数箭头组成的运动图。人挥手的时候,手臂区域的箭头会朝一个方向密集地摆动静止的背景箭头几乎为零。网络专心学习这些箭头的模式,就能捕捉到动作本身,而不被画面里到底是谁、穿什么衣服这些无关信息干扰。两条网络各自独立训练,最后在预测阶段把两边给出的分类概率做加权平均,融合成最终结果。这个设计思路其实可以类比成侦探破案时的分工。假设你要判断一个人是不是在撬锁你可以派两个侦探过去一个盯着监控画面研究这个人的长相、穿着、周围环境专门确认这是什么人在什么地方另一个侦探根本不看长相只死死盯着这个人手部动作的轨迹曲线判断这套动作是不是撬锁的手法。如果只派第一个侦探他可能因为这人穿着体面、气质像居民就放松警惕看漏了手上的猫腻。如果只派第二个侦探他能看出动作可疑但完全说不出这是谁、发生在哪。两个侦探各自专注一个维度反而比一个侦探同时兼顾所有信息更靠谱。这正是双流架构的用意把是什么和怎么动这两个天然不同性质的问题彻底拆开处理而不是硬塞给一个网络逼它同时学会两件事。如果不拆开会怎样论文里其实间接回答了这个问题,当时那些直接用三维卷积从原始像素学习时空特征的方法效果远不如双流架构因为一个网络同时兼顾外观识别和运动提取,任务耦合太重训练难度陡增,而数据量又跟不上学不出干净的运动特征。拆开之后时间流网络的任务变得单纯,只处理光流场,不需要再操心背景纹理和物体外观,反而学得更好。光流怎么喂给网络多帧堆叠而不是单帧时间流网络具体怎么处理光流,这里还有一个细节设计。论文没有只用相邻两帧算出的一张光流图,而是把连续 L 帧论文里取 L10计算出的光流场堆叠成一个多通道的输入,水平方向的位移和垂直方向的位移分别堆叠,形成一个信息更丰富的输入张量。这样做的原因也不难理解。单独两帧之间的运动信息太单薄很多动作,比如打高尔夫球的挥杆需要看一段连续的运动轨迹才能判断清楚只看某一个瞬间的光流,信息量不够。堆叠多帧光流相当于把一小段时间窗口内的运动全部打包塞给网络,让网络看到的是一段完整的运动轨迹,而不是一帧的运动快照。这就像你想判断一个人是在打网球正手还是反手只看他挥拍那一瞬间某个像素的移动方向可能判断不出来但如果你能看到他从引拍到挥拍再到收拍这一整段连续动作的运动轨迹,答案就一目了然了。单帧光流就像只给你看一张动作快照而堆叠多帧光流则是给你看一小段慢动作回放信息密度完全不同。论文里还比较了两种光流的表示方式,一种是常见的光学流,另一种考虑了摄像机本身运动的因素做了运动补偿的版本进一步把摄像机的整体位移剔除掉,让光流场更纯粹地反映场景里物体本身的运动而不是被摄像机晃动干扰。实验证明,做了运动补偿之后效果确实有提升。训练数据不够怎么办从图片数据集里借参数深度学习最饿的就是数据而当时的视频动作识别数据集,规模跟 ImageNet 这种上百万张图片的数据集相比,小得可怜。UCF-101 只有一万多个视频片段网络很容易在这么小的数据上过拟合。论文给出的解法是让空间流网络直接用在 ImageNet 上预训练好的参数做初始化再在视频数据上微调。这个操作现在看起来是常规操作但在当时属于比较早期、也比较关键的迁移学习实践。 迁移学习Transfer Learning*把一个模型在某个任务上学到的知识迁移到另一个相关但数据量较小的任务上从而减少对新任务大规模数据的依赖。这个思路等于是说,既然静态图片里已经蕴含了大量关于物体外观、纹理、形状的通用知识,没必要每次都从零学起。空间流网络的任务本质上跟图片分类很像,直接借用现成的知识底子再针对视频场景做少量调整就够了。这就好比一个已经精通中文书法的人去学日文书法他没必要从握毛笔的姿势开始重新学笔锋的运笔、力道的控制这些底层功夫是通用的只需要针对日文假名的特殊笔画结构做补充训练。如果非要从零开始训练成本会高得多效果反而未必更好。如果不用预训练,单靠视频数据从零训练空间流网络论文的实验也证实了会明显过拟合,效果打折扣。实验结果双流联手,终于追平甚至反超手工特征这套架构最终在几个标准数据集上做了验证。UCF-101 数据集包含 101 类人体动作比如骑马、拉小提琴、打篮球。HMDB-51 数据集包含 51 类动作规模更小难度更大。下面是论文里报告的核心对比结果| 方法 | UCF-101 准确率 ||---|---|| 只用空间流单帧RGB | 72.6% || 只用时间流光流 | 81.0% || 密集轨迹手工特征此前最强方法 | 87.9% || **双流网络融合本文方法** | **88.0%** |只看空间流的结果72.6%说明单靠画面外观信息去判断动作效果并不差但远远不够。单独看时间流81.0%比空间流高出接近 9 个百分点这个数字本身就很说明问题:对于动作识别这个任务运动信息比外观信息重要得多。这也印证了前面的判断动作的本质就是怎么动不是长什么样。而当两条流融合起来之后准确率来到 88.0%首次追平甚至略微超过了当时最强的手工特征方法密集轨迹的 87.9%。**这是深度学习第一次在视频动作识别这个任务上打赢了手工设计的特征方法。**这个数字差距看起来只有 0.1%好像不痛不痏但它的历史意义完全不在于这 0.1%本身。它标志着一条路走通了:深度学习不是天生不适合处理视频,只是之前的做法没有找到正确的输入方式。一旦把光流这种运动信息用对了地方,深度学习立刻能够和精心打磨了好几年的手工特征掰手腕甚至反超。这跟 2012 年 AlexNet 证明深度学习能在图片分类上碾压传统方法,在意义上是同一个级别的事件只是发生在视频这个更难的战场上。这篇论文之后发生了什么双流网络提出之后很快成为视频理解领域一个绕不开的基准框架后续大量工作都是在这个骨架上做改进。2015年Feichtenhofer 等人发表的论文进一步研究了空间流和时间流之间应该在网络的哪一层进行融合而不是简单地在最后输出层做加权平均提出了更早、更深层次的特征融合方式进一步提升了准确率。2016年Wang 等人提出了 Temporal Segment Networks时序分段网络针对双流网络只能处理短时间片段、无法建模长视频里跨越较长时间的动作模式这个短板做了改进,把一段长视频切成多个片段,分别跑双流网络再做整体聚合,让模型能理解跨越更长时间跨度的动作结构这个方法后来在多个动作识别竞赛里拿到了很好的成绩。之后随着计算资源的提升三维卷积网络比如 I3D重新回到舞台中央用更深的三维卷积直接从堆叠帧里学习时空特征某种程度上算是把双流网络当年绕开的那条路,又重新打通了因为数据规模和算力都不再是当年的瓶颈。但双流网络这种把外观和运动分开建模的思路即便到了后续很多模型里依然以各种形式被保留和借鉴。写在后面读这篇论文最触动的一点,是它提醒我一个容易被忽略的道理:深度学习的胜利,从来不是靠网络本身有多深有多复杂,很多时候靠的是给网络喂什么样的输入。空间流和时间流的网络结构其实相当朴素跟同期的图片分类网络没有本质差别真正起作用的是有人想清楚了,光流这种前人已经验证过有效的信息,完全可以直接喂给神经网络不需要逼着网络从零发明轮子。这让我想到一个不那么学术的类比,很多所谓的突破,不是因为找到了更聪明的大脑而是有人换了一种喂它吃的东西。这篇论文没有解决的问题是当运动模式变得极其复杂,比如多人协作、长时间跨度的动作序列,单纯的光流表示还够不够用这个追问后来催生了整整一个方向的研究也算是它留给后人最有价值的一道题。QAQ1双流卷积网络是什么A双流卷积网络是2014年由Simonyan和Zisserman提出的视频动作识别架构把视频理解拆成两条独立路径一条处理静态画面的空间流一条处理运动信息的时间流最后融合两者的判断结果。Q2双流网络的效果比传统手工特征方法好吗A在UCF-101数据集上双流网络融合后准确率达到88.0%首次超过了当时最强的手工特征方法密集轨迹的87.9%是深度学习第一次在视频动作识别任务上打赢手工方法。Q3为什么要把视频分成空间流和时间流两条路径处理A因为静态外观和运动模式是两种性质完全不同的信息硬塞给一个网络同时学习会导致任务耦合过重难以训练拆开后时间流网络可以专注学习光流场中的运动模式效果明显更好。

相关新闻

Peroxide:Rust数值计算库入门指南——高性能与友好语法的完美结合

Peroxide:Rust数值计算库入门指南——高性能与友好语法的完美结合

Peroxide:Rust数值计算库入门指南——高性能与友好语法的完美结合 【免费下载链接】Peroxide Rust numeric library with high performance and friendly syntax 项目地址: https://gitcode.com/gh_mirrors/pe/Peroxide Peroxide是一个基于Rust语言开发的高性…

2026/9/12 17:11:20 阅读更多 →
市面上正规的搪瓷水箱生产商哪家好

市面上正规的搪瓷水箱生产商哪家好

你是不是也在为选哪家的搪瓷水箱而头疼?市面上的品牌琳琅满目,价格从几千到几万不等,可真正懂行的人都知道,选水箱不是看广告,而是要看这三点。先来梳理下现状。我走访了全国12个城市的30多家经销商和安装公司&#xf…

2026/9/18 12:40:34 阅读更多 →
Python量化交易实战:从经典策略源码到实盘部署全解析

Python量化交易实战:从经典策略源码到实盘部署全解析

1. 项目概述:从零到一的量化策略实战看到“经典的股票/期货量化交易策略,拿来即用的Python策略源码”这个标题,很多刚接触量化交易的朋友可能会眼前一亮,觉得找到了通往财富自由的捷径。但作为一个在这个领域摸爬滚打了十多年的老…

2026/9/21 11:27:18 阅读更多 →

最新新闻

面试必问:解决试听音乐报错的3个实战技巧

面试必问:解决试听音乐报错的3个实战技巧

面试必问:解决试听音乐报错的3个实战技巧 刚接手的运维开发项目,后台日志里全是 AudioDecodeException 和 NullPointerException ,StackTrace 长得像天书,看得人头皮发麻。别慌,这种…

2026/9/22 5:27:29 阅读更多 →
3个让星星盒子崩溃的坑,面试必问的调试思维

3个让星星盒子崩溃的坑,面试必问的调试思维

3个让星星盒子崩溃的坑,面试必问的调试思维 代码从CSDN或GitHub复制下来,改了两行变量名,一运行就报 KeyError 或者 AttributeError…

2026/9/22 5:27:29 阅读更多 →
3个坑搞懂城市模型选型,拒绝复制代码跑不通

3个坑搞懂城市模型选型,拒绝复制代码跑不通

3个坑搞懂城市模型选型,拒绝复制代码跑不通 复制来的城市模型代码,是不是刚跑起来就报错?明明照着教程敲,变量名没改,逻辑没动,结果直接崩了,或者算出来的数据全是乱码。这时候别急着骂教程写得烂,十有八九是你没搞懂底层的数据结构和算法适配。今天…

2026/9/22 5:27:29 阅读更多 →
金财互联接口源码拆解:新手避坑指南与核心逻辑剖析

金财互联接口源码拆解:新手避坑指南与核心逻辑剖析

金财互联接口源码拆解:新手避坑指南与核心逻辑剖析 金财互联的官方文档篇幅冗长,新手往往在其中迷失方向,难以抓住核心逻辑。 很多转岗开发者在对接时,因为没看懂底层数据流转,导致调试耗时数倍。…

2026/9/22 5:27:29 阅读更多 →
3步搞定圣骑士加点2023:手写实现避坑指南

3步搞定圣骑士加点2023:手写实现避坑指南

3步搞定圣骑士加点2023:手写实现避坑指南 面试被问原理答不上来?别慌,很多后端大佬都栽在这。 别以为这是游戏术语,在高性能计算场景里,“圣骑士加点”其实指代一种 资源调度与状态同步的混合策略 。 今天不聊虚的,直接上干货。我们用…

2026/9/22 5:27:29 阅读更多 →
雷霆战机挑战币实战项目

雷霆战机挑战币实战项目

雷霆战机挑战币实战项目解析高频面试题 项目目标与痛点直击 很多开发者刚学完 Python 或 JavaScript 基础语法,对着书本上的 if-else…

2026/9/22 5:26:28 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →