微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 两条视频流的秘密:深度学习第一次在动作识别上打败了手工特征

两条视频流的秘密:深度学习第一次在动作识别上打败了手工特征

2026-08-24 13:10
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-08-24 13:10 • 科技行者

2014 年,计算机视觉圈里有一件事让很多人心里不太舒服。

AlexNet 已经在图像分类上把传统方法打得找不着北,深度学习的旗帜插遍了静态图片的每一个角落。可只要把问题换成视频,换成"识别一个人在做什么动作",深度学习就突然哑火了。

最好的卷积神经网络在动作识别数据集上只能做到 65% 左右的准确率,而一个叫做密集轨迹的手工特征方法,能做到 85% 以上。

差了整整 20 个百分点。这是什么概念?意味着每 5 个动作里,深度学习就要比手工方法多认错 1 个。放在图像分类的语境里,这种差距足够让一个方法被彻底判定为不可用。

问题出在哪儿?不是网络不够深,也不是数据不够多,问题出在动作识别这件事本身的性质上。识别一张图片里有没有猫,你看一帧画面就够了。可识别一个人是在挥手还是在鼓掌,你必须看动作怎么变化,你必须看时间。而卷积神经网络天生擅长处理的是空间结构,一张图片里像素和像素之间的关系,它对时间维度上的运动几乎没有天生的敏感度。

牛津大学的 Karen Simonyan 和 Andrew Zisserman 决定认真面对这个问题。他们两个人当时正在同一个实验室里做另一件事,几个月后发表的 VGGNet 论文,后来成了图像识别领域的标准模型之一。而这篇讲双流网络的论文,和 VGGNet 几乎是同期的工作,某种程度上算是他们探索"网络到底该怎么设计"这个大问题时的一次分支实验。

运动到底藏在哪里,这是第一个要想清楚的问题

在动手改网络结构之前,得先回答一个更根本的问题:一段视频里,"动作"这个信息到底藏在哪儿?

直觉上你会说,藏在一帧一帧的画面变化里。但这个说法太模糊了,没法直接喂给神经网络。研究者们选择了一种更精确的表达方式,叫光流。

> 光流*:描述视频里每一个像素点在下一帧往哪个方向、以多快速度移动的一种运动场,可以把它想象成给每个像素画一个箭头,箭头指向它接下来要去的地方。

如果你拍一段挥手的视频,静止的背景在光流图里几乎看不到箭头,而挥动的手臂周围会出现一片方向一致的箭头,清清楚楚地画出了运动的轨迹。这种表示方式把"动作"从一堆像素的变化,提炼成了一张干净的、只关于运动方向和速度的图。

这就好比你想知道一群人在广场上是往哪个方向流动的,你不会去数每个人穿的衣服颜色,你会去看他们脚步的方向和速度。光流图做的正是这件事,它把无关的外观信息(颜色、纹理、背景)全部滤掉,只留下运动本身。

如果不这么做会怎样?网络就得自己从原始像素序列里,一边学"这是什么东西",一边学"这个东西怎么动",两件事拧在一起,学习难度直接翻倍。这也正是之前那些直接把视频帧堆叠起来喂给网络的尝试,效果始终不理想的原因。

两条网络分头行动,一条看内容一条看动作

想清楚了运动信息该怎么表示,下一步就是网络结构的设计。Simonyan 和 Zisserman 的核心想法出奇地直接:既然一段视频里同时包含"这是什么"(空间信息)和"它怎么动"(时间信息)两类完全不同性质的信息,那就别硬塞进一个网络里,干脆用两个网络,一个管一个。

> 双流网络*:由两个独立的卷积神经网络组成的架构,一个叫空间流,输入是视频里的单帧静态图像,负责识别场景和物体;另一个叫时间流,输入是连续帧计算出来的光流图,负责识别动作和运动模式,最后把两条流的判断结果加权融合,得到最终的动作分类。

![双流网络结构图]

论文里的结构图画得很清楚,上半部分是空间流,吃进去一张 RGB 图像,走一遍标准的卷积网络,输出"这张图像里可能是什么动作"的概率分布。下半部分是时间流,吃进去一叠光流图(通常是连续 10 帧计算出来的水平和垂直方向光流),走另一遍结构类似的卷积网络,输出它自己的判断。两边各自算完之后,把结果做加权平均,谁的判断更可信,权重就更高。

这个设计背后有一个很朴素的类比。想象你请两个专家一起判断监控录像里发生了什么。一个专家只看单张截图,擅长认出"这是厨房""这是个人""他手里拿着刀",但看不出动态过程。另一个专家只看一段抠掉了背景、只剩运动轨迹的示意图,擅长看出"这是一个挥动的动作""这是一个下砸的动作",但完全不知道场景是什么。单独问任何一个专家,判断都可能出错,厨房里挥动手臂可能是切菜也可能是别的什么。但两个专家的判断合在一起,准确率就大幅提升了。

如果不拆成两条流,只用一个网络硬啃原始视频帧会怎样?实验数据已经给出了答案,前面提到的那批早期方法,准确率卡在 65% 左右上不去,正是因为一个网络既要学外观又要学运动,两种性质完全不同的模式互相干扰,谁也学不透。

只用空间流会发生什么,数据给出了扎心的答案

论文里做了一个特别值得拿出来说的对照实验:如果只用空间流(只看单帧图片,不看光流),动作识别准确率是多少?

答案是 72.6%。而加上时间流之后,融合准确率跳到了 88%。整整 15 个百分点的差距,全部来自"看不看运动信息"这一件事。

这个实验的意义在于,它用最直接的方式证明了一件事:仅凭静态画面,网络确实能猜出不少动作,毕竟很多动作有很强的场景线索,游泳池边大概率在游泳,篮球场上大概率在投篮。但要真正把动作认准,场景线索是不够的,运动本身携带的信息是不可替代的。

反过来,如果只用时间流,只看光流不看画面呢?论文里这一项单独的准确率大概在 83% 左右,比只用空间流要高,这也印证了一个判断,对于"这是什么动作"这个问题,运动信息本身比静态外观信息更关键,但两者结合起来才是最优解。

这里有个细节很值得琢磨。研究者还试过用视频里连续多帧的光流一起输入,而不是只用两帧算出来的单张光流图。结果发现,堆叠更多帧的光流(比如 10 帧)比只用相邻两帧效果好不少。这说明动作的判断不是靠某一个瞬间的运动方向决定的,而是要看一个时间窗口里运动模式的延续性,就像你判断一个人是在挥手还是不小心碰了一下,光看一瞬间的手部移动是分不清的,得看这个动作在接下来几帧里有没有延续和重复的规律。

数据不够怎么办,借个别人的肩膀

深度学习一直有个软肋,吃数据。而 2014 年的时候,标注好的动作识别视频数据集规模都不大,像 UCF101 只有一万三千多段视频,HMDB51 更小。这个规模放在图像分类领域(ImageNet 有上百万张图)简直是杯水车薪,网络很容易过拟合,学到一堆没用的细节而不是真正的规律。

研究者的解法是迁移学习的思路,先用规模大得多的图像数据集(ImageNet)把空间流网络的参数预训练一遍,让它先学会识别各种物体和场景的基本视觉模式,再拿到动作识别的数据集上做微调。

> 预训练与微调*:先在大规模数据集上训练网络学习通用的视觉特征,再把这些参数迁移到目标任务的小数据集上,针对具体任务做进一步调整,这样可以在数据量不足时依然获得较好的效果。

这就像一个刚毕业没有工作经验的新人,直接被丢进一个高度专业的岗位,大概率会手忙脚乱,因为他缺乏足够的实战案例去总结规律。但如果这个新人此前已经在一个通用型的岗位上历练过几年,积累了大量处理各种问题的经验,再转岗到专业岗位,上手速度会快得多,因为很多基础的判断能力已经具备了,只需要针对新场景做局部调整。如果不做预训练,直接在小数据集上从零训练整个网络,过拟合几乎是必然的,网络会死记硬背训练集里的视频,换一个新场景就完全失灵。

时间流这边预训练稍微麻烦一点,因为 ImageNet 里没有光流图,研究者用了另一种办法,在多个动作数据集之间做联合训练,让时间流网络在更多样的运动模式上打磨。

最终成绩单,以及它在历史上的分量

