티스토리 뷰
Unsupervised learning of depth and ego-motion from video
seoyoung02 2022. 2. 17. 00:22이 논문은 unsupervised한 방법으로 image depth를 구하는 모델을 학습시키는 방법이다. 학습에는 sequential한 이미지가 필요하고, 각 이미지의 pose를 이용해 한 이미지의 point들을 다른 이미지로 projection하고, projection된 위치의 점과 Intensity를 비교해 loss를 구한다. 여기서 pose도 model output이므로 gt없이 loss 계산이 가능해진다.

Overview
조금 더 구체적으로 살펴보면 다음과 같은 단계로 나누어 생각해 볼 수 있다.
1. t에서의 이미지 It를 depth CNN에 통과시켜 Depthmap ^Dt(p)를 구한다.(Depth map은 모든 이미지 픽셀에 대한 depth를 가지고 있다.)
2. t−1, t+1의 relative camera pose(transformation matrix ˆTt→t−1)를 Pose CNN을 통해 구한다.
3. t−1, t+1시점의 이미지 픽셀을 ^Dt(p), ˆTt→t−1를 이용해 t시점으로 projection한다.
4. projection한 이미지 ^It−1(p), ^It+1(p)와 실제 t−1, t+1의 이미지It−1(p), It−1(p)의 각 픽셀별 Intensity를 비교해 loss를 구한다.
5. backpropagation으로 학습 진행한다.
각 단계를 구체적으로 살펴보자.
Network architecture

overview 1,2 에서 언급했 듯 두 개의 network가 사용된다. single-view depthmap을 구하는 network와 pose를 구하는 network이다. depthmap network는 encoder-decoder구조를 가진다.
pose network는 encoding한 후 1x1 convolution으로 6∗(N−1) output channel을 만들고 global average pooling으로 하나의 예측값을 구한다. 6은 t와의 상대적인 pose(3개의 3 Euler angles 과 3-D translation)를 의미하고, N−1은 t시점을 제외한 나머지 이미지들의 수를 의미한다. pose output의 Euler angles로 rotation matrix를 구하고 나머지 3-D translation는 각각 t가 되어 아래와 같은 transition matrix를 만들어 사용하게 된다.
또한 pose network encoding 결과를 다시 decoding하여 얻은 explainability network가 있다. 이 network에서 나온 결과 ^Es(p)는 2 ∗ (N − 1)$의 channel을 가진다. 이것의 역할은 사용할 픽셀을 정하는 것인데 아래에서 설명할 예정이다.
Differentiable depth image-based rendering

(이 파트를 이해하려면 camera geometry에 대한 어느 정도 기본 지식이 필요하다.)
기준시점은 t이고, 그 외의 모든 시점을 s(1≤s≤N,s≠t)라고 하자. t시점의 이미지는 It, s시점의 이미지는 Is이다. normalized plane에서 It의 위치와 같은 위치를 가지는 Is의 점의 Intensity를 It의 같은 위치로 가져와 생성된 이미지가 ^Is이다. It의 point pt와 Is의 Point ps는 normalized plane으로 옮겼을 때 같은 위치를 가진다. 따라서 같은 위치를 표현하므로 같은 색을 가질 것이라 가정하므로 학습이 될 수록 It와 ^Is의 차이가 작아져야 하고, 이를 Loss로 사용한다.
구체적으로 살펴보자. 우선, pt의 위치가 Is의 어느 점인지 찾아야 한다.

위 수식에서 K는 intrinsic paramter이고, 이미 알고 있어야 한다. 또한 동일한 카메라에서 찍힌 sequential한 이미지를 사용하므로 모든 이미지에서 동일하다. pt에 K−1을 곱해주면 camera coordinate의 nomalized plane에서의 위치를 알게되고, 여기에 Depth ^Dt(pt)를 곱하면 camera coordinate에서 실제 위치가 된다. ˆTt→s는 t시점과 s시점의 상대적인 extrinsic parameter이므로 ˆTt→s를 곱하면 s시점의 camera coordinate으로 옮겨가게 되고, K를 곱하면 Is에서의 point(ps)를 구할 수 있다.
이렇게 구한 ps는 정수가 아닐 가능성이 높다. 하지만 intensity는 정수의 위치에만 존재하므로 linear interpolation으로 ps의 Intensity를 구한다. 그리고 이 값이 ^Is(pt)의 값이 된다.
View synthesis as supervision
위에서 구한 ^Is으로 loss를 구한다.
Modeling the model limitation
하지만 이러한 방식에는 조건이 있다.
1. scene에 있는 물체는 움직이지 않아야 한다.
2. t시점과 s시점사이에 occlusion(다른 물체에 의해 가려지는 것)이나 disocclusion(다른 물체에 의해 가려진 것이 드러나는 것)이 있으면 안 된다.
3. 모든 표면이 lambertian(반사된 모든 빛의 세기가 같은 상황)이어야 한다. 그렇지 않으면 s시점의 intensity가 서로 달라질 수 있기 때문이다.
이러한 사용 가능 조건에 맞지 않는 픽셀들을 학습에서 제외하기 위해 explainability prediction network를 사용한다. 여기서 구한 mask ^Es(p)를 view synthesis loss에 적용해 픽셀별 weight를 준다.
^Es(p)를 view synthesis loss에만 적용해 학습하면 ^Es(p)가 0이 되는 방향으로 학습이 될 것이다. 따라서 loss에 regularization term Lreg(^Es(p)) 을 넣어 그러한 현상을 방지해준다.
Overcoming the gradient locality
최종 loss는 아래와 같다.
끝으로 이 논문은 몇 가지 주요한 challenge를 제시한다.
- 현재 network는 scene dynamics와 occlusion을 반영하지 못한다.
- 현재 network는 intrinsic parameter가 주어져야 하므로 random하게 수집된 영상에 대해서는 사용할 수 없다.
- 지금은 단순히 3D scene의 depth만 구하지만 3D volumetric representation으로 확장 가능할 것이다.
- reference: T. Zhou, M. Brown, N. Snavely, and D. G. Lowe. Unsupervised learning of depth and ego-motion from video. 2017
'Deep Learning' 카테고리의 다른 글
Depth from videos in the wild: Unsupervised monocular depth learning from unknown cameras (0) | 2022.02.20 |
---|---|
Objects are Different: Flexible Monocular 3D Object Detection(MonoFlex) (0) | 2022.02.19 |
SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation (0) | 2022.02.18 |
파이썬 날코딩으로 알고 짜는 딥러닝, Chapter 3 (0) | 2021.12.05 |
NAVER AI TECHTALK 후기 (0) | 2021.12.02 |
- ML Pipeline
- DSP
- Building Basic GAN
- 딥러닝
- machine learning
- Operating System
- 신호처리
- OS
- Deep learning
- 디지털신호처리
- MLOps
- AI
- Generative Model
- controllable GAN
- depth
- conditional GAN
- design pattern
- 3d object detection
- pcb
- 운영체제
- mode collapse
- ML
- Gan
- deeplearning
- depthmap
- image
- Raspberry Pi
- Depth estimation
- TRACKING
- feature
- Total
- Today
- Yesterday
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |