Loop Closure
- graph-based SLAM에서 그래프에 loop가 발생했을 때, loop에 해당하는 camera pose와 landmark들을 최적화시켜주는 기술
- 보통 loop detection -> loop fusion -> optimization 단계로 진행
- 여기서는 loop detection에 대해 알아본다
- loop fusion : C++ 기술로 data association만 해주는 부분
- optimization : BA(Bundle Adjustment)와 과정 동일
loop detection
- 내가 지금 보고 있는 장소가 와본적이 있는 장소인지 알아내는 문제
- SLAM이 돌아가면서 keyframe들에 대한 정보를 데이터베이스에 저장을 하는데 실시간으로 보고 있는 이미지를 이 데이터베이스에 쿼리함으로써 비슷한 결과가 있을 경우 리턴
- 이러한 문제를 Image retrieval 문제라고 한다
- SLAM에서 요구하는 place recognition(loop detection)에 사용되는 기술
image retrieval
- 푸는 방법 2가지
- 이미지 전체 비교
- global vector 생성 후 비교
이미지 전체 비교
- 정확도도 좋지 않고 속도, 메모리 효율성도 좋지 않아 잘 사용하지 않는 방법
global vector 생성 후 비교
- 여러 local feature들의 정보를 취합하여 이미지 전체의 feature 즉, global feature를 만들어서 비교하는 방식
- ORB (Oriented and Rotated BRIEF, 특징점 검출 알고리즘) feature를 사용하는 많은 VSLAM들은 DBoW2 라이브러리 또는 FBoW 라이브러리 사용
- 이는 ORB feature들의 정보를 k-means clustering 기법으로 분류해서 여러개의 visual vocabulary를 만들고 이미지를 이 vocabulary로 표현하는 방식
- 이러한 방식을 Bag-of-visual-words 또는 BoW Vector방식이라고 부른다
- 최근에는 이와 같은 기능의 성능을 높이기 위해서 딥러닝 기법이 적용되고 있는데, NetVLAD와 같이 다양한 조명이나 환경변화에도 강인한 방식들도 사용되고 있다
- BoW vector를 사용하는 부분을 사실상 DBoW2 라이브러리가 기준으로 잡혀있고 직접 구현하는 경우가 없다
- DBoW2 라이브러리를 사용해서 loop detection 기술을 익힐수 있다