[Vision] 3D Object Localization (2)

JeongMin·2024년 4월 18일

ComputerVision

목록 보기
9/9

Algorithm

입력: 포인트클라우드 쌍 (P, Q), (P: 모델, Q: 가진 데이터)

출력: Q를 P로 정렬하는 transformation T

1. P와 Q의 모든점에 대해 normal vector {n_p}, {n_q} 계산;
2. FPFH 특징 계산 F(P), F(Q);
3. K_I, K_II;
4. K_III;
5. T = I, mu = D^2;

while mu > delta^2 do
    Jr = 0, r = 0;

    for (p, q) in K_III do
        6. l_(p,q) 계산;
        7. Jr, r 업데이트;
    end for

    8. T 업데이트;
    4 iteration 마다 mu = mu/2;
end while

Output T

5. T, μ\mu의 초기값 설정

TTII로 초기값을 정하고, μ\mu는 물체의 가장 긴 지름의 제곱을 초기값으로 정한다.

6. lp,ql_{p, q} 계산

Gauss-Newton Method

Least Square

최소 제곱법(Least Square)은 훈련 샘플 (xi,yi)(x_i, y_i)가 주어졌을 때 Error를 다음과 같이 정의하고, Error를 최소화하는 파라미터 p를 찾는것이다.

E(p)=i=1Nri(p)2, ri(p)=yif(xi,p)E(p) = \sum_{i=1}^N ||r_i(p)||^2, \ r_i(p)=y_i-f(x_i, p)

Least Square에서는 E의 최소를 찾아야하기 때문에 E(p)p=0\frac{\partial E(p)}{\partial p}=0을 풀게 되는데, 행렬 형태로 풀게 되면 Hessian이 나오게 됨.

Line Process

Line Process는 노이즈가 낀 3D 포인트 클라우드 데이터에서 물체의 표면을 추정할 때 사용한다.

불연속적 구간을 고려하는 추정을 위한 방법이다.

정답을 uu라고 하고, 측정한 데이터를 dd라고 했을 때, Error function은 다음과 같이 정의한다.

E(u)=sS((usds)2+λtN(s)(usut)2)E(u) = \sum_{s \in S}((u_s-d_s)^2 + \lambda \sum_{t \in N(s)} (u_s - u_t)^2)

EE를 최소로 하는 uu를 찾는다고 했을 때 각 항을 살펴보면,

(usds)2(u_s-d_s)^2은 최소 제곱법에서 처럼 원래 모델과 측정한 데이터를 같도록 한다.

tN(s)(usut)2\sum_{t \in N(s)} (u_s - u_t)^2 은 다시 최소 제곱법을 사용하는데, usu_s와 그 주변의 점들 utu_t 사이에 차이가 없다는 것을 전제로 한다고 생각해볼 수 있다.
usu_s주위로는 평평하다고 가정하는 것이다.

이렇게 계산하면 그림에서의 c처럼 불연속 구간이 무너지게 된다.

이를 해결하기 위해 Line Process가 사용된다.

Line process를 포함해서 Error를 다시 써보면

E(u,L)=sS((usds)2+λtN(s)((usut)2ls,t+ψ(ls,t)))E(u, L) = \sum_{s \in S}((u_s-d_s)^2 + \lambda \sum_{t \in N(s)} ((u_s - u_t)^2l_{s,t}+\psi (l_{s,t})))

ls,tLl_{s,t} \in L, ls,tl_{s,t}는 Line Process.

ls,tl_{s,t}는 불연속점에서 0, 연속점에서는 1이므로, usu_s 주변이 평평하다면 최소 제곱법으로 추정, 불연속 구간이 있다면 penalty를 부여하게 된다.

ψ(z)=(z1)2\psi(z)=(\sqrt z - 1)^2는 line process와 반대로 불연속 구간에서 1, 연속 구간에서 0을 만들어내는 함수 이다.

ICP (Iterative Closest Point)

ICP는 두 클라우드 포인트 사이의 차이를 최소화 시키는 알고리즘이다.

KIIIK_{III}로 부터 PPQQ위의 대응되는 쌍 세개를 얻었다. 이때 PPQQ는 처음엔 떨어져있는데 ICP를 이용하면 물체의 방향과 위치를 알 수 있게 되는 것이다.

P=TQP = TQ를 만족하는 T를 얻어내는 것이 목표이기 때문에 우선 최소 제곱법을 이용해 Error Function을 정의하고 사용할 수 있다고 생각할 것이다.

하지만 초기 위치가 너무 멀리 떨어져 있다면 Error가 너무 커지게 되고, ICP를 진행하는 동안 local Minimum에 빠질 수 있다는 문제가 생긴다.

따라서 residual(잔차)를 제곱하는 것이 아닌 Geman-McClure penalty함수를 이용한다.

μ\mu가 클 때는 2차 함수과 비슷한 꼴이기 때문에 최소 제곱법을 따르지만, μ\mu가 작아지면 에러에 saturation을 걸어버린다.
에러에 상한을 두는 꼴이 된다.

