Generalized-ICP(GICP)論文研讀

时间:2025-04-05 13:39:03

Generalized-ICP論文研讀

  • 前言
  • 損失函數推導
  • 應用
    • point-to-point
    • point-to-plane
    • plane-to-plane

前言

ICP最基本的形式是point-to-point,即以點到點之間的距離作為損失函數;它的一個變種是point-to-plane,改用點到目標點局部擬合平面的距離作為損失函數。

本篇介紹的GICP是上述兩者的generalization,它重新定義了自己的損失函數。point-to-point,point-to-plane,甚至plane-to-plane都可以用GICP這個統一的框架表達。

從後文可以看到,GICP是在最小化的步驟中加入了一個機率模型。
但要注意的是,它使用的配對估計方式仍是點對在歐式空間中的距離,而非基於機率的距離度量方式。

本篇僅關注論文的第III章,並補全論文中省略的公式推導。

損失函數推導

假設我們有兩配對好的點雲 A = { a i } i = 1 , 2 , . . . N A = \{a_i\}_{i=1,2,...N} A={ai}i=1,2,...N B = { b i } i = 1 , 2 , . . . N B = \{b_i\}_{i=1,2,...N} B={bi}i=1,2,...N,其中 a i a_i ai b i b_i bi兩兩配對。

GICP論文中做了一個假設,即 A , B A,B A,B兩點雲是分別由底層的點雲 A ^ = { a i ^ } \hat{A} = \{\hat{a_i}\} A^={ai^} B ^ = { b i ^ } \hat{B} = \{\hat{b_i}\} B^={bi^}依照高斯機率模型 a i ∼ N ( a i ^ , C i A ) a_i \sim \mathcal{N}(\hat{a_i},C_i^A) aiN(ai^,CiA) b i ∼ N ( b i ^ , C i B ) b_i \sim \mathcal{N}(\hat{b_i},C_i^B) biN(bi^,CiB)採樣而來。

T ∗ \bold{T}^* T(注意有上標 ∗ ^* )是底層兩點雲真實的轉換關係: b i ^ = T ∗ a i ^ \hat{b_i} = \bold{T}^*\hat{a_i} bi^=Tai^。我們需要一個目標函數才能使用優化方法尋找最佳的 T ∗ \bold{T}^* T,以下就是目標函數推導的過程。

首先定義 d i ( T ) d_i^{(\bold{T})} di(T)如下,即對原始點雲使用 T \bold{T} T做轉換後,第 i i i個點對的有向距離:

d i ( T ) ≜ b i − T a i , ∀  rigid transformation  T d_i^{(\bold{T})} \triangleq b_i-\bold{T}a_i, \forall \text{ rigid transformation } \bold{T} di(T)biTai, rigid transformation T

它是由以下分布採樣而來:

d i ( T ) ∼ N ( b i ^ , C i B ) − T N ( a i ^ , C i A ) = N ( b i ^ − T a i ^ , C i B + ( T ) C i A ( T ) T ) \begin{aligned}d_i^{(\bold{T})} &\sim \mathcal{N}(\hat{b_i},C_i^B) - \bold{T}\mathcal{N}(\hat{a_i},C_i^A) \\&= \mathcal{N}(\hat{b_i} - \bold{T}\hat{a_i}, C_i^B+(\bold{T})C_i^A(\bold{T})^T)\end{aligned} di(T)N(bi^,CiB)TN(ai^,CiA)=N(bi^Tai^,CiB+(T)CiA(T)T)

其中等號參考兩獨立高斯隨機變數之和

如果將 T \bold{T} T替換成 T ∗ \bold{T}^* T,則有以下關係:

