RSS

[review] Towards Semantic SLAM using a Monocular Camera

28 May

발표 : IROS 2011

제목 : Towards Semantic SLAM using a Monocular Camera

저자 : Javier Civera, Dorian G´alvez-L´opez, L. Riazuelo, Juan D. Tard´os and J. M. M. Montiel

소속 : Universidad de Zaragoza, Spain.

이 논문은 ‘sematic’에 ‘SLAM’이 붙은 논문이다.  결과 동영상[1]도 있고, 전체적인 방식도 기존의 AR이나 SLAM과 많이 비슷해서, 뭐랄까 가장 선택하고 싶은 논문이다.
한가지 걸리는 것은 저자들이 이 논문 발표하고, 후속 연구가 없이 다른 쪽 연구를 한다는 것이다.  그들을 회의적으로 만든 무엇인가 있나?

아래 그림은 이 논문에서 주장하는 시스템의 전체적인 개요이다.

Clipboard07

PTAM이 크게 camera pose estimation(localization)과 map maintenance의 두 thread로 병렬처리 되었다면, 이 SSLAM은 크게 SLAM thread와 recognition thread로 나뉘어서 돌아간다.  아무래도 인식하는데 시간이 많이 걸릴 테니까…  근데 사실상 그러면 PTAM도 map maintenance가 시간이 오래 걸려서 병렬로 돌렸으니까, 이 거를 3개를 병렬로 돌리면 어떨까?

3차원 물체를 인식하기 위해 물체 모델을 만드는데 있어, face라는 tuple을 도입한다.  Face는 한 마디로 view이다.  즉, face의 구성요소는 3D 물체와 카메라와의 상대적인 pose로 인해 생기는 특징점들의 물체 좌표계내에서의 3차원 좌표들, 그 특징점들의 local feature descriptor들 (such as SURF), 물체 좌표계를 기준으로 한 카메라의 포즈이다.  물론 각 face에서의 특징점들이 planar하진 않지만, 결국 일반적인 planar AR은 물체에 대한 face가 한 개이고, 이거는 입체니까 여러개의 face들로 하는 느낌이다.  이렇게 한 물체에 대해 여러개의 face들을 만들고, 이런 작업을 여러 물체에 대해 해 주어 하나의 물체 DB를 생성한다.

인식 thread는 다음과 같이 돌아간다.  위의 그림에서 곰인형을 인식하는 예를 들자면, 현재 프레임이 k번째 프레임이라고 하고, 현재 프레임에서 곰인형을 인식했다고 판단하고 그 곰인형의 pose를 구해서 제시 하려면, 그 훨씬 이전 프레임에서 부터 작업이 들어간다.  만약 그 작업에 m개의 프레임이 소요된다고 하면, k – m번째 프레임에서 부터 작업이 시작된거다.  k – m번째 프레임에서 SURF 피처 점들을 뽑는다. 이걸 물체 DB의 각 물체에 대해, 물체의 각 face에 대해 비교를 한다.  RANSAC을 쓰는 건 마찬가지 인데 planar object때는 homography를 쓰니가 4개의 점이 필요하고, 여기서는 non-planar니까 5개의 점을 써서 PnP 방식으로 해당 물체좌표계와 카메라 좌표계 사이의 relative pose를 구한다.  만약 DB내의 어떤 물체가 planar라고 미리 알려져 있으면 그냥 homography를 쓰면 된다.  시간을 줄이기 위해서 한 물체의 face가 RANSAC을 통과하면 그 물체의 다른 face들은 skip하고, 다른 물체로 넘어간다.  어쨌거나 DB를 뒤져서 일정 기준(relative pose를 적용했을 때의 reprojection error가 충분히 작은) 가장 적합한 face를 가지는 물체가 발견이 되면, 걔의 DB내에서의 3D 특징점들은 아래와 같이 월드좌표계 상의 좌표 값드들로 변환 되어, 현재 SLAM 시스템의 3D map속으로 투입된다.

