[arXiv 2024] SteeredMarigold: Steering Diffusion Towards Depth Completion of Largely Incomplete Depth Maps

안녕하세요, 59번째 x-review 입니다. 이번 논문은 arXiv 2024에 올라온 SteeredMarigold라는 논문으로, Depth estimation 모델인 Marigold를 기반으로 Depth completion을 수행한 논문 입니다.

그럼 바로 리뷰 시작하겠습니다 !

1. Introduction

depth를 활용하는 어떠한 인지 분야에서도 제공되는 depth가 온전할 때 안정적인 동작이 가능할 것 입니다. 그러나 언제나 dense한 depth가 주어질 수 없기 때문에, 본 논문에서는 부분적인 depth 정보만 주어지는 상황에서도 로봇이 scene에 대해서 정확한 인지를 하는데 초점을 맞추고 있습니다. 일반적으로 자율주행과 같은 task에서 동작하는 depth completion이나 monocular depth estimation(MDE)는 실제 로봇 분야에서는 그리 활발하게 사용되고 있진 않습니다. MDE는 측정되는 depth 데이터가 온전하지 않다는 가정이 있지만, 이는 로봇에 적용하기에는 너무 위험하다는 것이 저자의 의견이며, depth completion은 어느 정도 sparse하지만 균일하게 depth 값이 주어진다고 하네요. Fig.1을 보시면 빛이 많이 들어오거나 투명한 유리 부분은 다른 영역에 비해 급격하게 depth가 불완전하게 제공되는 것을 확인할 수 있죠.

Depth completion과 MDE의 두 task를 충분히 연결할 수 있는데 저자는 아직까지는 이 두 task를 엮어서 해결하는 연구는 거의 없다고 이야기 합니다. 그래서 본 논문에서는 depth가 누락되는 영역 주변에서 사용할 수 있는 depth 정보를 estimation 과정 중 제약 조건으로 활용함으로써 깨끗한 depth를 추정할 수 있도록 합니다. 결국 sparse depth를 depth estimation의 제약 조건으로 사용하겠다는 것이죠. 이를 위해 Marigold 모델(diffusion 기반 affine-invariant depth estimation 모델)을 이용해서 dense한 metric depth를 만들 수 있는 steeredMarigold 모델을 제안합니다. Marigold에 sparse depth를 조건으로 추가하여 단일 RGB 이미지를 입력으로 하는 MDE 모델을 depth completion 모델로 변환할 수 있게 됩니다.

이전까지의 depth completion 모델과 비교하여 여러 가지 장점을 어필하는데요, 먼저 사전학습된 Marigold 모델을 활용하기 때문에 별도의 학습을 필요로 하지 않습니다. 두번째로 Marigold가 그러하듯 depth completion으로 변환하더라도 동일하게 zero shot depth completion이 가능하도록 설계하였습니다. 세번째는 depth-steered diffusion 과정은 Marigold와 다르게 metric depth 관점, depth의 정확한 스케일을 예측 능력을 향상시킬 수 있다고 합니다. 마지막은 본 논문에서는 기본적으로 RGB/depth를 이용하지만 이는 다른 모달리티로 변형하여 쉽게 적용 및 변환이 가능하다고 합니다.

여기서 본 논문의 main contribution을 정리하면 다음과 같습니다.

  1. plug-and-play diffusion 기반의 metric,scale 관점에서 정확한 결과를 얻을 수 있는 depth completion 방식을 제안
  2. 매우 sparse한 depth가 주어지는 환경에서의 depth completion을 수행하면서 SOTA 성능 달성

2. Method

우선 논문의 이름에도 있는 steering은 기존 RGB만 사용하는 diffusion 모델을 sparse depth를 가이드로 사용하여 dense한 metric depth을 생성할 수 있도록 확장하는 과정을 의미합니다. 기존 모델을 재학습 없이 그대로 사용하면서도 다중 모달리티의 입력 데이터를 처리할 수 있게 되는 것이죠.

그럼 결국 하고 싶은 것은 RGB 이미지와 sparse depth를 가지고 dense metric depth를 만드는 것 입니다. 이를 수식으로 한번에 정리하면 식(1)과 같습니다.

  • m \in \mathbb{R}^{H \times W \times 3} : RGB 이미지
  • \mathcal{E}(m) : RGB 이미지를 VAE 인코더를 통해 latent space로 인코딩
  • \mathcal{D}() : latent를 다시 depth 이미지로 디코딩

diff(\mathcal{E}(m), c)은 인코딩된 latent에 대해 sparse depth c를 이용해서 steer된 diffusion 과정을 수행하는 것을 의미합니다. \mathcal{M}은 기본 diffusion 모델인 Marigold에서 얻는 relative depth를 metric depth로 변환하는 과정이며, 식(2)와 같이 더 자세하게 정의할 수 있습니다.

  • d^* : diffusion 모델이 예측한 relative depth

\mathcal{M}은 relative depth cd^*를 비교해서 least-squares fitting을 통해 scale과 shift를 맞춰주는 함수 입니다. 가령 d = scale * d^* + shift와 같은 형태로 말이죠. 이렇게 최소제곱법을 이용해서 두 depth가 최대한 잘 맞도록 조정하게 됩니다.

