【VSLAM面试】必备基础知识2-最小二乘问题求解,基础矩阵、本质矩阵和单应矩阵,矩阵分解(求解 A x = b Ax = b Ax=b)
最小二乘问题求解——求解b在A的列向量空间中的投影
名称 | 目标函数的一般形式 | m i n F ( x ) = ∣ ∣ 1 2 f ( x ) ∣ ∣ 2 \mathbf{minF(x)=\left|\right|\frac{1}{2}{{f(x)}}\left|\right|^{2}} minF(x)=∣∣21f(x)∣∣2, F ( x ) F(x) F(x)是 f ( x ) f(x) f(x)二范数的平方 |
简单情况——解析解 | f ( x ) f(x) f(x)形式简单的情况,如线性函数,可以直接求解析解,令: d F / d x = 0 dF/dx = 0 dF/dx=0 | |
复杂情况——迭代求解 | 非线性复杂情况,导数形式复杂,解析解求解困难:迭代求解,寻找下降增量 △ x {\bigtriangleup x} △x | |
问题转换 | 解析法:求解析解 d F / d x = 0 dF/dx = 0 dF/dx=0→非线性最小二乘问题 | 迭代法:寻找下降增量 △ x {\bigtriangleup x} △x |
非线性最小二乘迭代求解步骤 | 1.确定求解的目标函数,及迭代初始值 x 0 x_0 x0 2.对第 k k k次迭代,根据当前下降梯度,寻找增量 △ x {\bigtriangleup x} △x,使目标函数达到最小值 3.若 △ x {\bigtriangleup x} △x足够小,停止迭代,否则令 x k + 1 = x k + △ x k x_{k+1} = x_{k}+{\bigtriangleup x}_{k} xk+1=xk+△xk,返回第二步 | |
迭代方法:一阶二阶梯度法、高斯牛顿法、L-M法 | 非线性优化问题求解的前提是需要提供良好的初值,否则容易陷入局部最小值(在SLAM中,常用 I C P , P n P ICP,PnP ICP,PnP等算法提供初始优化值) | |
∙ \bullet ∙ F ( x ) F(x) F(x)泰勒展开 | F ( x ) = ∣ ∣ f ( x + △ x ) ∣ ∣ 2 2 ≈ ∣ ∣ f ( x ) ∣ ∣ 2 2 + J ( x ) △ x + 1 2 △ x T H △ x F(x)=\left|\right|{{f(x+ {\bigtriangleup x} )}}\left|\right|^{2}_{2} \approx \left|\right|{{f(x)}}\left|\right|^{2}_{2} + J(x){\bigtriangleup x} + \frac{1}{2}{\bigtriangleup x}^{T}H{\bigtriangleup x} F(x)=∣∣f(x+△x)∣∣22≈∣∣f(x)∣∣22+J(x)△x+21△xTH△x | |
∙ \bullet ∙ f ( x ) f(x) f(x)泰勒展开 | f ( x + △ x ) ≈ f ( x ) + J ( x ) △ x f(x+ {\bigtriangleup x})\approx f(x) + J(x){\bigtriangleup x} f(x+△x)≈f(x)+J(x)△x |
名称 | 一阶梯度法/ 最速下降法 | 二阶梯度法/ 牛顿法 | 高斯牛顿法 | L-M法 | Dog-Leg法 |
主要思想 | 一阶泰勒展开(沿负梯度方向下降) | 二阶泰勒展开,并对 Δ x \Delta x Δx求导 | 将 f ( x ) f(x) f(x)进行一阶泰勒展开, H H H矩阵近似计算 J J T JJ^T JJT | 在 △ x {\bigtriangleup x} △x附近,添加信赖区域(二阶近似有效性),根据近似性,适当放大或缩小近似范围 | 通过找到一个合适的步长指导参数的更新方向,以在参数空间中找到更好的解 |
展开方式 | F ( x ) F(x) F(x)泰勒展开 | F ( x ) F(x) F(x)泰勒展开 | f ( x ) f(x) f(x)泰勒展开 | f ( x ) f(x) f(x)泰勒展开 | f ( x ) f(x) f(x)泰勒展开 |
框架 | Line Search | Line Search | Line Search | Trust Region | Trust Region |
增量求解 |
△
x
∗
=
−
J
T
(
x
)
{\bigtriangleup x}^{*}=-J^{T}(x)
△x∗=−JT(x) 通常需要设置步长 | J + H △ x = 0 ⟹ H △ x = − J J+H{\bigtriangleup x}= 0\Longrightarrow H{\bigtriangleup x}=-J J+H△x=0⟹H△x=−J | J ( x ) J T ( x ) △ x ⏟ H ( x ) = − J ( x ) f ( x ) ⏟ g ( x ) \underbrace{J(x){J^{T}(x)}{\bigtriangleup x}}_{H(x)} = \underbrace{-J(x)f(x)}_{g(x)} H(x) J(x)JT(x)△x=g(x) −J(x)f(x) H △ x = g H{\bigtriangleup x}=g H△x=g | ( H + λ D T D ) △ x = g (H+\lambda D^TD){\bigtriangleup x}=g (H+λDTD)△x=g ( H + λ I ) △ x = g (H+\lambda I){\bigtriangleup x}=g (H+λI)△x=g | |
特点 |
∙
\bullet
∙遇到zigzag问题,过于贪婪,容易走出锯齿路线,反而增加了迭代次数 ∙ \bullet ∙计算快 ∙ \bullet ∙收敛慢 |
∙
\bullet
∙需要计算目标函数地
H
H
H矩阵,在问题规模较大时非常困难 ∙ \bullet ∙收敛慢 |
∙
\bullet
∙用
J
T
J
J^TJ
JTJ近似牛顿法中的H矩阵,省去计算H的过程 ∙ \bullet ∙无法保证H矩阵可逆,可能出现 J T J J^TJ JTJ为奇异矩阵或病态矩阵,导致算法不收敛(即展开点的局部近似不像二次函数) ∙ \bullet ∙问题性质较好时使用(比较简单的情况) ∙ \bullet ∙计算方便 | ∙ \bullet ∙增加了H矩阵的正定性,使得 ( H + λ I ) (H+\lambda I) (H+λI)一定可逆 ∙ \bullet ∙ λ \lambda λ较小时,H占主要作用,二次近似较好,L-M方法接近于高斯牛顿法 ∙ \bullet ∙ λ \lambda λ较大时, λ D T D \lambda D^TD λDTD占主要作用,二次近似不够好,L-M法更接近于一阶梯度下降法(最速下降法) ∙ \bullet ∙收敛速度较慢 ∙ \bullet ∙问题接近病态(复杂情况)时使用 ∙ \bullet ∙控制 λ \lambda λ调整收敛结果 | ∙ \bullet ∙在初始阶段更接近于高斯牛顿法的预测步长,因此可以在迭代的早期快速收敛到最优解附近 ∙ \bullet ∙通过信赖区域的大小来控制步长的选择,可以根据问题的特性和需求进行调整,以平衡收敛速度和精确性 |
∙ \bullet ∙ Line Search:先固定搜索⽅向,然后在该⽅向寻找步⻓,以最速下降法和 Gauss-Newton 法为代表 ∙ \bullet ∙Trust Region:先固定搜索区域,再考虑找该区域内的最优点,以 L-M 为代表 ∙ \bullet ∙实际问题中,通常选择 G-N 或 L-M 之⼀作为梯度下降策略 ∙ \bullet ∙Dog-Leg:G-N与最速下降的混合 |
基础矩阵、本质矩阵和单应矩阵
名称 | 自由度 | 公式 | 适用情况 | 求解方法 | 纯旋转情况 |
基础矩阵 F F F | 7 | F = K − T E K − 1 F = \mathbf{K}^{-T}E\mathbf{K}^{-1} F=K−TEK−1 | 空间中的特征点运动估计 | 八点法(五点法) | 纯旋转情况下两视图的对极约束不成立,基础矩阵为0 |
本质矩阵 E E E | 5 | E = t ^ R E = \hat{t}R E=t^R | 空间中的特征点运动估计 | 八点法(五点法) | |
单应矩阵 H H H | 8 | H = ( R − t n T d ) K − 1 H = (R-\frac{t\mathbf{n}^{T}}{d})\mathbf{K}^{-1} H=(R−dtnT)K−1 | 同一平面上的特征点运动估计 | DLT法(4对匹配点) | 纯旋转情况下仍然适用,可以通过单应矩阵H分解出R |
同时估计基础矩阵和单应矩阵,选择重投影误差比较小的作为最终的运动估计矩阵 |
矩阵分解(求解 A x = b Ax = b Ax=b)
名称 | 公式 | 分解描述(将矩阵 A A A分解成不同的形式) | 求解方法 |
QR分解 | A = Q R A=QR A=QR | 一个正交矩阵 Q Q Q和一个上三角矩阵 R R R相乘的形式 | 正交矩阵的逆等于转置,把 A x = b Ax=b Ax=b问题转换为求解 R x = Q − 1 b Rx=Q^{-1}b Rx=Q−1b问题 |
LU分解 | A = L U A = LU A=LU | 一个下三角矩阵 L L L和一个上三角矩阵 U U U相乘的形式 | 高斯消元 |
Chokesly分解 | A = L L T = R T R A = LL^T = R^TR A=LLT=RTR | 一个下三角矩阵 L L L和其转置 L T L^T LT相乘的形式 | 将问题转换为 L y = b Ly=b Ly=b和 L T x = y L^Tx=y LTx=y两个子线性方程进行分步求解,LLT分解要求 A A A是对称正定矩阵,其改进版本LDLT分解要求A矩阵可以是对称半正定矩阵; 半正定矩阵:设 A A A为 n n n阶方阵, A ∈ R n × n A \in R^{n\times n} A∈Rn×n,如果对于任意的非零向量 z ∈ R n z \in R^n z∈Rn,都有 z T A z ≥ 0 z^TAz\geq 0 zTAz≥0,则称 A A A为半正定矩阵,如果严格 z T A z > 0 z^TAz > 0 zTAz>0,则称 A A A为正定矩阵。 |
SVD分解 | A = U Σ V T A = UΣV^T A=UΣVT | 两个正交矩阵 U U U和 V V V和一个非负对角矩阵 Σ Σ Σ相乘的形式 | 利用正交矩阵的逆等于转置,实现快速求解 |
∙ \bullet ∙从速度上来看,Cholesky分解方法速度是最快的,并且精度较好,但其要求矩阵A是对称正定的 ∙ \bullet ∙精度最好最稳定的是SVD分解法,但求解速度慢 ∙ \bullet ∙LU分解和QR分解速度和精确性居中,但其要求矩阵A是满秩的 |