![]()
2014年,深度学习已经在图像识别领域打得风生水起。AlexNet横空出世两年了,卷积神经网络在静态图片上把手工特征打得溃不成军。
但如果你把一张静止的图片换成一段视频,问机器:这个人在做什么动作,是挥手还是鼓掌,是跳跃还是下蹲。神经网络突然就哑火了。
当时最好的深度学习方法在标准的动作识别测试集UCF-101上,准确率停留在70%出头。而一个叫做"密集轨迹"的手工特征方法,能做到87%以上。
差了将近17个百分点。这不是小数目。意味着每识别6个动作,深度学习就要比老方法多认错1个。
这件事在当时相当让人困惑。图像识别这条路深度学习已经证明能走通,视频不就是一张张图片叠起来吗,为什么突然就不灵了。
这篇论文的两位作者,Karen Simonyan和Andrew Zisserman,来自牛津大学。他们几个月后又发表了另一篇论文,提出了后来大名鼎鼎的VGGNet。这两篇论文其实是同一个研究小组在同一段时间里做的工作,一篇解决静态图像该用多深的网络,另一篇解决动态视频该怎么喂给网络。
视频比图片难在哪
先说清楚问题到底卡在哪儿。
一张图片,网络只需要认出里面有什么东西,猫、狗、汽车、树。这是一个空间问题,答案藏在像素的空间排布里。
一段视频,除了要认出画面里有什么,还得知道这些东西是怎么动的。挥手和鼓掌,可能某一帧看起来长得一模一样,只有把连续几帧串起来看,才能分出谁是谁。这是一个时间问题,答案藏在像素随时间的变化里。
问题是,当时的卷积神经网络天生擅长处理空间结构,却对时间维度上的变化没有专门的处理机制。研究者试过最直接的办法,把视频的每一帧图片喂给网络,或者把连续几帧简单堆叠起来当作一个立体的输入,让3D卷积核去学。
结果都不理想。网络学到的东西,主要还是每一帧里的静态外观信息,比如背景、颜色、物体形状,而不是动作本身的运动模式。这就好比你想教一个人分辨探戈和华尔兹,但你给他看的只是一张张静止的照片,他能分辨出场地是舞厅、舞者穿着礼服,但很难从照片里读出脚步移动的节奏和方向。
光流:把运动本身提取出来
Simonyan和Zisserman的思路是,既然网络自己学不好运动信息,那就在数据送进网络之前,先把运动信息单独抽出来,做成一张能直接体现运动的图,再让网络去学。
这张图,叫做光流场。
> 光流:描述图像中每个像素点从上一帧到下一帧移动的方向和速度,通常用一个箭头场来表示,箭头指向像素移动的方向,箭头长度代表移动速度。
光流场本质上是把"什么东西在往哪个方向移动"这件事,变成了一张可以像图片一样输入进卷积网络的数据。原始视频帧里网络看到的是颜色和形状,光流场里网络看到的直接就是运动趋势。
这个设计思路,类似于教小孩子认路的时候,不给他一整条街的照片让他自己找规律,而是先把每个路口的转弯方向标出来,直接告诉他往哪边拐。如果不做这一步预处理,让网络自己从原始像素堆里摸索出运动方向,它很可能会把注意力放在错的地方,比如学会了通过背景颜色判断这是室内还是室外的运动,却没学会真正区分动作本身的差异。
双流架构:两条网络各管一段
有了光流这个原料,下一个问题是怎么用它。
论文提出的方案叫双流卷积网络。
> 双流网络:同时训练两个独立的卷积神经网络,一个只接收原始视频帧,负责识别画面里的物体和场景,另一个只接收光流场,负责识别运动模式,最后把两边的判断结果融合起来给出最终答案。
两条网络结构相似,但输入完全不同,训练也是分开进行的。空间流网络看到的是普通的RGB图像,它擅长回答"画面里有什么",比如识别出这是一片草地,有一个人拿着球拍。时间流网络看到的是连续多帧计算出来的光流场堆叠,它擅长回答"东西在怎么动",比如识别出手臂在快速地做挥动的动作。
两条网络训练完之后,各自给出一个关于动作类别的预测概率,再通过简单的加权平均把两个结果合并,得到最终判断。
这套设计背后的思路是,一个网络同时学两件不一样的事,容易学得都不精。让专门的网络处理专门的信息,是一种分工。这就像一个厨房里,如果要求同一个厨师既要负责切菜的精细刀法又要盯着火候调味,两件事都需要高度专注却性质不同,很容易两头顾不上。厨房分成切配和炉灶两个岗位,各自练精自己的手艺,配合起来反而效率更高更稳定。如果强行合并成一个网络从头学,实验里能看到明显的代价。
那么两条流分别单独干,效果如何。论文里做了对比实验。
只用空间流网络,单独在UCF-101上的准确率是72.6%。这个数字和之前深度学习方法卡在70%出头基本吻合,说明单靠画面里的静态信息,确实学不到多少运动本质的东西。
只用时间流网络,准确率跳到了81%左右。这说明光流这条线索本身信息量很大,单独拿出来就已经能显著超过只看画面的效果。
两条流融合之后,准确率达到88%左右,首次超过了当时最强的手工特征方法。
这组数字放在一起看会很直观。从72.6%到81%,是把运动信息单独提取出来带来的提升,接近9个百分点。再从81%到88%,是两种信息互补带来的进一步提升。空间流网络认得出这是一片球场,时间流网络认得出这是一个挥拍的动作,合起来才真正认出这是网球的正手击球。
训练数据不够怎么办
深度网络的另一个天生问题是,它需要海量数据才能训练好,但视频动作识别的标注数据集,在当时远比图像分类小得多。
图像分类领域用的ImageNet,有超过一百万张标注图片。而UCF-101这样的视频动作数据集,总共只有大约1万3千段视频。数量级上差了两个量级。
研究者的应对办法,是先在一个更大的视频数据集Sports-1M上做预训练,再迁移到UCF-101和HMDB-51这样规模小得多的数据集上做微调。
> 预训练与微调:先用一个数据量大的相关任务训练出一个网络的基础能力,再拿这个已经具备基础能力的网络,用少量目标任务的数据做进一步调整,让它适应具体的应用场景。
这个思路并不新鲜,图像领域早就在用,但把它系统地搬到视频动作识别上,并验证了效果,是这篇论文的贡献之一。如果没有这一步迁移,直接拿一万多条数据从零训练一个深度网络,大概率会因为数据量太小而学不好,出现过拟合的问题,也就是网络记住了训练集里的具体样本,却没有学到能推广到新视频上的规律。这就像只给一个学生做过10道数学题就让他去考试,他很可能只记住了这10道题的答案,而不是掌握了解题的方法。用大数据集先打底,再用小数据集精调,相当于先让学生做过上万道题练出通用的解题手感,再针对具体考试的题型做少量强化训练。
88%这个数字之后发生了什么
这篇论文发表于2014年,是深度学习方法第一次在标准视频动作识别测试集上超过手工特征方法的公开记录。这句话放在当年的分量,不亚于AlexNet在图像识别上第一次证明深度学习能赢。
它证明了一件事,深度学习不是学不会时间维度上的信息,而是之前没有找到合适的方式把时间信息喂给网络。光流场加双流架构,是找到了这样一种方式。
这个思路很快被后续研究继续推进。
2016年,Feichtenhofer等人在论文里提出了对双流网络结构本身做改进,让空间流和时间流之间在网络内部的多个层级上进行信息交换,而不是等到最后才简单相加,进一步提升了融合效果。
2017年,Carreira和Zisserman(同一位作者)提出了I3D网络,把双流的思路和3D卷积结合起来,用膨胀的3D卷积核直接处理视频片段,并且引入了更大规模的Kinetics数据集做预训练,在多个动作识别数据集上把准确率进一步推高,双流I3D在UCF-101上的准确率达到98%左右。
这条从光流双流网络出发的技术路线,后来逐渐被基于3D卷积和视频Transformer的方法接棒,但双流的核心思想,把外观信息和运动信息分开处理再融合,在后续很多视频理解的工作里仍然能看到影子。
写在后面
读这篇论文的时候,一个细节让我停下来想了很久。
研究者没有执着于"让深度网络自己学会一切",而是主动承认了当时网络架构在处理时间信息上的局限,选择先用传统的图像处理算法把运动信息提取出来,再交给网络去分类。这不是一种"更纯粹的深度学习"做法,反而带着一点妥协的味道。
但正是这种务实的妥协,拿到了当时最好的结果。这让我想到,很多领域的突破,不一定来自把某种方法做到极致的纯粹坚持,而是来自诚实地承认这个方法哪里还不够,然后大方地借用别的工具去补上那个缺口。
光流本身是一个几十年前就有的经典计算机视觉技术,和深度学习几乎没有血缘关系。把一个几十年前的老工具和一个当时最前沿的新工具拼在一起,反而催生了一次突破。这种老工具和新工具的组合,后来在很多领域重复出现,倒是让人觉得,技术的进步有时候不是线性替代,而是不同时代的工具找到了合适的接口互相咬合。
Q&A
Q1:双流卷积网络是什么?
A:双流卷积网络是Simonyan和Zisserman在2014年提出的视频动作识别方法,用两条独立的神经网络分别处理原始视频帧和光流场,一个负责识别画面内容,一个负责识别运动模式,最后融合两者的判断结果。
Q2:光流在双流网络里起什么作用?
A:光流是把视频里每个像素的运动方向和速度提取出来做成的图像,相当于把运动信息单独抽取出来直接喂给网络,弥补了卷积网络本身不擅长捕捉时间维度变化的缺陷。
Q3:双流网络的准确率比之前的方法高多少?
A:双流网络融合后在UCF-101数据集上达到约88%的准确率,超过了当时最强的手工特征方法密集轨迹的87%左右,也远高于此前深度学习方法70%出头的水平。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
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.