尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

视频里藏着两条流,一条学“长什么样“,一条学“怎么动“

视频里藏着两条流,一条学“长什么样“,一条学“怎么动“ 2014年秋天,如果你去问计算机视觉领域的研究者,深度学习能不能用来识别视频里的动作,大概率会得到一个尴尬的回答。不是不能用,是用了效果不好。图像识别领域,深度学习已经把传统方法打得节节败退。2012年AlexNet横空出世,把ImageNet图像分类的错误率从26%砍到15%,整个学术圈都在往卷积神经网络这条路上冲。可是视频动作识别这块地,深度学习死活攻不下来。当时最强的方法叫密集轨迹 密集轨迹Dense Trajectories*一种手工设计的特征提取方法,通过追踪视频里密集采样的点,统计它们的运动轨迹、方向、光流变化,拼成一个描述动作的特征向量。这套手工方法在标准测试集UCF-101上能拿到87.9%的准确率,而当时最好的深度学习方法只有65%左右差了20多个百分点。20个百分点的差距意味着什么意味着每5个动作里深度学习就要比手工方法多认错1个。这在学术圈是灾难性的差距,足以让人怀疑深度学习这条路在视频领域根本走不通。牛津大学的Karen Simonyan和Andrew Zisserman盯着这个问题,琢磨出了一个答案。他们后来做的另一件事更出名,几个月后发表了VGGNet,直接把图像分类的卷积网络结构变成了教科书标准。但在视频这件事上,他们先解决的是一个更棘手的问题:视频不是一张图片,它是一堆图片加上时间。问题到底难在哪先说清楚一件事,为什么直接把图像识别的CNN搬到视频上不好用。一个卷积神经网络看一张静止的照片,能学到这是一只猫这是一辆车。可是一个动作,比如挥手和招手在单张照片里可能长得几乎一样,区别只在于手接下来往哪个方向动。单张图片能告诉你场景里有什么东西,却没法告诉你东西正在怎么运动。这就好比你给一个从没见过跳绳的人看一张照片,照片里有个人手里拿着绳子,双脚离地。这人可能会以为这是在拍照留念,也可能猜是跳绳,单看一张图猜不准。你得看连续几张照片,才能看出绳子在画圆,人在有节奏地起跳,这才叫跳绳这个动作。早期研究者试过一个简单粗暴的办法,把视频的多帧图像直接堆叠起来喂给卷积网络,让网络自己从像素的时间变化里学运动信息。结果很失望,效果没比单帧好多少。网络在原始像素层面学时间变化,信号太弱太杂,学不出个所以然。这就是2014年之前,深度学习在视频动作识别上迟迟不能超越手工特征的根本原因。核心思路把运动信息喂给网络,而不是让网络自己找Simonyan和Zisserman的关键决定是,不要指望网络从原始像素堆叠里学运动,直接把运动信息计算出来,喂给网络。这个运动信息用的是光流 光流Optical Flow*描述视频里每个像素点从上一帧到下一帧移动方向和速度的一种表示方法,通常用两张图分别表示水平方向和垂直方向的位移量。光流场本质上就是一张运动地图。图上每个点的颜色深浅或箭头方向,代表这个位置的像素正往哪个方向、以多快速度移动。这种表示方式把运动这件抽象的事,变成了一张可以直接输入卷积网络的图像。于是论文提出了一个双流结构 双流网络Two-Stream Network*由两个独立的卷积神经网络组成,一个处理静止的RGB图像叫空间流,专门学习画面里有什么物体和场景;另一个处理光流场叫时间流,专门学习物体是怎么运动的。两条网络各自输出一个动作分类的概率,最后把两边的结果加权融合,得到最终判断。空间流网络输入是单帧的彩色图像,结构和当时做图像分类的CNN几乎一样,负责认场景、认物体、认背景。比如看到泳池就大概猜到可能是游泳,看到球场就大概猜到可能是打球。时间流网络输入是连续多帧计算出来的光流场,通常是10帧的光流堆叠在一起,变成一个20通道的输入10帧×水平垂直两个方向。这条网络专门学习动作本身的模式,不看背景是什么,只看东西怎么动。为什么要拆成两条独立的网络,而不是揉在一起训练一个大网络这里有个很实际的原因:数据不够。当时能用来训练的视频动作数据集规模很小,UCF-101一共才1万多个视频片段,根本喂不饱一个既要学外观又要学运动的复杂网络。研究者想了个办法,时间流网络可以先在一个专门做光流预测的数据集上单独预训练,把外观学习和运动学习这两个任务彻底分开,让每条网络专注做好一件事,再各自用尽可能多的数据喂饱它。这就好比一个厨房要同时处理食材的味道和火候两件事。如果让一个厨师同时盯着调味和控制火候,很容易两头都做不精。更好的办法是找两个厨师,一个专门负责调味,一个专门负责火候,两人各自练精了手艺,最后端上桌前再把两道半成品拼在一起,出来的菜反而更好。如果硬要把两件事塞给一个人一次性搞定,在食材数据本来就不多的情况下,很可能两头都学得半生不熟。这个设计直接回应了前面提到的根本矛盾。网络自己从像素堆叠里学运动学不动,那就不让网络学,直接算好光流喂给它。这是一种巧妙的减负,把网络最难学的部分提前用传统计算机视觉的方法算出来,网络只需要在已经算好的运动信息上做分类判断,难度一下降低了一大截。如果不这么拆分,会发生什么论文里做了对照实验。只用空间流网络单独跑,UCF-101上的准确率是72.6%。只用空间流,意味着网络只能靠画面里的场景物体去猜动作,完全忽视了动作本身的运动轨迹,这个数字比最好的手工方法低了15个百分点还多。而加上时间流之后,双流融合的最终结果达到88.0%,一举反超了当时最强的手工特征方法87.9%。这是深度学习第一次在视频动作识别上打赢手工特征,时间是2014年,分量不亚于两年前AlexNet在图像分类上掀起的那场革命。数据说话:双流结构到底强在哪论文在几个标准数据集上做了详尽的对照实验,数据摆出来能看得很清楚。| 方法 | UCF-101准确率 | HMDB-51准确率 ||---|---|---|| 手工特征改进的密集轨迹 | 87.9% | 57.2% || 仅空间流CNN | 72.6% | 40.5% || 仅时间流CNN | 81.2% | 47.1% || **双流CNN融合** | **88.0%** | **59.4%** |这张表格里最值得琢磨的一行是仅时间流。单独看时间流网络的表现,81.2%,已经比单独的空间流网络高了将近9个百分点。这说明一件事,对于识别动作而言,运动信息比外观信息更关键。这个发现某种程度上有点反直觉。很多人下意识觉得,要认出一个人在做什么,先得看清这个人所处的场景和物体,背景信息应该很重要。但实验数据说明,单纯的运动模式,哪怕完全不知道场景里有什么东西,已经能猜对八成以上的动作。这也印证了之前那个跳绳的类比,真正决定这是不是跳绳的,是绳子和人的运动轨迹,不是背景里有没有健身房的镜子。融合两条流之后的88.0%,比单独任何一条流都高,说明两种信息确实是互补的,不是重复的。空间流知道这大概是个游泳池场景,时间流知道这个动作是循环往复的划水运动,两者叠加起来,判断的把握就更大了。再看HMDB-51这个数据集,双流方法的优势更明显,59.4%对比手工特征的57.2%,虽然领先幅度不如UCF-101那么夸张,但HMDB-51本身是个更难的数据集,视频质量更差、动作类别更细,能在这种更难的场景下依然反超,说明双流结构的优势不是靠某个数据集的特殊性凑出来的,是真实的能力提升。一个容易被忽略的细节:时间流的预训练这篇论文里有个技术细节,很多后续复述这篇工作的文章会略过,但其实很关键。时间流网络要学好光流特征,需要大量数据,可当时公开的带光流标注的动作视频数据集非常有限。研究者的解决办法是,先用ImageNet这种海量图像分类数据集,把网络在图像识别任务上训练出一个初始的参数,再拿这套参数去初始化时间流网络,最后用视频动作数据做微调。这个操作放到今天来看平平无奇,迁移学习早就是标配。但在2014年,把一个图像分类任务学出来的网络权重,拿去初始化一个处理光流场的网络,这个尝试本身带着不小的风险。光流场和自然图像的像素分布差异很大,一个是彩色照片,一个是运动矢量场,理论上直接迁移未必work。但实验证明这套办法确实有效,大幅缓解了数据量不足带来的训练困难。这就像是让一个已经学会开手动挡车的人去学开自动挡,虽然踏板逻辑不一样,但对方向盘的手感、对路况的判断力这些底层能力是相通的,不用从零开始学。如果非要找一个从没摸过车的新手直接学自动挡,在教练资源数据稀缺的情况下,学习效率会低得多。这篇论文之后发生了什么双流网络这个思路一炮打响之后,后续几年整个视频理解领域几乎都在这个框架上做扩展和改进。2015年,Wang等人在这篇论文基础上提出了TDDTrajectory-Pooled Deep-Convolutional Descriptor,把深度学习特征和传统的轨迹跟踪结合起来,进一步把UCF-101的准确率往上推。2016年,牛津团队自己Feichtenhofer, Pulli, Zisserman发表了后续工作,提出用更深的网络结构基于VGG-16和ResNet重新实现双流架构,同时改进了两条流之间的融合方式,不再是简单的最后一层加权平均,而是在网络中间层就开始做特征融合,这个版本把UCF-101的准确率进一步推高到92%以上。2017年,DeepMind团队发表了I3DInflated 3D ConvNet,思路上有了本质变化。他们不再满足于用2D卷积网络分别处理空间和时间两条流,而是把整个网络结构从2D膨胀成3D,让卷积核本身就能同时感知空间和时间维度。这个改进背后依然保留了双流的思想框架仍然是一条流处理RGB,一条处理光流,但底层的网络结构完全升级了,在Kinetics这个规模更大的数据集上,I3D把准确率进一步刷新。从这条脉络能看出来,双流网络提出的分开处理外观和运动这个核心思想,在后续三年里被反复验证、反复沿用,只是具体的网络结构在不断迭代升级。这也是评判一篇论文影响力的一个朴素标准,看它提出的核心想法有没有被后来者一直用下去,而不是被一次性推翻。写在后面读到这篇论文时,最触动我的不是双流架构本身,而是那个仅时间流网络表现优于仅空间流网络的实验数据。它说明在很多动作识别任务里,你根本不需要知道背景是什么,光看运动轨迹就能猜对大半。这多少打破了一个直觉,以为理解一个场景必须先理解场景里的物体是什么。另一个值得单独说的细节是,这篇论文的两位作者几个月后就发表了VGGNet,那篇论文后来成了整个卷积网络设计的标准教材。同一批人,同一个时间段,一边在图像分类上定义标准结构,一边在视频领域捅破了深度学习打不过手工特征这层窗户纸。这种时间上的重合让人挺感慎,好的研究者手头往往同时在推进几件看似不相关、实则共享底层直觉的工作。这篇论文没解决的问题也很明显,光流本身的计算需要传统算法预先跑一遍,不是端到端训练出来的,这意味着整套系统的效果会被光流算法的好坏卡住上限。后来的3D卷积网络某种程度上就是想绕开这个限制,直接让网络自己从原始帧序列里学出运动模式。这条路走没走通,是不是真的比双流更好,值得再往后翻翻论文。QAQ1双流网络Two-Stream Network是什么A双流网络是2014年提出的一种视频动作识别方法,由两个独立的卷积神经网络组成,一个叫空间流处理静止图像学习场景和物体信息,另一个叫时间流处理光流场学习运动信息,最后把两条网络的判断结果融合起来做最终的动作分类。Q2为什么双流网络要把空间和时间信息分开处理,不直接用一个网络学A因为当时能用于训练的视频数据集规模很小,如果让一个网络同时学外观和运动会导致两方面都学不精。分成两条独立网络,时间流还能先在别的数据集上单独预训练,让每条网络专注做好一件事,最终效果比合在一起训练更好。Q3双流网络的效果到底比传统手工特征方法好多少A在UCF-101数据集上,双流网络融合后达到88.0%的准确率,超过了当时最强的手工特征方法改进的密集轨迹的87.9%,这是深度学习第一次在视频动作识别任务上反超手工设计的特征方法。
返回列表