SLAM thread는 기본적으로 1-point RANSAC EKF 방식의 SLAM을 쓴다(저자의 이전 논문[2]에서 나온건데, 뭐 소스코드도 있으니까 약간 안심).  Kalman filtering에서의 state vector는 (카메라_포즈, 카메라_포즈_속도, 3D_Point_1, 3D_Point_2, …, 3D_Point_n)이다.

인식 thread가 시작되는 시점이랑 끝나서 물체를 증강하는 시점이랑 차이가 있으니까, 시작되는 시점 k – m번째 프레임에서 state vector에 카메라 포즈를 추가해서 인식 thread가 끝나는 시점까지 끌고 간다고 한다.  그러니까 k – 1번째 프레임에서는 (카메라_포즈, 카메라_포즈_속도, 3D_Point_1, 3D_Point_2, …, 3D_Point_n, 카메라_포즈_k_-_m)이 되는 것이다.  왜 이렇게 까지 하는지 모르겠다.  암튼 중요한 거는 물체가 현재 3D map상에서 움직이지 않는다고 하면, k – m번째 프레임에서의 (월드좌표계 기준) 물체의 포즈나 현재 k번째 프레임에서의 물체 포즈나 같다는 거.  따라서 물체 좌표계 기준의 3차원 점을 월드좌표계 기준의 좌표로 변환시키려면 다음과 같은 순서를 밟으면 된다.
물체 좌표계 기준 3차원 점
—(인식 결과로 얻은 k – m번째 프레임의 카메라와 몰체 좌표계 사이의 relative pose)—> k – m번째 프레임의 카메라 좌표계 상의 3차원 점
—(카메라 좌표계와 월드 좌표계 사이의 relative pose, 즉 카메라 포즈)—> 월드 좌표계 기준 3차원 점.

여기서 “인식 결과로 얻은 k – m번째 프레임의 카메라와 몰체 좌표계 사이의 relative pose”는 다시 다음과 같은 transform들의 연결로 볼 수 있다.

인식 결과로 얻은 k – m번째 프레임의 카메라와 물체 좌표계 사이의 relative pose = (face를 찍을 때의 카메라와 k – m번째 프레임의 카메라 사이의 relative pose) (물체 자체 좌표계 기준 face를 찍을 때의 카메라 포즈)

이렇게 물체 점 하나가 추가 되면, 현재 k번째 프레임에서의 상태 벡터는 (카메라_포즈, 카메라_포즈_속도, 3D_Point_1, 3D_Point_2, …, 3D_Point_n, 3D_point_W_F) 가 되고, 다시 다른 물체를 인식하기 위한 thread가 시작 된다.

근데 내 생각에는 일반적인 3D_Point_n과 인식된 물체 상의 3D_point_W_F 들을 똑같이 취급하는 거는 문제가 있어 보인다.  3D_point_W_F 들은 한 번 학습을 한 거기 때문에 비교적 믿을 만 하지 않나 한다.  즉  3D_point_W_F 끼리의 서로 간의 상대적인 위치는 프레임이 진행 되는 동안 변화되지 않는다고 보는게 맞지 않나 싶다.  그러한 constraint를 주면 3D_point_W_F 들의 상태가 개별적으로 변하는게 아니라 단체로 움직이게 할 수 있지 않을까?  그냥 내 생각…

동영상에서 보면 추적 잃어버렸을 때 relocalization 하는 것도 나온다.  이 논문의 저자들은 relocaization은 [3]의 방법을 썼다고 한다.

[1] http://webdiis.unizar.es/~jcivera/videos/civera_etal_iros11_desktop.avi
http://webdiis.unizar.es/~jcivera/videos/civera_etal_iros11_hospital_room.avi

[2] J. Civera, O. G. Grasa, A. J. Davison, and J. M. M. Montiel. “1-point ransac for EKF filtering: Application to real-time structure from motion and visual odometry”. Journal of Field Robotics, 27(5):609–631, October 2010.

[3] B. Williams, G. Klein, and I. Reid. “Real-time SLAM relocalisation”. In IEEE 11th International Conference on Computer Vision, page 1:8, 2007.

Advertisements
 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: