Implicit Neural Representations (INRs)
암시적 신경 표현은 이미지, 형상 또는 3D 장면을 좌표를 값으로 매핑하는 신경망으로 표현하여, 어떤 해상도에서든 조회할 수 있도록 합니다.
암시적 신경 표현(INR)은 신경망, 보통 작은 다층 퍼셉트론(MLP)이 좌표를 값으로 변환하도록 학습해 신호를 연속 함수로 저장합니다. 이미지는 픽셀 위치 (x, y)를 색상으로 변환하는 함수가 되고, 3D 형상은 점 (x, y, z)를 표면까지의 부호 있는 거리로 변환하는 함수가 되며, 장면은 점과 시선 방향을 색상과 밀도로 변환하는 함수가 됩니다. 네트워크의 가중치가 표현 그 자체이므로 픽셀이나 복셀 그리드가 필요하지 않습니다. 따라서 어느 좌표에서나 신호를 조회할 수 있고 출력 해상도가 높아져도 메모리 사용량은 증가하지 않으며, 자동 미분으로 도함수도 추가 비용 없이 얻을 수 있습니다. INR은 좌표 기반 네트워크 또는 신경 필드라고도 하며, 신경 복사 필드와 현대 3D 재구성의 상당 부분을 뒷받침합니다.
암시적 신경 표현의 작동 원리#
INR은 한 번에 신호 하나를 대상으로 맞춥니다. 좌표를 샘플링하고 해당 좌표에서 네트워크 출력과 실제 값을 비교한 다음 경사 하강법으로 가중치를 업데이트합니다. 따라서 신호를 맞추는 과정은 의도적인 과적합입니다. 목표는 해당 신호를 기억하는 것입니다. ReLU 활성화를 사용하는 기본 MLP는 저주파를 고주파보다 훨씬 빠르게 학습하므로 어려움을 겪습니다. Nasim Rahaman과 동료들은 2019년에 이 현상을 스펙트럼 편향이라고 명명했습니다. 원시 좌표를 입력하면 네트워크는 신호를 흐릿하게 재현합니다. 2020년에는 두 가지 개선책으로 INR을 실용화했습니다. 좌표를 여러 주파수의 사인과 코사인으로 변환하는 Matthew Tancik과 동료들의 푸리에 특징 및 NeRF의 위치 인코딩, 그리고 ReLU를 사인 활성화 함수로 바꾸는 방식입니다. 후자는 Vincent Sitzmann과 동료들의 SIREN에 적용되었습니다.
이 PyTorch 예제는 동일한 MLP를 사진에 두 번 맞춥니다. 한 번은 원시 좌표를 사용하고, 다른 한 번은 푸리에 특징을 사용합니다.
import torch
from skimage import data, transform
from torch import nn
torch.manual_seed(0)
# The signal: a 128 x 128 grayscale photo, and the (x, y) coordinate of every pixel in [-1, 1]
image = torch.tensor(transform.resize(data.camera(), (128, 128)), dtype=torch.float32).reshape(-1, 1)
grid = torch.linspace(-1, 1, 128)
coords = torch.stack(torch.meshgrid(grid, grid, indexing="ij"), dim=-1).reshape(-1, 2)
# Fourier features: sines and cosines of the coordinates at 128 random frequencies
proj = torch.pi * coords @ (10 * torch.randn(2, 128))
inputs = {"Raw coordinates": coords, "Fourier features": torch.cat([proj.sin(), proj.cos()], dim=-1)}
for name, x in inputs.items():
# The INR: a small MLP from coordinate to gray value, fit to this one image
mlp = nn.Sequential(nn.Linear(x.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 _ in range(1000):
loss = (mlp(x) - image).pow(2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"{name}: PSNR {-10 * torch.log10(loss).item():.1f} dB")1,000회 학습 후 원시 좌표 네트워크의 최대 신호 대 잡음비는 22.0 dB로, 이미지가 흐릿합니다. 반면 푸리에 특징 네트워크는 46.0 dB에 도달해 거의 완벽하게 복제합니다. 여기서 10으로 설정한 주파수 스케일은 신호에 따라 조정해야 합니다. 너무 낮으면 결과가 흐릿하게 남고, 너무 높으면 네트워크가 샘플을 외우면서 샘플 사이의 값에 노이즈가 생깁니다. Ultralytics 패키지에서 실행되는 Meta의 Segment Anything Model은 포인트 및 박스 프롬프트의 좌표를 마스크 디코더로 전달하기 전에 동일한 랜덤 가우시안 푸리에 특징으로 인코딩합니다.
형상, 장면 및 속도#
3D 형상용 INR은 DeepSDF가 부호 있는 거리를 예측하고 Occupancy Networks가 임의의 3D 점이 안쪽인지 바깥쪽인지 확률을 예측해 어느 해상도에서나 메시를 추출할 수 있게 된 2019년에 등장했습니다. 2020년에 나온 NeRF는 위치와 시선 방향을 색상 및 밀도로 변환해 새로운 시점 합성을 수행합니다. 순수 MLP는 학습과 조회가 느리므로 하이브리드 설계에서는 학습된 특징을 그리드에 저장하고 작은 MLP로 디코딩합니다. NVIDIA의 Thomas Müller와 동료들이 개발한 Instant-NGP는 다중 해상도 특징 해시 테이블을 사용해 몇 시간이 아니라 몇 초 만에 NeRF를 맞춥니다.
INR은 픽셀 그리드, 복셀 그리드, 메시, 포인트 클라우드 같은 명시적 표현과 대조됩니다. 명시적 표현은 값을 직접 저장하고 해상도에 따라 크기가 커지며, 복셀의 경우 크기가 세제곱으로 증가합니다. 가우시안 스플래팅은 수백만 개의 3D 가우시안을 래스터화해 더 빠르게 렌더링하는 NeRF의 최근 명시적 대안입니다. 기본 INR은 신호 하나에 맞춰지므로 여러 신호에 걸쳐 일반화하려면 잠재 코드로 INR 가중치를 출력하는 하이퍼네트워크나 새 신호에 몇 단계 만에 맞출 수 있도록 초기화를 학습하는 메타 학습 같은 추가 기법이 필요합니다.
실제 적용 사례#
- 의료 영상: INR은 희소하거나 언더샘플링된 측정값으로 CT 및 MRI 볼륨을 재구성합니다. 연속 함수가 획득한 샘플 사이의 간극을 부드럽고 데이터 일관성이 있는 볼륨으로 채우기 때문입니다.
- 초해상도: LIIF와 같은 국소 암시적 이미지 함수는 주변 특징을 바탕으로 연속 좌표 어디에서나 색상을 예측하므로, 하나의 모델로 임의의 배율로 이미지를 업샘플링할 수 있습니다.
- 3D 콘텐츠 제작: 텍스트-3D 및 이미지-3D 생성기는 신경 필드를 최적화하거나 예측하는 경우가 많으며, 이후 게임 및 시각 효과에 사용할 메시로 변환합니다.
- 압축: Emilien Dupont와 동료들이 2021년에 개발한 COIN은 이미지를 작은 MLP의 양자화된 가중치로 저장하며 낮은 비트레이트에서 JPEG보다 우수한 성능을 보입니다.










