ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • S-PTAM 리뷰 - 이론(4) : Local Bundle Adjustment 1
    SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 7. 6. 09:30

    다음과 같은 자료를 참조하였습니다.

    1. https://www.ipb.uni-bonn.de/photogrammetry-i-ii/ (Cyrill Stachniss 교수님의 Mobile Sensing and Robotics 강의자료)
    2. http://rpg.ifi.uzh.ch/teaching.html (Davide Scaramuzza 교수님의 Vision Algorithms for Mobile Robotics 강의자료)

     

    지난 글까지는 이론과 코드를 통해 S-PTAM의 visual odometry pipeline에 대해 알아보았습니다. Visual odometry란 카메라가 촬영한 이미지들을 사용해 카메라의 위치(=궤적, odometry)를 복원해 내는 기법을 말합니다. S-PTAM에서는 outlier detector와 frustum culling을 비롯한 여러가지 트릭을 사용하여 visual odometry의 오차를 최소화하지만, 앞선 글들에서 설명했듯 SLAM 시스템에서 오차는 누적되기 때문에 알게 모르게 커지게 됩니다. 특수한 절차를 사용하여 이 오차를 보정하는 방법론이 바로 Local Bundle AdjustmentLoop Closure 입니다.

     

     

    열심히 bundle adjustment를 설명해 주시는 Cyrill Stachniss 교수님

     

    Bundle Adjustment를 이해하기 위해서는 이론편 1, 2, 3을 다시 한번 잘 읽고 이해해 두면 좋습니다. 왜냐 하면 Bundle Adjustment는 기본적으로 저 글들에서 설명하고 있는 reprojection error의 최소화를 통한 최적의 $ R, T $ 획득여러 프레임에 대해 진행하는 것이기 때문입니다. 다만 Bundle Adjustment에서는 각 프레임의 $ R, T $뿐만 아니라 MapPoint의 $ x, y, z $좌표까지 추가적으로 최적화합니다. 이론편 1, 2, 3에서도 설명했지만 다시 한번 말하자면, reprojection error의 최소화란 가장 '말이 되는' $ R, T, x, y, z $등의 구성을 구하는 작업이라고 할 수 있습니다(Maximum Likelihood Estimation).

     

    일단 다음 설명과 그림을 참조하겠습니다.

     

     

    출처 : http://rpg.ifi.uzh.ch/teaching.html

     

    n-View Bundle Adjustment(한 번에 이용하는 frame의 개수가 n개라는 뜻입니다)의 error function은 이론편(1)에서 살펴본 error function을 여러 개의 frame으로 확장한 것입니다. 다만, 이론편(1)에서의 error function에서는 MapPoint의 좌표인 $ P_{i} $가 고정이었지만 Bundle Adjustment에서는 이 또한 최적화되어야 하는 변수로 취급됩니다($ P_{i, k} $). 그리고 n개의 frame에 대한 error function을 모두 더합니다. 식으로 써 보면 다음과 같습니다.

     

    $ e(x) = \sum_{k=1}^{n} \sum_{i=1}^{N_{k}} \left \| \widetilde{p_{i, k}} - \pi(P_{i, k}, K, R_{k}, T_{k}) \right \|^{2} $

    식(1)

     

    $ n $은 프레임의 개수, $ N_{k} $은 (각 프레임마다의) 3D-2D correspondency의 개수, $ \widetilde{p_{i, k}} $는 $ k $번째 frame의 $ i $번째 2D point, $ P_{i, k} $는 $ k $번째 frame의 $ i $번째 3D MapPoint, $ K $는 카메라 내부 행렬, $ R_{k} $ 는 $ k $번째 frame의 rotation, $ T_{k} $는 $ k $번째 frame의 translation 입니다. 여기에 이론편(2)에서 설명한 robust cost function을 적용하면 다음과 같습니다.

     

    $ e(x) = \sum_{k=1}^{n} \sum_{i=1}^{N_{k}} \left \| \rho(\widetilde{p_{i, k}} - \pi(P_{i, k}, K, R_{k}, T_{k})) \right \| $

    식(2)

     

    이제 이론편(2)에서와 마찬가지로 이 cost function을 최소화하는 $ P_{i, k}, R_{k}, T_{k} $들을 구하기 위해 비선형 최적화 알고리즘에 집어넣고 돌리면 됩니다. 짠빰!

     

    ...이렇게 끝나면 좋겠지만, PnP문제를 풀 때와는 다르게 한 가지 문제가 발생합니다. 바로 최적화할 변수가 너무 많다는 것입니다. 비선형 최적화 과정에서 Hessian matrix라는 행렬을 생성하고 역행렬을 구해야 하는데, 프레임이  $ n $개일 때 이 행렬의 크기는 대략 $ n^{2} $배 커지기 때문에 여기에서 병목 현상(Computational bottleneck)이 생기게 됩니다. 이 병목을 피해가기 위해서는 n-view bundle adjustment의 수학적 특성을 파악하고 그에 맞는 트릭을 사용할 필요가 있습니다. 이는 다음 글에서 알아보도록 하겠습니다.

    댓글

Designed by Tistory.