【论文笔记】视觉重定位 场景坐标回归 DSAC++ 2018

Learning Less is More – 6D Camera Localization via 3D Surface Regression


作者: 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维场景坐标 y i ( w ) y_i(w) yi(w),其中w为模型的参数

  • 位姿假设采样:

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

  • 选择最优位姿假设:

    评分函数 s ( h ) s(h) s(h)根据每个位姿假设 h j ( w ) h_j(w) hj(w)对应的概率分布 P ( j ; w ; α ) P(j;w;\alpha) P(j;w;α)对每个位姿假设进行评分,选择最可能的位姿假设。其中参数 α \alpha α控制概率分布的宽度。
    首 先 计 算 重 投 影 误 差 : r i ( h , w ) = ∣ ∣ C h − 1 y i ( w ) − p i ∣ ∣ ,   p i 是 像 素 i 的 坐 标 , C 为 相 机 内 参 矩 阵 。 计 算 重 投 影 误 差 的 s o f t m a x : P ( j ; w , α ) = e x p ( α s ( h j ( w ) ) ) ∑ k e x p ( α s ( h k ( 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是固定的缩放因子,控制概率分布的宽度。 ri(h,w)=Ch1yi(w)pi, piiCsoftmaxP(j;w,α)=kexp(αs(hk(w)))exp(αs(hj(w)))P(j;w,α)姿姿α
    参数 α \alpha α的作用就是减小假设评分之间的差别,使得梯度值相差不会太远。个人理解,比如两个假设的得分是10和100,相差90,那么乘以该参数(论文中使用0.1)后变成了1和10,相差9。

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

  • 细化最优位姿假设

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

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

场景坐标回归:

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

在这里插入图片描述

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

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

位姿假设评分:

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

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

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

  1. 首先统计inlier点的数目,这里与DSAC不同,使用了sigmoid函数计算评分值:
    s ( h ) = ∑ i s i g ( τ − β ( r i ( h , w ) ) ) τ 为 重 投 影 误 差 的 阈 值 , β 为 超 参 P ( j ; w , α ) = e x p ( α s ( h j ( w ) ) ) ∑ k e x p ( α s ( h k ( w ) ) ) 这 一 步 与 D S A C 相 同 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相同 s(h)=isig(τβ(ri(h,w)))τβP(j;w,α)=kexp(αs(hk(w)))exp(αs(hj(w)))DSAC

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

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

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

三步训练:

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

  1. 初始化模型参数w:

    有3D模型时,使用渲染的场景真值进行初始化,否则近似的真值进行启发式的初始化
    w ^ = a r g m i n w ∑ i ∣ ∣ y i ( w ) − y i ∗ ∣ ∣ \hat w= argmin_w\sum_i||y_i(w)−y^∗_i|| w^=argminwiyi(w)yi
    在这里插入图片描述

  2. 优化重投影误差

    这一步相当于加入了几何约束
    w ^ = a r g m i n w ∑ i r i ( h ∗ , w ) \hat w= argmin_w\sum_ir_i(h^∗,w) w^=argminwiri(h,w)

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

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

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

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

实验内容以及分析

实验总的来看角度误差非常优秀,平移误差已经DSAC已经很小了
在这里插入图片描述

统计了在给定阈值后定位成功的整数比例:
在这里插入图片描述

速度:0.2fps,

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

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值