论文在两个当时主流的动作识别数据集上做了测试,UCF101 和 HMDB51。

| 方法 | UCF101 准确率 | HMDB51 准确率 |

|---|---|---|

| 手工特征(密集轨迹,当时最强基线) | 85.9% | 57.2% |

| 仅空间流 | 72.6% | 40.5% |

| 仅时间流 | 83.7% | 54.6% |

| **双流网络融合** | **88.0%** | **59.4%** |

这张表格里最重要的一点是,双流网络在两个数据集上都超过了当时最强的手工特征方法。UCF101 上从 85.9% 提升到 88%,HMDB51 上从 57.2% 提升到 59.4%。

这个提升幅度看起来不算夸张,但它的历史意义不在于提升了多少,而在于"深度学习第一次在这个任务上追平并反超了手工特征"。要知道就在同一年之前,深度学习在这个任务上还落后手工方法接近 20 个百分点。用一年时间填平这个差距,再反超,这个信号的分量不亚于 AlexNet 在图像分类上横空出世。它告诉整个领域,视频理解不是深度学习的天然盲区,只是之前没找对输入表示和网络结构。

后续的研究几乎沿着这篇论文划出的路径继续往前走。2015 年,Facebook 的研究者提出了 C3D,用三维卷积直接处理视频帧序列,试图让网络自己从原始像素里学出时空特征,不再依赖手工计算的光流。2016 年,Feichtenhofer 等人在双流网络的基础上提出了时序分段网络(TSN),把一段长视频切成若干小段,分别提取特征再融合,解决了双流网络原本只能处理短时间窗口、难以捕捉长时间动作模式的问题,在 UCF101 上把准确率进一步推到了 94% 以上。再往后,2017 年 DeepMind 提出的 I3D 把双流网络和三维卷积结合在一起,同时借助更大规模的 Kinetics 数据集做预训练,准确率又上了一个台阶。

这几篇后续工作有一个共同点,它们都没有推翻双流网络的核心洞察,空间信息和时间信息应该被分别建模,而是在这个框架上做扩展和优化。这也是为什么这篇论文常被认为是视频理解领域的一个奠基性节点。

写在后面

读这篇论文的时候,一个细节让我停下来想了很久:只用光流的时间流网络(83.7%),表现居然比只用画面的空间流网络(72.6%)好出一大截。这和我最初的直觉是反的,我一直以为"看清楚场景和物体"应该比"看清楚运动轨迹"更重要,毕竟人类识别动作好像也很依赖上下文线索。但数据摆在那里,运动信息本身的判别力比场景外观更强。

这让我联想到语音识别领域一个类似的争论,到底是"内容"重要还是"语调和节奏"重要。很多时候,动态的、过程性的信息,比静态的、状态性的信息携带了更多别人无法伪造的线索。这或许是个值得跨领域追问的问题:在多少任务里,我们过度依赖了静态特征,而忽视了变化本身才是更诚实的信号?

论文没有解决的一个问题是,双流网络需要预先计算光流,这个计算本身是有成本的,也没法端到端地和网络一起优化。这个矛盾直到后来的三维卷积和端到端方法出现才慢慢缓解。

Q&A

Q1:双流网络是什么?

A:双流网络是 Simonyan 和 Zisserman 在 2014 年提出的视频动作识别模型,由两个独立的卷积神经网络组成,一个处理单帧图像捕捉场景信息(空间流),一个处理光流图捕捉运动信息(时间流),两者结果融合后输出动作分类结果。

Q2:双流网络相比手工特征方法效果怎么样?

A:在 UCF101 数据集上,双流网络达到 88% 准确率,超过了当时最强的手工特征方法密集轨迹的 85.9%;在 HMDB51 数据集上从 57.2% 提升到 59.4%,是深度学习首次在动作识别任务上反超手工特征。

Q3:为什么双流网络要分成空间流和时间流两条网络?

A:因为动作识别同时需要"识别场景内容"和"识别运动模式"两种性质完全不同的信息,用一个网络同时学习两者会互相干扰,效果不佳。实验显示只用空间流准确率仅 72.6%,加上时间流后提升到 88%,证明分开处理再融合效果更好。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-