Introduction
이전 게시물에서 SLAM Frontend(Visual Odometry) 중 대세인 Feature based VO 기법에 대해 소개하였습니다. 짧게 기억을 되살려보면, 우리는 이미지의 feature로서 corner를 선정했으며, 단순히 위치 정보로는 어려움이 있기 때문에 descriptor라는 녀석을 사용한다고 했습니다. 이번 시간에는 이를 모두 포함한 feature point의 개념을 소개하고, key point와 descriptor의 차이점을 알아보도록 하겠습니다.
Feature Point
Feature Point는 Key Point와 Descriptor로 이루어져 있습니다. 둘을 가장 쉽게 구분하는 방법은 key point는 단순히 feature의 위치 정보만을 담고 있고, descriptor는 feature의 다른 정보들을 담고 있음을 기억하면 됩니다. 만약 우리가 feature extraction을 위해 SIFT feature point를 이미지에서 계산했다고 해봅시다. 이 말의 의미를 풀어 해석하면 아래와 같습니다.
- Extract SIFT key points (2D position of the feature point)
- Calculate SIFT descriptors (vector describing the information of the pixels around the key point, such as orientation and size)
쉽게 말하면, key point는 feature에 해당하는 이미지에서 고유한 형태를 갖고 있어 식별 가능한 영역입니다. 대부분 corner를 사용하고, 결과물로 pixel의 x, y 좌표가 나오게 됩니다. 반면에 descriptor는 key point에 다양한 알고리즘을 적용해 단일 점만이 아니라 주변의 정보까지 활용해 key point의 지역적 특징을 뽑아냈으며, 결과물로는 vector 형태가 보통 나오게 됩니다.
Descriptor가 지역적 특징을 갖고 있기에, 비슷한 형태를 띠는 feature는 비슷한 descriptor 값을 갖게 됩니다. 이는 반대로 말하면, vector space에서 거리가 가까운 두 descriptor가 가리키는 두 feature는 같다고 볼 수 있죠.
Feature Extraction Algorithm 비교
현존하는 Feature Extraction 알고리즘들은 셀 수 없을 만큼 많습니다. 알고리즘 설계 철학에 따라 각각은 장단점이 있는데요. 대표적으로 정확도와 Robustness에 집중한 알고리즘이 있을 수 있고, 반대로 다 포기하고 속도에 집중한 경우도 있습니다. 그리고 또 적당히 trade-off에 대해 타협점을 찾은 케이스도 있습니다. 대부분이 그렇듯 마지막이 제일 중요합니다. 뭐든지 극단적인 방향은 사용하기가 까다로운 것 같네요.
정확도와 Robustness에 집중한 알고리즘의 대표 주자는 앞서 예제를 통해 언급한 SIFT (Scale-Invariant Feature Transforrm)입니다. 꽤나 큰 카메라 움직임이나 광원의 변화에도 feature point를 잘 찾아냅니다. 그러나 이렇게 좋은 정확도를 위해서 어마어마한 계산양이 필요한데요. Real time이 주요 과제인 SLAM에서 SIFT를 core 알고리즘으로 사용하기는 쉽지 않아 보입니다.
반대로 FAST (Features from Accelerated Segment Test) 알고리즘은 극한으로 속도에 집중했습니다. 이 알고리즘은 key point를 찾기 위해 미친 듯이 달려들며, 빠르게 결과물을 출력합니다. 여기서 중요한 점은 key point입니다. Feature point가 아니라요. 오타가 아니고 진짜입니다. FAST 알고리즘은 별도의 descriptor를 갖고 있지 않습니다. 두 프레임에서 feature matching을 통해 tracking을 해야 하는 SLAM에는 적합하지 않아 보입니다.
이제 뭐든 적당히 한 알고리즘을 봐보겠습니다. ORB (Oriented FAST and Rotated BRIEF) 알고리즘은 현존하는 알고리즘 중 real-time feature extraction을 위해서는 업계 표준으로 통하고 있습니다. 속도 하나는 매우 빠른 FAST를 이용해 key point만 우선적으로 추출하고, descriptor 중 빠른 속도를 자랑하는 binary descriptor, BRIEF (Binary Robust Independent Elementary Features)를 사용해 descriptor를 사용하며 real-time을 달성할 수 있었습니다.
결과적으로 ORB는 rotation, scale invariance 등의 변화에도 feature를 유지할 수 있는 descriptor를 보유하며 real-time을 위한 속도를 보여줍니다. 사실 정확도 면에서 SIFT 대비 부족한 면이 있는 것도 사실이지만 크게 중요하지 않습니다. 어차피 SLAM은 Backend 연산을 통해 최적화 및 보정을 해주거든요. Frontend는 빠르게 쓸만한 초기값을 전달해 주는데 의의가 있다는 것을 잊지 마세요.
Reference
모든 이미지의 출처는 이미지를 클릭하면 이동 가능합니다.