RAFT-Stereo: 다중 해상도 순환 필드 변환을 활용한 스테레오 매칭

《RAFT-Stereo: Multilevel Recurrent Field Transforms for Stereo Matching》는 반복적 시차 추정 분야의 기념비적인 연구로, RAFT 광류 추정 프레임워크를 스테레오 매칭에 맞게 개선한 모델이다. 주요 기여는 다음 세 가지로 정리할 수 있다.

전체 아키텍처 개요

┌─────────────────────────────────────────────────────────┐
│  단계 1: 특징 추출                                      │
│  ├─ 특징 인코더: 좌우 영상의 표현 학습 (상관 볼륨 구성용) │
│  └─ 문맥 인코더: 좌측 영상의 문맥 특징 (GRU 갱신용)        │
│         (선택적: 특징 인코더와 백본 공유 가능)            │
├─────────────────────────────────────────────────────────┤
│  단계 2: 상관 피라미드                                   │
│  └─ 3D 상관 볼륨 C ∈ ℝ^(H×W×W) 구성                     │
│     1D 풀링으로 4단계 피라미드 생성 (커널: 1, 2, 4, 8)   │
├─────────────────────────────────────────────────────────┤
│  단계 3: 다중 해상도 반복 갱신                           │
│  └─ 3단계 ConvGRU (1/8, 1/16, 1/32 해상도)              │
│     ├─ 고해상도 GRU: 상관 조회 수행, 시차 직접 갱신       │
│     ├─ 저해상도 GRU: 전역 문맥 제공, 해상도 간 정보 전달   │
│     └─ Slow-Fast: 저해상도는 빈번히, 고해상도는 드물게    │
└─────────────────────────────────────────────────────────┘

ConvGRU와 다중 해상도 ConvGRU 비교 분석

RAFT의 단일 해상도 ConvGRU

입력 구성

논문 3.3절에 명시된 입력 특징:

입력 특징 = [상관 특징, 흐름 특징, 문맥 특징]

각 구성요소:

  • 상관 특징: 다중 척도 상관 볼에서 조회 연산으로 샘플링 후 2개 합성곱층 처리
  • 흐름 특징: 현재 흐름 추정값 fᵏ를 2개 합성곱층으로 변환
  • 문맥 특징: 문맥 인코더 출력 (직접 주입)

특징 차원

x_t = Concat([상관특징, 흐름특징, 문맥특징])
     ∈ R^(H/8 × W/8 × C_총합)

GRU 셀 동작

논문 식 (3)-(6) 기반 게이트 순환 구조:

z_t = σ(Conv3x3([h_{t-1}, x_t], W_z))    # 리셋 게이트
r_t = σ(Conv3x3([h_{t-1}, x_t], W_r))    # 업데이트 게이트
h̃_t = tanh(Conv3x3([r_t ⊙ h_{t-1}, x_t], W_h))  # 후보 은닉 상태
h_t = (1 - z_t) ⊙ h_{t-1} + z_t ⊙ h̃_t    # 은닉 상태 갱신

출력 및 갱신

Δf = Conv1x1(h_t) ∈ R^(H/8 × W/8 × 2)
f^{k+1} = f^k + Δf

동작 흐름

k번째 반복:
┌─────────────────────────────────────────┐
│ 1. 상관 조회                            │
│    - f^k로 다중 척도 상관 볼륨 샘플링    │
│    - correlation_feat 획득              │
└────────────┬────────────────────────────┘
             │
┌────────────▼────────────────────────────┐
│ 2. 특징 처리                            │
│    - correlation_feat → Conv(2층)      │
│    - f^k → Conv(2층)                   │
│    - context_feat (직접)                │
│    x_t = Concat(...)                     │
└────────────┬────────────────────────────┘
             │
┌────────────▼────────────────────────────┐
│ 3. ConvGRU 갱신                         │
│    z_t = σ(Conv3x3([h_{t-1}, x_t]))    │
│    r_t = σ(Conv3x3([h_{t-1}, x_t]))    │
│    h_t = (1-z_t)⊙h_{t-1} + z_t⊙h̃_t    │
└────────────┬────────────────────────────┘
             │