d i ( T ∗ ) ∼ N ( b i ^ , C i B ) − T ∗ N ( a i ^ , C i A ) = N ( b i ^ − ( T ∗ ) a i ^ , C i B + ( T ∗ ) C i A ( T ∗ ) T ) = N ( 0 , C i B + ( T ∗ ) C i A ( T ∗ ) T ) \begin{aligned}d_i^{(\bold{T}^*)} &\sim \mathcal{N}(\hat{b_i},C_i^B) - \bold{T}^*\mathcal{N}(\hat{a_i},C_i^A) \\&= \mathcal{N}(\hat{b_i} - (\bold{T}^*)\hat{a_i}, C_i^B+(\bold{T}^*)C_i^A(\bold{T}^*)^T)\\ &= \mathcal{N}(0, C_i^B+(\bold{T}^*)C_i^A(\bold{T}^*)^T)\end{aligned} di(T)N(bi^,CiB)TN(ai^,CiA)=N(bi^(T)ai^,CiB+(T)CiA(T)T)=N(0,CiB+(T)CiA(T)T)

使用MLE最大似然估計,尋找一個使得當前樣本 d i d_i di出現概率最大的 T \bold{T} T

T = arg max ⁡ T ∏ i p ( d i ( T ) ) = arg max ⁡ T ∑ i log ⁡ ( p ( d i ( T ) ) ) 取log = arg max ⁡ T ∑ i log ⁡ ( 1 ( 2 π ) k ∣ C i B + T C i A T T ∣ ) − 1 2 ( d i ( T ) − ( b i ^ − T a i ^ ) ) T ( C i B + T C i A T T ) − 1 ( d i ( T ) − ( b i ^ − T a i ^ ) ) 見註一 = arg max ⁡ T ∑ i log ⁡ ( 1 ( 2 π ) k ∣ C i B + T C i A T T ∣ ) − 1 2 d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) 見註二 = arg max ⁡ T ∑ i − 1 2 d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) 見註三 = arg min ⁡ T ∑ i 1 2 d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) = arg min ⁡ T ∑ i d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) \begin{aligned}\bold{T} &= \argmax\limits_\bold{T} \prod\limits_ip(d_i^{(\bold{T})}) \\&= \argmax\limits_\bold{T} \sum\limits_i\log (p(d_i^{(\bold{T})})) && \text{取log} \\&= \argmax\limits_\bold{T} \sum\limits_i\log (\frac{1}{\sqrt{(2\pi)^k|C_i^B+\bold{T}C_i^A\bold{T}^T|}}) \\&-\frac{1}{2}(d_i^{(\bold{T})}-(\hat{b_i} - \bold{T}\hat{a_i}))^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}(d_i^{(\bold{T})}-(\hat{b_i} - \bold{T}\hat{a_i}))&& \text{見註一} \\&= \argmax\limits_\bold{T} \sum\limits_i\log (\frac{1}{\sqrt{(2\pi)^k|C_i^B+\bold{T}C_i^A\bold{T}^T|}}) \\&-\frac{1}{2}{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})}&& \text{見註二} \\&=\argmax\limits_\bold{T}\sum\limits_i-\frac{1}{2}{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})}&& \text{見註三} \\&= \argmin\limits_\bold{T}\sum\limits_i\frac{1}{2}{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})} \\&= \argmin\limits_\bold{T}\sum\limits_i{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})} \end{aligned} T=Targmaxip(di(T))=Targmaxilog(p(di(T)))=Targmaxilog((2π)kCiB+TCiATT 1)21(di(T)(bi^Tai^))T(CiB+TCiATT)1(di(T)(bi^Tai^))=Targmaxilog((2π)kCiB+TCiATT 1)21di(T)T(CiB+TCiATT)1di(T)=Targmaxi21di(T)T(CiB+TCiATT)1di(T)=Targmini21di(T)T(CiB+TCiATT)1di(T)=Targminidi(T)T(CiB+TCiATT)1di(T)log見註一見註二見註三

最後可以得到論文中的公式(2):

T = arg min ⁡ T ∑ d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) \bold{T} = \argmin\limits_\bold{T} \sum\limits {d_i^{(\bold{T})}}^T (C_i^B + \bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})} T=Targmindi(T)T(CiB+TCiATT)1di(T)

註一:
參考Multivariate normal distribution,對於多元常態分布 X ∼ N ( μ , Σ ) \textbf{X} \sim \mathcal{N}(\mu, \Sigma) XN(μ,Σ),其機率密度函數(pdf)的公式如下:
f x ( x 1 , . . . , x k ) = 1 ( 2 π ) k ∣ Σ ∣ e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) , ∣ Σ ∣ ≜ det Σ f_x(x_1, ..., x_k) = \frac{1}{\sqrt{(2\pi)^k|\Sigma|}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}, |\Sigma| \triangleq \textbf{det} \Sigma fx(x1,...,xk)=(2π)kΣ 1e21(xμ)TΣ1(xμ),ΣdetΣ

