几分钟走进神奇的光流|FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bea_tree/article/details/67049373

故事背景

那是15年的春天,本文的作者和其他几个人,使用CNN做光流估计,于是FlowNet成了第一个用CNN做光流的模型,当时的结果还不足以和传统结果相匹配。2016年冬天,作者和一群小伙伴又基于Flow Net的工作进行了改进,效果得到了提升,可以与传统方法相匹敌。
15年的思想主要是把两张用来估计光流信息的图片输入网络,经过训练使网络学到光流信息,后面会讲到当时用到的两个网络。
作者
Eddy Ilg, Nikolaus Mayer, Tonmoy Saikia, Margret Keuper, Alexey Dosovitskiy, Thomas Brox
项目地址
http://lmb.informatik.uni-freiburg.de/Publications/2016/IMKDB16/
FlowNet1.0 地址
http://lmb.informatik.uni-freiburg.de/resources/binaries/

一句话总结

本文依然是用CNN来做光流估计,提出了一种训练方法,引入了Stack的结构,对小位移单独处理,提高了网络的效果。好评!

看点

  1. 训练时数据集的使用
  2. 网络结构
  3. 还有请留言:-D

0. 预备~

到了大家最喜欢看网络结构的时候了
这一节主要介绍在第一版FlowNet中的两个网络结构及几个数据库

0.1 FlowNetS

这里写图片描述
第一个模型:FlowNetS
主要特色:
- 输入由原来的一张图片变为了两张,通道数由3变为6
- 多层feature引入最后的Refinement模块,Refinement的具体结构将在后面涉及
这里写图片描述

0.2 FlowNetC

第二个模型:FlowNetC
主要特色:
- 图片不再直接放到通道,而是先分别通过一个三层网络 然后进入一个名叫 correlation layer的层

0.3 correlation layer

该层的主要作用是比较来自两张图片的feature map的关系,文章用了卷积的形式,还是比较巧妙的,具体方程如下
这里写图片描述
C代表correlation,f1和f2分别代表两个feature map, k代表要比较的区域,x1,x2分别代表两个feature map上的点。具体的计算流程还是看原文本,这里只要知道这个层的主要作用是计算两个层的关系就可以了。

0.4 Refinement

这里写图片描述
这里就是不断的上采然后 前面的feature map的reuse,这里还加入了预测得到的flow。具体细节同样请看第一版的FlowNet

总的来说,FlowNetS的效果不如FlowNetC的效果

0.5 Chairs 数据库

一群在各种背景下会飞的椅子,确切的说是22872对椅子
这里写图片描述

0.6 FlyingThings3D(下面称为Things3D)

一堆会飞的东西 但是更接近于现实,22k对
这里写图片描述
这里写图片描述

0.7 Sintel

一共1041对
这里写图片描述

1. Dataset Schedules

本文的三个训练策略
这里写图片描述
使用不同的训练策略和不同的数据集顺序得到的结果:
这里写图片描述
这里可以看出,先使用Chairs这样简单的样本然后再使用Things3D,可以得到比一起mixed训练更好的结果

2. Stacking Networks

结构如下:
这里写图片描述
- 首先,第一个网络的输入是两幅图片
- 其次,在之后的网络含有warp layer时
- 输入经过warp layer及双线性差值之后的 img2及其I1的差值(brightness error)及img1,img2,flow(共5种)
- 所谓warplayer 就是将原图根据得到的flow的值进行位置变化
- 再次,当没有warp layer时 输入 img1 img2 及flow(3种)

2.1 Stacking Two Networks

这部分只用FlowNetS一种网络,具体实验设计如下表:
这里写图片描述
实验观察:
1. 不加warp时,叠加网络,在Chairs数据集上错误率下降,Sintel上上升,文章认为,这是由于过拟合造成的(训练是在Chairs上训练的)
2. Warp的效果很明显
3. 在Net1上加辅助loss有利
4. 在Sintel数据集上的最优结果来自fixed net1+training net2+warp

2.2 Stacking Multiply Diverse Networks

文章在这里除了引入FlowNetS,FlowNetC,还引入了每层只有3/8个通道的FlowNetc和FlowNets以小写的s和c表示,3/8的来源:
这里写图片描述
这小节做的试验训练方法都是用Chairs->Things3D的方法,且网络按照one-by-one的设置训练
试验设置及结果:
这里写图片描述
CSS表示FlowNetC+2个FlowNetS,其他以此类推,由此可见,两个小网络虽然在一起参数更少但是效果好于一个大网络

2.3 Small Displacement

上面使用的Chairs 及Things3D数据集相对真实场景的变动较大,所以训练的效果在实际应用时并不太好,所以作者就重新做了一个数据集,叫作ChairsSDHom, 使用FlowNet2-CSS在ChairsSDHom及Sintel上finetune 得到FlowNet-Css-ft-sd, finetune时对small displacement的loss权重加强,效果在微变物体上表现变好,变化大的物体的效果也还不错,但是仍然还有噪声。
于是作者就设计了网络结构图中右下角的FlowNet-SD。
主要改进:
- 将FlowNetS的第一层的stride=2变为1
- 将7x7和5x5变为几个3x3
- 在上采样前加了卷积层用了平滑噪声

2.4 Fusion Net

最后的Fusion用了融合前面FlowNetCSS-ft-sd及FlowNet-SD的结果,结构如下:
这里写图片描述

3 实验

随便看看就可以了
这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/bea_tree/article/details/67049373