┌────────────▼────────────────────────────┐
│ 4. 흐름 예측                            │
│    Δf^k = Conv1x1(h_t)                  │
│    f^{k+1} = f^k + Δf^k                 │
└─────────────────────────────────────────┘

RAFT-Stereo의 다중 해상도 ConvGRU

핵심 개선

RAFT-Stereo 논문 3.3절에서 단일 해상도의 한계 지적:

"이 방식의 문제는 GRU 갱신 횟수에 따른 수용 영역(receptive field) 가가 매우 느리다는 점이다. 텍스처가 거의 없는 넓은 영역이 있는 장면에서 문제가 될 수 있다."

3-해상도 병렬 구조

동시에 유지되는 은닉 상태:

  • h⁽¹⁾ @ 1/8 해상도 (고해상도, 상관 조회 수행)
  • h⁽²⁾ @ 1/16 해상도 (중간 해상도)
  • h⁽³⁾ @ 1/32 해상도 (저해상도)

입력-출력 구조

k번째 반복의 각 GRU 입력:

GRU⁽¹⁾: x⁽¹⁾ = [CorrLookup(dᵏ), dᵏ, context⁽¹⁾, 업샘플(h⁽²⁾)]
GRU⁽²⁾: x⁽²⁾ = [다운샘플(h⁽¹⁾), 업샘플(h⁽³⁾)]
GRU⁽³⁾: x⁽³⁾ = [다운샘플(h⁽²⁾)]

여기서 dᵏ는 k단계 시차 추정값, 상관 조회는 최고 해상도(1/8)에서만 수행된다.

출력

최고 해상도 GRU만 시차 갱신 생성:

Δdᵏ = Conv1x1(h_t⁽¹⁾) ∈ R^(H/8 × W/8 × 1)

다중 해상도 동작 흐름

k번째 반복:
┌──────────────────────────────────────────────────────┐
│ 단계 1: 상관 조회 (1/8 해상도에서만)                  │
│   corr_feat = LookupCorrelation(dᵏ @ 1/8)             │
└────────────┬─────────────────────────────────────────┘
             │
┌────────────▼─────────────────────────────────────────┐
│ 단계 2: 다중 해상도 입력 구성                          │
│                                                       │
│ ┌─ GRU@1/32 ──────────────────────────────────┐      │
│ │ x⁽³⁾ = [다운샘플(h⁽²⁾)]                      │      │
│ │ h⁽³⁾_새로운 = GRU(h⁽³⁾, x⁽³⁾)                │      │
│ └──────────────────────────────────────────────┘      │
│                                                       │
│ ┌─ GRU@1/16 ──────────────────────────────────┐      │
│ │ x⁽²⁾ = [다운샘플(h⁽¹⁾), 업샘플(h⁽³⁾_새로운)] │      │
│ │ h⁽²⁾_새로운 = GRU(h⁽²⁾, x⁽²⁾)                │      │
│ └──────────────────────────────────────────────┘      │
│                                                       │
│ ┌─ GRU@1/8 ───────────────────────────────────┐      │
│ │ x⁽¹⁾ = [corr_feat, dᵏ, ctx,                │      │
│ │          업샘플(h⁽²⁾_새로운)]                 │      │
│ │ h⁽¹⁾_새로운 = GRU(h⁽¹⁾, x⁽¹⁾)                │      │
│ └──────────────────────────────────────────────      │
└────────────┬─────────────────────────────────────────┘
             │
┌────────────▼─────────────────────────────────────────┐
│ 단계 3: 시차 갱신 (최고 해상도 GRU에서)               │
│   Δdᵏ = Conv1x1(h⁽¹⁾_새로운)                          │
│   d^{k+1} = dᵏ + Δdᵏ                                  │
└──────────────────────────────────────────────────────

단일 vs 다중 해상도 비교

