Learning Less is More – 6D Camera Localization via 3D Surface Regression && 2018 论文笔记


作者: Eric Brachmann and Carsten Rother

机构:海德堡大学 视觉学习实验室

本文基于DSAC模型,提出了DSAC++ , 证明了相比于 学习 相机定位 pipeline 的所有组件,只学习其中的一种会更加高效。

DSAC++就是这样一个 将可学习的组件结合到定位 pipeline 中,组成的端到端学习系统。

DSAC有三个问题:

  1. 对位姿假说进行评分的CNN模块很容易过拟合。因为它可以记住全局的共识模式,以区分优劣假说。 例如,CNN可能会专注于图像中出现误差的位置,而不是去学习评估误差的质量。然而出现误差的位置不能在不同场景之间是不同的,因而不能够被泛化。
  2. 初始化pipeline需要RGBD训练数据,或者是3D模型。这些数据较难获取。
  3. DSAC中姿态细化通过有限查分得到,不稳定的数值会导致非常大的梯度方差。

针对以上问题,DSAC++ 使用了soft inliner count 取代原来的评分CNN, 对位姿假设进行评分。防止了过拟合问题。为了解决评分数值不稳定导致的大梯度方差,DSAC++ 使用香农熵对概率分布进行监督使得模型参数能够适应概率分布。

此外,本文还探索了模型在不适用3D模型下的性能,实验证明,DSAC++在不依赖3D模型的情况下依然可以精确估计相机位姿。

论文方法介绍

本文基于DSAC,因此首先介绍下DSAC.

DSAC 的pipeline步骤:

  • 场景坐标回归:

    首先有一个CNN来预测每个像素i对应的3维场景坐标yi(w)y_i(w),其中w为模型的参数

  • 位姿假设采样:

    任选4个yi(w)y_i(w)就可以生成一个位姿假设。多次采样,生成位姿假设集合h(w)h(w)

  • 选择最优位姿假设:

    评分函数s(h)s(h)根据每个位姿假设hj(w)h_j(w)对应的概率分布P(j;w;α)P(j;w;\alpha)对每个位姿假设进行评分,选择最可能的位姿假设。其中参数α\alpha控制概率分布的宽度。
    ri(h,w)=Ch1yi(w)pi, piiCsoftmaxP(j;w,α)=exp(αs(hj(w)))kexp(αs(hk(w)))P(j;w,α)姿姿α 首先计算重投影误差:\quad r_i(h,w) =||Ch^{−1}y_i(w)−p_i||, \ p_i是像素i的坐标,C为相机内参矩阵。\\ 计算重投影误差的softmax:\quad P(j;w,\alpha) =\frac{exp(\alpha s(h_j(w)))}{\sum_kexp(\alpha s(h_k(w)))}\\ 选择P(j;w,\alpha)(即概率分布)最大的位姿假设为最佳位姿假设\\ 参数\alpha是固定的缩放因子,控制概率分布的宽度。
    参数α\alpha的作用就是减小假设评分之间的差别,使得梯度值相差不会太远。个人理解,比如两个假设的得分是10和100,相差90,那么乘以该参数(论文中使用0.1)后变成了1和10,相差9。

    这个基于概率分布选择最优位姿假设的机制使得DSAC可以进行端到端的训练。

  • 细化最优位姿假设

    细化操作R是一个迭代步骤,选择inliner的像素,然后根据inliner像素进行优化,输出最终的位姿R(hj(w))R(h_j(w))

DSAC 的损失函数只使用角度误差和平移误差中的一项,通过优化所有inliners的损失来对网络进行监督。
l(h,h)=max((θ,θ),tt) l(h,h^∗) = max(∠(θ,θ^∗),||t−t^∗||)
DSAC详细的介绍见DSAC论文笔记,下面逐个介绍DSAC++的各个模块。

场景坐标回归:

论文使用VGG-like的全卷积网络进行三维坐标回归。

Learning Less is More – 6D Camera Localization via 3D Surface Regression && 2018 论文笔记

DSAC中使用图像裁切后的patches作为输入,对每个patch的中心点输出对应的坐标预测。尽管对图像patches进行了40*40 的采样,重复计算仍然很多,计算量大。

因此本文以整张图像640*480作为输入,然后生成80 * 60的场景坐标预测,一次性计算完成。

位姿假设评分:

首先分析了DSAC的假设评分机制的两个问题:

  1. 因为使用patches进行局部预测,场景位姿回归网络可以很好地泛化到其他场景。而评分网络使用的是学习的是全局误差,使得评分网络不能够被很好的泛化。
  2. 评分CNN有输出极大值的趋势,当有些位姿假设的得分为1时,loss取得极小值,而参数α\alpha是固定的,这导致过拟合以及训练的不稳定。

正则化可能可以解决这些问题 ,但是论文采取了一种更加简单的可导的方法:

  1. 首先统计inlier点的数目,这里与DSAC不同,使用了sigmoid函数计算评分值:
    s(h)=isig(τβ(ri(h,w)))τβP(j;w,α)=exp(αs(hj(w)))kexp(αs(hk(w)))DSAC s(h)= \sum_isig(\tau-\beta(r_i(h,w)))\\ \tau 为重投影误差的阈值,\beta为超参\\ P(j;w,\alpha) =\frac{exp(\alpha s(h_j(w)))}{\sum_kexp(\alpha s(h_k(w)))}\\ 这一步与DSAC相同

  2. 计算概率分布的香农熵

    香农熵:
    S(α)=jP(j;w,α)logP(j;w,α) S(\alpha) =−\sum_jP(j;w,α) logP(j;w,\alpha)
    用于衡量概率分布的分散程度(宽度),从而找到合适的超参数α\alpha

    在前几次的迭代中建立目标熵SS^*,然后通过梯度下降优化α\alpha使得香农熵接近目标熵。

三步训练:

作者发现使用RGB和对应位姿真值进行训练很容易陷入局部极小值,因此提出了训练的三个步骤:

  1. 初始化模型参数w:

    有3D模型时,使用渲染的场景真值进行初始化,否则近似的真值进行启发式的初始化
    w^=argminwiyi(w)yi \hat w= argmin_w\sum_i||y_i(w)−y^∗_i||
    Learning Less is More – 6D Camera Localization via 3D Surface Regression && 2018 论文笔记

  2. 优化重投影误差

    这一步相当于加入了几何约束
    w^=argminwiri(h,w) \hat w= argmin_w\sum_ir_i(h^∗,w)

  3. 进行端到端训练
    w^=argminwDEjP(j;w,α)[l(R(hj(w)),h)]l()DSACl(h,h)=max((θ,θ),tt) \hat w= argmin_w\sum_DE_{j∼P(j;w,α)}[l(R(h_j(w)),h^∗)] \\这里损失函数l()与DSAC一样:l(h,h^∗) = max(∠(θ,θ^∗),||t−t^∗||)
    端到端训练要求模型的所有组件都是可导的,包括位姿细化。

    DSAC的位姿细化使用有限差分实现,速度慢计算量大,由于数值不稳定性,,梯度值往往很大。

    论文将位姿细化分为两个步骤:根据重投影误差定义inlier像素集合,然后在inlier集上根据重投影误差进行细化。
    inlierI={iri<τ}  τ inlier集合:I=\{i|r_i< \tau\}\ \ \tau 为阈值
    细化函数R(h)应当使得重投影误差最小:
    R(h)=argminhr(h,w)2 R(h) = argmin_{h′}||r(h′,w)||^2
    使用高斯牛顿迭代优化:
    Rt+1=Rt(JrTJr)1JrTr(Rt,w)(Jr)ij=(r(Rt,w))i(Rt)j R^{t+1}=R^t−(J^T_rJ_r)^{−1}J^T_rr(R^t,w)\\ 雅各比矩阵:(J_r)_{ij}=\frac{\partial(r(R^t,w))_i}{\partial(Rt)_j}
    DSAC中,为了控制计算量设置了迭代次数上线和inliers数量的最大值。

    相比于DSAC,论文中的迭代数值和inliers数目是不受限的,直到优化收敛为止。

实验内容以及分析

实验总的来看角度误差非常优秀,平移误差已经DSAC已经很小了
Learning Less is More – 6D Camera Localization via 3D Surface Regression && 2018 论文笔记

统计了在给定阈值后定位成功的整数比例:
Learning Less is More – 6D Camera Localization via 3D Surface Regression && 2018 论文笔记

速度:0.2fps,

训练时间:每个训练阶段是1-2天,总共就是3-6天(Tesla K80)