视频里藏着两条线索,AI 学会了同时看两条
2014 年,如果你去问任何一个做计算机视觉的研究者,深度学习能不能识别视频里的动作,大概率会得到一个摇头。这听起来有点反直觉。毕竟就在两年前,AlexNet 已经在图像识别上把传统方法打得没有还手之力,深度学习的旗号已经插满了图像领域的山头。可是一旦换成视频,情况完全反过来了。当时最强的视频动作识别方法,叫做密集轨迹 密集轨迹*一种手工设计的视频特征提取方法,通过追踪视频里密集分布的采样点在时间上的运动轨迹,再手工计算这些轨迹周围的图像和运动统计特征,拼起来判断视频里发生了什么动作。密集轨迹在标准测试集上能做到接近 88% 的准确率,而当时人们尝试过的深度学习方法,只能做到 65% 左右。这个差距有多大?意味着每识别 5 个动作,深度学习就要比手工方法多认错超过一个。整整 20 个百分点的落差,这在当时几乎被当成了一个定论:深度学习不适合处理视频里的运动信息。牛津大学的 Karen Simonyan 和 Andrew Zisserman 就是在这个背景下,拿出了一篇论文,题目叫《用于视频动作识别的双流卷积网络》。这篇论文做的事情,说出来你可能会觉得简单得不可思议:他们没有去发明什么全新的网络结构,而是想明白了一件事,视频里其实藏着两种完全不同性质的信息,过去的深度学习方法,一直在用同一双眼睛看这两种信息,而这双眼睛,其实只擅长看一种。视频里到底藏着什么,为什么一个网络看不懂先说说视频到底是什么。一段视频,说到底就是一帧一帧的静止图片连续播放。你可能会想,那深度学习既然能看懂单张图片,把每一帧丢进去识别不就行了?问题就出在这里。单张图片能告诉你的,是这是什么。一个人站着,一只手举着,这可能是在打招呼,也可能是要打人,也可能只是伸懒腰。图片本身回答不了这个问题,因为动作的本质不在某一帧里,而在帧与帧之间的变化里。这就是视频识别真正难的地方,你需要的不只是空间信息,更需要时间信息,也就是画面是怎么随着时间变化的。在这篇论文之前,大部分深度学习方法的思路是,把连续几帧图像叠在一起,当成一个厚一点的图片扔进卷积网络,让网络自己去学习帧与帧之间的关系。听起来挺合理,但效果很差,因为普通的卷积网络天生是为了识别静态图案设计的,边缘、纹理、色块,这些东西它很擅长。可是运动这件事,不是靠堆叠图像就能学出来的,运动的本质是位移,是速度,是方向,这些概念在卷积网络的视野里根本不存在合适的表达方式。这就好比让一个只会看照片的人去判断一场足球比赛谁进球了。你把十张连续的照片摆在他面前,他能看出球在不同位置,但要他从静态画面里感觉出球飞行的速度和轨迹,这几乎是在为难他。他缺的不是眼力,缺的是一种专门针对运动设计的感知方式。如果不给他补上这一课,他永远只能靠猜。拆成两条流,一条看形状一条看运动Simonyan 和 Zisserman 的思路是,既然一个网络同时处理空间信息和时间信息效果不好,那就干脆拆成两个网络,一个专门负责空间,一个专门负责时间,最后把两边的判断结果合并起来。这就是论文标题里双流的来源。 双流卷积网络*把视频识别任务拆分成两条独立的卷积神经网络处理通道,一条处理静态画面信息,一条处理运动信息,两条通道各自输出预测结果,最后融合成最终判断。第一条流叫空间流,输入很简单,就是视频里随便抽出的一帧静止图片。它的任务和普通的图片分类网络没什么区别,负责识别画面里有什么物体、什么场景、什么姿态。比如画面里有游泳池,有个人在挥臂,这条流基本上能判断出这可能是游泳。第二条流叫时间流,这才是整篇论文真正的巧思所在。它的输入不是图片,而是光流场 光流场*描述视频画面中每一个像素点从上一帧到下一帧移动方向和移动距离的一种表示方式,可以理解成给画面里每个点画一个运动箭头。光流场这个概念不是这篇论文发明的,在传统计算机视觉里早就有,通常用来做视频压缩、机器人导航之类的任务。但把光流场喂给卷积神经网络,让深度学习直接从运动轨迹里学特征,这是这篇论文的关键一步。具体做法是,先用传统算法算出视频里连续几帧之间每个像素的位移,把水平方向的位移和竖直方向的位移分别存成两张图,这两张图不是普通图片,每个像素的数值代表的不是颜色,而是这个点往哪个方向移动了多远。把连续 10 帧算出来的这些位移图叠在一起,喂给一个和空间流结构类似的卷积网络,让它单独学习运动这件事。这个设计背后的道理是,把不同性质的信息交给不同的专家处理,比让一个人同时兼顾两件事效果好得多。想象一家餐厅,主厨既要炒菜又要记账,结果往往是菜炒得一般,账也记得马虎。但如果分成两个人,一个专心炒菜,一个专心记账,两个人各自做到极致,最后菜好账也清楚。空间流就是那个专心看画面的厨师,时间流就是那个专心看运动轨迹的会计,他们互不干扰,各自把自己擅长的事情做到最好,最后再把结果汇总。如果硬要一个网络同时干两件事,就像逼着那位主厨一边颠勺一边记账,难免两头顾不上。论文里还有一个细节值得说一说。作者尝试了两种计算光流的方式,一种是让画面上所有点的运动都被平等对待,另一种是先把摄像机本身的移动去掉,只保留画面里物体相对于摄像机的运动。后者的效果明显更好,因为很多视频是手持拍摄或者镜头本身在移动的,如果不把镜头晃动这个噪音过滤掉,时间流学到的很可能不是动作本身,而是摄像师的手抖。这提醒我们,看似简单的运动信息,其实里面藏着好几层需要精心剥离的成分。数据不够用,那就借别处的数据来凑深度学习这套东西,吃的是数据,而 2014 年能用来训练视频动作识别模型的数据集非常小,像 UCF-101 这样的标准测试集,总共也就一万多段视频,分成 101 个动作类别。这个规模放到今天简单的图片分类任务里都算小,更别说要训练两个卷积网络。数据不够,直接训练容易过拟合 过拟合*模型在训练数据上表现很好,但因为训练数据太少或模型太复杂,模型记住了训练数据里的细节和噪音,导致在新数据上表现很差的现象。Simonyan 和 Zisserman 想了两招来解决这个问题。第一招是把空间流网络放到一个更大的图片数据集上先预训练一遍,这个数据集就是著名的 ImageNet,里面有上百万张标注好的图片。这样空间流在正式看视频之前,已经从海量静态图片里学会了怎么识别物体和场景的基本套路,再拿相对小得多的视频数据去微调,效果自然好得多。这一招现在回头看是常识,但在当时的语境下,能想到用图片数据集去支援视频任务,说明作者已经意识到,空间流本质上做的事情和普通图片分类是一回事,完全可以借用图片领域已经积累的海量数据和经验。第二招是找到另一个数据规模更大的视频数据集,叫 Sports-1M,里面有一百万段体育视频,涉及 487 种运动类别。作者先在这个更大的数据集上训练网络,再迁移到目标数据集上做微调,这种做法叫多任务学习 多任务学习*让一个模型同时在多个相关任务或数据集上训练,借助任务之间的相关性,提升模型在每个任务上的表现,尤其在某个任务数据量不足时特别有用。这两招放在一起,本质上是同一个逻辑:数据不够,就去借。借的方式可以是借图片数据给空间流用,也可以是借更大的视频数据集给整体训练用。这就有点像准备一场重要考试,如果你手头的真题太少,一种办法是先做大量相关学科的基础题打底子,再回来做真题,另一种办法是找一份题量更大、难度相近的模拟卷先练手,最后再攻克目标考试的真题。两种办法都是在数据稀缺的情况下,想办法把经验从别处引进来。如果没有这两招,单靠一万多段视频去从零训练两个深度网络,大概率会训练出一个只会背题却不会举一反三的模型,遇到测试集里没见过的画面立刻露馅。两条流合起来,效果超过了手工特征最后到了见真章的时刻。空间流单独跑,在 UCF-101 上准确率是 72.6%。时间流单独跑,能达到 81.0%。这个结果本身已经说明,运动信息对识别动作的贡献,比单纯看画面外观还要大,这也印证了前面说的,动作的本质藏在时间变化里,不在某一帧的静态内容里。把两条流的预测结果做加权融合以后,准确率来到了 88.0%,这个数字第一次追平甚至略微超过了当时最好的手工特征方法。|方法|准确率||---|---||空间流单独|72.6%||时间流单独|81.0%||密集轨迹(手工特征基准)|约 88%||**双流网络融合**|**88.0%**|这个结果放在 2014 年的分量,不亚于两年前 AlexNet 在图片识别上的横空出世。区别在于,AlexNet 证明了深度学习在图片上可以碾压传统方法,而双流网络证明的是,深度学习在视频上终于追上了传统方法,而且找到了正确的路径,接下来只会越走越远。如果只用空间流会怎样?准确率停留在 72.6%,比双流融合整整低了 15 个百分点。这 15 个点意味着什么,意味着如果只靠看画面内容判断动作,每识别接近 7 个视频就要错认接近 1 个,而这个错误本可以靠给网络补一双看运动的眼睛来避免。有个细节特别值得拿出来说。Simonyan 和 Zisserman 当时同属牛津大学同一个研究组,几个月后,这个组又发表了另一篇后来同样载入历史的论文,VGGNet,提出了那个后来被无数人当作基础模型使用的网络结构。这两篇论文几乎是同期完成的工作,一篇解决了视频运动信息该怎么表示的问题,一篇把图片卷积网络的深度和规整性推到了一个新高度。这不是巧合,这说明当时这个研究组正处在对卷积网络理解突飞猛进的阶段,不同方向的思考互相印证互相促进。这条思路后来被怎样接着走双流网络这个想法,后来被证明不是一个孤立的巧思,而是打开了一整条研究路径。2016 年,Feichtenhofer、Pinz 和 Wildes 发表了《卷积双流网络融合用于视频动作识别》,他们指出原始双流网络的两条流是完全独立训练、最后简单加权融合的,这样空间流和时间流之间没有任何交流,信息融合发生得太晚太浅。他们提出在网络中间层就让两条流互相对话,提前融合特征,而不是等到最后一步才拼接结果,这个改进把准确率进一步推高。2017 年,Carreira 和 Zisserman(还是同一个 Zisserman)发表了《Quo Vadis 动作识别?一个新模型和 Kinetics 数据集》,提出了 I3D 模型,把双流网络里的 2D 卷积换成了 3D 卷积,直接在时间维度上做卷积运算,不再需要单独计算光流,同时配合他们发布的大规模数据集 Kinetics,把整个领域的训练数据规模又往上推了一个量级。这篇论文里依然保留了双流的思路,只是把时间流这个角色用 3D 卷积重新实现了一遍,说明双流的核心思想,分开处理静态外观和动态变化,在三年后依然被认为是对的,只是具体的实现方式在不断进化。这条从 2014 年延伸出去的路径,一直影响到后来的视频理解模型设计,核心逻辑始终没有变过:视频里的信息天然分成两种性质,一种是静态的外观,一种是动态的变化,想让模型学好,就得让它有能力分别捕捉这两种信息,而不是囫囵吞枣地混在一起处理。写在后面读这篇论文最触动我的地方,不是双流这个结构本身有多复杂,恰恰相反,是它简单到几乎让人怀疑,这么直接的想法,之前怎么没人试过。后来查资料才明白,光流场这个概念在传统视觉里已经用了几十年,真正的难点从来不是想不到,而是敢不敢把一个老古董技术,原封不动地塞进当时还很新潮的卷积网络里,让两种完全不同时代的技术手拉手工作。这种把旧工具和新框架强行拼接、居然拼出了突破的做法,让我想起很多工程史上的创新,往往不是凭空造出一个新零件,而是发现两个原本各自存在的零件,可以用一种没人试过的方式装在一起。有一个问题这篇论文没有回答,后来的研究者也还在持续追问:如果光流这种运动表示本身就是有损的、不完美的,那网络学到的运动理解到底是真的理解了运动,还是只是学会了利用光流算法本身的某些统计规律?这个问题放到今天的视频大模型身上,依然值得继续问下去。QAQ1双流卷积网络是什么A双流卷积网络是 2014 年由牛津大学 Simonyan 和 Zisserman 提出的视频动作识别方法,把视频识别拆分成空间流和时间流两个独立的卷积神经网络,空间流处理静态画面识别物体和场景,时间流处理光流场识别运动信息,最后融合两者结果做出判断。Q2双流网络的准确率和传统手工特征方法比怎么样A在 UCF-101 数据集上,双流网络融合后达到 88.0% 的准确率,首次追平甚至略微超过了当时最强的手工特征方法密集轨迹(约 88%),而在此之前的深度学习方法只能做到 65% 左右,差距达 20 多个百分点。Q3双流网络后来被哪些研究继续改进A2016 年 Feichtenhofer 等人提出卷积双流融合网络,让两条流在中间层就开始交流特征而不是最后简单加权。2017 年 Carreira 和 Zisserman 提出 I3D 模型,用 3D 卷积直接处理时间维度,配合新发布的 Kinetics 大规模数据集,进一步推动了视频识别的发展。

