ARTICLE DETAIL

资讯详情

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

2014年,一段视频教会了神经网络“看动作“

2014年,一段视频教会了神经网络“看动作“ 2012年AlexNet在ImageNet图像分类比赛上一鸣惊人深度学习一夜之间成了计算机视觉领域的显学。识别一张静态图片里是猫是狗卷积神经网络突然变得比谁都强。但如果你把问题从这张图片里是什么换成这段视频里发生了什么事情就完全不一样了。2014年之前如果你想让计算机识别视频里的动作比如判断一个人是在挥手还是在拍球最好的方法不是神经网络而是一种叫做**密集轨迹**的手工特征方法。 密集轨迹一种传统计算机视觉方法通过跟踪视频中大量点随时间的运动轨迹手工设计特征来描述动作不依赖深度学习。这件事说起来有点尴尬。深度学习在图像识别上碾压一切,可是一旦加上时间这个维度,变成视频,深度学习反而打不过老办法。这不是因为神经网络不够聪明,而是视频比图片难处理太多了,一个动作要连续好几帧才能看出来,神经网络该怎么记住前一帧发生了什么,又怎么知道东西在往哪个方向动?这个僵局一直维持到了牛津大学Karen Simonyan和Andrew Zisserman发表的一篇论文,题目叫《用于视频动作识别的双流卷积网络》。值得一提的是,Simonyan和Zisserman是同一个研究组的搭档,几个月后他们又合作发表了VGGNet,那篇论文后来成了图像识别领域的经典架构之一。这两篇论文几乎是同期完成的工作,某种意义上这篇双流网络论文可以看作VGGNet团队在视频领域的一次探路。问题到底难在哪:动作识别的两个拦路虎要理解这篇论文的巧妙之处,得先搞懂视频动作识别到底比图像分类难在哪里。图像分类只需要处理空间信息,一只猫无论摆在画面的哪个角落,它的外形轮廓、颜色纹理都摆在那里,神经网络只要学会识别这些视觉特征就够了。但动作是一个时间过程。同一张静止的照片,一个人举着手,你很难判断他是在挥手告别,还是在伸手够东西,还是准备扔东西。**动作的本质藏在连续帧之间的变化里,不在单张画面里。**这就带来了两个难题。第一个难题是时间维度怎么建模。当时最直接的想法是把3D卷积核直接怼上去,让网络在处理空间信息的同时也去学习时间上的变化规律。但这个想法在实践中效果并不好,原因很简单:数据量不够。ImageNet有超过100万张标注图片,而当时最大的视频动作数据集UCF-101,只有1万3千个视频片段。想让网络从零学会识别空间纹理和时间运动这两种完全不同的模式,数据量差了两个数量级,根本喂不饱。第二个难题更本质。视频里包含的运动信息,有一种更直接、更纯粹的表达方式,那就是光流。 光流:描述视频中每个像素点从上一帧到下一帧的运动方向和速度的向量场,可以理解成一张运动地图,每个点上标注着它正在往哪个方向、以多快速度移动。传统的手工特征方法比如密集轨迹,正是靠光流信息才能精确捕捉物体的运动轨迹。深度学习如果只靠原始像素去学习运动模式,相当于让网络从零开始重新发明光流算法,这太难了,也太浪费了。那时候手工特征的代表方法在UCF-101数据集上能做到87.9%的准确率,而深度学习方法即便加上各种技巧,普遍卡在65%到70%左右,足足差了将近20个百分点。20个百分点意味着什么?意味着每5个动作里,深度学习方法就要比手工特征多认错1个。这个差距在当时被很多人认为是深度学习在视频领域难以逾越的坎。核心思路:干脆分两条路走Simonyan和Zisserman的思路说出来其实特别朴素:既然空间信息和时间信息是两种不同性质的东西,那就别硬塞进一个网络里学,干脆用两个独立的网络,一个专门学空间,一个专门学时间,最后把两边的判断结果合并起来。这就是论文名字里的双流,一条叫**空间流**,另一条叫**时间流**。 空间流:输入单帧RGB图像的卷积网络分支专注于识别画面中的物体、场景、外观等静态视觉特征。 时间流:输入连续多帧光流场的卷积网络分支专注于捕捉动作的运动模式。空间流的输入很简单,就是视频里随便截取的一帧彩色图像,网络架构基本照搬了当时ImageNet图像分类里常用的结构。这条流干的事情,其实和普通的图片分类没什么本质区别,它能看出画面里有没有游泳池、有没有球拍、有没有琴,这些场景和物体信息本身就对判断动作类别很有帮助。比如看到游泳池,大概率是在游泳;看到键盘,大概率是在打字。时间流则完全不同,它的输入不是原始像素,而是提前用传统光流算法计算好的光流场,通常是连续10帧的水平和垂直方向运动向量堆叠在一起,变成一个20通道的输入张量喂给网络。这个设计藏着一个关键的判断:与其让神经网络自己去学习怎么从像素里提取运动信息,不如直接把运动信息用光流的形式算好了喂给它,网络只需要专注学习这种运动模式对应哪种动作就够了。这就好比你要教一个孩子听声音辨别是什么乐器在演奏。一种办法是把整段录音的原始声波数据丢给他,让他自己去发现哪些波形特征代表小提琴,哪些代表钢琴,这个过程极其低效,孩子得从物理声学原理开始摸索。另一种办法是先用专业设备把声音分解成频谱图,清楚地标出各个频率的强弱变化,孩子只需要学会看频谱图认乐器就行了,这个任务立刻变得简单得多。光流对于运动信息,就相当于频谱图对于声音信息,是一种已经被前人验证过、极其有效的预处理方式。如果不做这个预处理,让网络直接从像素堆里学运动,相当于逼着孩子从零发明频谱分析法,不仅慢,还很可能学不到位。![双流网络结构图]论文里的架构图显示,两条流各自独立训练,结构大体相似,都是当时流行的卷积网络设计,最后各自输出一个softmax分类分数,再通过简单加权平均或者训练一个SVM来融合两边的结果,得到最终的动作类别判断。数据不够怎么办:从图片里偷知识前面提到过,视频动作识别面临的一个大问题是数据量太小,UCF-101只有1万3千个视频。这个数量级对于训练一个深层卷积网络来说远远不够,很容易过拟合,网络会记住训练集里的细枝末节,却学不会真正有用的规律。Simonyan和Zisserman的解决办法是做迁移学习和多数据集联合训练。具体来说,空间流网络可以直接借用在ImageNet上预训练好的图像分类网络参数作为起点,因为识别静态画面里的物体和场景,这件事本身跟图像分类是高度相通的技能,没必要从零学。这就好比一个已经精通中文阅读的人去学习日语,虽然是两种语言,但汉字部分的知识可以直接迁移过去,不用从认字开始。时间流这边没有现成的大规模预训练光流数据集可用,于是论文提出了另一个办法,把两个不同的视频动作数据集(UCF-101和HMDB-51)合并起来一起训练,变相扩充了数据量。这两个数据集的动作类别不完全一样,论文设计了一种多任务学习的方式,让网络的底层特征共享,但顶层分类器针对不同数据集分开设置,这样就能同时利用两份数据的信息,而不会因为类别不匹配而互相干扰。 多任务学习:让一个模型同时学习多个相关但不完全相同的任务共享底层特征表示以此提高数据利用效率和泛化能力。这套组合拳打下来,效果立竿见影。仅仅时间流网络单独跑,在UCF-101上就能达到81%的准确率,这已经相当接近传统手工特征方法的水准了,而且这只是时间这一条线索贡献的结果。实验结果:深度学习第一次赢了最终把空间流和时间流结合起来,论文在UCF-101数据集上做到了88.0%的准确率,在HMDB-51数据集上做到了59.4%。这个数字放在当时是什么水平?手工特征方法密集轨迹在UCF-101上的成绩是87.9%,双流网络以88.0%微弱超出。数字看起来差距很小,但意义完全不同。这是深度学习方法第一次在视频动作识别这个任务上,追平甚至反超了统治多年的手工特征方法。放在2014年这个时间点看,这句话的分量不亚于两年前AlexNet在图像分类上的横空出世。论文里也做了拆解实验,验证每一部分设计到底起了多大作用。| 方法 | UCF-101准确率 ||---|---|| 仅空间流 | 72.6% || 仅时间流 | 81.0% || 双流(平均融合) | 86.9% || **双流(SVM融合)** | **88.0%** |如果只用空间流会发生什么?准确率从88%掉到72.6%,整整少了15个百分点。这说明单靠画面里的物体和场景信息远远不够,动作识别真正的核心信息在于运动本身,而不是画面里有什么东西。这也反过来验证了整篇论文最初的判断,时间信息和空间信息必须分开处理、各自专精,才能把各自的优势都发挥出来。光流的预计算方式在论文里也做了对比,包括是否要做相机运动补偿、要不要计算光流的绝对值,这些细节调整都能带来一两个百分点的提升,说明即便是预处理这个看似次要的环节,精细打磨也能带来实打实的收益。深远影响:双流架构成了后续研究的起点这篇论文最重要的贡献,与其说是某个具体的数字突破,不如说是确立了一个思路框架:时间和空间信息应该分开建模,再融合决策。这个框架此后被无数后续工作反复采用和改进。2016年,Feichtenhofer等人发表了论文《用于视频动作识别的时空残差网络卷积融合》,这篇工作在双流架构的基础上,不再等到最后softmax层才融合两条流的结果,而是在网络中间层就引入残差连接让两条流互相交流信息,准确率在UCF-101上进一步提升到93.5%左右。这个改进说明,空间和时间信息虽然性质不同,但也不是完全独立,中间适当地互通有无,效果会更好。2017年,DeepMind团队发表了著名的I3D网络论文《Quo Vadis, Action Recognition?》,这篇工作重新拾起了3D卷积的思路,但关键突破在于提出了把2D卷积网络膨胀成3D卷积网络的方法,可以直接利用ImageNet预训练权重来初始化3D网络参数,同时依然保留了双流结构(RGB流加光流流),最终在UCF-101上做到了98%的准确率。I3D后来成为视频理解领域事实上的标准基线模型,而它依然沿用了双流网络提出的RGB加光流这套输入范式,只是把每条流内部的网络结构从2D卷积换成了3D卷积。这两个后续工作的共同点在于,它们都没有推翻双流网络最初的判断,反而是在这个判断的基础上继续深挖:一个探索了两条流之间如何更好地交互,另一个探索了如何用更强的3D卷积结构去处理每一条流,同时解决了3D卷积原本面临的数据不足问题。写在后面读这篇论文时,最触动我的一点是,研究者没有执着于让神经网络端到端学会一切,反而承认了传统方法里光流计算这一环节本身已经足够好,直接拿来用就行,没必要重新发明。这种务实态度在深度学习早期的很多论文里其实很少见,当时的主流叙事往往是深度学习要取代一切手工设计,而双流网络恰恰是靠深度学习加手工特征的混合方案才实现了突破。这也提出了一个没有被这篇论文回答的问题:光流本身是通过传统算法预先计算的,整个双流网络并不是真正端到端可训练的系统。这个限制后来催生了另一条研究线索,尝试让网络自己学会估计光流,而不依赖外部算法预处理,这条线索最终发展成了独立的光流估计网络研究方向,和动作识别研究分道扬镳,各自壮大。一个原本只是辅助工具的东西,后来变成了独立的研究课题,这大概是研究之间最有意思的溢出效应。QAQ1双流卷积网络是什么A双流卷积网络是Simonyan和Zisserman在2014年提出的视频动作识别方法用两个独立的卷积网络分别处理静态画面空间流和光流运动信息时间流最后融合两条流的判断结果来识别视频中的动作类别。Q2双流卷积网络的准确率和传统方法比怎么样A在UCF-101数据集上双流卷积网络达到88.0%的准确率略微超过了当时最好的手工特征方法密集轨迹的87.9%这是深度学习第一次在视频动作识别任务上追平并反超传统方法。Q3为什么要把空间信息和时间信息分开处理A因为动作识别既需要认出画面里有什么物体和场景又需要理解运动变化的模式这是两种性质完全不同的信息。实验证明如果只用空间流准确率会从88%掉到72.6%说明分开建模、各自专精再融合的方式效果明显更好。
返回列表