對它取 log ⁡ \log log可以得到:

log ⁡ ( f x ( x 1 , . . . , x k ) ) = log ⁡ ( 1 ( 2 π ) k ∣ Σ ∣ e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) = log ⁡ ( 1 ( 2 π ) k ∣ Σ ∣ ) + log ⁡ ( e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) = log ⁡ ( 1 ( 2 π ) k ∣ Σ ∣ ) − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) \begin{aligned} \log (f_x(x_1, ..., x_k)) &= \log (\frac{1}{\sqrt{(2\pi)^k|\Sigma|}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}) \\&= \log (\frac{1}{\sqrt{(2\pi)^k|\Sigma|}}) + \log(e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}) \\&= \log (\frac{1}{\sqrt{(2\pi)^k|\Sigma|}}) -\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu) \end{aligned} log(fx(x1,...,xk))=log((2π)kΣ 1e21(xμ)TΣ1(xμ))=log((2π)kΣ 1)+log(e21(xμ)TΣ1(xμ))=log((2π)kΣ 1)21(xμ)TΣ1(xμ)

代入 d i ( T ) ∼ N ( b i ^ − T a i ^ , C i B + T C i A T T ) d_i^{(\bold{T})} \sim \mathcal{N}(\hat{b_i} - \bold{T}\hat{a_i}, C_i^B+\bold{T}C_i^A\bold{T}^T) di(T)N(bi^Tai^,CiB+TCiATT),得:

log ⁡ ( p ( d i ( T ) ) ) = log ⁡ ( 1 ( 2 π ) k ∣ C i B + T C i A T T ∣ ) − 1 2 ( d i ( T ) − ( b i ^ − T a i ^ ) ) T ( C i B + T C i A T T ) − 1 ( d i ( T ) − ( b i ^ − T a i ^ ) ) = log ⁡ ( 1 ( 2 π ) k ∣ C i B + T C i A T T ∣ ) − 1 2 d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) \begin{aligned}\log (p(d_i^{(\bold{T})})) &= \log (\frac{1}{\sqrt{(2\pi)^k|C_i^B+\bold{T}C_i^A\bold{T}^T|}}) \\&-\frac{1}{2}(d_i^{(\bold{T})}-(\hat{b_i} - \bold{T}\hat{a_i}))^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}(d_i^{(\bold{T})}-(\hat{b_i} - \bold{T}\hat{a_i})) \\&= \log (\frac{1}{\sqrt{(2\pi)^k|C_i^B+\bold{T}C_i^A\bold{T}^T|}}) \\&-\frac{1}{2}{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})}\end{aligned} log(p(di(T)))=log((2π)kCiB+TCiATT 1)21(di(T)(bi^Tai^))T(CiB+TCiATT)1(di(T)(bi^Tai^))=log((2π)kCiB+TCiATT 1)21di(T)T(CiB+TCiATT)1di(T)

註二:
T = T ∗ \bold{T}=\bold{T}^* T=T的情況下 b i ^ − ( T ∗ ) a i ^ = 0 \hat{b_i} - (\bold{T}^*)\hat{a_i} =0 bi^(T)ai^=0,但是可以這樣假設?

註三:
旋轉矩陣判別式為1,平移矩陣判別式為1。又因為 T \bold{T} T是旋轉平移矩陣,可以拆成旋轉矩陣與平移矩陣的乘積,且 det ( A B ) = det ( A ) det ( B ) \textbf{det}(AB) = \textbf{det}(A)\textbf{det}(B) det(AB)=det(A)det(B),所以有 det ( T ) = 1 \textbf{det}(\bold{T}) = 1 det(T)=1,因此 det ( T C i A T T ) = det ( C i A ) \textbf{det}(\bold{T}C_i^A\bold{T}^T)=\textbf{det}(C_i^A) det(TCiATT)=det(CiA)
但是 ∣ C i B + T C i A T T ∣ ≠ ∣ C i B ∣ + ∣ T C i A T T ∣ |C_i^B+\bold{T}C_i^A\bold{T}^T| \neq |C_i^B|+|\bold{T}C_i^A\bold{T}^T| CiB+TCiATT=CiB+TCiATT,有辦法推出第一項和 T \bold{T} T無關?可參考Expressing the determinant of a sum of two matrices?

