Posenet

안녕하세요. K-ROAD 대표 유재민입니다.

첫 기술 관련 글이니 가볍고 흥미를 불러 일으킬만한 논문을 가져왔습니다. 형식은 paper review 형식으로 진행하려고 합니다.

  • Intro
  • Background knowledge
  • Methodology
  • Experiment
  • Conclusion

순으로 내용을 진행하도록 하겠습니다.


Intro

Title

PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization

Authors

Alex Kendall, Matthew Grimes, Roberto Cipolla

Conference

Proceedings of the IEEE International Conference on Computer Vision (ICCV), 2015

Citation

2469


당시 급격히 발전하던 딥러닝을 camera pose estimation에 활용하였다!

이 논문의 주요 contribution입니다.

논문을 읽을 때 당시의 배경을 생각하면서 읽으면 더욱 흥미롭습니다.

딥러닝동향

연도별로 이미지 classfication 대회에서 SOTA(state of the art, 당시 최고 성능을 의미)를 찍었던 딥러닝 모델과 accuracy를 시각화 한 자료입니다.

사람의 이미지 classification의 error가 8~9 정도 되는것으로 보아 2014년도부터 VGG가 사람의 이미지 분류 능력을 능가함으로써 딥러닝에 대한 관심도가 상당히 올라갔습니다.

당시 로보틱스 분야에서는 모바일 로보틱스에 대한 관심도가 급증하고 있었습니다.

이에 따라 real-time processing(실시간 처리 능력)의 필요성이 생겼습니다.

위를 예를 들자면 카페에 있는 무인 로봇에서 앞에 놓인 대상이 사람인지 아닌지 구분하는 task에서 실시간 처리 능력이 필요해졌다는 의미인데 논문이 나온 2015년을 배경으로 살펴보자면, 무인 로봇에 넣을만큼 작고 가벼운 컴퓨터에서도 real-time 연산이 가능함을 느끼고 있었죠. 이는 작은 컴퓨터에도 넣을 수 있을만큼 가벼운 딥러닝 모델이 필요해졌음을 의미합니다.

또한, 이 논문의 특징 중 하나가 범용성입니다. 단순이 아무 카메라로 찍은 사진으로 다른 추가적인 센서 없이 camera의 포즈를 추정할 수 있다는 점에서 2024년 2월 17일 기준으로 피인용수 2469회를 달성하고 있고 후속 연구에도 많은 귀감을 주었습니다.

저는 Slam을 연구하는 입장에서 slam과 연관을 안 지을 수 없는데요.

과연 Slam이 무엇일까요?

Simultaneous Localization and mapping

의 약자입니다. 한글로 번역하자면 Localization과 mapping을 동시에 진행하겠다는겁니다.

한번 더 풀어서 그 뜻을 파헤쳐 보자면 현재 내가 혹은 로봇이 어디있는지를 정의함과 동시에 그 주변 환경을 map의 형태로 output을 내놓는 기술입니다.

즉 Localization(odometry), map 두 개의 output을 내놓는 역할을 하게 됩니다.

slam을 다룬 논문은 아니니 다음 기회에 slam에 대하여 더욱 자세하게 다루어 보겠습니다.

다음은 저희 학교(한국기술교육대학교) 텔동을 mapping한 결과입니다.

텔동 SLAm

다음은 저희 학교 인문경영관을 mapping한 결과이죠.

인문경영관 SLAM

HDL-graph-slam(High Density Lidar) 활용

그렇다면 slam기술의 성능을 어떻게 평가할까요?

두가지 방법이 주를 이룹니다.

1. Localization 성능 평가
2. 정성 평가(눈으로 봤을 때 잘 나왔는가?)

mapping은 localization하는데 있어서 시각화하는 자료의 느낌이 강하죠.

이처럼 localization 성능에서 posenet이 높은 정확도를 보였기 때문에 높은 피인용수를 달성할 수 있던 이유 중 하나입니다.


Background knowledge

6 DOF 설명

논문 제목에도 나와있는 용어인데요. 6-DOF라 함은 6개의 자유도를 가진 pose를 의미합니다.

이때 벡터의 형태로 나타나게 되는데요. 우측 상단 수식에서의 x 는 camera가 촬영한 시점의 x,y,z좌표를 의미하게 됩니다. q는 camera를 촬영한 시점이 얼마나 돌아가있는가를 의미하죠. 이때 현실 세계는 3차원 공간으로 표현되므로 3개의 값을 가짐을 알 수 있습니다.

즉, camera의 position과 orientation을 output으로 내뱉는 딥러닝 네트워크를 의미합니다.

이는 곧 output으로 Localization 데이터를 뱉는 아이임을 알 수 있죠.

그렇다면 네트워크를 학습시키기 위한 데이터셋을 어떻게 생성하였을까요?

이떄 데이터셋은 다음을 포함해야합니다.

  - 촬영한 이미지
  - 촬영한 이미지의 pose

이때 다음과 같은 기술을 사용하였습니다.

SfM(Structure from Motion)