相关新闻

Claude代码命令实战指南:10个提升AI编程效率的核心技巧

Claude代码命令实战指南:10个提升AI编程效率的核心技巧

1. 引言:为什么Claude的代码命令值得深挖?如果你和我一样,日常开发、调试或者处理文本时,Claude已经成了离不开的助手。我们最熟悉的,可能就是那个聊天框,输入问题,等待它生成代码、解释逻辑或者…

2026/9/23 12:13:11 阅读更多 →
用一段视频,换出一个可以自由走动的世界

用一段视频,换出一个可以自由走动的世界

你有没有试过这样的场景:刷到一段朋友随手拍的旅行视频,镜头晃晃悠悠地扫过一座古镇的石板路,你突然特别想知道,如果镜头往左边多拍一点、往前再走十步,会看到什么。可惜视频已经拍完了,那个"如果&quo…

2026/9/23 23:24:02 阅读更多 →
三步告别绿幕:免费AI背景移除插件让你的人像抠图秒变专业

三步告别绿幕:免费AI背景移除插件让你的人像抠图秒变专业

三步告别绿幕:免费AI背景移除插件让你的人像抠图秒变专业 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https…

2026/9/22 7:29:41 阅读更多 →

最新新闻

工控现货的本质:四层技术校验与系统兼容性保障