2.1. Latnet Space

왜 이미지 레벨에서 diffusion을 진행하지 않고 latent space에서 연산하게 되냐면, 아무래도 고해상도 이미지나 depth map에서는 연산량이 너무 크다는 단점이 있죠. 그래서 VAE를 사용해서 이미지를 latent space로 인코딩한 다음에, 그 latent representation에서 diffusion 과정을 수행한 다음에 다시 디코딩하여 depth 이미지를 복원하게 됩니다.

  • concat(d^*) : 1채널 depth map을 3채널로 복제한 데이터
  • avg() : 3채널에서의 디코딩 결과를 평균내어 다시 1채널 depth map으로 변환

2.2. Steering

이제 본 논문의 핵심이라고 할 수 있는 steering 부분 입니다. 여기서는 diffusion 모델이 생성하는 depth map이 sparse depth 값을 잘 반영할 수 잇도록 유도해야 합니다.

식(11)이 바로 diffusion을 조건으로 주어지는 sparse depth 방향으로 조정하는 과정을 의미합니다.

  • x_{t-1} : reverse diffusion에서 얻은 latent
  • \lambda : steering 강도
  • \tilde{x}_0 : 현재 타임 스텝 t에서 예측한 clean sample
  • \tilde{x}^{\mathcal{D}}_0 = \mathcal{D}(\tilde{x}_0) : \tilde{x}_0를 VAE 디코더를 통해 이미지 공간으로 변환한 것

P는 sterring에 사용할 픽셀의 위치를 의미하는데요, \phi_1(\tilde{x}^{\mathcal{D}}_0, P)가 위치 P에서 \tilde{x}^{\mathcal{D}}_0의 depth 값을 보간하는 과정을 나타냅니다. 여기에 c가 추가되면 동일한 과정이되, 추가적으로 depth condition을 함께 고려하여 보간한 결과를 나타내겠죠.

현재 생성된 결과 \tilde{x}^{\mathcal{D}}_0에서 특정 위치 P에 대해 기존 결과만을 기반으로 한 depth \phi_1과 sparse depth도 같이 고려한 depth \phi_2를 계산합니다. 그리고 이 둘의 차이를 계산해서 VAE 인코더를 거쳐 latent 공간으로 다시 넣고 원래 latent \tilde{x}_0과 비교해서 방향을 잡고 x_{t-1}를 조금씩 밀어준다고 표현하고 있습니다.

결국 정리하면 현재 diffusion reverse 과정을 돌고 있기 때문에 x_t에서 x_{t-1}로 가고 있는데, 이때 x_{t-1}은 모델이 추정한 결과이지만 아직 조건인 sparse depth와 완전히 맞다곤 할 수 없습니다. 그래서 조금 더 sparse depth 조건 쪽으로 유도하려는 과정을 식(11)을 통해 수행하는 것이죠.

Fig.2로 전체 파이프라인을 다시 살펴보면, 우선 RGB 이미지가 VAE 인코더를 통해 latent 공간으로 변환 합니다. diffusion reverse 과정은 x_t부터 시작해서 점점 노이즈를 제거하며 x_0으로 향하는데, 여기서 각 단계에서 sterring이 적용됩니다. steering이라고 하단 부분에 박스 쳐져있는 부분이 바로 식(11)을 의미하는 것이죠. 설명드린 것처럼, \tilde{x}_0을 디코딩하여 \tilde{x}^{\mathcal{D}}_0으로 변환하고 \phi_1, \phi_2를 계산함으로써 sparse depth를 기반으로 steering을 수행하고 있습니다. 이 steering 방향을 VAE 인코더로 다시 보내서 현재의 latent \tilde{x}_0와 비교하여 steering 방향을 새롭게 만듭니다. 결과적으로 x_{t-1}가 조금씩 sparse depth c 조건을 반영하도록 수정될 수 있습니다.

최종적으로 x_0가 완성되면, 디코더를 통해 이미지 공간에서의 relative depth d^*로 변환됩니다. 마지막엔 \mathcal{M}을 통해 relative depth를 c와 비교하여 scale/shift를 맞춤으로써 최종적인 metric depth d를 예측할 수 있습니다.

3. Experiments

실험은 indoor 데이터셋인 NYUv2에서 진행하였다고 하네요.

특이한 것은 실제 로봇 환경에서의 sparse 문제를 현실적으로 고려해서 새로운 평가 프로토콜을 만들었다고 합니다. 우선 원래는 이미지의 해상도를 줄이거나 중앙만을 잘라서, 그 안에서 약 500개 정도의 depth 값만을 쓰도록 하였습니다. 그러나 이러한 가정은 너무 이상적인 상황이라는 것이죠.