或照視覺十四講所說,如果是對 d i d_i di做優化,第一項就變為常數,可以忽略。但是此處是對 T T T做優化,可以套用這個理論?

應用

GICP統一了point-to-point和point-to-plane,甚至還納入了plane-to-plane。這幾種變形的差別在於共變異數矩陣 C i A , C i B C_i^A,C_i^B CiA,CiB的選取。

point-to-point

傳統點到點的ICP可以用GICP的框架表示如下:
C i B = I , C i A = 0 C_i^B=I, C_i^A=0 CiB=I,CiA=0

驗證:
T = arg min ⁡ T ∑ d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) = arg min ⁡ T ∑ d i ( T ) T d i ( T ) = arg min ⁡ T ∑ ∥ d i ( T ) ∥ 2 \begin{aligned}\bold{T} &= \argmin\limits_\bold{T} \sum\limits {d_i^{(\bold{T})}}^T (C_i^B + \bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})} \\ &= \argmin\limits_\bold{T} \sum\limits {d_i^{(\bold{T})}}^T d_i^{(\bold{T})} \\ &= \argmin\limits_\bold{T} \sum\limits {\|d_i^{(\bold{T})}\|^2}\end{aligned} T=Targmindi(T)T(CiB+TCiATT)1di(T)=Targmindi(T)Tdi(T)=Targmindi(T)2

可以看出其目標為最小化點對間距離平方之和,也就是點到點ICP的更新公式。

point-to-plane

首先定義一個為正交投影矩陣 P i \bold{P_i} Pi,有以下性質: P i = P i 2 = P i T \bold{P_i} = \bold{P_i}^2 = \bold{P_i} ^T Pi=Pi2=PiT
P i \bold{P_i} Pi會將向量投影到目標點雲中第 i i i b i b_i bi法向量的span上,因此 P i ⋅ d i ( T ) \bold{P_i}\cdot d_i^{(\bold{T})} Pidi(T)也就是轉換後的 a i a_i ai b i b_i bi所在平面的距離。

point-to-plane ICP的更新公式可以表示如下:

T = arg min ⁡ T { ∑ i ∥ P i ⋅ d i ( T ) ∥ 2 } = arg min ⁡ T { ∑ i ( P i ⋅ d i ( T ) ) T ( P i ⋅ d i ( T ) ) } = arg min ⁡ T { ∑ i d i ( T ) T ⋅ P i 2 ⋅ d i ( T ) } = arg min ⁡ T { ∑ i d i ( T ) T ⋅ P i ⋅ d i ( T ) } \begin{aligned}\bold{T} &=\argmin\limits_\bold{T} \{\sum\limits_i \|\bold{P_i} \cdot d_i^{(\bold{T})}\|^2\} \\&= \argmin\limits_\bold{T} \{\sum\limits_i (\bold{P_i} \cdot d_i^{(\bold{T})})^T(\bold{P_i} \cdot d_i^{(\bold{T})})\} \\&= \argmin\limits_\bold{T} \{\sum\limits_i{d_i^{(\bold{T})}}^T \cdot \bold{P_i}^2 \cdot d_i^{(\bold{T})}\} \\&= \argmin\limits_\bold{T} \{\sum\limits_i{d_i^{(\bold{T})}}^T \cdot \bold{P_i} \cdot d_i^{(\bold{T})}\}\end{aligned} T=Targmin{iPidi(T)2}=Targmin{i(Pidi(T))T(Pidi(T))}=Targmin{idi(T)TPi2di(T)}=Targmin{idi(T)TPidi(T)}

與GICP的公式相比較,可以發現以下關係:

