컴퓨터비전

[논문 정리] Digging Into Self-Supervised Monocular Depth Estimation

juice_moon 2022. 3. 6. 17:15

요즘 depth estimation, 특히 monocular depth estimation 관련해서 좀 더 자세히 알아보기 위해 이번 논문을 고르게 되었다. 그렇다면 우선 논문 설명을 시작하기에 앞서서 Depth estimation에서 크게 Monocular Depth estimation과 Stereo Depth estimation 두 종류가 존재하는데, 이 둘의 특징부터 간략하게 적고 논문을 정리하도록 하자! 

 

Stereo Depth Estimation

특정 시간에 두 시점에서의 이미지를 이용하여 Depth 측정.

Left image와 Right image에서 매칭되는 점들에 대한 disparity를 통해 depth 계산. 

 

Monocular Depth Estimation

특정 시간에 한 시점에서의 이미지를 이용하여 Depth 측정.

주로 disparity나 depth을 예측하고 이를 학습하는 방식을 사용.

이번 논문은 그 중에서도 각 이미지에 따른 pose를 학습하고, 이를 이용하여 depth 또한 학습하는 방식을 사용한다.

 

그럼 이제 논문에서 소개한 Monodepth2에 대해 알아보자.

 


Monodepth2 Main Concept

이 논문의 motivation은 self-supervised이면서 모델의 복잡도를 줄일 수 있도록 하는 것이다. 

self-supervised monoculor depth estimation에는 문제점이 존재한다.

1. depth를 구하는데에 있어 ego-motion을 알아야하기 때문에 pose network가 필요. 

2. occlustion으로 인한 학습의 어려움이 존재. 

 

논문에서는 이를 해결하고 더 나은 estimation을 위해 3가지의 innovation을 제안했다. 

1. Novel appearance matching loss

- occlusion 문제를 해결하기 위해여 이전과는 다른 loss 사용.

 

2. Auto masking

- camera motion과 관계없는 pixel들은 masking.  (depth estimation은 각 pixel에 해당하는 depth를 모두 계산하는 것이기 때문에, 계산하는 데에 있어서 시간이 오래걸리고 올바른 reconstruction이 가능하게 하는 depth map의 가짓수는 매우 많다. 따라서 좀 더 정확하고 올바른 depth map을 구하기 위해서 masking이 필요하다. )

 

3. Multi-scale appearance matching loss 

- 중간 layer에서의 depth prediction을 upsampling하여 loss를 구해 texture-copy artifacts 감소. (texture-copy는 depth estimation에서 대표적인 artifact이다. estimation quality를 높이기 위해서는 texture-copy aritfacts를 다루는 것이 중요한 부분 중 하나이다.)

 

Monodepth2 Method

self-supervised를 위해서는, 현재 target image에서 다른 image를 예측하는 방식을 이용해야한다. 

Monodepth2는 depth나 disparity를 예측하여 이를 통해 실제 depth를 알아내고자 한다.

이때 정확하게 reconstruct가 가능하지만, depth는 올바르지 않은 "depth per pixel"의 경우가 너무나도 많기 때문에, depth map을 smoothing하고, photo-consistency를 통하여 이를 해결할 수 있다. 

 

1. Novel appearance matching loss

 

기존의 loss를 구하는 방식

t시점에서의 depth를 예측하고, 이 값을 이용하여 t'시점의 이미지를 t시점의 이미지로 reconstruction을 진행한다. 이때 구해진 이미지와 기존의 t시점의 이미지의 error를 L1 norm과 SSIM을 이용하여 구한다. 이때 T(t->t')은 pose estimation 네트워크를 통하여 알아낸다. 

기존의 loss 구하는 방식

Monocular depth estimation의 경우, t'시점의 이미지는 t-1, t+1 시점을 나타낸다. 즉, t시점의 앞 뒤 시점의 이미지를 사용하여 depth를 계산하는 것이다. 이때 loss는 두 시점을 통해 구한 error를 평균내어 구한다.

 

변경된 loss를 구하는 방식

t-1 시점과 t+1 시점에서 각각 구한 error를 평균내서 최종 loss를 구하는 것이 아닌, 두 시점 중에서 loss가 작은 시점의 loss를 최종 loss로 사용한다. 

loss를 계산할 때에 평균으로 진행하면 위의 사진과 같이 올바르게 matching이 되어 있음에도 불구하고 occluded된 부분으로 인해 error가 커지고, 그에 따라 전체 loss가 커지게 된다. 따라서 이를 방지하기 위해 평균이 아닌 최소값으로 loss로 측정
변경된 loss 함수 (pe: reconstruction error)

만약 평균을 사용할 경우 occlusion이나 out of view pixel (한 시점에서는 보이는 pixel이 다른 시점에서는 보이지 않는 경우)로 인한 error로 인해 실제로는 error가 아님에도 불구하고 전체 loss 값이 커지게 된다. 따라서 이러한 경우를 감소하기 위해 min을 사용하여 loss 값을 조절하는 것이다. 

 

2. Auto masking

 

Self-supervised monocular trainging에서 움직이는 카메라가 정지하였을 때, 이전의 장면과 비교하였을 때 차이점이 없다. 만약 이때 둘의 차이를 이용한 depth를 구하게 된다면 infinite hole이 발생할 수도 있다. 따라서 부정확한, 즉, depth를 구하는데에 있어서 불필요한 pixel들은 masking 처리를 통하여 제거해주어야 한다. 

본 논문에서 진행한 pixel masking은 움직이지 않은 pixel들을 masking 처리 해주는 것이다. 방법은 t 시점과 t' 시점에서의 reprojection error(픽셀간 차이)가 t 시점과 t'에서 t 시점으로 reconstruction한 이미지의 차이보다 클 경우에만 loss에 포함시킨다.

검은색 부분이 masking된 부분. 첫번째 줄의 사진과 같이 같은 속도로 움직이고 있어 움직임이 없는 것처럼 보이는 물체의 경우 masking 처리. 두번째 줄의 사진의 경우 카메라가 정지한 경우 대부분이 masking 처리.
auto-masking

3. Multi-scale appearance matching loss 

 

모델의 최종 학습 loss는 decoder의 각 단계에서 구한 loss를 합친 값을 사용하게 된다. 이때, 중간 단계 decoder의 output이 lower resolution depth map이기 때문에, low-texture 부분에서 texture-copy가 발생하게 된다. 즉, color image만을 보고 depth를 계산하기 때문에 정확한 depth가 구해지지 않는다. 이를 해결하기 위해 Monodepth2에서는 low resolution depth map을 upsampling한 후 이를 이용하여 loss를 계산하게 된다. 

Multi-scale apperance matching loss: upsampling->reprojection->resampling->compute loss