티스토리 뷰
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$에서의 이미지 $I_{t}$를 depth CNN에 통과시켜 Depthmap $\hat{D_{t}}(p)$를 구한다.(Depth map은 모든 이미지 픽셀에 대한 depth를 가지고 있다.)
2. $t-1$, $t+1$의 relative camera pose(transformation matrix $\hat{T}_{t \to t-1}$)를 Pose CNN을 통해 구한다.
3. $t-1$, $t+1$시점의 이미지 픽셀을 $\hat{D_{t}}(p)$, $\hat{T}_{t \to t-1}$를 이용해 $t$시점으로 projection한다.
4. projection한 이미지 $\hat{I_{t-1}}(p)$, $\hat{I_{t+1}}(p)$와 실제 $t-1$, $t+1$의 이미지$I_{t-1}(p)$, $I_{t-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를 만들어 사용하게 된다.
$$
\begin{pmatrix}
r_{11}& r_{12} & r_{13}& t_{x} \newline
r_{21} & r_{22} & r_{23} & t_{y} \newline
r_{31} & r_{32}& r_{33} & t_{y} \newline
\end{pmatrix}
$$
또한 pose network encoding 결과를 다시 decoding하여 얻은 explainability network가 있다. 이 network에서 나온 결과 $\hat{E_{s}}(p)$는 2 ∗ (N − 1)$의 channel을 가진다. 이것의 역할은 사용할 픽셀을 정하는 것인데 아래에서 설명할 예정이다.
Differentiable depth image-based rendering
(이 파트를 이해하려면 camera geometry에 대한 어느 정도 기본 지식이 필요하다.)
기준시점은 $t$이고, 그 외의 모든 시점을 $s$($1 ≤ s ≤ N, s \neq t$)라고 하자. $t$시점의 이미지는 $I_{t}$, $s$시점의 이미지는 $I_{s}$이다. normalized plane에서 $I_{t}$의 위치와 같은 위치를 가지는 $I_{s}$의 점의 Intensity를 $I_{t}$의 같은 위치로 가져와 생성된 이미지가 $\hat{I_{s}}$이다. $I_{t}$의 point $p_{t}$와 $I_{s}$의 Point $p_{s}$는 normalized plane으로 옮겼을 때 같은 위치를 가진다. 따라서 같은 위치를 표현하므로 같은 색을 가질 것이라 가정하므로 학습이 될 수록 $I_{t}$와 $\hat{I_{s}}$의 차이가 작아져야 하고, 이를 Loss로 사용한다.
구체적으로 살펴보자. 우선, $p_{t}$의 위치가 $I_{s}$의 어느 점인지 찾아야 한다.
위 수식에서 $K$는 intrinsic paramter이고, 이미 알고 있어야 한다. 또한 동일한 카메라에서 찍힌 sequential한 이미지를 사용하므로 모든 이미지에서 동일하다. $p_{t}$에 $K^{-1}$을 곱해주면 camera coordinate의 nomalized plane에서의 위치를 알게되고, 여기에 Depth $\hat{D_{t}}(p_{t})$를 곱하면 camera coordinate에서 실제 위치가 된다. $\hat{T}_{t \to s}$는 $t$시점과 $s$시점의 상대적인 extrinsic parameter이므로 $\hat{T}_{t \to s}$를 곱하면 $s$시점의 camera coordinate으로 옮겨가게 되고, $K$를 곱하면 $I_{s}$에서의 point($p_{s}$)를 구할 수 있다.
이렇게 구한 $p_{s}$는 정수가 아닐 가능성이 높다. 하지만 intensity는 정수의 위치에만 존재하므로 linear interpolation으로 $p_{s}$의 Intensity를 구한다. 그리고 이 값이 $\hat{I_{s}}(p_{t})$의 값이 된다.
View synthesis as supervision
위에서 구한 $\hat{I_{s}}$으로 loss를 구한다.
$$
L_{vs} = \sum_{s} \sum_{p}\left| I_{t}(p) - \hat{I_{s}}(p) \right|
$$
Modeling the model limitation
하지만 이러한 방식에는 조건이 있다.
1. scene에 있는 물체는 움직이지 않아야 한다.
2. $t$시점과 $s$시점사이에 occlusion(다른 물체에 의해 가려지는 것)이나 disocclusion(다른 물체에 의해 가려진 것이 드러나는 것)이 있으면 안 된다.
3. 모든 표면이 lambertian(반사된 모든 빛의 세기가 같은 상황)이어야 한다. 그렇지 않으면 s시점의 intensity가 서로 달라질 수 있기 때문이다.
이러한 사용 가능 조건에 맞지 않는 픽셀들을 학습에서 제외하기 위해 explainability prediction network를 사용한다. 여기서 구한 mask $\hat{E_{s}}(p)$를 view synthesis loss에 적용해 픽셀별 weight를 준다.
$\hat{E_{s}}(p)$를 view synthesis loss에만 적용해 학습하면 $\hat{E_{s}}(p)$가 0이 되는 방향으로 학습이 될 것이다. 따라서 loss에 regularization term $L_{reg}(\hat{E_{s}}(p))$ 을 넣어 그러한 현상을 방지해준다.
Overcoming the gradient locality
최종 loss는 아래와 같다.
$$
L_{final} = \sum_{l}L_{vs}^{l} + \lambda_{s}L_{smooth}^{l} + \lambda_{e}L_{reg}(\hat{E_{s}}^{l})
$$
끝으로 이 논문은 몇 가지 주요한 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 |
- controllable GAN
- Operating System
- depthmap
- pcb
- MLOps
- ML
- 딥러닝
- deeplearning
- mode collapse
- 디지털신호처리
- Deep learning
- conditional GAN
- design pattern
- AI
- ML Pipeline
- 운영체제
- 3d object detection
- Generative Model
- DSP
- Raspberry Pi
- OS
- TRACKING
- Depth estimation
- Building Basic GAN
- image
- 신호처리
- Gan
- depth
- feature
- machine learning
- 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 | 31 |