工控现货的本质:四层技术校验与系统兼容性保障

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:44:12 阅读更多 →
硕博新生入学适应指南:助力学子快速开启新阶段学术成长之路

硕博新生入学适应指南:助力学子快速开启新阶段学术成长之路

每次找到心仪的外国文献,却被付费墙冷冷地挡在外面,是不是感觉科研的热情瞬间被浇灭?作为学生党,我太懂这种无力感了。但好消息是,通过几个合法且免费的“通道”和技巧,我们完全能实现“文献自由”。今天分…

2026/9/24 7:44:12 阅读更多 →
LanceDB Node.js 物化视图列选择:深入解析 MaterializedViewSelect 类型别名

LanceDB Node.js 物化视图列选择:深入解析 MaterializedViewSelect 类型别名

向量数据库数据库人工智能后端 【免费下载链接】lancedb Developer-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less. 项目地址: https://gitcode.com/gh_mirrors/la/lancedb 点击查看 免费下载 导读 在 LanceDB 的 Node.j…

2026/9/24 7:44:12 阅读更多 →
玩客云刷Armbian部署Home Assistant:低成本智能家居中枢实战

玩客云刷Armbian部署Home Assistant:低成本智能家居中枢实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:44:12 阅读更多 →
PRQL 的 Raku 语法实现:从 Grammars 定义到形状断言测试的完整指南

PRQL 的 Raku 语法实现:从 Grammars 定义到形状断言测试的完整指南

后端 【免费下载链接】prql PRQL is a modern language for transforming data — a simple, powerful, pipelined SQL replacement 项目地址: https://gitcode.com/gh_mirrors/pr/prql 点击查看 免费下载 PRQL(Pipelined Relational Query Language&am…

2026/9/24 7:44:12 阅读更多 →
RK3588嵌入式部署大模型:NPU+Ollama实战指南

RK3588嵌入式部署大模型:NPU+Ollama实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:43:12 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/9/23 9:53:41 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/9/23 9:53:40 阅读更多 →