ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

2014年,深度学习在视频里输给了一个手工方法:双流网络怎么翻盘

2014年,深度学习在视频里输给了一个手工方法:双流网络怎么翻盘 2012年AlexNet横空出世图片识别这件事几乎一夜之间被重新定义了。ImageNet比赛的错误率从二十多个百分点直接砍到十五个百分点左右整个计算机视觉圈子都在议论卷积神经网络这四个字。可两年后当研究者们把同样的思路搬到视频上想让神经网络认出画面里的人在跳远还是在扔铅球却发生了一件挺尴尬的事。深度学习输了。而且输给的不是另一个更花哨的神经网络是一个诞生于传统计算机视觉时代的手工方法叫密集轨迹。 密集轨迹Dense Trajectories改进版简称iDT一种不依赖神经网络的传统视频特征提取方法靠追踪画面里密集分布的点在多帧之间的运动路径再手工统计这些路径周围的图像和运动信息来判断动作类别。这不是一次小差距的失利。当时最好的纯CNN方案也就是Karpathy等人2014年发表的大规模视频分类研究在UCF101这个动作识别数据集上只能做到65.4%的准确率而iDT轻松跑到了87.9%。二十多个百分点的差距意味着什么。意味着每识别5个动作深度学习就要比手工方法多认错一个还不止。这在图片识别领域几乎是不可想象的局面毕竟AlexNet早就把手工特征打得没有还手之力了。这篇文章要讲的是Karen Simonyan和Andrew Zisserman在2014年发表的论文他们提出的方法让深度学习第一次在视频动作识别上追平、甚至反超了iDT。这个方法叫双流卷积网络。核心问题视频比照片多了什么一张图片和一段视频最本质的区别是什么。图片给你一个静止的瞬间你能看到场景、物体、颜色、纹理。视频除了这些还多了一条时间轴多了运动本身。一个人举着球拍站在网球场上从照片上你能看出他在打网球但你看不出他是在发球还是在接球是在扣杀还是在轻挑。这些信息藏在连续帧之间的变化里藏在运动的方向和节奏里。早期直接把CNN搬到视频上的做法基本就是把图片识别的套路照搬过来让网络吃进去几张连续帧指望它自己从像素变化里学出运动规律。问题是动作识别的训练数据集在当时小得可怜UCF101总共只有一万三千多段视频HMDB51更少只有几千段。而ImageNet有上百万张标注图片。数据量差了两个量级网络自己去学运动这个抽象概念学不出来只能靠记住训练集里的场景细节混日子换一批测试视频立刻现原形。这大概就是为什么当时纯CNN方案只能做到65.4%比iDT差了一大截。Simonyan和Zisserman当时都在牛津大学的视觉几何组工作。 VGGVisual Geometry Group牛津大学的一个计算机视觉研究组几个月后同一批人还发表了后来家喻户晓的VGGNet图像分类网络这两篇论文几乎是同期的工作。他们的思路挺直接既然网络自己学不好运动信息那就别指望它凭空学出来直接把运动信息用传统方法先算好喂给网络一个专门处理运动的分支。拆成两条河空间流与时间流双流网络的核心设计是把一个原本很难的问题拆成两个相对简单的子问题分别用两个独立的卷积网络去解决最后再把结果合并。 双流卷积网络Two-Stream Convolutional Network由两个独立的CNN组成的架构一个负责处理单帧画面的外观信息叫空间流一个负责处理帧与帧之间的运动信息叫时间流最后融合两条网络的判断结果得出最终类别。空间流吃的是单张RGB图像学的是场景、物体、人物外观这些静态线索。这条分支本质上跟图片分类网络没什么区别甚至可以直接借用在ImageNet上预训练好的模型权重。时间流吃的不是原始画面是一种叫光流的东西专门捕捉运动方向和速度。这个设计的必要性藏在一个具体的场景里。想象你在看一场默剧比赛的评分现场评委分成两组。第一组评委只能看剧照也就是单张照片判断演员穿的衣服、站的场地、手里拿的道具。第二组评委只能看骨骼动作捕捉出来的火柴人动画只有运动轨迹没有任何场景信息。如果只让第一组评委打分让他们分清打网球和打羽毛球大概率分不清因为球拍长得差不多场地也接近一个正在扣杀的网球动作和一个正在轻挑的羽毛球动作从静态照片上看差别不大。反过来如果只让第二组评委看火柴人动画他们能看出运动的方向和节奏但分不清运动员到底站在游泳池边还是网球场上遇到扔铅球和扔链球这种运动路径相似但项目完全不同的场景第二组评委也会犯迷糊。真正靠谱的判断得把两组评委的意见综合起来。这正是双流网络实验数据告诉我们的事。如果只用空间流单独判断在UCF101上的准确率只有72.6%掉了整整十五个百分点。如果只用时间流准确率能到81%左右比空间流强不少但还是不如两者融合的88.0%。单独跑任何一条流都会漏掉另一半信息这就是为什么必须两条流一起上。光流给每个像素画一支箭头时间流吃的光流到底是什么东西。 光流Optical Flow描述图像中每个像素点在相邻两帧之间移动方向和距离的一种表示方法稠密光流指的是给画面里几乎每一个像素都算出这样一个移动向量最终形成一张记录着运动方向的运动地图。具体做法是取连续的十帧画面两两之间算出光流场光流场本身有水平方向和垂直方向两个分量十帧就是二十个通道这二十个通道堆叠在一起作为时间流网络的输入。为什么不直接把原始帧堆在一起扔给网络非要先算好光流再喂进去。光流场就像给每一帧画面上的每个像素都画一支箭头告诉你这个点下一帧往哪个方向、挪动了多远。如果不用光流直接把连续几帧原始图像叠在一起扔给CNN网络看到的其实是好几张几乎一样的照片叠在一起像素值的差异本身并不会直接告诉网络手往左边移动了三个像素这种运动信息网络得自己从这些微小的像素差异里硬猜运动方向。在训练数据只有一万多段视频的情况下这种猜测基本猜不准网络学到的更像是噪声而不是真正的运动规律。先用传统算法把光流算好再喂给网络相当于把最难的那一步提前做完网络只需要在一张已经标好运动方向的地图上做分类任务难度直接降了一个台阶。论文里有一张展示时间流网络第一层卷积核的图看上去大多是带方向性的条纹状滤波器像是在专门检测某个特定方向的运动模式。这不是随便训练出来的巧合这是网络自己学出来的它发现光流场里最重要的信息恰恰就是方向于是第一层就把自己调成了一堆方向探测器。数据太少怎么办让两个数据集互相帮忙前面提到UCF101和HMDB51这两个数据集加起来也没多少视频单独训练一个深层网络很容易过拟合。Simonyan和Zisserman用了一个多任务训练的办法来缓解这个问题。 多任务学习Multi-task Learning让同一个网络同时在多个相关任务上训练共享网络的大部分参数只在最后的输出层为每个任务单独设一套分类层逼着网络学到对所有任务都通用的特征而不是死记硬背某一个数据集的细节。具体做法是同一个时间流网络同时在UCF101和HMDB51上训练前面的卷积层完全共享只在最后接两个独立的softmax分类层一个对应UCF101的101个动作类别一个对应HMDB51的51个动作类别。 softmax神经网络最后一层常用的输出方式把网络算出来的一堆数值转换成每个类别的概率所有类别的概率加起来等于1。这个设计对应的场景是一个学生同时要准备两门内容相近的考试比如中国古代史和世界古代史。如果分别报两个培训班各自的复习资料都很单薄复习效果有限。但如果这个学生把两门课的复习资料合并起来一起看共用的分析方法和年代感训练本身就是通用的只是最后答题的时候按各自科目分别填答题卡复习效率就高多了。双流网络里共享的卷积层部分就是这份通用复习资料专门学运动和外观的一般规律最后接的两套softmax才是各自的答题卡。如果不这样共享训练只用UCF101一个数据集单独训练时间流网络过拟合会很严重网络容易把训练集里的背景细节死记硬背下来而不是真的学会识别运动模式换一批新视频立刻掉分。融合与最终成绩两条流各自训练完之后怎么把它们的判断结果合并成一个最终答案。论文里试了两种融合方式一种是直接把两条流最后softmax输出的概率取平均另一种是把两条流的特征拼起来训练一个SVM分类器做最终判断。 SVM支持向量机一种经典的机器学习分类算法通过找到一个能最大程度区分不同类别数据的分界线来做判断在深度学习流行之前是主流的分类工具之一。两种融合方式效果接近最终在UCF101上把准确率做到了88.0%第一次追平并小幅超过了iDT的87.9%。下面这张表大致还原了几种方案在UCF101上的表现差距。| 方法 | UCF101准确率 ||---|---|| 纯CNNKarpathy等2014 | 65.4% || iDT手工特征 | 87.9% || 双流网络仅空间流 | 72.6% || 双流网络仅时间流 | 81.0% || 双流网络融合 | **88.0%** |这张表格里最扎眼的对比是纯CNN的65.4%和融合后88.0%之间足足二十多个百分点的落差。同一个基本工具卷积神经网络仅仅因为多了一条专门处理运动信息的分支成绩就发生了这么大的跃升。这是深度学习在视频动作识别上第一次真正赢过手工特征。放在2014年这个时间点上这句话的分量不亚于AlexNet当年在图片识别上的横空出世只不过这一次胜利来得更艰难一些靠的不是一个更深的网络而是一次架构上的巧妙拆分。后来的路走向了哪里双流网络提出的空间流加时间流这个基本框架成了后面好几年视频动作识别领域的标准起点。2016年Feichtenhofer等人发表了一篇关于卷积双流融合的论文他们发现原始双流网络只在最后softmax层做融合太晚了信息交流不够于是改成在网络中间的卷积层就让两条流互相看一眼对方的特征融合位置提前之后识别准确率进一步提升。同样是2016年Wang等人在ECCV上发表了时间片段网络。 TSNTemporal Segment Network时间片段网络一种改进的双流网络训练方式不再只从视频里截取连续的一小段帧而是把整段视频均匀切成几个片段每个片段各取一小段稀疏采样让网络能看到整段视频的长时间结构而不只是局部的一小截。这个改动让网络能捕捉动作在更长时间尺度上的规律最终把UCF101上的准确率推到了94%左右比原始双流网络又高了一大截。2017年Carreira和Zisserman还是原来那位Zisserman发表了I3D。 I3DInflated 3D ConvNet一种把原本针对图片设计的二维卷积核直接膨胀成三维卷积核的网络结构让网络能直接在原始视频帧序列上学习时空特征同时依然保留了空间流加时间流两条分支的思路并配合当时新发布的大规模视频数据集Kinetics进行预训练。I3D把双流的思路和三维卷积、大规模预训练结合起来把动作识别的准确率又往上推了一截也成了后面很长一段时间的强基线模型。从87.9%到88.0%再到94%再到I3D之后更高的数字这条准确率曲线背后是同一个基本判断的一路延伸空间信息和运动信息本来就是两种不同性质的东西分开处理再融合比硬塞给一个网络自己去猜效果更好。写在后面写这篇论文的时候一个念头一直在脑子里转双流网络这个结构其实和人类大脑处理视觉信息的方式有点像。神经科学里早就有一个说法人的视觉皮层存在两条通路一条叫腹侧通路负责识别这是什么处理物体和场景的静态外观另一条叫背侧通路负责判断它在哪、怎么动处理空间位置和运动信息。这两条通路在解剖结构上是分开的最后在更高层的脑区汇合形成完整的知觉判断。Simonyan和Zisserman大概没有直接照着神经科学的论文来设计双流网络但两者殊途同归这件事本身挺让人感慨的。有时候一个领域里最优雅的工程解法恰好和另一个完全不相关的领域里演化了几百万年得出的生物结构对上了。论文里还有个细节值得单独说一说多任务训练用的两个数据集UCF101和HMDB51动作类别其实并不完全重合一个数据集里有骑马另一个可能没有但共享的卷积层依然能从两边同时学到通用的运动特征。这说明网络真正学到的东西是一种比具体动作类别更底层的运动表示能力这种能力可以在不同任务之间自由迁移这个发现后来在整个深度学习领域反复被验证预训练加迁移这条路子本质上就是从这里延伸出去的。这篇论文没有解决的问题也很明显光流本身是用传统算法提前计算好的不是端到端学出来的这多少有点别扭相当于在一个深度学习系统里嵌入了一段手工设计的模块。后来I3D用三维卷积直接吃原始帧序列某种程度上就是想把这最后一块手工的部分也交给网络自己学。这个方向对不对现在的三维卷积网络和后来的视频Transformer架构给出了自己的答案但答案本身好不好可能还得再过几年才看得清楚。QAQ1双流卷积网络是什么A双流卷积网络是Simonyan和Zisserman在2014年提出的视频动作识别方法用一个空间流处理单帧图像的外观信息一个时间流处理光流表示的运动信息最后融合两条网络的判断结果在UCF101上首次让深度学习追平并超过了手工特征方法iDT。Q2双流网络为什么要单独设计一条时间流处理光流A因为当时的视频数据集太小网络很难自己从原始帧的像素变化里学出运动规律。先用传统算法把光流算好再输入网络相当于提前把最难的运动信息提取好让网络只需要在这个基础上做分类大幅降低了学习难度。Q3双流网络后来被哪些方法改进了A2016年Feichtenhofer等人提出更早的卷积层融合方式提升了效果同年Wang等人提出时间片段网络TSN让网络能看到整段视频的长时间结构准确率提升到94%左右2017年Carreira和Zisserman提出I3D把双流思路和三维卷积、大规模Kinetics数据集预训练结合起来进一步提升了性能。
返回列表