[논문정리] 2. DUSt3R: Geometric 3D Vision Made Easy

2025. 2. 27. 15:05카테고리 없음

반응형

[그림, 표 정리]

아래 그림은 DUSt3R두 장의 이미지로부터 3D 정보를 회귀(regression)하는 과정을 한눈에 보여줍니다.
핵심 아이디어포인트맵(pointmap)과 신뢰도(confidence)를 예측해, 두 이미지 각각의 픽셀을 공통 좌표계(camera1)에서 표현하는 것입니다.

 

1. 입력 (Image 1, Image 2)

  • 왼쪽에 두 장의 이미지가 들어옵니다.
  • 예시로, 빨간·초록·파랑(RGB) 채널을 patchify(패치화)하여 입력 준비.

2. ViT(비전 트랜스포머) 인코더

  • 두 이미지 모두 동일한 ViT 인코더 가중치(shared weights)를 사용하여 토큰(token) 시퀀스로 변환.
  • 즉, Siamese 구조처럼, 각각의 이미지를 같은 네트워크가 처리하되, 가중치를 공유.

3. Transformer Decoder & Head

  1. Transformer Decoder
    • 두 인코더 출력(F¹, F²)을 받아 교차-어텐션(cross-attention) 등을 통해 정보를 상호 교환.
    • 즉, 이미지1에서 나온 토큰과 이미지2에서 나온 토큰이 서로 정보를 주고받아 더 정확한 3D 정보를 추정.
  2. Head
    • 디코더 출력 토큰을 받아, 포인트맵(pointmap)과 신뢰도(confidence) 맵을 회귀(regression)함.
    • 예: X¹,¹, C¹,¹는 이미지1에 대응하는 포인트맵·신뢰도,
    • X²,¹, C²,¹는 이미지2이지만 카메라1 좌표계(camera1)에서 표현된 포인트맵·신뢰도.

4. 포인트맵(Pointmap) & 신뢰도(Confidence)

  • 포인트맵 (X)
    • 이미지의 각 픽셀에 대해, 3D 좌표를 예측.
    • 여기서 중요한 점은, 이미지2의 포인트맵도 camera1 좌표계에 맞춰 표현된다는 것.
    • 즉, X²,¹은 “이미지2의 픽셀들이 camera1 좌표계에서 어디에 위치하는지”를 나타냄.
  • 신뢰도 맵 (C)
    • 각 픽셀(혹은 3D 점)에 대해 모델이 얼마나 정확하다고 확신하는지를 나타냄.
    • 값이 높을수록 신뢰도가 높은(정확도 높은) 포인트.

5. 공통 좌표계(Canonical coordinate frame)

  • 그림 오른쪽을 보면, camera1(빨간색)을 원점(기준 좌표)으로, camera2(파란색)는 실제로는 위치·자세를 모름.
  • 그러나 DUSt3R는 이미지2 픽셀을 camera1 좌표계로 옮겨 놓은 포인트맵(X²,¹)을 회귀하므로,
    • 별도 보정(COLMAP 등) 없이도 두 이미지를 공통 3D 공간에서 맞출 수 있게 됨.

 

  • 일반적인 파이프라인:
    1. 여러 이미지에서 특징점을 찾음 →
    2. COLMAP으로 카메라 파라미터(내부·외부) 추정 →
    3. 3D 구조(포인트 클라우드) 생성
  • DUSt3R 방식:
    • 이미지2의 포인트맵을 이미 camera1 좌표계로 표현해버림.
    • 두 이미지를 동일 좌표계에서 다룰 수 있으니, 추가적인 카메라 정렬(Registration) 과정이 필요 없음.

 

 

[ Method ]

 

<개념>

1. Pointmap : 2D 이미지의 각 픽셀(2D)과 정확히 하나의 3D 점을 짝지어 놓은 구조

2. 픽셀 + 깊이 → 3D 점(카메라 좌표계)

3. 카메라 n의 좌표계에서 정의된 3D 점을, 카메라 m의 좌표계로 변환

 

 

<방법 정리>

두 장의 이미지를 입력받아, 포인트맵신뢰도 맵직접 회귀(deep regression) 방식으로 추정하는 네트워크를 제안하고,
두 번째 이미지에서 얻은 3D 점들도 첫 번째 카메라 좌표계로 표현함으로써 간단하고 효율적인 3D 재구성을 구현한다.

 

< Network architecture >

1. CroCo[150] 기반

  • 네트워크  CroCo라는 이전 연구의 아키텍처 아이디어를 활용. 사전 학습된 모델(Pretrained Model)을 가져와 재활용(Transfer Learning)하기 쉬움.

2. 두 개의 동일한 브랜치(Siamese 구조)

  • 가중치 공유(Weight-sharing)를 통해, 두 브랜치가 동일한 네트워크로 이미지를 처리함.

3. ViT(비전 트랜스포머) 인코더

  • 두 입력 이미지는 동일한 ViT 인코더(가중치 공유)에 들어감.

4. 디코더와 회귀 헤드

  • 인코더 출력 토큰을 받아, 디코더가 두 이미지를 상호 참조(cross-attention)하며 3D 정보 추정을 진행.

디코더 블록은 다음과 같은 순서로 동작한다:

  • 셀프 어텐션(self-attention): (한 뷰의 각 토큰이 같은 뷰의 다른 토큰들을 참조)
  • 크로스 어텐션(cross-attention): (한 뷰의 각 토큰이 다른 뷰의 모든 토큰을 참조)
  • 그리고 나서 토큰들을 MLP에 전달한다.

중요한 점은, 디코더가 진행되는 동안 두 브랜치 간에 정보가 계속 공유된다는 것이다. 이는 정확하게 정렬(aligned)된 포인트맵을 출력하기 위해 매우 중요하다. 구체적으로는, 각 디코더 블록에서 한쪽 브랜치가 다른 브랜치의 토큰을 참조하게 된다. 마지막으로, 각 브랜치에는 별도의 회귀(regression) 헤드가 있어서, 디코더의 토큰들을 받아 포인트맵신뢰도(confidence) 맵을 출력한다

반응형