2022.10.18 7시 반에 festa에서 진행한 모두의 연구소 주관 세미나 <AI + SLAM by StradVision >를 들었는데, 요약해보았습니다.
SLAM: Simultaneous Localization And Mapping
위치를 잡으려면 지도가 필요하고, 지도를 그리려면 위치정보가 필요하는 계란과 닭의 문제인데,
위치와 지도를 동시에 찾아내는 것이 SLAM..!
motion model(얼마나 갔느냐)과 observation (주변환경 관측치) model를 동시에 최적화하는 문제를 풀게 됨
![](https://velog.velcdn.com/images/yellofi/post/07d53a48-8188-4fd1-8a1a-f319b3eeeacb/image.png)
2D LiDAR SLAM
- EKF-SLAM (1990s): extended kalman filter로 covariance matrix가지고 돌아다닐 때마다 uncertainty를 추정하는 O(N^2)
- FastSLAM (2002), GMapping (2005), HectorSLAM (2011), Catographer (2015) 등 EKF-SLAM을 효율적으로 개선해나감
Visual SLAM (카메라)
- PTAM (2007): cpu 듀얼코어가 처음 나온 시절, 처음으로 쓰레드 2개 활용하는 걸로 breaktrough가 됨.. 지금도 괜찮은 수준의 SLAM.. SLAM 공부할 거면 이 논문으로 시작 권장
Feature-based SLAM
- ORB-SLAM (2015): 공간의 특징점들을 찍어 모델링하는 feature-based SLAM으로, 운동장 scale까지 가능하게 하였음
Direct SLAM
- DTAM (2010): Direct SLAM은 feature (특징점)이 아닌 공간을 훨씬 dense하게 estimation하는 것으로 틀린 부분 매칭이 쉬움
RGB-D SLAM
- KineticFusion (2012): 마이크로소프가 몸움직여서 하는 kinetic? 게임 냈다가 망했는데 SLAM 연구자들한테 그 센서 싸게 사서 연구 시작. 이 연구는 DTAM연구자가 한 것으로 3D SLAM의 패러다임이 됨
3D LiDAR SLAM
- LOAM (2014): breakthrough, point cloud를 가지고 3D 공간에서 SLAM을 하는데, PTAM과 비슷하게 2개의 쓰레드방식 차용
Deep Learning + SLAM
- DL은 python이고 SLAM은 C++인데, SLAM에서는 다른 쓰레드의 다른 작업들이 서로 소통하는 게 필요한데 python에선 지원 안 하고..
- SLAM에서 중요한 세 가지는 성능, 속도, robustness인데 한 scene에서 잘 되게 만들어도 다른 scene에선 안 되는 문제가 허다함 (ex) 낮과 밤)
- 그러한 문제를 DL은 데이터 학습을 통해서 general하게 극복하기 쉽다
- 2020 SLAM challenge winner에서 Deep Learning 모델 가져다 쓴 "SuperGLUE + SuperPoint"가 성능을 앞섬.. 성능 측면에서 DL이 필요
- SLAM에서도 DL이 당연히 필요하지만, DL쪽에서도 SLAM이 필요할 게 될 것이다
- 기존의 SLAM 파이프라인에서 traditional한 module들을 DL로 대체하려는 움직임 (그림 참고)
- 이런 Learning-based Approach가 3D 공간에서도 잘 될까? 학습을 위한 3D data 준비는 가능한가..?
- geometry에 대한 모델은 이미 수식으로 다 풀려있는데 굳이 그걸로 대체할 필요가 있을까..?
- SLAM의 본질로 돌아가기로 함 (Semantic Understanding..!)
- 기존 SLAM은 주변 객체가 point cloud일 뿐.. 어떤 것인지 알 수 없고 의미론적으로 interaction할 수가 없었음
- point cloud에 class 얹어서 segmentation해보거나 bounding box가지고 물체의 위치 인식해서 지도를 작성하는 식의 딥러닝 활용
- class의 distribution (deep factor)을 학습할 수 있다면 SLAM에서는 manifold를 탐색하면서 shape를 추정할 수 있다
- Tesla에선 SLAM으로 3D공간 (zero-shot) 만들어가면서 2D로 변환해 segmentation의 auto-labeling을 하고 있는 수준까지 가있다
- NerF (2020~): 보이지 않는 3D 공간에 대한 mapping이 가능해진다.. 빈틈없이 dense한 map을 만들 수 있게 된다! 중요한 알고리즘이고 아직은 좀 더 연구가 필요!
![](https://velog.velcdn.com/images/yellofi/post/de6febef-5a63-4e4e-887c-009a755953c2/image.png)
![](https://velog.velcdn.com/images/yellofi/post/ea254308-378e-4866-bad8-b4aa27f3d1ec/image.png)
기타
- 나도 C++로 하기 싫다.. 잘못 짜여진 코드가 많다 고랭도 써보긴 했지만 기본적으로 C++ op. 다 지원하면서 C++을 보완한 느낌의 러스트가 괜찮더라