BA-Net: Dense Bundle Adjustment Network
BA-NET:稠密BA网络
论文链接:https://arxiv.org/pdf/1806.04807.pdf
代码地址:https://github.com/frobelbest/BANet
1.概述
提出一种网络体系结构,通过特征度量(特征图)BA,解决运动结构(SfM)问题
整个系统很好地结合了领域知识(即硬编码的多视图几何约束)和深度学习(即特征学习和基础深度图学习)以解决具有挑战性的密集SfM问题
网络根据输入图像生成若干基础深度图,并且通过特征度量BA将最终深度优化为这些基础深度图的线性组合。这个网络主要是学习两个内容:
- 一个是使BA问题更容易处理的合适特征
- 另一个是基础深度图的线性组合的系数。
2.个人理解
概述的内容比较抽象,说下自己的看法,要理解BA-NET,首先要了解以下基础知识:
- 神经网络(包括前向传播,反向传播,残差网络,卷积,反卷积,监督学习,损失函数)
- 视觉SLAM中直接法的求解
- 视觉SLAM中传统的BA优化问题
BA-NET主要是根据以上的前两点基础知识进行构造的,感觉BA-NET与传统的BA优化没有一点关系
视觉SLAM中传统的BA问题,详见另一篇博客:假装这个位置有个链接
视觉SLAM中直接法的求解,详见另一篇博客:https://blog.csdn.net/TFZ941214/article/details/90641493
直接法不像在特征点法中,通过匹配描述子,知道p1,p2的像素位置,可以计算重投影的位置。直接法由于没有特征匹配,无从知道哪一个p2与p1对应着同一个点。那就根据当前相机的位姿估计值,来寻找p2的位置。但若相机位姿不够好,p2的外观和p1会有明显差别。于是,为了减小这个差别,我们优化相机的位姿,来寻找与p1更相似的p2。这同样可以通过解一个优化问题,但此时最小化的不是重投影误差,而是光度误差(Photometric Error),也就是P的两个像的亮度误差:
这里的代表在图像I1中像素
的深度,
为像素
在世界坐标系下的位置。
,直接法利用灰度不变性,利用优化的方式,不断的对T与d增加一个小的∆T与∆d寻找所有像素中最小的一个光度误差,得到最优的变换矩阵T以及像素的深度d。了解直接法,会更加深刻的理解BA-NET。
BA-NET就是在直接法的基础上进行修改的,BA-NET的约束方程(与直接法很类似)及网络框图如下:
图1:BA-Net结构概述,包括作为骨干网络的DRN-54(Yu等,2017),生成一组基础深度图的基础深度图生成器,特征金字塔构造函数构建多尺度特征图,以及通过新颖的可微LM算法优化深度图和相机姿势的BA层。
简单来说整个BA-NET的网络结构是这样的,将许多的图片送入网络,得到各个图像的特征图与第一帧图片的好多基础深度图。利用系数对基础深度图进行线性组合,形成深度图。将特征图与深度图送入BA-Layer层,与直接法类似利用通过优化的方式求解变换矩阵T以及像素的深度d。这里的变换矩阵T以及像素的深度d是网络预测得到的。论文训练的数据集中是有真实的变换矩阵T以及像素的深度d的(参看论文5.1小节),预测的变换矩阵、深度与真实的变换矩阵、深度之间的误差就形成了loss损失函数。这样通过反向传播使网络学的更容易处理的合适特征以及基础深度图的线性组合的系数。
正如概述中的第二条:整个系统很好地结合了领域知识(即硬编码的多视图几何约束)和深度学习(即特征学习和基础深度图学习)。
更具体的BA-Layer参看论文原文4.3小节,深度图组合系数参看4.4小节,Loss损失函数构造参看4.5小节,数据集参看5.1小节。