특성RAFT (단일)RAFT-Stereo (다중)
은닉 상태 수1개 @ 1/83개 @ 1/8, 1/16, 1/32
수용 영역 확장느림 (합성곱만)빠름 (해상도 간 전파)
상관 조회1/8에서 모두1/8에서만 (최고 해상도)
전역 정보 전달제한적업/다운샘플링으로 강화
저텍스처 영역실패 가능현저한 개선
계산량기준+58% (표6: 0.132s vs 0.091s)
정확도 향상-유의미한 향상

Slow-Fast 반복: 적응적 계산 분배

병목 분석

논문 3.4절 관찰:

"1/8 해상도 은닉 상태의 GRU 갱신은 1/16 해상도 갱신에 비해 약 4배의 FLOPs가 필요하다."

해상도 R의 특징맵에서 GRU 갱신 FLOPs는 R²에 비례. H×W 영상에서:

FLOPs_{1/8} : FLOPs_{1/16} : FLOPs_{1/32} = 64 : 16 : 4

Slow-Fast 갱신 전략

비동기 갱신 빈도

  • 빠른 층 (1/32, 1/16): 더 빈번한 갱신
  • 느린 층 (1/8): 더 드문 갱신

구체적 비율

논문 3.4절 및 표6:

표준 갱신: 매 반복마다 h⁽¹⁾, h⁽²⁾, h⁽³⁾ 각 1회 갱신

Slow-Fast 갱신:
  h⁽³⁾ (1/32): 30회 갱신
  h⁽²⁾ (1/16): 20회 갱신  
  h⁽¹⁾ (1/8):  10회 갱신

비율: 30 : 20 : 10 = 3 : 2 : 1

성능 비교 (표6 데이터)

설정실행 시간정확도(1px 오류)변화
표준 (32-32-32)0.132s9.40기준
Slow-Fast (30-20-10)0.063s9.9852% 가속, +0.58% 오류

효과성 원리

저해상도 (1/32, 1/16):

  • 전역 움직임과 장거리 의성 학습
  • 큰 수용 영역, 낮은 해상도
  • 빈번한 갱신 불필요 (저주파 정보)

고해상도 (1/8):

  • 국소 세부사항과 경계 학습
  • 미세 조정 필요 (고주파 정보)
  • 단일 갱신 비용이 높음

실시간 추론 구성

KITTI 해상도 (1248×384) 최적화

논문 4.7절 실시간 버전:

실시간 RAFT-Stereo 설정:
1. 2단계 GRU (1/8 및 1/16, 3단계 대신)
2. 단일 공유 백본 (분리 인코더 대신)
3. Slow-Fast 갱신 전략
   - 1/16 층: 고빈도 갱신
   - 1/8 층: 저빈도 갱신

성능 지표

  • 프레임률: 26 FPS (KITTI 해상도)
  • D1 오류: 5.91% (DSMNet의 6.5%와 유사)
  • 기본 모델 대비 약 2배 가속

하드웨어 수준 최적화

"추가로, PyTorch 기본 구현이 타임 병목임을 확인하여 CUDA로 자체 이중선형 샘플러를 구현했다."

계산 복잡도 모델

표준 방식 (N번 반복):

총 FLOPs = N × (64 + 16 + 4) × C = 84NC

Slow-Fast 방식:

총 FLOPs = 10×64C + 20×16C + 30×4C = 940C

이론적 가속비 (N=32):

가속비 = 84×32 / 940 ≈ 2.86배

실제 측정 가속비 (표6): 0.132/0.063 = 2.1배 (기타 오버헤드 반영)

핵심 혁신 요약

측면RAFTRAFT-Stereo
아키텍처단일 1/8 GRU다중 3-해상도 GRU
수용 영역 확장순수 합성곱해상도 간 정보 흐름
추론 전략균일 반복적응적 Slow-Fast
실시간 성능10 FPS @ 1088×43626 FPS @ 1248×384
일반화 능력강함더 강함 (다중 척도 정보)

이러한 혁신들이 결합되어 RAFT-Stereo는 높은 정확도를 유지하며 실시간 추론을 실현했다.

태그: RAFT-Stereo 스테레오 매칭 시차 추정 ConvGRU 다중 해상도

7월 19일 04:13에 게시됨