ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

当深度学习第一次打败了人类设计的特征:双流网络的故事

当深度学习第一次打败了人类设计的特征:双流网络的故事 2014 年的计算机视觉圈子里有一件事让很多人心里不太舒服。卷积神经网络在图像识别上已经把传统方法打得溃不成军AlexNet 横空出世才两年图像分类的准确率被一次次刷新。可是一旦把静止的图片换成动态的视频风向完全变了。在动作识别这个任务上深度学习居然连着两年打不过一种叫做密集轨迹的手工特征方法。**这在当时是个相当尴尬的事实手工设计的特征靠着人类对运动规律的理解精心搭建出来反而比神经网络自己学出来的特征更准。**密集轨迹*一种传统的视频特征提取方法通过跟踪视频中密集分布的像素点的运动轨迹并结合方向梯度、光流方向等信息来描述动作在深度学习出现前是动作识别领域的主流方法。要理解这件事有多奇怪可以类比一下。图像识别就像认人脸一张照片给你,你看五官、轮廓,一眼就能认出这是谁。而动作识别是要认出一个人正在做什么,这需要看的不是一张照片,而是一连串照片里发生了什么变化。神经网络在处理单张照片时游刃有余可一旦涉及到时间维度上的变化它反而变得像个不擅长动态推理的孩子,能看清每一帧长什么样却抓不住帧与帧之间到底发生了什么运动。这篇论文的作者是 Karen Simonyan 和 Andrew Zisserman来自牛津大学。这两个名字你可能觉得有点熟悉,没错他们几个月后又发表了另一篇几乎人人都听过的论文提出了 VGGNet。这两项工作几乎是同期进行的某种程度上这篇动作识别的论文可以看作是同一个研究小组在探索卷积网络边界时留下的另一个脚印。问题出在哪视频比图片多了一个维度却被网络忽略了要设计一个能处理视频的神经网络最直接的想法是什么把视频看成一堆图片一帧一帧地喂给卷积网络,或者把好几帧叠在一起,当成一张更厚的图片输入进去。这个想法听起来合理但实际做起来效果很差。当时已经有研究尝试过这类方法比如直接用 3D 卷积去处理连续帧但准确率始终没能超过手工特征。问题出在哪?单张图片能告诉你画面里有什么东西但没法直接告诉你这个东西正在往哪个方向、以多快的速度移动。而动作恰恰是由运动定义的同一个静态姿势可能是正在坐下也可能是刚站起来准备坐下的前一刻。**如果网络只看画面内容不看运动信息它其实是在用静态图像识别的思路硬解一个动态问题,这就好比让一个只会看照片的人去猜一段哑剧演员在表达什么他能看清演员的表情和姿势却抓不住那个正在发生的动态过程,如果动作全靠单帧姿势去猜很多本质不同的动作看起来会一模一样。**这就是这篇论文要解决的核心矛盾怎么让神经网络真正看懂运动而不只是看懂画面。解法把网络拆成两条独立的流论文提出的方法叫做双流卷积网络。双流卷积网络*Two-Stream Convolutional Networks一种把视频识别任务拆分成两个独立卷积网络分支来处理的架构一条处理静态画面信息一条处理运动信息最后融合两者的判断结果。思路其实很直白既然一个网络很难同时处理画面内容和运动信息这两种性质完全不同的信息那就干脆别让它们挤在一起分成两条独立的通道各自专注做好一件事。第一条通道叫空间流输入是视频里的单帧图像负责识别画面中的场景和物体比如这是在球场上画面里有一个球、一个球拍。这条通道跟普通的图像分类网络几乎没有区别可以直接借用在 ImageNet 上训练好的模型。第二条通道叫时间流这才是这篇论文真正的巧思所在。它的输入不是原始画面而是光流。光流*Optical Flow描述图像序列中每个像素点在连续帧之间移动方向和速度的向量场本质上是把运动这件事用数值的方式表达出来。光流场把每个像素在两帧之间往哪个方向移动、移动了多远都算出来变成一张记录运动方向和速度的图。把这样的光流图连续堆叠十帧作为时间流网络的输入网络就能直接看见运动的模式而不需要自己费力从像素变化里去猜测运动信息。这就相当于给了网络一副专门用来看运动的眼镜。打个比方你让一个人光靠盯着一张张照片来判断球是往左飞还是往右飞他得反复对比好几张照片才能推断出方向,这个过程又慢又容易出错。但如果你直接在照片上画好了箭头标出球在这一瞬间的运动方向和速度他一眼就能看懂。光流图做的就是这件事它把运动这个抽象概念,提前计算好、可视化出来直接喂给网络网络就不用再费劲从静态画面的细微差异里反推运动了。如果不这么做网络就必须自己在层层卷积里隐式地学习运动模式这件事被证明相当困难效果也差很多。两条流各自训练好之后最后用一个简单的方法把两边的判断结果融合起来,可以是直接平均也可以再训练一个小的分类器去决定怎么加权。论文里还专门放了一张示意图展示时间流网络第一层卷积核学到的滤波器形状,你会发现这些滤波器大多呈现出明显的方向性纹路像是专门用来捕捉某个特定方向的运动模式。这不是设计者刻意安排的而是网络在训练光流数据时自己学出来的规律,说明网络确实学会了从光流信息里提炞方向性特征这恰恰印证了整个设计思路是对的。数据说话这套方法到底提升了多少论文在两个当时的标准动作识别数据集上做了测试UCF-101 和 HMDB-51。UCF-101*包含 101 类人体动作、共 13320 段视频片段的公开数据集是当时动作识别领域最常用的评测基准之一。HMDB-51*包含 51 类动作、约 7000 段视频片段的数据集视频来源更加多样难度普遍被认为比 UCF-101 更高。先看单独用空间流会怎样,也就是只让网络看静态画面不给它任何运动信息。在 UCF-101 上单独的空间流只能达到 72.6% 的准确率。再看单独用时间流,只给运动信息不给画面内容,准确率能到 81.0%反而比只看画面更高这本身就说明了运动信息对动作识别有多重要。而把两条流融合起来之后准确率跃升到 88.0%。这组数字背后的意义值得细品。20 个百分点的差距意味着什么?意味着如果只靠静态画面去判断动作每 5 个动作里就要比结合运动信息的方法多认错 1 个。而单独的运动信息比单独的静态画面更管用这个结果本身就在提示我们过去那些只处理单帧图像的神经网络方法其实一直都缺了最关键的一块拼图。| 方法 | UCF-101 准确率 ||---|---|| 空间流仅画面 | 72.6% || 时间流仅运动信息 | 81.0% || 双流融合 | **88.0%** || 当时最强手工特征改进版密集轨迹 | 87.9% |看最后一行这才是真正让人激动的地方。当时最好的手工特征方法能达到 87.9%而双流网络融合之后是 88.0%几乎打平甚至略微超出。这是深度学习第一次在视频动作识别任务上打平并超越手工特征方法。在 2014 年这句话的分量不亚于两年前 AlexNet 在图像分类上的横空出世。这篇论文之后发生了什么双流网络提出的架构思路后来被反复验证、扩展、改进成了视频理解领域延续多年的一条主线。3 年后Feichtenhofer 等人在他们的论文里提出了一种让空间流和时间流不再是训练结束后简单相加而是在网络中间层就相互交流信息的融合方式,准确率进一步提升证明了两条流之间越早对话效果越好。再往后Carreira 和 Zisserman(同一个 Zisserman在 2017 年提出了 I3D 网络把双流的思路和 3D 卷积结合起来并且提出了 Kinetics 这个大规模视频数据集用于预训练,这篇论文进一步把动作识别的准确率推高也让双流思路 大规模预训练成了后续几年的标准范式。**双流网络真正留下的遗产,不是某个具体的准确率数字而是它证明了一件事面对一个复杂任务把它拆解成几个性质不同、各自专精的子任务分别处理往往比硬塞给一个网络让它自己去学更有效。**这个思路后来在很多地方都能看到影子比如后来的多模态模型把视觉、语言、音频分别用不同的网络处理再融合某种程度上都延续着双流网络当年那套分而治之的哲学。写在后面读这篇论文时最让我意外的一点是两条流单独跑的效果都不算特别惊艳,时间流 81%空间流 72.6%,但融合之后直接跳到 88%超过了这两个数字简单加权能达到的水平。这说明两条流学到的东西确实是互补的不是重复信息的叠加。这种11 大于 2的效果在深度学习的融合方案里其实并不常见,很多时候多模态融合带来的提升是边际递减的双流网络这里反而是一个比较干净的正例。还有一个细节值得单独说一下,时间流网络的输入光流本身是靠传统算法预先计算出来的并不是端到端学习的产物。这意味着这篇论文其实是深度学习 传统计算机视觉的一次混合光流计算这一步完全依赖手工设计的算法。某种意义上双流网络并没有彻底摆脱手工特征只是把手工计算的光流,喂给了一个学习出来的分类网络。这个混血的设计后来也确实成了被批评和改进的对象那些想做端到端光流学习的工作比如 FlowNet某种程度上就是想把这最后一块手工设计的部分也交还给网络自己去学。这大概也是这类奠基性论文常有的命运它解决了当时最紧迫的问题同时留下了一个足够明显的缺口让后来的人有事可做。QAQ1双流卷积网络是什么A双流卷积网络是 2014 年提出的一种视频动作识别方法把识别任务拆成两条独立的卷积网络分支一条处理单帧画面的空间信息一条处理光流表示的运动信息最后融合两者结果做出判断。Q2双流网络和传统手工特征方法相比效果如何A在 UCF-101 数据集上双流网络融合后达到 88.0% 的准确率而当时最强的手工特征方法改进版密集轨迹是 87.9%这是深度学习第一次在视频动作识别上打平并超越手工特征方法。Q3为什么双流网络要单独设计一条时间流处理光流A因为单帧图像很难体现动作中的运动信息光流能直接表示像素在连续帧间的运动方向和速度把运动信息提前计算好喂给网络比让网络自己从画面变化里推断运动效果更好实验显示单独时间流准确率达到 81%比单独空间流的 72.6% 还高。
返回列表