본문 바로가기
  • 책상 밖 세상을 경험할 수 있는 Playground를 제공하고, 수동적 학습에서 창조의 삶으로의 전환을 위한 새로운 라이프 스타일을 제시합니다.
Computer Vision

[2025-1] 전연주 - NeuralRecon: Real-Time Coherent 3D Reconstruction from Monocular Video

by YeonJuJeon 2025. 3. 22.

논문 링크: 2104.00681

단안 영상 한 장 한 장을 보면서, 점점 정확한 3D 공간 지도를 만들어가는 시스템


1. Introduction

3D 장면 복원(3D Scene Reconstruction)은 3D Computer Vision 분야에서 매우 중요한 과제이다. 다양한 실내·실외 환경에서 3D 정보를 정확히 얻어내야 하는데, 특히 증강현실(AR)처럼 실시간 상호작용이 필요한 경우에는 정확성(Accuracy) 일관성(Coherency), 그리고 실시간성이 모두 필수적이다.

  • 기존 문제점
    • Depth-based 접근: 여러 Key frame에서 각각 Single-view Depth map을 추정하고, 이를 TSDF(Truncated Signed Distance Function)에 융합(Fuse)하는 방식이 주류였다.
    • 그러나 이 방식은 (1) 뷰별 단절된(single-view) 추정으로 인해 스케일이 불안정(절대적인 거리를 추정하기 어려움)해지고, 결과물에 겹치거나 깨어진 부분이 많이 생긴다.
    • (2) 중복 계산 문제도 크며, 같은 표면을 여러 Key frame에서 매번 재추정해야 한다.
      • Key frame
        • 연속된 프레임 중 3D 복원에 기여할만한 정보가 충분한 대표 프레임만 선택하여 계산 효율을 높이는 구조
  • NeuralRecon의 제안
    이를 해결하기 위해, NeuralRecon은 단안(Monocular) 비디오에서 바로 3D Volumetric Representation(즉, TSDF)을 Coarse-to-fine 방식으로 점진적으로 복원하는 시스템을 제안한다.
    • Sparse 3D Convolution을 사용하여 3D Feature Volume을 처리하고,
    • 이전에 쌓인 정보(전역 Global Volume)와 현재 Local Fragment 정보를 GRU 기반 TSDF Fusion으로 융합함으로써,
    • 정확하고(Coherent), 밀집된(Dense) 3D 복원을 실시간으로 달성한다.
      • TSDF (Truncated Signed Distance Function)
        • Voxel 형태로 단위공간을 나누어 surface 라고 판단되는 곳은 0, Surface 안쪽은 음수 , Surface 바깥쪽은 양수로 표현하는 방식 -> voxel 안에 "이 위치가 물체 표면에서 얼마나 떨어져 있나?(depth)"를 저장하는 방식
        • (3D scene reconstruction의 목적은 Surface 를 찾아 recon 하는 것인데 이때 surface 를 표현하는 함수를 SDF 라고 함)
  • 결과
    실험적으로, ScanNet 및 7-Scenes 데이터셋에서 여러 최신 기법을 능가하는 정확도와, 초당 33 Key frame(Atlas 대비 10배 빠름)으로 동작하는 효율성을 입증했다.

2. Related Work

1. Multi-view Depth Estimation(기존 Depth 예측 방식)

  • 과거에는 여러 장의 사진을 비교해서 깊이를 계산했음. (ex. Stereo 방식, Plane-sweeping Stereo)
  • 최근에는 딥러닝 기반 방식(MVDepthNet, CNMNet 등)이 등장 → 빠르고 효율적으로 Depth map 예측 가능
  • 하지만 여전히 각 프레임에서 depth를 따로 예측해서 서로 불연속적(전 프레 기억 x)이고, 계산도 중복됨

2. Volumetric & MVS(기존 복원 방식)

  • MVSNet: 3D 공간에 cost volume을 만들어서 깊이를 예측하는 딥러닝 모델
  • Atlas: 3D 볼륨 전체를 예측하고 TSDF로 표현 → 정확하긴 하지만 오프라인 방식이라 실시간 불가능
  • SurfaceNet: 단순한 점유 여부(있다/없다)만 예측해서 한계 있음

