Neural Radiance Fields (NeRF)
신경 방사 필드(NeRF)는 포즈가 지정된 사진으로 학습한 신경망에 3D 장면을 저장하고, 카메라 광선을 따라 볼륨 렌더링해 새로운 시점을 생성합니다.
신경 방사장(NeRF)은 3D 장면을 임의의 3D 위치와 시선 방향을 밀도와 색상에 매핑하는 신경망으로 표현하며, 카메라 위치가 알려진 일반 사진 모음으로 학습합니다. 뷰를 렌더링할 때는 각 픽셀을 통과하는 광선을 따라 네트워크에 여러 지점의 값을 질의하고, 볼륨 렌더링으로 결과를 혼합합니다. 따라서 학습된 NeRF는 어떤 카메라도 촬영하지 않은 시점에서 장면을 보여줄 수 있습니다. UC Berkeley, Google Research, UC San Diego의 Ben Mildenhall, Pratul Srinivasan, Matthew Tancik과 동료들은 ECCV 2020에서 NeRF: 시점 합성을 위한 장면의 신경 방사장 표현 논문을 통해 이 방법을 소개했습니다. NeRF는 메시 기반 사진측량이 제대로 처리하지 못하는 반사, 얇은 구조물, 반투명 재질을 재현하며, 신경 렌더링 연구의 물결을 일으켜 가우시안 스플래팅으로 이어졌습니다.
신경 복사장이 작동하는 방식#
기본 NeRF는 합성곱이 없는 다층 퍼셉트론입니다. 인코딩된 3D 위치를 256채널의 완전 연결 계층 8개로 처리해 볼륨 밀도와 256개 값으로 구성된 특성 벡터를 출력합니다. 특성 벡터는 인코딩된 시선 방향과 결합된 뒤 128채널 계층 하나를 더 거쳐 RGB 색상을 출력합니다. 밀도는 위치에만 좌우되므로 여러 시점에서 일관된 기하 구조를 유지하고, 색상은 방향에도 좌우되므로 카메라가 움직일 때 위치가 바뀌는 정반사 하이라이트와 반사를 포착합니다.
픽셀을 렌더링하기 위해 NeRF는 먼저 조밀한 네트워크로 카메라 광선을 따라 64개 지점을 샘플링한 다음, 조밀한 단계에서 밀도가 있는 것으로 확인된 지점에서 128개를 더 샘플링하고 모든 지점에서 세밀한 네트워크를 평가합니다. 각 샘플은 불투명도와 투과도에 비례해 색상에 기여합니다. 투과도는 해당 샘플 앞에 있는 샘플을 통과한 빛의 비율이며, 가중 합이 픽셀 색상이 됩니다. 학습은 4,096개 광선 배치에서 렌더링된 픽셀 색상과 촬영된 픽셀 색상 간 제곱 차이를 최소화합니다. 카메라 포즈는 보통 COLMAP과 같은 Structure from Motion 소프트웨어로 계산하며, 한 장면을 학습하는 데 NVIDIA V100 GPU에서 100,000~300,000회 반복, 즉 약 1~2일이 소요되었습니다.
원시 좌표를 입력받는 기본 MLP는 매끄러운 함수를 학습하고 세밀한 부분을 흐릿하게 표현하므로, NeRF는 먼저 각 좌표를 주파수가 두 배씩 증가하는 사인과 코사인으로 매핑합니다. 위치에는 10개, 방향에는 4개 주파수를 사용합니다. 다음 PyTorch 코드는 위치 인코딩의 유무에 따라 줄무늬가 있는 1D 신호에 동일한 네트워크를 맞춥니다.
import torch
from torch import nn
torch.manual_seed(0)
# Color along one line through a scene, with fine detail such as a striped texture
x = torch.linspace(-1, 1, 512).unsqueeze(1)
target = torch.sin(12 * torch.pi * x) * torch.cos(3 * torch.pi * x)
# NeRF's positional encoding: sines and cosines of the coordinate at 10 doubling frequencies
freqs = 2.0 ** torch.arange(10) * torch.pi
encoded = torch.cat([torch.sin(x * freqs), torch.cos(x * freqs)], dim=1)
for name, inputs in (("raw coordinate", x), ("positional encoding", encoded)):
mlp = nn.Sequential(nn.Linear(inputs.shape[1], 256), nn.ReLU(), nn.Linear(256, 256), nn.ReLU(), nn.Linear(256, 1))
optimizer = torch.optim.Adam(mlp.parameters(), lr=1e-3)
for step in range(1000):
loss = ((mlp(inputs) - target) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"{name}: mean squared error {loss.item():.4f}")raw coordinate: mean squared error 0.0870과 positional encoding: mean squared error 0.0000을 출력합니다. 신호의 평균 전력은 0.25이므로 원시 좌표를 사용하는 네트워크는 신호의 약 3분의 1에 해당하는 세밀한 줄무늬를 놓치지만, 인코딩을 적용한 네트워크는 이를 재현합니다.
더 빠르고 견고한 NeRF#
- 안티앨리어싱 및 무한 범위 장면: Mip-NeRF는 앨리어싱을 제거하기 위해 두께가 무한히 얇은 광선 대신 원뿔을 렌더링하며, Mip-NeRF 360은 이를 무한 범위의 360° 촬영으로 확장합니다.
- 속도: NVIDIA의 Instant NGP는 네트워크의 대부분을 학습된 특성을 저장하는 다중 해상도 해시 테이블로 대체합니다. 그 결과 학습 시간이 며칠에서 몇 초 또는 몇 분으로 줄고, 1920×1080 해상도의 렌더링 시간은 수십 밀리초로 단축됩니다.
- 일반 환경에서 촬영한 사진: NeRF in the Wild는 사진별 외형 임베딩과 별도의 일시적 구성 요소를 추가하므로, 조명이 바뀌고 관광객이 지나가는 인터넷 사진 모음에서도 장면을 깔끔하게 재구성할 수 있습니다.
- 텍스트-3D: DreamFusion은 모든 각도에서 렌더링한 결과가 2D 텍스트-이미지 확산 모델이 보기에 그럴듯해질 때까지 NeRF를 최적화하여, 3D 학습 데이터 없이 프롬프트로 3D 객체를 생성합니다.
NeRF와 관련 개념 비교#
- 가우시안 스플래팅: 장면을 수백만 개의 3D 가우시안으로 명시적으로 저장하고 이를 래스터화하므로, 픽셀마다 네트워크를 평가하지 않고 실시간으로 렌더링합니다. 2023년에 Mip-NeRF 360과 동등한 품질을 달성했으며, 메모리를 더 사용하는 대신 여러 촬영 도구에서 NeRF를 대체했습니다.
- 사진측량: 사진 간 특성을 매칭해 명시적인 메시를 생성합니다. 메시는 용량이 작고 표준 3D 소프트웨어에서 편집할 수 있지만, 반짝이거나 투명한 표면과 매우 얇은 표면은 제대로 처리하지 못합니다.
- 깊이 추정: NeRF는 각 광선이 멈추는 예상 거리를 나타내는 깊이 맵을 부산물로 생성하지만, 한 장면을 포즈가 지정된 여러 사진으로 최적화한 뒤에만 가능합니다. 단안 깊이 모델은 한 번의 순전파로 단일 이미지에서 깊이를 예측합니다.
- 암시적 신경 표현: NeRF는 방사도와 밀도에 특화된 암시적 신경 표현이며, 이미지, 형상 또는 오디오를 연속 함수로 저장하는 네트워크도 이 범주에 속합니다.
촬영 요건#
NeRF는 일정한 조명 아래 정적인 장면을 정확한 카메라 포즈로 지정된 여러 중첩 시점에서 촬영한다고 가정합니다. 원 논문에서는 합성 객체 하나당 렌더링된 뷰 100개, 실제 정면 시점 장면 하나당 사진 20~62장으로 학습했습니다. 행인이나 자동차처럼 촬영 중 움직이는 물체는 어떤 사진에는 있고 다른 사진에는 없어서 최적화 과정에서 반투명한 "플로터"로 표현됩니다. Ultralytics YOLO26 인스턴스 분할 모델은 모든 사진에서 사람과 차량을 마스킹하므로 해당 픽셀을 통과하는 광선을 학습에서 제외할 수 있습니다.
실제 적용 사례#
- 영화 및 가상 프로덕션: 촬영한 장소를 재구성하고 새로운 카메라 경로에서 렌더링해 사실적인 배경과 세트 레퍼런스를 만듭니다.
- 로봇공학 및 주행 시뮬레이션: 기록된 환경을 재구성하면 자율주행차 및 로봇공학 팀이 원래 주행에서 촬영하지 않은 위치의 센서 뷰를 렌더링할 수 있습니다.
- 제품 시각화: 제품 사진 수십 장을 이용해 쇼핑객이 자유롭게 회전하며 볼 수 있는 인터랙티브 뷰를 만듭니다.
- 지도: Google은 Google Maps의 몰입형 뷰를 위해 장소당 약 한 시간 동안 촬영한 DSLR 사진으로 NeRF를 사용해 레스토랑과 카페 내부를 재구성했습니다. Mip-NeRF 360을 기반으로 NeRF in the Wild의 외형 임베딩과 Block-NeRF의 노출 조건화를 적용하고, 선별된 비행 경로를 따라 볼 수 있는 인터랙티브 360° 동영상으로 제공했습니다.