한 시점에서 카메라의 포즈를 추정하기 위해서는 한 물체를 바라본 최소 두 개의 시점 이상이 필요합니다.

이 점이 굉장히 중요한데요. 이는 에피폴라 기하학에서 기인 할 수 있습니다.

에피폴라 선: 왼쪽 시점의 픽셀이 바라보는 3D 점을 오른쪽 시점도 바라고 있다면, 오른쪽 시점에서는 그 3D 점이 에피폴라 선 위에 맺힐 것이다.

라는 가정에서 에피폴라 기하학은 시작됩니다.

에피폴라 기하학을 설명하게 된다면 이 블로그 글보다 더 많은 내용이 들어가기에 간단히 늬앙스를 이해하는 부분으로도 해당 블로그 글을 읽는데 무리가 없으시라 생각됩니다.

더 깊은 내용은 다음 url에서 확인하실 수 있습니다.

에피폴라 기하학

에피폴라 기하학

SfM의 이름에 맞게 2D video를 활용해 일정 frame단위로 이미지를 만들고 이를 에피폴라 기하학에 의거하여 3차원 구조물과 camera parameter를 생성하겠다는 의미입니다.

요약하면 에피폴라 기하학에 의거하여 삼각층량법이 유효하게 되고, 이에 따라 SIFT, FAST알고리즘 등을 활용하여 SfM(Structure from Motion)이라는 기술이 생기게 됩니다.

풀어서 이야기 하자면, 고전적 방법으로 feature를 추출하고 이를 GT(ground truth)로 삼겠다 입니다.

그러면 왜 이리 좋은 기술을 놔두고 posenet이라는것 만들었는데?라는 의문이 드실blog/겁니다.

SfM의 한계

- real-time processing이 불가능하다.
- overhead가 너무 크다.(연산 비용, 메모리 비용 등등)
- 강건하지 않다.

이쯤에서 논문에서 주장하는 Posenet의 차별점을 말씀 드리겠습니다.

- real-time
- 단 하나의 이미지만 있어도 pose추정이 가능하다.
- 강건하다.
- transfer learning이 가능하다.(뒤에서 추가 설명을 드리도록 하겠습니다.)

sfm로컬

위 사진은 제가 실제로 local 환경(개인 pc)에서 SfM을 진행한 화면을 발췌한 것인데요.

100여장 정도의 사진밖에 없었지만 output을 내뱉기까지 10여분 이상 소요됨을 확인하였습니다.


Methodology

방법론은 굉장히 심플합니다.

오버뷰

224*224 이미지를 Posenet에 넣으면 camera pose가 나오게 됩니다.

이때 posenet의 아키텍쳐는 당시 SOTA이던 GoogLenet을 활용하였다고 기재되어 있습니다.

googlenet

약간의 아키텍쳐 수정이 필요했는데 이때 빨간 상자의 부분은 기존에 이미지 classification을 위한 softmax 레이어였으나 카메라의 pose를 아웃풋으로 내뱉기 위헤 Affine regressors 레이어로 바꾸었습니다.

약간의 아키텍쳐 설명을 드리면 왜 아웃풋이 3곳에서 나오나? 라는 의문을 가지실 수 있습니다.

이때 실제로 저희가 활용하는 아웃풋은 가장 마지막에 있는 아웃풋이고, 중간중간 있는 affine regressors 레이어는 모델을 학습시키는 과정에서

backpropagation이라는 딥러닝 필수 과정이 들어가게 되는데 이때 중간중간에서 이를 보정해주게 됩니다.

간결히 말하면 중간에 있는 아웃풋은 모델을 학습시키는데 있어서 보정해주는 역할을 해준다 정도로 이해하시면 되겠습니다.

추가적으로, 6-DOF라고 논문 제목에 기재되어있지만 실제로 6-DOF는 카메라 pose를 통상적으로 의미하는 바입니다.

실제 orientation을 오일러 좌표로 표현하게 되면 gimbal lock이란 문제에 빠지게 되는데요.

이 때문에 쿼터니안 좌표라는것이 나오게 되었습니다. 실제로 모델 아웃풋으로는 총 7차원의 아웃풋이 나오며 이는 position 3개, orientation 4개의 벡터가 하나의 행렬로 나오게 됩니다.

loss_function

과연 어떻게 동시에 position과 orientation을 학습시키게 될까요?

이 전에 딥러닝이 어떻게 학습하는지 설명드리겠습니다.

SfM을 통해 GT를 만들었다고 했습니다. 모델은 이때 임의의 데이터를 시작으로 GT와 차이를 비교하게 됩니다. 이때 차이를 loss function을 통해서 구하게 되고 이는 loss function의 수치가 작은 방향으로 파라미터를 수정하는 과정이 딥러닝이 학습한다. 라고 표현할 수 있겠습니다.

여기서 loss function을 어떻게 정의 한지를 설명드리려 하고 있습니다.

L2-norm을 활용하여 나타내고 있는데요. 이는 유클리디언 거리(gt와 모델이 예측 한 데이터의 차이)의 표현식을 의미합니다.

