光流估计网络---FlowNet1.0
2019-10-06 本文已影响0人
逆风g
- 论文地址:FlowNet: Learning Optical Flow with Convolutional Networks
- 收录:ICCV 2015 (IEEE International Conference on Computer Vision)
概述
- 卷积神经网络(CNNs)已广泛应用于很多计算机视觉任务,例如
图片分类(image classification)
、语义分割(semantic segmentation)
、深度估计(depth estimation)
,这篇论文把CNNs应用到光流估计(Optical flow estimation)
任务中,并取得不错的效果:
- 准确性上,与传统方法具有可比性
- 速度上,远超传统方法,达到5-10fps
- 本文主要工作
- 提出两种网络结构,
FlowNetSimple
和FlowNetCorr
- 提出数据集,
Flying Chairs
Optical Flow
光流(Optical Flow)示意图:
- 图像X和图像Y一般为视频流中相邻的两帧,某一像素在图像X中位置为
(x1,y1)
,图像Y中位置为(x2,y2)
,则这一像素光流为(u,y)=(x1,y1)-(x2,y2)
,代表X中像素点在Y中发生在的u方向和v方向的位移,所以光流估计的结果为原图像大小相等的双通道
图像,光流估计的核心问题即如何匹配两张图片的对应像素点。是不和立体匹配
问题很像?立体匹配是在u方向上寻找对应像素点,结果为原图像大小相等的单通道
图像。 -
立体匹配结果的可视化很简单,直接根据视差大小可视化为灰度图即可,光流场(Flow Field)如何可视化出来的呢?光流场的颜色编码图为:
色调表示u和v上的偏移方向,色调的强度代表偏移的大小,最中心位置代表没有偏移发生,为白色。
网络结构
作者把网络分为两部分,一是
收缩(contracting)部分
,二是扩大(expanding)
部分。根据收缩部分的不同,可分为两种网络结构,一是FlowNetSimple
,简单粗暴,二是FlowNetCorr
,用来模拟传统方法中的特征抽取
和特征匹配
两个过程。
- FlowNetSimple
直接把两张输入图片叠加在一块输入到网络中。 - FlowNetCorr
用网络分别对两张输入图片生成各自特征,再利用“correlation layer”来比较两个特征图。
correlation layer是啥?
主要是遍历两张图中的像素,和周围像素构成像素块(patch)一起进行乘法操作,这样会有w²·h²
个patch相乘,w为特征图宽度,h为特征图高度。我们从网络结构图中可以看到还有开方操作(sqrt
),如果两个图中像素块一致,那么开方后会得到原有像素块内容。
其中每对patch会涉及c·K²
个乘法:
像素块的尺寸为:2k+1
。
为了避免太多的乘法操作,匹配像素块时,会设置一个最大位移d
,此时只会在待匹配像素点2d+1
大小范围内进行块的匹配,而不是遍历另一张图的所有像素点。并且还为两个特征图设置遍历步长,S1
和S2
。这样在一个特征图里的像素点,只会对应在另一张图里2d+1范围内寻找对应像素点,那么会输出w·h·(2d+1)·(2d+1)
大小的特征。
在后续实验中,k=0,d=20,S1=1,S2=2. - Refinement
这块是扩大部分,主要是用来恢复特征图的细节信息。利用upconvolutional
层进行四次
2倍的上采样,而收缩部分下采样了6次
,所以这里得到的结果会比原来输入尺寸小4倍
。当然,作者发现继续使用upconvolutional,对特征图的细节恢复作用已不明显,为了避免更多计算开销,后续使用双线性插值(bilinear upsampling)
更好。作者也在论文中提到另一种他人的后处理方式,恢复细节效果会更好,实验中用后缀+v
表示:
数据集
作者的实验所涉及的数据集有:
Flying Chairs为作者自己合成的数据集,从一个公开的
3D椅子数据集
中取出椅子放进Flickr2
中的图片背景中,为生成光流,作者对图里的椅子和背景进行了2d仿射变换
,得到image pair中的另一张图。合成的图片大小均为512 × 384
数据扩充
数据扩充主要涉及到:translation, rotation and scaling, as well as additive Gaus- sian noise and changes in brightness, contrast, gamma, and color.
实验结果
网络训练用到的loss为endpoint error(EPE)
,同时也是实验结果的评测指标:
作者在Sintel数据集上使用
fine-tune
,试验结果用后缀+ft
表示,以下为不同数据集上,不同方法的量化指标对比结果:- 即使在
Sintel
这样复杂的数据集中,作者方法与其它方法也具有可比性。 -
KITTI
数据集中,用Sintel数据集fine-tune后的结果明显要好于没有fine-tune的结果,代表Sintel比作者的Chairs更加真实,有利于网络学习到真实场景的特征;这里可以发现FlowNetS效果要好于FlowNetC。 -
Flying Chairs
数据集中,作者方法效果最好,代表如果在其它真实场景数据集中有足够的训练样本,作者方法效果将会更好。同时作者也发现使用后处理方法,在此数据集上效果并没有得到提升,表示只要给定网络足够的训练样本,网络得到效果将会足够有保证。 - 时间性能上,作者在
NVIDIA GTX Ti- tan GPU
上的速度最快,远超其它几种方法。 -
在Sintel Clean和Chairs中FlowNetC效果要比FlowNetS好,而在Sintel Final和KITTI中则反之。一是因为Sintel Final有一些运动造成的模糊,而Sintel Clean和Chairs中没有,作者分析是FlowNetC过拟合的缘故,如果有足够的训练数据,就能解决。二是因为KITTI中物体运动偏移较大,FlowNetC受限于本文上叙的偏移d的大小。
以下是Sintel数据集上的部分可视化结果对比: