Video Odometry? 아무튼 전혀 알 수 없는 분야 공부가 필요해졌다.
자꾸 나오는 SLAM과 SfM이 뭔지부터 공부를 해야할듯 싶다.
진짜 하나도 모르겠어서 닥치는대로 본다 일단.
간단한 박사님의 설명
SfM을 가지고 SLAM을 달성한다고 보는게 더 직관적.
Structure from motion은 말 그대로 주변 물체의 구조나 센서에서 잡힌 주변 정보로 모션을 측정해서 형태를 복원하는 과정.
SLAM은 simultaneos localization and mapping이어서, 현재 visual camera의 위치를 추정하는 문제이다.
SLAM에서 종종 SfM을 활용하기도하고, 딥러닝에서는 아예 다른 방식으로 풀고있다.
이 자료를 ettrends.etri.re.kr/ettrends/106/0905000800/22-4_001_011.pdf 보면 SfM에 대해 나온다. 2007년 글이다.
"물체의 주위를 여러 위치에서 촬영할 때 발생하 는 카메라의 움직임을 유추하고, 이를 바탕으로 3차 원 형상을 복원하는 것을 structure from motion이 라고 한다. 다수의 영상으로부터 카메라의 움직임을 알아내기 위해서는 영상간의 대응관계를 알아야 한 다. 영상의 대응 관계는 주로 코너와 같이 영상에서 추출이 용이한 특징점을 이용하며, 정합률을 높이기 위해 RANSAC 알고리듬을 많이 이용한다. 영상의 특징점은 Harris의 코너 추출 알고리듬이 많이 사용 되나, 최근에는 영상에서의 크기 변화에 강인한 특 징점을 추출하는 SIFT가 많은 관심을 받고 있다."
그리고 참고 그림으로 이런것도 있다. SfM 순서도.
어떤 블로그에 있는 글을 읽은 바로는 이렇다. dalbom.tistory.com/13
SLAM은 CML, 즉 Concurrent Mapping and Localization이라고도 한다.
Map이 주어져 있을 때 로봇의 위치를 찾아내는게 Localization
로봇의 위치를 정확히 알 수 있을 때 Map을 만들어가는 Mapping이라고 한다.
SLAM이란 로봇의 위치도 Map도 모를때, 로봇이 주변 환경을 센서로 감지해가면서 Map을 만들고 그 Map에서의 자신의 위치까지 추정하는 작업이다. 빡세다.
우린 로봇가지고 시뮬레이션 돌리고 뭐 그런게 아니라 많이 다를 것 같기는 한데, 아무튼 카메라의 움직임을 알아야한다.
sunggoo.tistory.com/40 이 블로그에는 글 여러개에 걸쳐 설명이 되어있는 것 같다.
나중에 이해가 부족하다고 느껴지면 와서 읽을 예정.
아, 다음으로 건너가기전에 visual odometry가 뭔지도 봐야한다.
snacky.tistory.com/96 이 블로그에 어떤 영문글이 번역이 되어있다.
이 글은 한번 보는 게 좋을 것 같아서 링크를 노란색으로 강조해봤다.
VO?
움직이는 로봇의 trajectory를 구해야한다. 여러 방법이 있는 것 같다. 그중에 VO는, 일단 움직이는 물체(자동차, 로봇)에 단단한 카메라를 붙여놓는다. 그리고,
- input: 붙여놓은 카메라의 비디오 스트림
- output: 6-DOF Trajectory
=> 아하...! 단순히 x,y,z 위치로 카메라 움직인것만 알면 될거라 생각을 했는데 생각해보니 각도도 필요하다.
Monoclar Visual Odometry: 하나의 카메라
Streo Visual Odometry: 둘 이상 카메라
난 둘다 봐야하는데, 일단은 하나의 카메라에 집중해보려고 한다.
나중에 스테레오를 해야한다면 이 글 뒷부분을 봐야한다.
인생은 실전이니 건너뛰고 DeepVO로 넘어간다. 아래 논문과 깃허브 링크 참고.
드디어 Monoclar Visual Odometry가 나온다!
"DeepVO: Towards End-to-End Visual Odometry with Deep Recurrent Convolutional Neural Networks"
Baseline으로 활용해보자.
논문은 좀 아쉬웠다. 그냥 RCNN 사용했다 한줄로 요약할 수 있다. video odometry에 대한 설명은 되어있지 않으며, 거의 다들 알법한 lstm 구조같은 당연한 것들을 설명해놓았다.
기존 monocular visual odometry에서는 다음과 같은 단계를 거친다. feature extraction, feature matching, mothion estimation, local optimization 등. 하지만 이 논문은 RCNNs를 활용하여 end-to-end로 VO를 수행한다. 아키텍쳐는 아래 그림과 같다.
비디오 시퀀스가 있다. 현재와 다음 프레임의 정보를 합쳐서 6채널짜리 이미지를 input으로 넣는다.
그러면 9개의 CNNs에서 피쳐를 뽑고, RNNs를 거쳐 최종으로 pose estimation을 한다. 논문에서 pose estimation이라 말해서 헷갈리긴한데, 그냥 translation, rotation 파라미터 x,y,z로 총 6개를 추정하는 것이다.
RNN에 들어가는건 당연히 이전 timestep에서의 hidden state을 고려해 현재 state에 대한 정보를 처리하기 위함이다. 동영상이니까.
학습 loss는 MSE. translation, rotation parameter 각각에 대해서이다. 로테이션은 쿼터니온이 아닌 오일러각이다.
논문에서는 KITTI VO/SLAM dataset을 사용했다. www.cvlibs.net/datasets/kitti/eval_odometry.php 이 사이트이다.
아래는 키티에서 얘기하는 학습 데이터 00-10 중에서, 그안에서 train/val 데이터를 나눈 실험이다.
특정 시퀀스는 학습(0,2,8,9), 특정 시퀀스는 밸리데이션용으로 할당해놨다. 그게 키티에서 validation 데이터에 대해서는 정답을 제공 안해서 그런 것 같다.
일단 잘 맞추는 것 같다!
아래는 원래 키티에서 학습하라고 제공된 00-10까지의 시퀀스로 학습, 11-20으로 validation한 결과이다.
흠. 이걸 돌려봐야하나 싶다. 우선 우리가 구하려는 output 형태는 이거랑 비슷한 것 같다.
카메라 움직임은 이런거랑 다르게 미미한데. 아래 데이터셋에 해답이 있을지 모르는일이니까.
이건 다른 논문인데, CVPR 20으로 SIFT같이 feature descriptor를 제안하는 논문.
풀 데이터셋은 공개되어있지 않으나, 실험용으로 샘플데이터를 올려놓았다. 의료 domain에서 흔하지 않게 코드가 공개되어있다.
- arxiv.org/pdf/2003.00619.pdf "EndoSLAM Dataset and An Unsupervised Monocular Visual Odometry and Depth Estimation Approach for Endoscopic Videos: Endo-SfMLearner"
- github.com/lppllppl920/DenseDescriptorLearning-Pytorch
그리고 이건 다른 데이터셋. 수술 SLAM이 나왔다?
캡슐 엔도스코피가 뭔지 모르겠지만 일단 그렇다. 3디 맵이랑 6 DoF (아까 앞에서 그거) 포즈 데이터가 있다.
카메라 종류가 6개나 된다. 하나의 동작을 동시에 6개로 찍은건 아닌가보다.
stereo는 아닌건가? -> 아니다! 논문 제목 보면 monocular 맞음. VO task는 unsupervised.
아무튼 3개의 태스크가 주어진다. depth estimation, motion estimation (관심대상!), 3D 리컨.
이건 아카이브에 논문이 있는데, motion estimation 모델 구조가 DeepVO에서 본 느낌과 많이 다른지 확인할 필요가 있어보인다.
camera pose와 depth estimation 네트워크를 joint training한다. 그런데 둘다 unsupervised train을 한다. 물론 이 데이터셋에서 제공하긴 하지만.
각각을 따로 학습하는게 아니라 아래의 엄청 큰 모델 하나를 한방에 학습.
중간에 AttentionPoseNet의 output이 6DoF인것같다. 어텐션 기반의 모델인데 논문을 자세히 읽진 않았다.
음. 이 논문의 실험결과를 보고, 베이스라인을 이걸로 잡을지 아까 DeepVO로 잡고 돌려볼지 고민을 해봐야겠다.
이 논문은 여러 SOTA와 비교를 했다; SC-SfMLearner, SfMLearner and Monodepth2.
monodepth2( Digging into selfsupervised monocular depth estimation)
SC-SfMLearner "Unsupervised scale-consistent depth and ego-motion learning from monocular video"
SfMLearner people.eecs.berkeley.edu/~tinghuiz/projects/SfMLearner/cvpr17_sfm_final.pdf 이렇게인데, 셋 모두 KITTI dataset에서 실험했으며 17, 18, 19년도 논문이므로 저자는 baseline을 잘 선정해서 실험을 한 것 같다.
모델도 공개되어있고 README와 코드도 깔끔해보인다. 굉장히 심혈을 기울인것이 느껴진다..!
'AIML 분야 > Depth, Camera Pose, VO, SLAM 등' 카테고리의 다른 글
쓰는 중이다 [Camera Pose Estimation] 최근 논문 하나 살펴볼까 (0) | 2021.09.10 |
---|---|
[휘리릭 논문읽기] Learning High Fidelity Depths of Dressed Humans by Watching Social Media Dance Videos (0) | 2021.08.30 |
대충 빠르게 읽어보는 KITTI dataset 논문 (0) | 2021.06.30 |
DF-VO 논문 리뷰 & 코드 셋업해보기 (0) | 2021.06.17 |
Video Odometry 연구 시작 - EndoSLAM 셋업해보자 (0) | 2021.05.04 |
댓글