3. 기존 Fusion 방식

  • KinectFusion 이후로, Depth map을 여러 장 얻어서 TSDF에 계속 쌓는 방식 사용
  • 근데 이건 너무 많이 중복 계산하고, 같은 벽이나 바닥을 여러 번 예측함
  • RoutedFusion 같은 방식은 이 문제를 일부 개선했지만, 여전히 한계 존재

4. Neural Implicit Representation

  • 요즘은 아예 3D 공간을 함수로 표현하려는 시도도 있음 (예: PIFu)
  • 하지만 이건 단일 객체 중심(Nerf, PIFu)이라, NeuralRecon 같은 장면 단위 복원에는 적합하지 않음

즉, 과거 방식은 깊이를 따로따로 예측하거나, 전체 시퀀스를 한 번에 처리하느라 실시간성이 부족했음. NeuralRecon은 fragment 단위로 sparse하게 예측하고 GRU로 융합해서, 빠르고 일관된 3D 복원을 가능하게 함.


3. Methods

이 그림은 NeuralRecon의 전체 아키텍처를 나타낸다. 왼쪽에는 SLAM을 통해 포즈가 추정된 Key frame 이미지들이 있으며, 이들은 하나의 Local Fragment를 구성한다. 각 이미지에서 multi-level feature를 추출한 후, ray 방향으로 back-projection하여 3D feature volume을 생성한다. 이후 coarse-to-fine 방식의 3단계 reconstruction이 수행되며, 각 단계에서는 GRU Fusion을 통해 이전까지의 global hidden state와 현재 feature를 융합하고, MLP를 통해 occupancy와 SDF 값을 예측한다. 예측된 TSDF는 sparsify된 뒤 다음 단계로 전달되며, 이전 레벨의 결과는 upsample되어 concat 후 다시 입력으로 사용된다. 마지막 단계에서는 예측된 TSDF가 전역 좌표계로 변환되어 global TSDF volume에 replace되며, 최종적으로 Marching Cubes를 통해 3D mesh가 추출된다. * SLAM: 동시에 "내 위치 추정" + "주변 지도 만드는" 기술
(i) Unprojection: 두 개의 카메라에서 얻은 이미지 Feature를 ray 방향으로 back-projection하여 3D 공간의 Feature Volume을 구성한다. 같은 위치를 여러 뷰에서 본 경우에는 평균(Average)을 통해 Feature를 통합한다. (ii) GRU Fusion: 이전 시점의 Hidden State $H^g_{t-1}$와 현재 추출한 Feature $F_t^l$을 GRU 모듈을 통해 융합한다. 이 과정에서 3D Sparse Convolution을 통해 Geometric Feature $G_t^l$를 추출하고, 새로운 Hidden State $H_t^l$​를 업데이트하여 Global Volume에 반영한다. (iii) Sparse TSDF Representation: 복원된 TSDF 볼륨 중, 표면 근처(Truncation 거리 λ 이내)에 있는 Voxel만 유지하고 나머지는 sparsify한다. 색상은 서로 다른 TSDF 값을 의미하며, Surface가 위치한 영역은 회색 ㅈ선으로 표시된다. * Truncation: 표면 근처만 계산하고, 먼 곳은 무시하는 거리 제한

NeuralRecon은 크게 Local Fragment 단위 Reconstruction GRU Fusion이라는 두 가지 핵심 아이디어를 도입한다.

3.1 Key Frame Selection

효율적인 Incremental 복원을 위해, 영상 스트림 중에서 Key frame만 골라 처리한다.
상대 이동량(Translation)과 회전(Rotation)이 특정 임계값을 넘으면 새 Key frame으로 선정하고, 이렇게 뽑힌 개의 Key frame을 모아 Local Fragment로 정의한다.
그 후, 이들이 함께 볼 수 있는 Bounding Volume(FBV)만 선택적으로 복원한다.

* FBV: 선택된 Key frame들이 공통으로 볼 수 있는 3D 공간 영역

* Local Fragment = 시간상/공간상 가까운 N개의 key frame 묶음 + 공통 시야로 정의된 FBV 영역

3.2 Joint Fragment Reconstruction and Fusion

Image Feature Volume Construction

Fragment에 포함된 여러 Key frame 이미지는 Image Backbone을 통해 멀티 레벨의 Feature를 추출한다.
이 Feature들은 각 화소의 Ray 방향을 따라 3D 공간으로 Back-projection되어 3D Feature Volume을 형성한다.
이때, 각 보켈(Voxel)이 몇 개의 카메라 뷰에서 관측 가능한지를 Visibility weight로 계산하며, 이를 기준으로 Feature들을 가중 평균하여 Image Feature Volume $F_t^l$을 생성한다.

Coarse-to-fine TSDF Reconstruction

복원은 해상도가 낮은 coarse 단계에서 시작하여 점차 고해상도 fine 단계로 진행된다.
각 단계에서는 Feature Volume $F_t^l$을 Sparse 3D Convolution으로 처리하여 TSDF Volume $S_t^l$을 예측한다.
TSDF Volume은 Occupancy score와 SDF 값 두 가지 정보를 포함하며,

  • Occupancy score는 해당 보켈이 표면 근처일 확률을 나타내고,
  • SDF 값은 표면까지의 거리로 정의된다.

Occupancy score가 임계값 이하인 보켈은 Void space로 간주되어 제거(sparsify)된다.
이후, 예측된 TSDF Volume은 2배로 Upsample되고 다음 단계의 Feature와 Concatenate되어 상위 레벨의 입력으로 전달된다.
이러한 구조 덕분에 각 Fragment 내에서 Implicit surface를 한 번에 복원할 수 있으며, 중복 계산 없이 효율적인 학습이 가능하다.

* sparsify: 불필요한 voxel을 제거해서 TSDF 볼륨을 더 희소(sparse)하게 만든다. 각 voxel(3D 픽셀)마다 occupancy score를 예측하고, 이 점수가 일정 임계값보다 낮으면, 그 voxel은 표면과 관련 없는 빈 공간(void space)이라고 판단해 제거. 결과적으로, TSDF 볼륨에는 표면 근처의 중요한 voxel만 남기고 나머지는 비워두게 됨.

GRU Fusion

현재 Fragment에서 추출한 3D Geometric Feature $G_t^l$과 이전까지 누적된 Global hidden state $H_{t-1}^l$는 3D Convolutional GRU를 통해 융합된다.
GRU는 시간 순서상의 연속성을 반영하기 위한 구조로, 다음과 같은 수식으로 정의된다.

$$\begin{aligned} z_t &= \sigma(\text{SparseConv}([H_{t-1}^l \,\|\, G_t^l]W_z)) \\ r_t &= \sigma(\text{SparseConv}([H_{t-1}^l \,\|\, G_t^l]W_r)) \\ \tilde{H}_t^l &= \tanh(\text{SparseConv}([r_t \odot H_{t-1}^l \,\|\, G_t^l]W_h)) \\ H_t^l &= (1 - z_t) \odot H_{t-1}^l + z_t \odot \tilde{H}_t^l \end{aligned}$$

이 과정을 통해 생성된 새로운 Hidden State $H_t^l$은 Global Volume의 해당 위치에 Replace되어 전체 장면의 정보가 갱신된다.
GRU Fusion은 기존의 평균 기반 TSDF Fusion보다 더 선택적으로 정보를 통합하며, 시계열적인 일관성을 유지하는 데 유리하다.

Integration to the Global TSDF Volume

