0. Outlier란?


Outlier는 통계 단어로써 '이상치', 즉 우리가 기대하지 않았던 잘못된 데이터를 뜻한다. 따라서 Outlier를 제거한다는 것은 우리가 기대했던 올바른 데이터들만으로 계산을 한다는 것이다. 이 올바른 데이터는 inlier라고 한다. 많은 컴퓨터 알고리즘에서 황금룰처럼 적용되는 Good data in → Good data out은 컴퓨터 비전 알고리즘에도 똑같이 적용된다.

하지만 다른 분야에 비해 유독 컴퓨터 비전에서는 outlier 제거가 더 중요한 것 같다. 왜냐하면 우리가 자주 사용하는 몇개의 컴퓨터 비전 알고리즘들은 outlier가 없는 상황에서만 잘 작동하는 closed-solution인 경우가 많기 때문이다.

Fundamental matrix를 구할때나 homography matrix를 구할 때를 생각해보자. 이 매트릭스 계산을 하기 위해서는 몇개의 image feature pair가 필요하다. 이 계산을 하기 위해 우리가 쓸 수 있는 image feature pair가 몇백개씩 있어도, 우리는 이 중 아무 feature pair나 막 골라서 사용할 수 없다. 그 이유는 fundamental / homography matrix의 계산식에 혹여나 잘못 매칭된 feature pair가 골라질 경우, 매트릭스의 값이 처참할 정도로 잘못되어 나오기 때문이다.

Image feature matching의 결과
초록색 - Good match
빨간색 - Bad match

Image feature matching의 결과 초록색 - Good match 빨간색 - Bad match

그러면 이번에는 우리가 어떠한 방식으로 outlier를 전부 제거해서 좋은 데이터만 남았다고 해보자. Outlier가 없으니 이제 좋은 결과가 나올 것이다. 하지만 컴퓨터 비전 데이터 특성 상 모든 데이터에 noise가 조금씩 끼어있다. 어떤 데이터는 다른 데이터보다 noise가 더 끼어있을 수 있다. 이 때문에 좋은 데이터들 사이에서도 어떤 조합으로 계산하냐에 따라서 정확도가 달라지기도 하며, 우리는 또 최적의 조합을 찾기 위해 또 다시 '좋은 데이터'를 찾기 위한 노력을 들여야한다.

정확한 결과를 얻기 위해서는 outlier와 noise가 섞인 데이터에서 최적의 데이터를 솎아내야한다. Input 데이터의 양은 유한하기 때문에, 시간만 있다면 통계적인 방식을 사용해서 결국에는 최적의 값을 찾아낼 수 있다. 하지만 Real-time 컴퓨터 비전에서는 주어진 시간이 그렇게 많지 않다. 수많은 연구를 통해 발견한 것은, outlier와 noise가 섞인 데이터로부터 곧바로 최적의 데이터를 솎아내는 것보다, outlier의 특성과 noise의 특성을 찾아내 부적절한 데이터를 우선 제거하고난 후 남아있는 데이터로부터 정확한 값을 추론하는 것이 훨씬 빠르다는 것이다.

그렇기 때문에 컴퓨터 비전에서는 수많은 outlier 제거 및 noise 제거 단계를 거친다. Gaussian filter를 사용해서 픽셀 노이즈를 줄여주는 것도, feature matching에 여러가지 threshold를 주는 것도, RANSAC을 통해 올바른 데이터를 골라내는 것도, weighted least squares optimization을 통해서 특정 데이터에 가중치를 주는 것도 모두 outlier 제거 및 noise 제거로 볼 수 있다. 이러한 계산들이 실질적으로 Visual-SLAM 계산의 70~80%를 이루기도 하는데, 이들이 사용되는 이유는 오로지 '빠르고 정확한 계산을 위한 outlier 및 noise 제거' 라고 볼 수 있다.

어떻게 보면 웃기는 이야기이기도 하다. Visual-SLAM의 목표는 카메라 위치추정 및 지도작성이 아닌가? 그런데 그 과정에서 정작 가장 많이 수행되는 작업은 outlier 및 noise 제거 작업이다. 바라보는 시각에 따라 달라지겠지만, 나의 개인적인 의견으로는 '이러한 작업이 최소화될 수록 좀 더 Visual-SLAM에 본질에 다가가는게 아닐까?' 라고 생각한다. 그렇기 때문에 이번 포스팅 시리즈에서는 여러가지 outlier 제거 방법에 대해 깊게 알아보기로 한다.