twice论文-深度估计-BA_NET

 

摘要:

这篇论文就是通过特征度量的BA来解决sfm的问题,并且整个过程都是可微的,因此可以进行端到端的训练。我认为有几个亮点吧:

(1)几何优化的问题使用了特征度量的BA,一改之前的位置BA和光BA,可以涉及更多的像素进行优化

(2)将sfm可微化,主要是使用MLP去预测阻尼系数

(3)产生基础深度图,最终的深度图是这些基础的线性表示,参数同相机的位姿一样可以进行优化,就是说直接估计每一个像素的深度是很耗费的,用网络训练出基础的深度图,然后从这些基础的深度图中去组合形成最终的深度图,是节约了搜索空间,但是精度应该没有前一者高(deepvo2D)。

4 BA-Ne

 

twice论文-深度估计-BA_NET_第1张图片

4.1 概括:

(1)输入多张图片给Backbone,Backbone是由DRN-54改进的,即将max-pooling换成了卷积层,这样可以得到更加平滑的特征图(本来人家就是这样的),其次因为这个网络使用了扩张卷积产生的特征图具有很高的分辨率,导致效率不高,因此将其换成了普通的卷积,这样对于每一个输入的图片就产生一个特征金字塔

(2)与此同时,直接从Backbone网络中训练出一组基础的深度图

(3)由基础深度图经过线性组合形成最终的深度图,然后经过BA-layer对相机位姿和深度同时进行优化

(4)产生新的位姿和深度图,经过反向传播,进行下一次的迭代

4.2特征金字塔

首先要构造特征金字塔,如下图所示,对于一张输入图片,经过DRN-54网络,他的最后一个残差层conv1,conv2,conv3,conv4,就是图上的C1,C2,C3,C4,步长分别为1,2,4,8,也就是得到的特征图C4最小,然后对每个图片使用双线性插值法进行向上采样,然后再两两结合形成一个特征图,最后再特征图进行3*3的卷积,把他们的维度降到128,降低复杂度,那么每个图会产生一个金字塔特征,有三层特征图,如下图

twice论文-深度估计-BA_NET_第2张图片

为了证明这个金字塔对BA优化好,进行了可视化的比较。这样的,对于(a)的上图,那个标黄色十字架的区域,在(a)的下图中计算和他相似的距离,(b,c,d)图都是表示的对于下图每个像素和上图黄色十字架那个像素的相似距离,蓝色就是距离小,红色距离大,对于(b)可以看出,根本没有全局最小,一个图上好多蓝色的地方,对于(c)图,直接从DRN-54中出来的特征图,他有全局最小,但是也有局部最小,对于(d)图的金字塔特征图,他有全局最小,并且很光滑,这样对于梯度下降类的算法是很好的。

twice论文-深度估计-BA_NET_第3张图片

4.2基础的深度图生成

为什么要使用基础的深度图

首先因为对全部的像素进行参数化,是不切实际的,这将产生太多的参数;其次就是在刚开始训练的时候,由于预测的糟糕的深度或者运动,很多像素在其他的视角下是不可见的,这样就会导致很少的信息可以被用来反向传播,使训练困难。

因此为了解决上述问题,使用了卷积神经网络估计单目图片的深度的方法估计基础的深度图,把这个基础的深度图作为一个紧凑的参数。我们使用的是标准的encoder-decoder架构估计深度,我们使用DRN-54作为编码器和特征金字塔共享特征,对于解码器使用的是Laina et al.(2016)提出的一个网络并且修改他的最后一个卷积形成128通道,(也就是形成128个基础深度图)用来作为基础的深度图B。

4.3 最终的深度图

是基础深度图的线性组合,公式

B就是基础的深度图,维度是h*w*128即128个基础深度图,w是深度图的权重,该权重会在BA层进行优化,ReL激活函数保证不为负。D最终的深度图,维度是h*w,即每个像素都有一个深度。

4.4 BA-Layer

原理是使用重投影误差来优化相机的外参和深度图,公式:

i表示的是第i个相机,j表示在相机1下的第j个像素,那么q_{j}是第j个像素坐标,Fi表示第i个相机下的对应的金字塔特征图,Ti是第i个相机的姿态,dj第j个像素的深度,X就是代表了Ti和di,即深度和姿态。

 表示将第一个相机下的第j个像素转换到相机i下的像素对应的特征,F1(qj)表示在相机1下的第j个像素对应的特征。如果说Ti和dj都正确的话,那么这两个特征应该是一样的,是特征匹配的,但是往往不精确,所以表示的是相机i和关键相机中第j个像素对应的特征误差。注意,这里所有的相机是视频帧,而且第一帧作为关键帧,其他和他比较,也就是F1.

我们的目标就是最小化所有的像素的重投影误差,也就是要最小化(4),使用LM算法优化,但是原始的LM算法是不可微的,如果不可微,我们就不能反向传播,也就不能训练我们的网络,主要有两个方面的困难:

1.当达到指定的收敛阈值的时候,迭代就终止了,这种if-else的终止策略使输出的解X对于输入F是不可微的。

2.在每一次迭代的时候,会更具当前的目标函数的值来更新阻尼系数,如果说是目标函数没有降低,那么就会提高阻尼系数,反正会降低阻尼系数,这种if-else的策略也会使得X对F 不可微。

那么解决第一个困难之前有人做过,就是直接设定一个迭代的次数即可,本文也这样使用,对于第二种困难,我们把当前的目标值X输入到一个单独的MLP网络去预测阻尼系数\lambda,这样不仅可微了,而且还可以预测一个更好的阻尼系数。

整个LM算法的流程如下:

twice论文-深度估计-BA_NET_第4张图片

输入的是上一次迭代的X和金字塔特征F,目的是输出增量\Delta X,流程如下:

(1)计算所有帧的所有像素的重投影误差

(2)计算雅可比矩阵J(X),黑森矩阵H(X),对焦矩阵D(X)

(3)为了预测\lambda,我们使用池化层聚合E(x)得到一个128维的特征向量,把他送到MLP网络去预测\lambda

(4)最后,求出\Delta X

在每一个金字塔层循环5次LM算法,总共循环15次,得到最后的\Delta X

忘了一个,就是这里的深度要用我们最终求出的深度图D来计算,即重投影误差替换成这个公式:

B[j]就是B的第j列,代表的第j个像素的深度。

4.5训练

求出loss,反向传播,然后迭代训练。。。。。

我写的这个顺序和论文中的不太一样,有错误,望指正。

继续改进。。

 

你可能感兴趣的:(立体视觉)