BA-NET: DENSE BUNDLE ADJUSTMENT NETWORKS 理解

一句话定义BA-NET

  • BA-NET是关于怎么用深度学习来做sfm

用深度学习来做sfm之前有些什么样的思路

  • 最直接的方法就是把多张图片直接送给神经网络,误差函数就是网络输出的pose以及像素深度和真值之间的差异。
  • 只用神经网络把RGB的图转换成特征图。之前稠密的SFM是为了最小化多张图片对齐后图像的亮度差异。现在改为最小化特征图的差异。
  • 上一种方法中,特征层提取的网络需要单独训练,但是很难找到真值。所以在BA-NET中把BA放到神经网络的训练中,使用End-to-End的训练。

细节

  • BA-NET: DENSE BUNDLE ADJUSTMENT NETWORKS 理解_第1张图片
  • 网络的输入是多张图片,每张图片先通过一个修改后的DRN-54网络。
  • DRN-54都头四层分别抽出来,形成c1,c2,c3,c4
  • BA-NET: DENSE BUNDLE ADJUSTMENT NETWORKS 理解_第2张图片
  • 对c4做三次upsampling,每次upsampling后都和对应的c层叠加channel后再upsampling。最终形成f1,f2,f3层。
  • 每张图片都生成f1,f2,f3三张图片作为BA-Layer的输入。
  • BA-NET: DENSE BUNDLE ADJUSTMENT NETWORKS 理解_第3张图片
  • 上面是DRN-54,DRN-54最终把图片的channel加到2048。
  • BA-NET: DENSE BUNDLE ADJUSTMENT NETWORKS 理解_第4张图片
  • 然后upsampling加降channel数到128。这就得到了128张原尺寸的深度base图
  • BA-NET: DENSE BUNDLE ADJUSTMENT NETWORKS 理解_第5张图片
  • 基于特征图后做BA,目标是减少不同图片对其后,对应像素的特征值的距离最小。
  • 为了让BA是可微的,这里BA做固定次数的迭代。
    • 每次迭代需要计算dx,dx加上上一次的x得到下一次的x。也就是整个模块等价于输入是原始的x,输出是优化后的x的函数。为了反响传播,我们需要优化后的x相对于优化前的x的斜率。因为每次迭代dx相对误差项的关系是线性的。所以这个斜率很容易得到。
    • 迭代次数固定,等于是级联了n个函数。
    • LM方法里面还有个lamda,这个值不是连续变化的。这里把lamda的求解用神经网络来完成。
    • 最后BA-Layer就是一个神经网络和解析函数的混合函数。
    • 虽然每次迭代后变量x都要发生变化。但一次正向传播后,所有变量的值都固定下来了。
  • 注意这篇文章中有两个误差量,一个是BA的误差量,对应为特征图的距离。还有个是神经网络的误差量,对应为估计的深度值和真值之间的差异。

训练

  • 用搭在lidar或者双目或者RGBD的设备来计算深度的真值和pose,然后直接用来做End-to-End的训练

我的感想

  • 对于一些传统的问题,我们可以把其中某些部分用神经网络来代替,然后做端到端的训练。
    • 前提剩余的非网络部分必须是可微分的,不然没法反响传播。
    • BA-NET的贡献在与把BA这个看似很难微分化的过程也做成可微的了。
  • 误差函数不一定是输出两和真值之间的直接对比
    • BA-NET的输出量其实是128个系数。但是误差函数是这128个系数的函数。前提是从输出量到最终的误差量之间不在有可学习的参数。
  • 不管网络中出现的过程再复杂,一定要记住在反响传播的时候,所有变量的值都已经固定了。我们是对系数求导,所以一下就变成一个线性系统了。

你可能感兴趣的:(深度学习,建图和定位)