【论文笔记】视觉重定位 场景坐标回归 Efficient multi-output scene coordinate prediction 2020

Efficient multi-output scene coordinate prediction for fast and accurate camera relocalization from a single RGB image

巴黎中央理工

这是一篇混合方法,使用重新设计的CNN网络提取patches的特征,

然后输入到回归森林对patches的中心点像素坐标进行预测,得到多个3D坐标,选择置信度最高的一个作为预测,由此得到2D-3D对应关系。

最后根据Pnp和RANSAC求解相机位姿

在这里插入图片描述

论文方法

1.patch选择和对应标签制作

使用patch可以过滤掉与场景无关的位置(天空、墙壁等),去除噪声可以减少RANSAC的工作量进而加快运行速度。

本文只取以SURF特征点为中心的49X49的区域作为patch输入。

对应中心点的3D坐标标签计算:(使用RGBD信息,D为深度,p为图像二维坐标,k为相机内参)
相 机 坐 标 系 下 坐 标 : P i c = D i K − 1 [ p i 1 ] 相机坐标系下坐标:P_{i}^{c}=D_{i} K^{-1}\left[\begin{array}{c}p_{i} \\1\end{array}\right] Pic=DiK1[pi1]

使 用 已 知 相 机 位 姿 转 换 到 世 界 坐 标 系 : [ P i w 1 ] = [ R t 0 1 ] [ P i c 1 ] 使用已知相机位姿转换到世界坐标系:\left[\begin{array}{c}P_{i}^{w} \\1\end{array}\right]=\left[\begin{array}{c|c}R & t \\0 & 1\end{array}\right]\left[\begin{array}{c}P_{i}^{c} \\1\end{array}\right] 使姿[Piw1]=[R0t1][Pic1]

得到训练标签。

2.patch特征提取网络xyzNet

xyzNet和后面的回归森林是分开训练的,单独训练流程图:

在这里插入图片描述

在后面加了两个FC层用于输出位姿预测。

损失函数是绝对位姿误差:
l ( p ) = ∑ p i ∈ p ∥ P i w − P ^ i w ∥ 2 2 l(p)=\sum_{p_{i} \in p}\left\|P_{i}^{w}-\hat{P}_{i}^{w}\right\|_{2}^{2} l(p)=pipPiwP^iw22

3.多输出深度回归森林

论文使用回归森法融合xyzNet的输出特征

在这里插入图片描述

每个回归树中的每个节点都以全部特征向量为输入,来训练回归森林

