来源:市场资讯
(来源:科技行者)
2014 年,深度学习已经在图片识别上打得手工特征满地找牙。AlexNet 一战封神,让所有人相信卷积神经网络是万能钥匙。
但有一件事让当时所有做视频研究的人都很困惑:把这套神器搬到视频动作识别上,居然打不过一群老派的手工特征方法。
这不是小差距。当时最强的手工特征方法叫做“密集轨迹”,在权威的 UCF-101 数据集上能做到 87.9% 的准确率。而深度学习的尝试呢,最好的结果才 65% 左右,差了整整 20 多个百分点。
这事儿听起来很反常。你想想,深度学习在静态图片上把 SIFT、HOG 这些老牌手工特征打得毫无还手之力,为什么换成视频反而掉链子了?
如果你是当时的研究者,会怎么想这个问题?
Karen Simonyan 和 Andrew Zisserman,两位来自牛津大学的研究者,就在琢磨这件事。他们后来又用同样的严谨劲头搞出了 VGGNet,那是几个月后的事,但当时,他们的注意力全放在视频这块硬骨头上。
视频比图片难在哪
先说清楚问题出在哪。
图片识别,说到底是在学“这个东西长什么样”。一张猫的照片,网络学的是猫的轮廓、毛发纹理、耳朵形状,这些都是空间信息,一帧画面里全都包含了。
但视频不一样。一个“挥手”的动作,如果你只看其中一帧静止画面,很可能什么都看不出来,可能就是一个人举着手,和“打招呼”“投篮”“求救”长得一模一样。
动作的关键信息藏在时间维度里,藏在画面怎么随时间变化这件事上。
> 卷积神经网络(CNN):一种擅长从图像中自动提取空间特征的深度学习模型,通过卷积层逐层学习从边缘、纹理到物体轮廓的层次化表征。
当时的研究者尝试把 3D 卷积用在视频上,直接对时间和空间两个维度一起做卷积,理论上听起来很美,让网络自己从原始像素堆里学出时间变化的规律。
但实际效果很差。为什么?
这里要往深一层想。CNN 在图片上的成功,很大程度上依赖于 ImageNet 那种上百万张标注图片的海量数据。而视频数据集在 2014 年小得可怜,UCF-101 只有 13000 段视频,样本量差了两个量级。
从零开始,让网络自己学会分辨“时间变化里哪些是动作信息,哪些是噪声”,这个任务对于当时的数据量来说,太难了。
打个比方,这就像让一个从没学过认字的孩子直接读长篇小说,还指望他自己总结出语法规则。理论上语言规律确实藏在文本里,但没有足够的阅读量,孩子学到的顶多是几个高频词,根本抓不住语法结构。如果非要这么干,结果就是每次考试都答得乱七八糟,这正是 3D 卷积在小数据集上的下场。
双流网络:把问题拆成两半来解决
Simonyan 和 Zisserman 的思路,说白了就是不硬啃。
他们不去指望一个网络自己学会揪出时间信息,而是把问题提前拆解成两部分,分别用两个网络来解决。这就是这篇论文的核心贡献,双流卷积网络(Two-Stream Convolutional Networks)。
> 双流网络:把视频动作识别拆成两条并行的处理路径,一条处理静态画面(空间流),一条处理运动信息(时间流),最后把两条路径的判断结果融合起来。
第一条路径叫空间流,说白了就是普通的图片分类网络,输入是视频里的单帧画面,学的是“这个场景里有什么东西”,比如背景是不是游泳池,画面里有没有篮球架。这部分信息帮网络排除干扰,比如你在游泳池边就不太可能是在打篮球。
第二条路径叫时间流,这才是解决核心难题的关键设计。它的输入不是原始画面,而是提前算好的光流场。
> 光流(Optical Flow):描述视频中相邻两帧之间每个像素点移动方向和速度的场,本质上是把“画面怎么动”翻译成了一张张可以直接喂给卷积网络的图像。
这一步设计很聪明,而且是整篇论文里最值得琢磨的地方。
研究者没有让网络自己去从原始像素里挖运动信息,而是先用传统的光流算法,把“运动”这件事显式地计算出来,变成一张张标注了每个像素运动方向的图,再把这些光流图喂给一个和空间流结构类似的卷积网络。
为什么这样做?
因为运动信息如果藏在原始像素的时间变化里,网络得自己去发现这个规律,这需要海量数据。但如果你提前用光流算法把运动信息“翻译”出来,变成一种更直接的表示形式,网络要学的东西就简单多了,不用再费劲去理解像素怎么变化对应什么运动,而是直接看运动方向本身。
这就像你要教一个新手厨师判断菜有没有熟,你可以让他自己去摸索“颜色变化对应什么熟度”这种复杂的隐藏规律,也可以直接给他一个测温枪,把温度这个关键信息提前给他算出来,他只需要学会“多少度算熟”这一条简单规则就够了。如果不用测温枪,让他自己从颜色、气味里去悟出温度规律,大概率新手期会做出一堆夹生或者烧焦的菜。光流对于时间流网络,就是那个测温枪。
论文里还有个细节值得说,他们尝试了两种光流表示方式,一种是逐帧堆叠的光流图,一种是光流轨迹的形式,同时还测试了要不要减去平均光流值来消除摄像机自身移动带来的干扰。结果发现,减去均值这个小操作能带来实打实的提升,因为很多视频是手持拍摄的,摄像机本身的抖动会污染真实的动作信息。
两条流怎么合并成一个答案
两条网络分别算出各自的判断之后,怎么把结果拼到一起?
论文里用的办法很直接,两种融合方式都试了。一种是在最后的分类分数层面做平均,另一种是训练一个额外的支持向量机(SVM)来学习怎么组合两条流给出的分数。
> 支持向量机(SVM):一种经典的机器学习分类算法,擅长在特征空间里找到一个最优的分界线来区分不同类别,在深度学习流行之前是主流的图像分类工具。
结果是,用 SVM 融合的效果比简单平均更好,这说明两条流给出的信息不是简单的“各打五十分”,而是有主次和互补关系的,某些动作类别可能空间信息更关键,某些则更依赖运动模式,SVM 能学到这种权重关系。
数据说话最直接。在 UCF-101 上,只用空间流,也就是丢掉运动信息,只看单帧画面,准确率是 72.6%。只用时间流,也就是只看光流不看画面内容,准确率能到 81.0%。而两者融合之后,准确率跳到了 88.0%。
这组数字信息量很大。
首先,单独看,时间流居然比空间流表现更好,这印证了一个直觉,动作识别里,运动信息比场景信息更关键。想想看,你判断一个人是在“走”还是在“跑”,光看一张静止照片其实很难,双脚离地的瞬间走和跑长得差不多,但看运动轨迹,一眼就能分清。
其次,两者融合后的提升幅度,从 81% 到 88%,说明这两条流学到的东西确实是互补的,不是重复信息。空间流补上了时间流缺失的场景上下文,比如通过背景判断“这是在泳池边”,能帮着排除掉一些运动模式相似但场景完全不同的干扰项。
如果只用空间流会怎样?准确率从 88% 掉到 72.6%,整整少了 15 个百分点。这意味着每 7 个视频里,就有 1 个会被判断错。这个差距足够说明,静态画面信息对于动作识别这件事,只是辅助,不是主角。
最终成绩单,和它打破的那个天花板
回到开头说的那个困局。深度学习之前打不过手工特征的“密集轨迹”方法,差距是 20 多个百分点。
这篇论文最终交出的成绩是,在 UCF-101 上达到 88.0%,在另一个数据集 HMDB-51 上达到 59.4%。而当时最强的手工特征方法,密集轨迹加上 Fisher Vector 编码,在 UCF-101 上是 87.9%。
这两个数字几乎打平,88.0% 对 87.9%。
这个数字听起来不算惊天动地,但它的历史意义完全不在于领先了多少,而在于第一次,深度学习方法在视频动作识别这个任务上,追平了统治多年的手工特征方法。
这是深度学习在视频动作识别上第一次不再输给手工特征。在 2014 年,这句话的分量不亚于 AlexNet 在图片识别上的横空出世。区别在于,AlexNet 是碾压式胜利,而双流网络是艰难追平,但追平本身,就足以证明这条路走得通,深度学习不是不能做视频,只是需要一个更聪明的输入表示方式,而不是硬啃原始像素堆。
这篇论文之后发生了什么
双流网络提出的“空间加时间”这个框架,后来成了视频理解领域将近十年的主流范式,直到 3D 卷积和 Transformer 架构真正成熟之后才逐渐被取代。
2016 年,Feichtenhofer 等人发表了 Temporal Segment Networks(TSN),把双流网络里对时间信息的处理方式做了改进,原来的时间流只能捕捉短时间窗口内的运动,TSN 通过对整段视频稀疏采样多个片段再融合,让网络能够建模长时间跨度的动作规律,把 UCF-101 上的准确率进一步推高到 94% 以上。
2017 年,Carreira 和 Zisserman,同样是 Zisserman,发表了 I3D(Inflated 3D ConvNet),这篇论文提出了一个很巧妙的思路,把在图片上训练好的 2D 卷积网络“膨胀”成 3D 卷积网络,直接继承图片识别里学到的权重,再用双流的框架在大规模视频数据集 Kinetics 上训练。这一下子解决了 3D 卷积当年因为数据量不足训练不好的老问题,I3D 把两个方向的思路捏到了一起,既用了双流架构的思想,也终于让 3D 卷积真正可用。
这两篇后续工作,一个从时间建模的粒度上做了延伸,一个从网络结构和预训练策略上做了突破,都是站在双流网络这个“空间+时间”框架的肩膀上往前走的。
写在后面
写到这里,最让我意外的一点是,双流网络能追平手工特征,靠的不是更深的网络或者更大的算力,而是一个看似“作弊”的操作,提前用传统算法把光流算好,再喂给深度网络。
这其实提出了一个更普遍的问题,深度学习到底是应该端到端地从原始数据里学一切,还是应该在合适的地方保留一点传统方法算出来的先验信息?双流网络给出的答案很实用主义,数据不够的时候,别硬学,先把领域知识用传统方法算出来,帮网络省点力气。
这和后来 I3D 用 2D 权重去初始化 3D 网络,其实是同一种思路的不同变体,都是在“数据不够时如何借力”这个问题上做文章。
这个思路放到今天的大模型训练里也不过时,预训练、迁移学习,本质上都是在回答同一个问题,当你没有足够的数据从零学会一件事时,能不能借用别处已经算好的知识?
Q&A
Q1:双流卷积网络是什么?
A:双流卷积网络是 2014 年由牛津大学研究者 Simonyan 和 Zisserman 提出的视频动作识别方法,把视频分析拆成两条并行网络,一条处理单帧画面的空间信息,一条处理光流计算出的运动信息,最后融合两者的判断结果。
Q2:双流网络为什么要用光流而不是直接用原始视频帧训练?
A:因为当时的视频数据集规模太小,如果让网络自己从原始像素的时间变化里学会识别运动模式,需要海量数据才能学好。提前用传统算法计算出光流,把运动信息直接翻译成图像形式,能大幅降低网络需要学习的难度。
Q3:双流网络的效果到底怎么样,能打过传统手工特征方法吗?
A:在 UCF-101 数据集上,双流网络达到 88.0% 的准确率,几乎追平了当时最强的手工特征方法“密集轨迹”的 87.9%。这是深度学习方法第一次在视频动作识别任务上追平手工特征,具有重要的历史意义。
热门跟贴