Geman-McClure penalty를 ρ(x)=μx2μ+x2\rho(x) = \frac{\mu x^2}{\mu + x^2}이라고 하면 Error는 다음과 같이 쓸 수 있다.

E(T)=(p,q)Kρ(pTq)E(T) = \sum_{(p, q) \in K} \rho(||p-Tq||)

이렇게 사용하면 최소 제곱법의 문제를 해결할 수 있지만 풀기 어려워진다.

그래서 여기에 Line Process를 적용한다.

E(T,L)=(p,q)Klp,qpTq2+(p,q)Kψ(lp,q)E(T, L) = \sum_{(p, q) \in K} l_{p,q}||p-Tq||^2+\sum_{(p, q) \in K}\psi(l_{p,q})

ψ(lp,q)=μ(lp,q1)2\psi(l_{p,q})=\mu(\sqrt{l_{p,q}}-1)^2이라고 하면,

Elp,q=pTq2+μlp,q1lp,q=0lp,q=(μμ+pTq2)2\frac{\partial E}{\partial l_{p,q}} = ||p-Tq||^2 + \mu \frac{\sqrt{l_{p,q}} -1}{\sqrt{l_{p,q}}} = 0 \rightarrow l_{p,q}=(\frac{\mu}{\mu+||p-Tq||^2})^2

으로 lp,ql_{p,q}를 계산한다.

7. Jr,rJ_r, r 업데이트

rr

rr은 잔차이기 때문에

r=pTqr=p-Tq

JrJ_r

Interframe Rotation, Transformation

한 프레임 사이의 회전은

Rt=δRtRt1R_t = \delta R_t \cdot R_{t-1}
δRt[1γβγ1αβα1]\delta R_t \approx \begin{bmatrix} 1 & - \gamma & \beta\\ \gamma & 1 & -\alpha\\ -\beta & \alpha & 1 \end{bmatrix}

변환 행렬은

Tt=δTtTt1T_t = \delta T_t \cdot T_{t-1}
δTt[1γβaγ1αbβα1c0001]\delta T_t \approx \begin{bmatrix} 1 & - \gamma & \beta & a\\ \gamma & 1 & -\alpha & b\\ -\beta & \alpha & 1 & c\\ 0&0&0&1 \end{bmatrix}
ξ=(α,β,γ,a,b,c)T\xi=(\alpha, \beta,\gamma, a,b,c)^T

자코비안 계산

자코비안은 rrξ\xi에 있는 모든 값에 대해 미분한 결과를 순서대로 합쳐 행렬로 만든것.

T=δTToldT = \delta T\cdot T_{old} 이므로

ri(ξ)=piδTToldqir_i(\xi) = p_i - \delta T\cdot T_{old}q_i
Jr=(rαrc)J_r = (\frac{\partial r}{\partial \alpha}\dots \frac{\partial r}{\partial c})

8. T 업데이트

Gauss-Newton Method

Gauss-Newton Method는 최소 제곱법에서의 Hessian을 피하기 위해 테일러 전개를 통한 근사로 문제를 풀게 된다.

테일러 전개에 의해

r(pt+1)r(pt)+Jr(pt)(pt+1pt)r(p_{t+1}) \approx r(p_t)+J_r(p_t)(p_{t+1}-p_t)

이 식을 최소 제곱법에서의 Cost function에 대입하면

E(pt+1)=i=1Nri(pt)+Jri(pt)(pt+1pt)2E(p_{t+1})=\sum_{i=1}^N ||r_i(p_t)+J_{r_i}(p_t)(p_{t+1}-p_t)||^2

Ept+1=0\frac{\partial E}{\partial p_{t+1}}=0으로 놓고 풀게 되면

pt+1=pt(iJriTJri)1iJriTrip_{t+1}=p_t-(\sum_iJ_{r_i}^TJ_{r_i})^{-1}\sum_iJ_{r_i}^Tr_i

가중치가 있는 최소제곱 문제

E(p)=WyAp2E(p) = W||y-Ap||^2

위와 같이 최소제곱 문제에 가중치가 붙으면

Ep=2(yAp)TWA=0\frac{\partial E}{\partial p} = -2(y-Ap)^TWA=0을 풀게 되고,

p=(ATWA)1ATWyp = (A^TWA)^{-1}A^TWy

가 된다.

ξ\xi 업데이트

라인 프로세스를 포함하는 에러는 가중치가 있는 최소 제곱법 문제이므로

ξ=(iJriTJrilp,q)1iJriTlp,qri\xi=-(\sum_iJ_{r_i}^TJ_{r_i}l_{p,q})^{-1}\sum_iJ_{r_i}^Tl_{p,q}r_i

로 업데이트 할 수 있다.

T 업데이트

업데이트 된 ξ\xi를 가지고 T를 업데이트 한다.

T=δT(ξ)TT = \delta T(\xi)\cdot T
profile
영상처리와 AI에 관심이 있는 학생입니다.

0개의 댓글