对于每个回归树,选择一个特征子集S作为输入,分裂节点i将其分类到左子树和右子树,直到到达叶子节点:
h ( f j , θ i ) = { 0 ,  if  d ( r e f i , f j ) < τ i ,  go to left child node  1 ,  if  d ( r e f i , f j ) ⩾ τ i ,  otherwise  h\left(f_{j}, \theta_{i}\right)=\left\{\begin{array}{ll}0, & \text { if } d\left(r e f_{i}, f_{j}\right)<\tau_{i}, \text { go to left child node } \\1, & \text { if } d\left(r e f_{i}, f_{j}\right) \geqslant \tau_{i}, \text { otherwise }\end{array}\right. h(fj,θi)={0,1, if d(refi,fj)<τi, go to left child node  if d(refi,fj)τi, otherwise 

其中fi为特征向量, θ i = d ( r e f i , f j ) \theta_{i}=d\left(r e f_{i}, f_{j}\right) θi=d(refi,fj)为节点参数。

优化目标为最小化叶子节点的特征方差:
Q ( S i , θ i ) = ∑ d ∈ { L , R } ∣ S i d ( θ i ) ∣ ∣ S i ∣ V ( S i d ( θ i ) )  with  V ( S ) = 1 ∣ S ∣ ∑ m ∈ S ∥ m − m ˉ ∥ 2 2 \begin{array}{l}Q\left(S_{i}, \theta_{i}\right)=\sum_{d \in\{L, R\}} \frac{\left|S_{i}^{d}\left(\theta_{i}\right)\right|}{\left|S_{i}\right|} V\left(S_{i}^{d}\left(\theta_{i}\right)\right) \\\text { with } V(S)=\frac{1}{|S|} \sum_{m \in S}\|m-\bar{m}\|_{2}^{2}\end{array} Q(Si,θi)=d{L,R}SiSid(θi)V(Sid(θi)) with V(S)=S1mSmmˉ22

为了使回归树尽可能平衡,减少树的深度,需要自适应的改变节点参数,因此作者设计为可学习的参数形式,其损失函数:
θ i = { ref ⁡ i , τ i ∣ ∣ S i L ∣ = ∣ S i R ∣ } \theta_{i}=\left\{\operatorname{ref}_{i}, \tau_{i}|| S_{i}^{L}|=| S_{i}^{R} \mid\right\} θi={refi,τiSiL=SiR}
最终每个叶节点的输出可以根据其置信度来选择出最有可能的3D坐标预测,得到2D-3D对应关系

4.位姿估计

先用RANSAC和PnP去除离群点,然后生成位姿估计。RANSAC中的内点数目可以作为最后预测位姿的置信度。

5.实验验证

7—scenes:

在这里插入图片描述
在这里插入图片描述

户外数据集:cambridge

在这里插入图片描述

和AC差不多,超越PoseNet2

作者认为没有显著超越AC的原因是在特征点密集的场景中,需要更深的回归树来进行分类。、

在重复结构、遮挡、运动场景、动态环境下性能更好。

### 坐标回归算法的实现方法 坐标轴下降法(Coordinate Descent)是一种用于优化目标函数的有效数值方法,尤其适用于高维稀疏数据场景下的凸优化问题。以下是关于坐标轴下降法的具体概念及其在 Lasso 回归中的应用。 #### 1. **基本原理** 坐标轴下降法的核心思想是对目标函数逐个变量进行最小化操作,而不是同时更新所有变量。这种方法通过固定其他变量不变,仅针对当前选定的一个变量调整其取值,从而逐步逼近最优解[^2]。 #### 2. **具体实现步骤** 对于 Lasso 回归的目标函数 \( J(\beta) \),可以表示为: \[ J(\beta) = \|y - X\beta\|_2^2 + \lambda \|\beta\|_1 \] 其中: - \( y \in \mathbb{R}^{n} \) 是响应向量, - \( X \in \mathbb{R}^{n \times p} \) 是设计矩阵, - \( \beta \in \mathbb{R}^{p} \) 是待估计的系数向量, - \( \lambda > 0 \) 是正则化参数。 为了简化计算,可以通过标准化输入特征使每列均值为零、标准差为一。接着按照以下方式逐一更新每个维度上的参数 \( \beta_j \): ```python import numpy as np def coordinate_descent(X, y, lambda_reg, max_iter=1000, tol=1e-4): n_samples, n_features = X.shape beta = np.zeros(n_features) for _ in range(max_iter): beta_old = beta.copy() for j in range(n_features): # 计算残差 residual = y - X @ beta + X[:, j] * beta[j] # 更新第j个分量 z_j = np.dot(X[:, j], X[:, j]) r_j = np.dot(residual, X[:, j]) if r_j < -lambda_reg / 2: beta[j] = (r_j + lambda_reg / 2) / z_j elif r_j > lambda_reg / 2: beta[j] = (r_j - lambda_reg / 2) / z_j else: beta[j] = 0 # 收敛条件判断 if np.linalg.norm(beta - beta_old) < tol: break return beta ``` 上述代码实现了基于坐标轴下降法的 Lasso 参数估计过程[^1]。 #### 3. **注意事项** 尽管不同实现可能采用不同的策略处理细节问题,比如某些情况下会先将真实标签映射到某种形式再比较差异,或者反过来把预测结果转换回去后再评估误差大小[^3];但从本质上讲,这些做法并不改变整体思路——即始终围绕着如何高效找到满足约束条件下使得损失尽可能小的一组权重值展开讨论。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值