0. 기존 RANSAC의 단점


1 - 결과 값의 무작위성

지난 글에서 우리는 RANSAC을 통해 Outlier를 성공적으로 제거하고 모델을 추정해내는 방법에 대해 알게 되었다. RANSAC의 장점은, 무작위로 샘플링함으로써 모든 데이터를 다 훑지 않고 빠르게 inlier로만 이뤄진 모델을 추정해내는 데에 있다. 하지만 RANSAC 알고리즘을 자세히 보면, 치명적인 단점이 있다. '무작위 샘플링' 이라는 것은, 샘플링한 데이터가 inlier일 확률도 있고 outlier가 섞일 확률도 있다는 것이다.

전체 데이터에서 inlier가 outlier보다 많을 경우 outlier를 빠르게 제거할 수 있다. 하지만 그 반대의 상황은 어떨까? Outlier가 inlier보다 많을 경우에는 inlier만 있는 조합이 걸릴 확률이 낮아지기 때문에 수많은 iteration을 돌아야한다. 그러다보면 RANSAC이 모델을 찾는데 거의 모든 경우의 수를 다 탐색하는 것 만큼의 긴 시간이 걸릴 수 있다.

실시간 환경에서는 이 긴 시간을 기다릴 수 없다. 중간에 RANSAC을 멈춰야하는데, 그렇게되면 RANSAC이 inlier로만 만들어진 모델을 줄 확률이 'random'하게 된다. 안정성이 정말로 중요한 케이스의 경우 (e.g. 자율주행), 이런 리스크를 질 수 없다.

2 - Threshold 값을 유저가 tuning 해야함

로보틱스 기술을 쓰면서 RANSAC을 쓸 경우, 노이즈를 감안해서 모델로부터 threshold $\varepsilon$ 만큼의 공간에서 data의 수를 세어야했다.

이 때, threshold $\varepsilon$ 값을 유저가 직접 정해줘야하는데, 너무 작은 값을 사용하면 노이즈가 섞인 inlier를 찾을 수가 없고, 너무 큰 값을 사용하면 노이즈가 많이 섞인 outlier가 inlier처럼 찾아질 수도 있다.

이 threshold $\varepsilon$ 값을 어떻게 고르냐에 따라서 RANSAC의 정확도와 속도가 천차만별로 달라지는데, 이 값을 잘 고르기 위해서는 순전히 유저의 경험에 기대야했다.

최근에 나오는 RANSAC 기법들 중에서는 이 threshold 값을 유저가 정하지 않아도 되는 방법이 있다.