![]()
2014年之前,如果你在计算机视觉圈子里说"我要用深度学习做视频动作识别",很可能会有人礻你三思。
原因很简单,当时最强的动作识别方法根本不是神经网络,而是一套叫做密集轨迹的手工特征方案。
密集轨迹*:一种传统计算机视觉方法,通过跟踪视频里密集分布的点随时间的运动轨迹,手工设计特征来描述动作。
这套手工方法在标准数据集上的准确率能达到85%以上,而当时用深度学习硬train的方法,最好的结果也只有65%左右,差了将近20个百分点。
20个百分点的差距,意味着什么?意味着每5个动作里,深度学习就要比手工方法多认错1个。
这在图像识别领域是不可想象的差距。AlexNet在2012年横空出世后,深度学习在静态图像上已经把手工特征打得毫无还手之力,可是一到视频,卷积网络就突然变得不灵光了。
这就是Karen Simonyan和Andrew Zisserman这篇论文出发的地方,他们想解决的问题只有一个:为什么深度学习在视频上打不过老办法,怎么才能打赢。
视频比图片难在哪
先说说这件事到底难在哪里。
一张图片,卷积网络只需要学会识别空间结构,比如猫的耳朵长什么样,边缘轮廓怎么组织。可视频多了一个维度,时间。一个动作能不能被认出来,往往不在于某一帧长什么样,而在于这些帧是怎么随时间变化的。
举个例子,一张静止的照片里,一个人张开双臂,你说不清他是在做"张开双臂欢呼"还是"正在打哈欠伸懒腰",甚至可能只是"正准备打喷嚏"。动作的关键信息藏在运动本身里,而不是某个瞬间的画面里。
这就好比你去看一部无声电影的单张剧照,永远猜不出剧情走向,你需要看到画面怎么动,人物怎么移动,才能理解发生了什么。
如果卷积网络只吃单帧图片进去学习,那它天生就缺了运动这一整块信息,这不是网络设计得不好,而是输入数据本身就先天残废了。
早期尝试用3D卷积直接处理视频片段,让网络自己从连续帧里学运动模式,但效果始终不理想,因为要让网络从头学会捕捉运动,需要海量数据和更深的网络结构,而当时的数据集根本喂不饱这种野心。
Simonyan和Zisserman的思路是,既然网络自己学运动这么难,那就不要让它自己学,直接把运动信息喂给它。
双流网络:把外貌和动作拆开来看
这篇论文最核心的贡献,就是提出了一个叫双流卷积网络的架构。
双流卷积网络*:由两条独立的卷积神经网络支路组成,一条处理静态图像识别物体和场景外貌,另一条专门处理光流场识别运动模式,最后把两条支路的判断结果融合起来。
具体来说,第一条支路叫空间流,输入是视频里的单帧RGB图像,负责识别画面里有什么,比如场景是游泳池还是篮球场,画面里的人穿什么衣服拿着什么道具。这条支路本质上跟普通的图像分类网络没什么区别。
第二条支路叫时间流,输入不是图像,而是光流场。
光流场*:描述视频相邻两帧之间,画面里每个像素点是往哪个方向、以多大幅度移动的向量场,本质上是把"运动"这件事可视化成一张图。
光流场长什么样?想象把一段视频的运动信息压缩成一张图,图上每个点用颜色和方向表示这个位置的像素正往哪儿跑,跑得多快。一个人挥手,光流图上手臂划过的地方会出现一条清晰的运动轨迹,而背景是静止的,光流几乎为零。
这两条支路各自训练一个独立的卷积网络,最后在输出层把两边的预测分数融合,通常是简单加权平均或者用一个小型分类器再学一层。
为什么要拆成两条独立的支路,而不是把RGB和光流一起塞进一个网络里从头学?
这里有一个很实际的考虑,数据不够用。
当时能用来训练视频动作识别模型的数据集,规模远远比不上ImageNet那种上百万张图片的量级,UCF-101数据集只有13000多个视频片段。如果让一个网络同时学外貌识别和运动识别两件事,等于让一个新手同时练两门完全不同的技能,训练数据又极其有限,很容易两头都学不精。
拆成两条支路后,空间流这边就可以借用在ImageNet上预训练好的图像分类网络,直接迁移过来微调,因为识别"这是什么"这件事跟静态图片分类高度相关,预训练的知识用得上。
时间流没法直接借用ImageNet的预训练权重,因为光流图跟普通照片长得完全不一样,但至少它现在只需要专心学一件事,就是从运动模式里判断动作类别,任务被简化了,网络更容易收敛。
这就像一个厨房里,你要做一道菜同时考验刀工和火候的把控,如果让一个新手厨师同时兼顾两件事,往往两件都做不好。但如果分成两个师傅,一个专门练刀工切配菜,另一个专门盯着火候颠勺,各自练精了再把两道半成品拼在一起上桌,成品反而更靠谱。如果不这么拆分,非要用一个人同时练两门手艺,在食材和时间都有限的情况下,大概率两头都学得半生不熟。
论文里还有一个值得说的细节,时间流的输入不是只用一帧光流,而是堆叠了连续10帧的光流场,让网络能看到稍长一段时间内运动的连贯变化,而不是孤立的一瞬间。这个设计让网络对动作的判断更稳,因为很多动作光看一瞬间的运动方向容易误判,连续看几帧才能确认这到底是挥手还是仅仅手抖了一下。
结果说话,深度学习第一次赢了
方法讲完了,最关键的问题是,这套架构到底效果如何?
论文在两个标准数据集上做了实验,UCF-101和HMDB-51,这两个数据集当时是动作识别领域最主流的测试基准。
结果是,双流网络在UCF-101上达到了88.0%的准确率,在HMDB-51上达到59.4%,双双超过了当时最好的手工特征方法。
|方法|UCF-101准确率|HMDB-51准确率|
|手工特征(密集轨迹类方法)|约85-87%|约57%|
|仅空间流(单独用RGB)|72.6%|约40%|
|仅时间流(单独用光流)|81.0%|约54%|
|**双流网络(融合)**|**88.0%**|**59.4%**|
这张表格里最值得琢磨的一行,是仅用空间流的结果,只有72.6%,比双流融合后整整低了15个百分点。
这说明什么?说明如果只靠静态画面识别动作,网络确实会漏掉大量关键信息。反过来,仅用时间流也达到了81%,已经相当接近手工特征的水平,这证明了光流场确实抓住了动作识别里最核心的那部分信号,运动本身。
而把两条支路融合起来后,效果比单独任何一条都好,说明外貌信息和运动信息是互补的,不是重复的。空间流能告诉你"这是在泳池边",时间流能告诉你"这个动作是跳水的挥臂姿势",两者合起来才能准确判断"这是跳水动作"。
这是深度学习第一次在视频动作识别这个任务上打赢了手工特征方法。在2012年AlexNet证明深度学习能赢图像分类之后,视频领域整整拖了两年才等到这个时刻,这句话的分量不亚于AlexNet当年横空出世。
一个有意思的巧合
这里有个值得一提的背景,Simonyan和Zisserman同属牛津大学的视觉几何组,也就是后来大名鼎鼎的VGG组。就在这篇双流网络论文发表几个月后,他们又发表了VGGNet,那篇后来成为图像分类领域标杆架构的论文。
两篇论文几乎是同期完成的工作,一篇解决静态图像怎么做更深的网络,一篇解决视频怎么补上运动信息这块拼图,某种程度上反映了同一批研究者在两条战线上同时推进深度学习边界的状态。
光流是怎么算出来的,这也是个问题
值得补充的一点是,双流网络里的光流场并不是网络自己学出来的,而是用传统的光流计算算法预先算好,再喂给时间流网络。
这意味着整套系统其实不是纯端到端的深度学习,而是深度学习和传统算法的一个混合体。网络负责从光流图里学模式,但光流图本身的生成靠的是经典的数值优化算法。
这个设计选择其实挺实际的,当时如果想让网络自己从原始视频帧里学出光流,计算量和数据需求都会大得多,而现成的光流算法已经足够成熟可靠,直接拿来用是最省力也最稳妥的路径。
不过这也留下了一个问题,如果光流算法本身算错了,网络岂不是也会被带偏?后续研究确实注意到了这一点。
后来的人怎么在这个基础上继续走
双流网络这个思路影响巨大,后续有大量工作在这个框架上继续扩展。
2016年,Feichtenhofer等人的论文提出了时空双流网络的改进版本,在双流之间加入了跨支路的信息融合层,让两条支路在训练过程中就能互相交流信息,而不是等到最后一步才简单相加,进一步把UCF-101上的准确率推高了几个百分点。
2017年,Carreira和Zisserman(同一位Zisserman)发表了I3D网络,这篇论文的思路是把双流网络里的2D卷积换成3D卷积,同时借助膨胀技巧把已经在ImageNet上训练好的2D网络参数直接扩展成3D网络的初始参数,解决了3D卷积网络训练数据不够的老问题,同时保留了双流结构,在Kinetics数据集上把准确率又往上推了一大截。
这两篇后续工作有个共同点,都没有抛弃双流网络提出的核心洞察,运动信息和外貌信息应该被区分对待,只是在如何让两者更好地融合、如何减少对手工光流算法的依赖这些细节上做了改进。
写在后面
读到这篇论文的时候,让我印象最深的不是双流网络本身的架构设计,而是那15个百分点的差距。仅空间流72.6%对上融合后88.0%,这组数字直接证明了一件事,单帧图像里真的没有动作信息,动作识别不是图像识别加个时间戳那么简单。
这也让我重新想了一下"数据决定一切"这句话。双流网络能成功,很大程度上是因为设计者想清楚了在数据稀缺的条件下怎么把任务拆解成两个能各自复用已有资源的子任务,而不是执着于端到端一步到位。这种"先拆解再迁移"的思路,其实在很多资源受限的场景里都适用,不只是视频识别。
论文里没有解决的问题也很明显,光流计算本身依赖传统算法,整个系统不是纯粹的端到端深度学习。这个缝合的痛点后来催生了一大批专门研究"如何让网络自己学会提取运动信息"的工作,某种程度上,双流网络提出的问题比它解决的问题更有生命力。
Q&A
Q1:双流卷积网络是什么?
A:双流卷积网络是2014年提出的一种视频动作识别方法,由两条独立的卷积网络组成,一条处理静态图像识别外貌信息,另一条处理光流场识别运动信息,最后融合两者的判断结果来识别动作。
Q2:双流网络为什么要把外貌和运动信息分开处理?
A:因为当时视频数据集规模有限,让一个网络同时学习外貌识别和运动识别两件事很容易两头学不精。拆成两条支路后,空间流可以直接复用ImageNet预训练的图像分类网络,时间流则专心从光流图里学运动模式,训练效率更高。
Q3:双流网络的效果比手工特征方法好多少?
A:双流网络在UCF-101数据集上达到88.0%的准确率,在HMDB-51上达到59.4%,超过了当时最好的手工特征方法,这是深度学习第一次在视频动作识别任务上打赢传统手工方法。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.