현실적인 크기로 이미지를 Fig.4와 같이 608×448로 고해상도를 이용하게 됩니다. 거기서 기존과 같이 500개 depth 포인트만 사용할 수 있게 한다면 ? 정말 여기저기 비어있는 sparse한 depth map으로 실험을 하게 되죠. 추가적으로 아예 중앙 부분 전체를 비워버리는 실험도 진행하여 진짜 센서가 일정 영역을 아예 못 본다고 생각하고 실험을 합니다.

Fig.4에서 large area는 실제로 사용하는 depth map의 해상도를 의미하며, medium area는 아예 depth 값을 지워버리는 영역, 그리고 small area가 지정되어 있습니다. small area는 steering이 depth가 있는 주변 영역으로부터 영향을 받아 없는 영역을 채우는 것인데요, 다른 말로 하면 너무 멀리 떨어진 곳은 그 영향이 줄어들 수 있습니다. 그래서 가장 중심부로 small area를 지정하여 주변 조건으로부터 멀리 떨어진 영역을 설정함으로써 depth가 없는 진짜 중심 영역까지 잘 복원할 수 있는지를 평가하고 있습니다.

3.1. Results

우선 베이스라인은 BP-Net, CompletionFormer, 그리고 Marigold를 사용하였습니다. 원래 사용하던 해상도가 아닌 본 논문에서 사용하는 해상도를 기준으로 따로 리포팅한 것을 볼 수 있습니다. 더 높은 해상도를 사용하여서 기존과 유사한 성능을 유지하기 위해 더 많은 양의 depth 포인트 샘플이 필요하다는 것을 확인할 수 있습니다. 특히 CompletionFormer에 기존보다 더 많은 depth 샘플을 사용하게 되면 원래 논문에서의 성능을 뛰어넘는 성능을 달성하게 됩니다.

Marigold를 단독으로 사용하면 diffusion 기반 모델로 학습되긴 했지만, sparse depth를 단순히 scale/shift를 계산하는 용으로만 사용하면서 정확하게 조건에 맞게 복원하지 못하여 비교적 낮은 성능을 보이고 있습니다. 여기서 steering 기법을 적용했을 때 같은 13620을 포인트로 사용하지만 성능이 개선되는 것을 확인할 수 있습니다. 이 결과를 통해 고해상도 이미지로 인해 sparse한 상황에서도 본 논문이 잘 작동하며, Marigold에서 steering만을 추가하여 모델을 훨씬 강인하게 동작하도록 만들었다는 것을 알 수 있습니다.

Tab.2는 앞서 Fig.4로 설명한거소가 같이 중간 영역에 해당하는 부분에서 depth 값을 지움으로써 평가하는데요, 실험 결과 성능이 크게 하락하는 것을 확인할 수 있습니다. 베이스라인 모델들은 sparse함과는 무관하게 아예 지워진 영역이 발생한 곳에 대해서 depth를 예측할 수 없게 되면서 낮은 성능을 보이게 됩니다.

Marigold는 비교적 세 가지 평가 영역에서 일관된 성능을 보이고 있는데, 이는 depth sample이 shift/scale에만 사용하면서 제한된 depth sample만으로도 전체 scene의 상대적인 depth를 metric으로 변환하기에 충분하다는 것을 의미합니다. 이러한 Marigold보다 본 논문의 SteeredMarigold가 더 좋은 성능을 보이고 있는데요, 다만 가장 작은 small area에 대해서는 비교적 가장 낮은 성능을 보이고 있긴 합니다. 이러한 결과를 통해 depth의 sparse함이 심해지고 아예 누락된 영역이 발생하더라도 SteeredMarigold는 가장 안정적으로 depth map을 완성할 수 있습니다.

마지막으로 Fig.5는 베이스라인 모델들과 SteeredMarigold의 결과를 정성적으로 보여주고 있는데, 두번째 행이 medium area를 아예 없앴을 때의 실험 결과 입니다. (a)와 (b)는 주변 영역과는 매우 동떨어진 형태의 이질적인 depth map을 예측하는 반면, (c)는 전체 이미지 영역에서 고루 sparse하게 제공되는 첫번째 행에서의 결과와 유사한 정도의 성능을 보이고 있죠. 이를 통해 diffusion 모델과 steering을 함께 적용했을 때 이전의 방법론들에 비해 일반적인 sparse한 상황을 뛰어넘어서 이질적으로 만든 노이즈 depth가 주어지더라도 강인하게 동작할 수 있다는 것을 보여주고 있습니다.

Author: 손 건화

1 thought on “[arXiv 2024] SteeredMarigold: Steering Diffusion Towards Depth Completion of Largely Incomplete Depth Maps

  1. 건화님 좋은 리뷰 감사합니다.

    Depth Completion에 Monocular Depth Estimation을 함께 사용하여 고품질의 depth를 만들어내는 것을 목적으로 하는 논문으로 이해하였습니다.

    Table 2가 중간 영역을 아예 못본다고 지워 평가를 한 것이라 하셨는데, 이렇게 만들어내는 depth는 실제로 사용 가능한 정도인지 궁금합니다. 수치적으로 봤을때 Table1에 비해 성능이 크게 저하되어있는 것으로 보이는데, 이게 유의미한 정도의 수치인지 궁금하여 질문드립니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다