최종 단계(l = 3)에서 예측된 TSDF $S_t^3$은 필요에 따라 sparsify 과정을 거쳐 $S_t^l$로 사용된다.
이 TSDF는 이미 GRU Fusion을 통해 Global TSDF Volume $S_t^g$에 반영할 준비가 되어 있는 상태이다.
$S_t^l$을 전역 좌표계로 변환한 후, 대응되는 Global Volume의 보켈에 직접 Replace함으로써 통합이 이루어진다.
이후 Marching Cubes 알고리즘을 통해 3D Mesh가 최종적으로 생성된다.

* Marching Cubes: Voxel 데이터에서 표면이 될 부분만 골라 삼각형으로 메쉬를 만들어주는 방식

Loss

Loss 구성에 따른 재구성 품질 비교 왼쪽부터 각각 SDF Loss만 적용한 경우, Occupancy Loss만 적용한 경우, 두 Loss를 모두 적용한 경우의 복원 결과를 보여준다. 왼쪽 (SDF Loss만 사용): 표면은 일부 정교하지만 잡음이 많고 불완전한 영역이 존재한다. 가운데 (Occupancy Loss만 사용): voxel이 지나치게 조밀하게 유지되어 전체 구조가 흐릿하고 부정확하다. 오른쪽 (SDF + Occupancy Loss 모두 사용): 균형 잡힌 복원이 이루어지며, 표면이 더 깔끔하고 일관된 형태로 복원된다. 이 그림은 두 손실 함수를 함께 사용하는 것이 모델의 학습 안정성과 복원 품질 향상에 효과적임을 시각적으로 보여준다.

Occupancy Loss SDF Loss 두 가지를 사용해 전체 네트워크(Coarse-to-fine 모든 레벨)를 학습시킨다.

  • Occupancy Loss: 예측된 Occupancy와 GT Occupancy 사이의 Binary Cross-Entropy(BCE)
  • SDF Loss: 예측된 SDF와 GT SDF 사이의 $\ell_1$ 거리
    • 단, 예측과 GT의 SDF 값을 각각 Log 변환한 뒤 $\ell_1$ 손실을 적용한다.

이렇게 함으로써 모델이 각 레벨에서의 Occupancy와 SDF를 균형 있게 학습하도록 유도한다.

3.3 Implementation Details

  • Sparse Convolution은 torchsparse로 구현한다.
  • Image Backbone은 MnasNet 변형과 Feature Pyramid Network를 적용하며, ImageNet으로 학습된 가중치를 사용한다.
  • 마지막 레벨의 Voxel 크기는 4cm, Truncation 거리는 12cm이고, $$d_{\max} = 3m,\, R_{\max} = 15^\circ,\, t_{\max} = 0.1m,\, \alpha = 0.5$$이다.

4. Experiments

다양한 실내 데이터셋(ScanNet, 7-Scenes)에서 NeuralRecon의 3D 복원 품질과 속도를 비교했다.

4.1 Datasets, Metrics, Baselines, Protocols

  • Datasets
    • ScanNet: 1613개 실내 장면에 대한 GT 포즈·Surface를 제공한다.
    • 7-Scenes: 소규모 실내 RGB-D이며, ScanNet에서 학습된 모델을 그대로 적용해 일반화 성능을 본다.
  • Metrics
    • 3D Geometry (예: F-score, Accuracy, Recall, Precision), 2D Depth (예: RMSE, AbsRel 등)
  • Baselines
    • 실시간 Multi-view Depth(GPMVS): 실시간 처리 효율 중요, 깊이 추정 정확도 제한적.
    • 오프라인 MVS(Atlas): 높은 정확도.
    • Learning-based SLAM: 카메라 포즈 추정 & 복원 동시 수행, scale 추정 정확 x.

4.2 Evaluation Results

  • ScanNet
    • NeuralRecon은 COLMAP(전통 MVS) 및 다른 학습 기반 기법보다 높은 정확도와 F-score를 달성한다.
    • Atlas 대비 정확성과 정밀도가 모두 우수하다.
    • 오프라인 방식(Atlas)은 Coverage가 넓지만, 종종 Over-smoothed 지오메트리를 생성한다.
  • 7-Scenes
    • CNMNet과 유사하거나 더 나은 결과이며, 다른 방법보다 뛰어난 성능을 보인다.
    • ScanNet으로만 학습했음에도 Domain Generalization 성능이 우수하다.
  • Efficiency (속도)
    • Key frame당 30ms, 즉 33FPS로 실시간을 달성한다.
    • Atlas 대비 10배 빠르고, Sparse Conv와 Local Fragment 방식이 중복 계산을 줄여준다.

