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
- Transformer Decoder
- 두 인코더 출력(F¹, F²)을 받아 교차-어텐션(cross-attention) 등을 통해 정보를 상호 교환.
- 즉, 이미지1에서 나온 토큰과 이미지2에서 나온 토큰이 서로 정보를 주고받아 더 정확한 3D 정보를 추정.
- 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 공간에서 맞출 수 있게 됨.
- 일반적인 파이프라인:
- 여러 이미지에서 특징점을 찾음 →
- COLMAP으로 카메라 파라미터(내부·외부) 추정 →
- 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) 맵을 출력한다