网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
F§
F§中最接近
f
(
q
i
)
f(q_i)
f(qi)的
f
(
p
j
)
f(p_j)
f(pj),即
arg
min
p
j
∈
P
∥
f
(
p
j
)
−
f
(
q
i
)
∥
2
2
\arg\min_{p_j\in P}{\Vert f(p_j)-f(q_i)\Vert_2^2}
argpj∈Pmin∥f(pj)−f(qi)∥22
\qquad
以上即是FGR特征匹配的基本思想了。需要知悉的是,整个点云配准过程,FPFH的匹配只会操作一次,这便是FGR相比其他Robust Point Cloud Registration快的原因,然而这个操作其实也占用了FGR大部分的运行时间。
1.2. 两个校验
\qquad
接下来进入FGR的核心部分——outlier rejection。由于特征匹配存在较多的outlier (如下图红色连线所示)。对于correspondence-based 方法而言,这些outlier会对最后的SVD过程造成干扰,因而FGR的目的就是滤除这些红色的错误匹配。
本图摘自论文(Graduated Non-Convexity for Robust Spatial Perception: From Non-Minimal Solvers to Global Outlier Rejection)
\qquad
FGR的第一校验是双向校验(dual validation),在大多数特征匹配方法里还是比较常见的。记1.1节得到的匹配好的特征为
K
1
=
{
(
p
t
1
,
q
1
)
,
(
p
t
2
,
q
2
)
,
.
.
.
,
(
p
t
n
,
q
n
)
}
K_1=\lbrace(p_{t_1},q_1),(p_{t_2},q_2),…,(p_{t_n},q_n)\rbrace
K1={(pt1,q1),(pt2,q2),…,(ptn,qn)},(n应该等于点云
Q
Q
Q的点数),对于
K
1
K_1
K1中的每个特征对
(
p
t
i
,
q
i
)
(p_{t_i},q_i)
(pti,qi),寻找
q
i
∗
=
arg
min
q
k
∈
Q
∥
p
t
i
−
q
k
∥
2
2
q_i^*=\arg\min_{q_k\in Q}{\Vert p_{t_i}-q_k \Vert_2^2}
qi∗=argqk∈Qmin∥pti−qk∥22
若
q
i
∗
≠
q
i
q_i^*\neq q_i
qi∗=qi,则排除这个点云对。
\qquad
第一校验筛选完之后的点云对记为
K
2
K_2
K2。
\qquad
第二校验是距离差校验,选取
K
2
K_2
K2中任意三个点云对
(
p
1
,
p
2
,
p
3
)
(p_1,p_2,p_3)
(p1,p2,p3)和
(
q
1
,
q
2
,
q
3
)
(q_1,q_2,q_3)
(q1,q2,q3),它们需要满足如下的不等式:
∀
i
≠
j
,
0.9
<
∥
p
i
−
p
j
∥
∥
q
i
−
q
j
∥
<
1
0.9
\forall i\neq j,\quad 0.9<\frac{\Vert p_i-p_j \Vert}{\Vert q_i-q_j \Vert}<\frac{1}{0.9}
∀i=j,0.9<∥qi−qj∥∥pi−pj∥<0.91
若不满足,则排除
(
p
1
,
q
1
)
,
(
p
2
,
q
2
)
,
(
p
3
,
q
3
)
(p_1,q_1),(p_2,q_2),(p_3,q_3)
(p1,q1),(p2,q2),(p3,q3)三对点。以此得到
K
3
K_3
K3。
\qquad
如果是理想情况,应该满足
∥
p
i
−
p
j
∥
∥
q
i
−
q
j
∥
=
1
\frac{\Vert p_i-p_j \Vert}{\Vert q_i-q_j \Vert}=1
∥qi−qj∥∥pi−pj∥=1,FGR通过一个距离范围排除那些明显不符合距离检验的点,但需要注意的是,这个检验并不是始终有效的。TEASER那篇论文就证明,当outlier ratio特别大时,距离检验也失效了,原因可能是
K
2
K_2
K2中每三组对应点中都包含outlier,导致选不出几组正确的点。
1.3. 鲁棒函数与BR对偶
\qquad
这可能是FGR论文最难懂也是最核心的部分。在完成了一次匹配和两轮校验之后,FGR需要通过Gradually Non-Convexity(GNC,渐进非凸过程)的方式完成outlier rejection。经典ICP在已完成特征匹配后的目标函数是
arg
min
T
∈
S
E
(
3
)
∑
(
p
,
q
)
∈
K
∥
q
−
T
p
∥
\arg\min_{T\in SE(3)}{\sum_{(p,q)\in K}}{\Vert q-\textbf{T}p\Vert}
argT∈SE(3)min(p,q)∈K∑∥q−Tp∥
其中
K
K
K是matched feature的集合,在FGR中指的是
K
3
K_3
K3。
\qquad
然而最小二乘的函数对于outlier非常敏感,即使经过两轮校验,仍然会存在大量的outlier。
\qquad
FGR的目标函数是鲁棒函数Geman-McClure,即
ρ
=
μ
x
2
μ
x
2
\rho=\frac{\mu x2}{\mu+x2}
ρ=μ+x2μx2,即
arg
min
T
∈
S
E
(
3
)
∑
(
p
,
q
)
∈
K
ρ
(
∥
q
−
T
p
∥
)
\arg\min_{T\in SE(3)}{\sum_{(p,q)\in K}}{\rho(\Vert q-\textbf{T}p\Vert)}
argT∈SE(3)min(p,q)∈K∑ρ(∥q−Tp∥)
对于鲁棒函数的使用,FGR原文是这样解释的:
使用适当的鲁棒惩罚函数是至关重要的,因为目标函数中很多匹配约束都是伪约束。为了实现高计算效率,我们不希望在优化过程中采样、验证、修剪或重新计算关联。一个精心选择的估计器ρ将自动执行验证和剪枝,而不施加额外的计算成本。
说的直白一些,鲁棒函数可以在不改变匹配对集合
K
K
K的情况下,使得最优解
T
∗
T^*
T∗自然地满足内点优先匹配的原则。其中的原因其实是由鲁棒函数非凸性造成的。对于outlier具有较高的、较为统一的损失,对于inlier具有较低的损失。
\qquad
FGR使用的Geman-McClure是一个经典的GNC函数,随着
μ
\mu
μ的减小,越来越接近于非凸函数,而当
μ
→
∞
\mu \rightarrow \infty
μ→∞时,等价于
x
2
x^2
x2,即理想凸函数。为什么要使用GNC而不直接采用一个鲁棒函数(如Huber Loss)优化呢?因为一开始得到的T可能是个非常错误的值,就会造成
∑
(
p
,
q
)
∈
K
ρ
(
∥
q
−
T
p
∥
)
\sum_{(p,q)\in K}{\rho(\Vert q-\textbf{T}p\Vert)}
(p,q)∈K∑ρ(∥q−Tp∥)也是个错误的函数,因此需要逐步降低函数
ρ
\rho
ρ的凸性逐步逼近正确的T。
\qquad
承接上文,FGR为了不增加额外的计算量(其实主要是不重新计算correspondence),采用了BR对偶的方式完成鲁棒函数的优化求解。
\qquad
其做法就是增加额外的线性过程
L
\mathcal{L}
L,构造目标函数
E
(
T
,
L
)
E(\textbf{T},\mathcal{L})
E(T,L),并通过对
L
\mathcal{L}
L和
T
\textbf{T}
T交替优化的方式完成的推导过程及优化求解。相关截图如下:
这一套操作对于非专业人士确实非常不友好,文中的解释也只是a prior(一个先验知识),实际上它牵涉到BR对偶性的知识,想完全看懂FGR的读者务必得往下看。
1.4.1. Black-Rangarjan Duality (BR对偶性)
\qquad
这是构造鲁棒函数和线性过程关联性的非常有名的方法,用于解决early-vision(例如平面重建、三维重建、图像恢复)滤除outlier的问题。这篇20世纪论文的引用量高达900+,足以证明它完全没有过时。
\qquad
原文的理论对于非数学专业的同学可能非常难懂,本文只讲解它当中最重要的部分——定理和鲁棒函数的构造方法。定理如下:
图片源于:https://arxiv.org/pdf/1909.08605?ref=https://githubhelp.com
\qquad
这条定理说的是给定一个鲁棒函数
ρ
\rho
ρ,定义
ϕ
(
z
)
=
ρ
(
z
)
\phi(z)=\rho(\sqrt{z})
ϕ(z)=ρ(z
),若
ϕ
(
z
)
\phi(z)
ϕ(z)满足一定的条件,则可以将原鲁棒函数优化的问题转化为定理中的weighted process的等价形式。而这个新的二元函数的优化过程详见1.4.3节。
本文并不会证明这条定理,但需要读者知悉以下几点:
- ϕ
(
⋅
)
\phi(\cdot)
ϕ(⋅)和鲁棒函数
ρ
(
⋅
)
\rho(\cdot)
ρ(⋅)的关系
2. 等价命题的形式(
ϕ
(
⋅
)
\phi(\cdot)
ϕ(⋅)需满足的条件)
3. 等价命题
Φ
ρ
(
⋅
)
\Phi_\rho(\cdot)
Φρ(⋅)的含义(关于
w
i
w_i
wi的惩罚项)
最难理解的是
Φ
ρ
\Phi_\rho
Φρ的构造过程,下面将会给出FGR中选取
Φ
ρ
\Phi_\rho
Φρ(详见1.4节)的推导过程。
1.4.2.Derivation of
Φ
ρ
\Phi_\rho
Φρ
Black-Rangarjan 对偶性原文给出寻找的close-form的
Φ
ρ
\Phi_\rho
Φρ的算法步骤如下:
实际上,大部分论文都将
τ
\tau
τ默认为1处理。FGR中给出的形式为
这里的
l
p
,
q
l_{\text{p},\text{q}}
lp,q对应原文中的
z
z
z,
ρ
(
x
)
=
μ
x
2
μ
x
2
\rho(x)=\frac{\mu x2}{\mu+x2}
ρ(x)=μ+x2μx2
根据
ϕ
(
⋅
)
\phi(\cdot)
ϕ(⋅)与
ρ
(
⋅
)
\rho(\cdot)
ρ(⋅)的关系
ϕ
(
z
)
=
ρ
(
x
2
)
=
μ
z
μ
z
(
z
≥
0
)
\phi(z)=\rho(\sqrt{x^2})=\frac{\mu z}{\mu + z} \quad (z\geq 0)
ϕ(z)=ρ(x2
)=μ+zμz(z≥0)
ϕ
(
z
)
\phi(z)
ϕ(z)需要满足Black-Rangarajan对偶性的三个条件,即
{
lim
x
←
0
ϕ
′
(
x
)
=
lim
x
←
0
μ
2
(
μ
x
)
2
=
1
lim
x
←
∞
ϕ
′
(
x
)
=
lim
x
←
∞
μ
2
(
μ
x
)
2
=
0
ϕ
′
′
(
x
)
=
−
2
μ
2
(
μ
x
)
3
<
0
\begin{cases} & \lim_{x \leftarrow 0}\phi’(x)=\lim_{x\leftarrow 0}\frac{\mu2}{(\mu+x)2}=1 \[2ex] & \lim_{x \leftarrow \infin}\phi’(x)=\lim_{x \leftarrow \infin}\frac{\mu2}{(\mu+x)2}=0 \[2ex] & \phi’'(x)=-\frac{2\mu2}{(\mu+x)3}<0 \end{cases}
⎩
⎨
⎧limx←0ϕ′(x)=limx←0(μ+x)2μ2=1limx←∞ϕ′(x)=limx←∞(μ+x)2μ2=0ϕ′′(x)=−(μ+x)32μ2<0
根据上述推导,显然
ϕ
(
⋅
)
\phi(\cdot)
ϕ(⋅)都满足了,接下来需要根据Black-Rangarajan原文中提供的方法解出
Φ
ρ
\Phi_\rho
Φρ。
首先,
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
ρ(⋅)的关系
ϕ
(
z
)
=
ρ
(
x
2
)
=
μ
z
μ
z
(
z
≥
0
)
\phi(z)=\rho(\sqrt{x^2})=\frac{\mu z}{\mu + z} \quad (z\geq 0)
ϕ(z)=ρ(x2
)=μ+zμz(z≥0)
ϕ
(
z
)
\phi(z)
ϕ(z)需要满足Black-Rangarajan对偶性的三个条件,即
{
lim
x
←
0
ϕ
′
(
x
)
=
lim
x
←
0
μ
2
(
μ
x
)
2
=
1
lim
x
←
∞
ϕ
′
(
x
)
=
lim
x
←
∞
μ
2
(
μ
x
)
2
=
0
ϕ
′
′
(
x
)
=
−
2
μ
2
(
μ
x
)
3
<
0
\begin{cases} & \lim_{x \leftarrow 0}\phi’(x)=\lim_{x\leftarrow 0}\frac{\mu2}{(\mu+x)2}=1 \[2ex] & \lim_{x \leftarrow \infin}\phi’(x)=\lim_{x \leftarrow \infin}\frac{\mu2}{(\mu+x)2}=0 \[2ex] & \phi’'(x)=-\frac{2\mu2}{(\mu+x)3}<0 \end{cases}
⎩
⎨
⎧limx←0ϕ′(x)=limx←0(μ+x)2μ2=1limx←∞ϕ′(x)=limx←∞(μ+x)2μ2=0ϕ′′(x)=−(μ+x)32μ2<0
根据上述推导,显然
ϕ
(
⋅
)
\phi(\cdot)
ϕ(⋅)都满足了,接下来需要根据Black-Rangarajan原文中提供的方法解出
Φ
ρ
\Phi_\rho
Φρ。
首先,
[外链图片转存中…(img-ZV1ug0oM-1715745180161)]
[外链图片转存中…(img-dtAaoW0w-1715745180161)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新