ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

双流卷积网络:当深度学习第一次在视频动作识别上赢了

双流卷积网络:当深度学习第一次在视频动作识别上赢了 2014 年深度学习已经在图像识别上打得对手找不到北。AlexNet 横空出世两年后卷积网络几乎统治了静态图片的分类比赛识别一只猫、一辆车、一栋房子交给深度网络基本没有悬念。但如果给你的不是一张照片而是一段视频呢。一个人从椅子上站起来一个人挥手打网球一个人跳进泳池这些动作光看一帧画面根本看不出来。你需要看到画面怎么随时间变化。奇怪的事情发生了。在这个问题上深度学习居然打不过一种叫做密集轨迹的手工设计方法。密集轨迹*一种传统的视频动作识别方法通过跟踪视频中密集分布的点随时间移动的轨迹并计算轨迹周围的手工设计特征来判断动作类别。具体差多少在当时最具挑战性的 UCF-101 数据集上密集轨迹这类手工特征方法能做到 87% 左右的准确率而已有的深度学习尝试比如直接把 3D 卷积网络怼上去的方法只能做到 65% 上下。整整 20 个百分点的差距意味着什么意味着每 5 个动作里深度学习就要比手工方法多认错 1 个。这在图像识别领域是不可想象的差距AlexNet 当年也没输给传统方法这么多。这篇论文的两位作者Karen Simonyan 和 Andrew Zisserman来自牛津大学的 VGG 组。没错就是那个几个月后发表了 VGGNet、把图像分类刷到新高度的团队。这两篇论文几乎是同期的工作一个在攻克图片一个在攻克视频而攻克视频这一仗打得比想象中艰难。他们要回答一个问题为什么深度学习在图片上这么强到了视频上反而不灵了。问题出在哪网络学不好动这件事先说说当时的深度学习方案是怎么做视频识别的。最直接的想法是把 2D 卷积网络扩展成 3D让卷积核不仅在图像的长宽方向滑动还在时间维度上滑动指望网络自己从连续帧里学出运动的规律。这个想法听起来很合理但实际效果很差。原因也不难理解。图像识别的成功建立在一个基础上那就是有海量标注数据ImageNet 有超过一百万张标注图片。而视频数据集小得多动作识别常用的数据集只有几千到一万多个视频片段。让一个本来就参数庞大的 3D 卷积网络,从这么少的数据里,自己学会什么是运动这相当于要求一个学生只看了几页教材就要总结出整个学科的规律学不好是必然的。Simonyan 和 Zisserman 的思路是,既然网络自己学不好运动信息,那就不要让它自己学,直接把运动信息喂给它。这就引出了整篇论文最核心的设计,光流。光流*描述图像中每个像素点在连续两帧之间的运动方向和速度的一种表示方法用一张运动图来记录画面里哪里在往哪个方向移动、移动了多快。光流不是什么新东西计算机视觉里研究了几十年专门用来描述画面里的运动。它把每一帧图像里每个像素的位移编码成一张类似图片的东西横向位移和纵向位移各占一个通道。这样一来运动信息不再需要网络自己从像素变化里费力推测而是被预先计算好直接摆在网络面前。这里就要问一个问题了,如果不用光流,网络能不能自己学到同等质量的运动信息?论文用实验回答了这个问题,答案是不能,或者说,非常难,需要多得多的数据和更复杂的结构才能勉强逼近。这也是为什么在数据有限的情况下,把光流这种领域知识直接注入网络,比让网络从零开始摸索要划算得多。双流架构:把一个问题拆成两个网络来解决既然运动信息要单独处理,那静态的外观信息呢?比如画面里有没有网球拍,有没有游泳池,这些信息其实也很重要,一个人挥拍的动作旁边有球拍,这个先验信息本身就是很强的线索。于是论文提出了双流卷积网络这个核心架构。双流卷积网络*一种把视频动作识别拆分成两个独立卷积网络的架构一个网络专门处理单帧静态画面叫空间流另一个网络专门处理连续帧之间的光流场叫时间流两个网络最后的判断结果做融合得出最终的动作类别。![论文中的双流架构示意图展示了空间流网络接收单帧RGB图像时间流网络接收多帧光流叠加两条支路分别输出softmax分数后融合]空间流很好理解输入就是视频里随便抽出来的一帧图像网络结构和普通的图像分类网络差不多负责判断画面里有什么物体、什么场景。时间流是这篇论文的重点输入不是图像而是连续多帧计算出来的光流场堆叠在一起形成一个多通道的输入,论文里用的是连续 10 帧的光流,横向和纵向各一个通道,一共 20 个通道堆在一起喂给网络。这个网络专门学习动作模式比如挥拍这个动作在光流场上呈现出什么样的运动轨迹。两个网络训练好之后分别对同一个动作片段给出一个预测分数最后把两个分数加权融合谁给出的置信度更高权重就更大一些融合方式论文里试了简单平均和用支持向量机学习权重两种,后者效果更好一点。这个设计其实映射了人类大脑处理视觉信息的一个已知事实,神经科学上早就发现,人的大脑视觉皮层里存在两条相对独立的通路一条处理这是什么物体识别一条处理这在往哪动运动感知。这两位作者显然是借鉴了这个思路让机器也用两套眼睛分别看静止的和动态的信息而不是塞进一个网络里让它自己去分辨。这里可以做一个类比。想象你在看一场足球比赛的回放如果只给你一张定格的画面你可能能看出这是个球场有球员在场上但你猜不出下一秒球往哪儿飞谁要射门了。如果只给你一段没有画面内容、纯粹标注了每个点往哪个方向移动的运动轨迹图你能看出有东西在快速移动但你分不清到底是球还是人。你必须同时结合这是什么和它怎么动才能准确判断出这是一次射门还是一次传球。如果只用一条通路去处理等于让你蒙着眼睛只凭运动轨迹猜比赛内容或者盯着一张静态照片猜下一秒的动作两种情况下你都会经常猜错。双流网络的设计,就是不让机器也陷入这种信息缺失的困境。时间流网络怎么设计:光流该怎么堆叠时间流网络具体怎么处理光流数据这里面还有几个值得展开的设计细节。第一个问题是光流怎么计算。论文用的是传统的光流算法不是深度学习方法当时深度学习做光流估计还不成熟计算出来的光流场每个像素点有横向和纵向两个分量。为了让网络看到一段时间内的运动趋势而不是单帧之间的瞬时运动论文把连续 10 帧的光流叠在一起变成一个 20 通道的输入10 帧乘以横纵两个方向。第二个问题是要不要考虑摄像机本身的移动。很多视频是手持拍摄或者运镜的整个画面都会有一个整体的位移这个位移和动作本身无关是噪声。论文尝试了减去这个整体运动的版本效果确实有提升说明网络确实会被这种无关的全局运动干扰,这也提示了一个更深层的问题,光流这种表示虽然比原始像素更贴近运动的本质,但它依然不是纯粹的,里面混杂了背景运动和物体运动,需要额外处理才能把真正有用的信号提取出来。第三个问题是怎么应对数据量不足。前面说过,视频数据集比图像数据集小得多,UCF-101 一共只有一万多个片段。论文采用了一个巧妙的办法,用两个数据集联合训练,把动作类别少但样本相对充足的数据集和目标数据集放在一起训练,共享网络的大部分参数,只在最后分类层做区分。这个做法某种程度上是数据不够,借别处的数据来凑,类似于一个学生主科的练习题不够,就去借用相近科目的习题来巩固基础知识,虽然题目不完全对口,但锻炼的底层能力是相通的。如果不这么做,单独在小数据集上训练,过拟合会非常严重,网络记住的是训练集里的个别样本特征,而不是动作本身的规律。结果:深度学习终于赢了一次说了这么多设计,数据说话才是硬道理。论文在两个标准数据集上做了测试UCF-101 和 HMDB-51这是当时动作识别领域最常用的两个基准。| 方法 | UCF-101 准确率 | HMDB-51 准确率 ||---|---|---|| 只用空间流网络 | 72.6% | 40.5% || 只用时间流网络 | 81.0% | 54.6% || 双流网络融合 | **88.0%** | **59.4%** || 同期最好的手工特征方法 | 87.9% | 57.2% |先看只用空间流会怎样。准确率只有 72.6%比双流融合的 88% 低了 15 个百分点还多。这说明单看静态画面确实丢失了大量信息一个挥拍的动作如果只看一帧网络很容易和别的手臂动作搞混。再看只用时间流。81% 已经比空间流高出一大截这本身就很说明问题,运动信息对判断动作类别的重要性可能超过静态外观信息。但即便只看运动信息也比不上两者融合的效果。融合之后的 88%第一次让深度学习方法在 UCF-101 上追平甚至略微超过了手工设计的密集轨迹类方法。这是一个历史节点深度学习在视频动作识别这个子领域第一次不再是被手工特征按在地上打的那一方。这句话放在 2014 年分量不亚于两年前 AlexNet 在图像识别上掀起的那场革命只是这次战场换到了视频。值得多说一句的是 HMDB-51 上的结果双流网络拿到 59.4%超过手工方法的 57.2%差距不算大但这个数据集样本量更小、动作更难区分深度学习能在这种小样本条件下也追上甚至反超说明双流架构确实抓住了问题的本质,而不是靠堆数据蛮力取胜。这篇论文之后:光流思路被继续放大双流网络提出之后光流加静态画面的这个思路成了后续很多工作的起点。3 年后Feichtenhofer 等人在 2017 年提出了时空融合网络把双流网络里两个独立训练、最后简单融合的做法改成了更早期就开始交互融合,让空间流和时间流在网络的中间层就开始信息交换,而不是等到最后一步才合并结果这个改进进一步提升了准确率也证明了两条流之间不应该是完全割裂的中间层的信息共享能带来额外收益。同样在 2017 年前后Carreira 和 Zisserman还是同一位作者提出了 I3D 网络这个工作干脆放弃了单独计算光流的思路而是把 2D 卷积网络直接膨胀成 3D 卷积网络让网络在一个更大规模的视频数据集 Kinetics 上直接学习时空特征某种程度上是回到了最初让网络自己学运动的思路但这次因为有了 Kinetics 这种规模大得多的数据集做支撑3D 卷积终于跑赢了双流网络。这个转折也挺耐人寻味,双流网络当年之所以要引入光流这种手工先验,本质上是因为数据不够,一旦数据规模上来了,先验知识的必要性反而下降了,这某种程度上印证了深度学习领域一直存在的一个规律,数据量足够大的时候,很多手工设计的技巧会显得没那么关键。再往后各种基于双流思路的变种持续涌现光流这个概念也被质疑过是否必要,一些研究开始尝试用更轻量、计算更快的运动表示方式来替代传统光流,因为计算光流本身是很耗时的一步会拖慢整个系统的实际部署速度。这也是双流网络留下的一个明显短板光流计算这一步没法端到端训练必须先用传统算法算好光流再喂给网络整个流程不是一体化的训练和部署都因此变得更麻烦。写在后面读这篇论文最让我意外的一点是深度学习在视频领域曾经输得这么彻底。习惯了深度学习一路碾压的叙事,很容易忘记它也有过被传统方法按住打的阶段,而且不是输一点点,是输了 20 个百分点的量级。另一个值得琢磨的地方是,这篇论文解决问题的方式不是设计一个更大更深的网络硬train一发,而是先想清楚问题的结构,运动信息和外观信息本质上是两类不同的东西,再设计架构去匹配这个结构。这种先理解问题再设计模型的思路比单纯堆参数堆算力更值得学习。论文里还有一个小细节挺有意思融合空间流和时间流的时候用支持向量机去学融合权重效果比简单平均要好这说明两个信息源谁更可信这件事本身也是可以学出来的不需要人为拍死一个固定比例。这个小设计后来被很多多模态融合的工作继承了下来。QAQ1双流卷积网络是什么A双流卷积网络是牛津大学团队在2014年提出的视频动作识别方法把识别任务拆成两个独立的卷积网络一个处理单帧静态画面判断场景和物体另一个处理连续帧的光流场判断运动模式两者结果融合得出最终动作类别在UCF-101上准确率达到88%。Q2双流卷积网络为什么要用光流而不是让网络自己学运动信息A因为当时视频数据集规模太小只有几千到一万多个样本网络很难仅从原始像素变化中自己学出运动规律直接把传统算法计算好的光流场喂给网络相当于把运动信息预先处理好大幅降低了网络的学习难度。Q3双流卷积网络后来被哪些工作超越了A2017年前后时空融合网络让两条流在中间层就开始交互而不是等到最后才融合结果同期的I3D网络则用更大规模的Kinetics数据集直接训练3D卷积网络跳过了光流计算这一步最终在准确率上反超了双流网络。
返回列表