C i B = P i − 1 , C i A = 0 C_i^B=\bold{P_i}^{-1}, C_i^A=0 CiB=Pi1,CiA=0

Note: P i \bold{P_i} Pi需要被近似?待補

plane-to-plane

可以把真實世界中的物體看作是分段線性的,而相機在對物體進行掃描時,是對該物體做採樣。可以想見,從不同角度拍攝物體,相機所採樣的點不一定相同。採樣點在局部擬合平面方向上的不確定性較大,在法向量方向上的不確定性較小。

假設局部擬合平面上某一點的法向量是x軸方向,那麼點的共變異數矩陣可以表示為:

[ ϵ 0 0 0 1 0 0 0 1 ] \begin{bmatrix}\epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix} ϵ00010001

其中 ϵ \epsilon ϵ是一個極小的數。

因為實際上法向量並不一定是沿x軸方向,所以需要進行座標轉換。
假設 b i b_i bi的法向量為 u i u_i ui a i a_i ai的法向量為 v i v_i vi,那麼它們各自的共變異數矩陣分別為:

C i B = R u i [ ϵ 0 0 0 1 0 0 0 1 ] R u i T C_i^B=\bold{R}_{u_i} \begin{bmatrix}\epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix}\bold{R}_{u_i}^T CiB=Ruiϵ00010001RuiT

C i A = R v i [ ϵ 0 0 0 1 0 0 0 1 ] R v i T C_i^A=\bold{R}_{v_i} \begin{bmatrix}\epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix}\bold{R}_{v_i}^T CiA=Rviϵ00010001RviT

其中 R x \bold{R}_{x} Rx為一將 e 1 e_1 e1轉成 x x x的旋轉矩陣。

為什麼是前後都乘旋轉矩陣呢?套用共變異數矩陣的定義就明白了:

C i B = R u i Cov ⁡ ( X ) R u i T = R u i E ⁡ [ ( X − E ⁡ [ X ] ) ( X − E ⁡ [ X ] ) T ] R u i T = E ⁡ [ ( R u i X − E ⁡ [ R u i X ] ) ( R u i X − E ⁡ [ R u i X ] ) T ] = E ⁡ [ ( U − E ⁡ [ U ] ) ( U − E ⁡ [ U ] ) T ] U ≜ R u i X \begin{aligned}C_i^B&=\bold{R}_{u_i}\operatorname{Cov}(\textbf{X})\bold{R}_{u_i}^T \\&= \bold{R}_{u_i}\operatorname{E}[(\textbf{X}-\operatorname{E}[\textbf{X}])(\textbf{X}-\operatorname{E}[\textbf{X}])^T]\bold{R}_{u_i}^T \\&= \operatorname{E}[(\bold{R}_{u_i}\textbf{X}-\operatorname{E}[\bold{R}_{u_i}\textbf{X}])(\bold{R}_{u_i}\textbf{X}-\operatorname{E}[\bold{R}_{u_i}\textbf{X}])^T] \\ &= \operatorname{E}[(\textbf{U}-\operatorname{E}[\textbf{U}])(\textbf{U}-\operatorname{E}[\textbf{U}])^T] && U \triangleq \bold{R}_{u_i}\textbf{X}\end{aligned} CiB=RuiCov(X)RuiT=RuiE[(XE[X])(XE[X])T]RuiT=E[(RuiXE[RuiX])(RuiXE[RuiX])T]=E[(UE[U])(UE[U])T]URuiX

Cov ⁡ ( X ) = [ ϵ 0 0 0 1 0 0 0 1 ] \operatorname{Cov}(\textbf{X})=\begin{bmatrix}\epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix} Cov(X)=ϵ00010001代表x方向不確定性很小的共變異數矩陣,上式中對不確定性很小的方向做了旋轉( U ≜ R u i X U \triangleq \bold{R}_{u_i}\textbf{X} URuiX),所以 C i B C_i^B CiB是一個在 u i u_i ui方向上不確定性很小的共變異數矩陣。

Note: R R R的取法待補
Q:為何共變異數矩陣對角線上的值是 ϵ , 1 , 1 \epsilon,1,1 ϵ,1,1?有需要做縮放?