4.3 Ablation Study

  • Feature Fusion(Avg) vs. Linear Fusion: 정밀도 개선
  • GRU vs. Avg: Recall 개선(더 완전한 복원)
  • Fragment Bounding Volume(FBV) 사용 시, 경계·지면 등에서 노이즈 감소
  • Fragment 내 View를 9개로 설정했을 때 F-score가 최적

Qualitative Results

 

 

Figure 4:

  • NeuralRecon이 기존 기법보다 더 일관되고(Coherent) 정밀한(Sharp) 지오메트리를 복원함을 확인할 수 있다.
  • Atlas 대비 더 선명한 구조를 유지하는데, 이는 NeuralRecon이 Local Fragment 내에서만 복원하고 불필요한 원거리 카메라 뷰의 정보를 배제하기 때문이다.

Figure 5:

i) 기존 방식처럼 TSDF를 단순 평균하여 융합한 경우, 표면이 거칠고 복원 품질이 낮다.
ii) Feature level에서 단순 평균으로 fusion을 수행하면, 보다 부드럽고 정확한 표면이 복원되며 precision이 약 5% 향상된다.
iii) 평균 대신 GRU를 사용하면, 정보를 선택적으로 통합할 수 있어 recall이 4% 증가하고 전체 복원 품질이 개선된다.
iv) Fusion 범위를 fragment bounding volume 내로 제한하면, 경계 영역의 context가 반영되어 바닥 및 벽의 노이즈가 줄고 표면 일관성이 향상된다.
v) Fragment에 포함되는 keyframe 수를 늘리면(9 views) 더 넓은 시야 정보를 활용할 수 있어 geometry 복원 정확도와 F-score가 추가로 향상된다.


5. Conclusion

https://tv.kakao.com/v/440084445

Contribution

  • 단안 비디오 입력만으로 실시간 3D 복원을 수행하는 NeuralRecon을 제안
  • Sparse 3D Convolution과 GRU 기반 Fusion을 결합하여, 정확하고 일관된 TSDF 볼륨을 복원
  • key frame 간 일관성을 유지하면서도, 초당 33 frame 수준의 실시간 속도 달성
  • 복원된 TSDF 볼륨은 3D Detection, Segmentation, Neural Rendering 등 downstream task에 직접 활용 가능

Novelty

  • fragment 단위로 TSDF를 복원하면서, 동시에 GRU를 통해 이전 시점 정보와 융합
  • 단순 평균 기반 TSDF Fusion 대신, selective하게 정보 통합하는 GRU gating 구조 사용
  • Depth map을 반복 예측하지 않고, fragment 내부에서 implicit surface를 한 번에 복원
  • 전체 시퀀스를 필요로 하지 않아, 오프라인 방식(Atlas) 대비 가볍고 빠른 구조

Limitations

  • voxel 기반 TSDF 방식은 high-resolution 복원에는 한계가 있음
  • depth 정보만 사용하므로, 벽이나 바닥처럼 texture가 부족한 영역에서 오류 발생 가능
  • 복잡한 지오메트리 표현에는 일정 수준의 정확도 손실이 존재

Future Work

  • GRU 대신 Transformer 기반 구조로 temporal consistency를 더 넓은 범위까지 확장 가능
  • TransformerFusion (NeurIPS 2021), Vortx (3DV 2021) 등 후속 연구에서 attention 기반 fusion 시도가 이루어지고 있음
  • NeuralRecon도 multi-view feature fusion에서 attention 구조를 접목하면 더 정교한 3D 복원 가능
  • 향후 3D segmentation, object detection과 end-to-end로 통합 학습하는 방향으로 확장 가능