요즘 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 네트워크를 통하여 알아낸다.
Monocular depth estimation의 경우, t'시점의 이미지는 t-1, t+1 시점을 나타낸다. 즉, t시점의 앞 뒤 시점의 이미지를 사용하여 depth를 계산하는 것이다. 이때 loss는 두 시점을 통해 구한 error를 평균내어 구한다.
변경된 loss를 구하는 방식
t-1 시점과 t+1 시점에서 각각 구한 error를 평균내서 최종 loss를 구하는 것이 아닌, 두 시점 중에서 loss가 작은 시점의 loss를 최종 loss로 사용한다.
만약 평균을 사용할 경우 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에 포함시킨다.
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를 계산하게 된다.
'컴퓨터비전' 카테고리의 다른 글
NeRF 코드 (0) | 2023.03.15 |
---|---|
[논문 정리] Deep3D: Fully Automatic 2D-to-3D VideoConversion with Deep Convolutional NeuralNetworks (0) | 2022.02.07 |
[논문 정리]Data Augmentation using Random Image Cropping and Patching for Deep CNNs (0) | 2022.01.17 |
Depth Estimation을 위한 개념 정리 (0) | 2022.01.17 |
[논문 정리] PointNet : Deep Learning on Point Sets for 3D Classification and Segmentation (0) | 2022.01.14 |