이때 postion의 유클리디언 거리와 orientation의 유클리디언 거리의 합으로 loss function을 정의하여 position과 orientation을 동시에 학습시키겠다는 전략을 취한것입니다.

베타는 두 개의 관계에서 중요도를 결정하기 위한 파라미터입니다. 각 파라미터에 따른 성능은 위 그래프를 통해 확인 할 수 있습니다.

이때 눈여겨 볼것이 위 빨간 상자의 표현식입니다.

사실 quatenion의 unit vector의 합은 1입니다. 과연 1을 1로 나누는 task가 의미가 있나? 라는 생각이 들 수 있습니다. 저도 처음에 왜 나누는지 이해가 가지 않았는데요.

Camera Pose [X Y Z W P Q R]

  • 20.134839 -16.641770 1.735459 0.672315 0.574745 -0.296687 0.360053

다음은 실제로 SfM을 통해 나온 한 이미지에서의 pose를 가져왔습니다.

quaternion

벡터의 합을 구하면 다음과 같은데요. 컴퓨터가 표현할 수 있는 소숫점의 자리수가 제한적이기에 일부 오차는 불가피 합니다만 학습을 하는과정에 있어서 약간의 오차가 있으면 이 오차가 계속해서 누적이 되게 됩니다. 이를 방지하기 위해 한번 학습할 때마다 쿼터니안의 크기로 나눠줌으로써 누적에러를 막겠다라는 전략을 취했습니다.

파라미터는 다음과 같습니다.

파라미터


Experiment

실험 결과입니다.

버드아이뷰

한 이미지에서 camera pose를 추출하는데 약 5ms에서 95ms가 걸렸다고 합니다.

수치화

각 데이터셋 별, posenet의 에러, 기존 알고리즘 등등 의 결과를 나타낸 표입니다.

실외 환경에서는 약 2~3미터 간격의 position과 5~8도 정도의 orientation의 오차를 가짐을 보여줍니다. 실내 환경에서 더 낮은 에러를 보여주는데요. 이는 실내에서 feature를 더 추출하기 용이한 환경이기에 라고 논문에서 기술하고 있습니다.

정성평가_2

정성평가입니다.

원래 잔디같이 매끈하고 특징점이라 부를만한것이 없는 상황에서는 feature를 뽑기 어려움에도 강건함을 보여주고 있습니다. 또한 이미지가 흔들림이 있어도 강건하게 예측하는 모습을 보입니다.

이때 흔들리게 되면 feature라고 부를만한 건물 외벽의 경계선이라든가 특정 랜드마크들이 넓게 번져보이는데 이 때문에 모델이 조금 더 가까운 환경이라고 예측하였다고 필자는 예상하고 있습니다.

정성평가

gt와 모델이 예측한 scene을 겹쳐서 보여주고 있는데요. 어둡거나 강한 빛이 있는 환경, 안개가 낀 환경 등에서도 강건함을 보여주고 있습니다.

정성평가_1

또한 날씨가 다르거나, 동적인 물체가 많이 scene에 있거나 혹은 아무 카메라로나 찍어도 역시 강건함을 보여주고 있습니다.

오버헤드

기존의 SIFT알고리즘과 비교하여도 우수한 성능을 뽐내고 있습니다.

위에서 transfer learning을 언급드렸는데요. 당시에 딥러닝이 관심을 많이 받으며, transfer learning 기법이 탄생함에 따라 transfer learning의 효과도 같이 논문에서 언급을 하는 그래프입니다.

여기서 transfer learning이란 이미 사전에 보편적인 데이터셋에 대해서 조금 학습을 시킨 후, 개인이 수집한 데이터를 학습시키게 되면, 학습 시간이 줄 뿐더러 모델이 좀 더 general해지고, robust해짐을 보여주고 있습니다.

새일런시맵

Saliency maps를 통한 평가입니다. 이는 모델이 학습함에 따라 관심있게 본 구역을 시각화 한 map이라고 볼 수 있는데요. 잔디 같이 feature가 추출이 잘 되지 않거나 동적인 물체들에 대해서는 모델이 관심있게 보지 않음을 시각화한 실험입니다. 또한 기존의 고전적인 방법들과는 다르게 그 overhead와 필요한 데이터셋의 수가 현저히 적음을 보여주고 있습니다.


Conclusion

긴 글 읽으시느라 고생 많으셨습니다.

이 논문을 평가를 하자면 CNN 네트워크를 기반으로 end-to-end형식의 camera pose localization을 최초로 제시하였다는점에 높게 평가 받고 있습니다.

또한 당시 검증되지 않은 딥러닝 기법인, transfer learning의 효과도 잘 보여주는 논문이였고, 기존에 고전적인 방법인 SIFT보다 훨씬 우월한 성능을 보인다는 점을 보였습니다.

이는 당시 시대 상인, real-time processing의 필요성, 사전 3D-map이 없는 환경에서의 localization, 다른 추가적인 센서 없이 localization을 잘 할 수 있음에 따라 여러 분야에서 두루 사용할 수 있는 application을 제시하였다고 필자는 생각하고 있습니다.