Implicit Neural Representations (INRs)
Неявные нейронные представления кодируют изображение, форму или трёхмерную сцену в виде нейронной сети, преобразующей координаты в значения и позволяющей запрашивать данные с любым разрешением.
Неявные нейронные представления (INR) хранят сигнал в виде непрерывной функции, обучаемой нейросетью, обычно небольшой многослойным перцептроном (MLP), который отображает координаты в значения. Изображение становится функцией, отображающей положение пикселя (x, y) в цвет, трёхмерная форма — функцией, отображающей точку (x, y, z) в знаковое расстояние до поверхности, а сцена — функцией, отображающей точку и направление наблюдения в цвет и плотность. Представлением служат веса сети: пиксельной или воксельной сетки нет, поэтому сигнал можно запросить для любых координат, объём памяти не растёт вместе с разрешением результата, а производные автоматически получаются с помощью автоматического дифференцирования. INR также называют координатными сетями или нейронными полями; они лежат в основе нейронных полей излучения и значительной части современных методов трёхмерной реконструкции.
Как работают неявные нейронные представления#
INR настраивают под один сигнал за раз. При обучении выбираются координаты, результат сети сравнивается с истинными значениями в этих координатах, а веса обновляются с помощью градиентного спуска. По сути, это намеренное переобучение: цель — запомнить данный сигнал. Обычный MLP с активациями ReLU справляется плохо, потому что сети намного быстрее обучаются низким частотам, чем высоким; этот эффект Nasim Rahaman и коллеги в 2019 году назвали спектральным смещением. Если подавать на вход исходные координаты, сеть выдаёт размытую версию сигнала. В 2020 году INR стали практически применимы благодаря двум решениям: координаты стали преобразовывать синусами и косинусами на множестве частот — это признаки Фурье Matthew Tancik и коллег и позиционное кодирование NeRF; а ReLU заменили синусоидальной функцией активации, как в SIREN Vincent Sitzmann и коллег.
В этом примере 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 дБ, то есть изображение остаётся размытым, а сеть с признаками Фурье достигает 46.0 дБ — почти точной копии. Масштаб частоты, здесь равный 10, настраивается отдельно для каждого сигнала: слишком низкое значение оставляет результат размытым, слишком высокое заставляет сеть запоминать выборки, создавая шумные значения между ними. Segment Anything Model от Meta, работающая в пакете Ultralytics, кодирует координаты точечных и рамочных подсказок с помощью таких же случайных гауссовых признаков Фурье, прежде чем передать их декодеру масок.
Формы, сцены и скорость#
INR для трёхмерных форм появились в 2019 году: DeepSDF предсказывала знаковое расстояние, а Occupancy Networks — вероятность нахождения внутри или снаружи для любой трёхмерной точки, что позволяло извлекать сетку с любым разрешением. В 2020 году появилась NeRF, отображающая положение и направление наблюдения в цвет и плотность для синтеза новых ракурсов. Чистые MLP медленно обучаются и выполняют запросы, поэтому в гибридных архитектурах обучаемые признаки хранятся в сетке, а декодируются небольшим MLP. Instant-NGP от Thomas Müller и коллег из NVIDIA использует многомасштабную хеш-таблицу признаков и обучает NeRF за секунды вместо часов.
В отличие от INR, явные представления — например, пиксельные и воксельные сетки, сетки полигонов и облака точек — хранят значения напрямую и растут с увеличением разрешения; для вокселей рост кубический. Гауссов сплаттинг — недавняя явная альтернатива NeRF, которая рендерит быстрее, растеризуя миллионы трёхмерных гауссовых распределений. Поскольку базовую INR обучают на одном сигнале, для обобщения на множество сигналов нужны дополнительные механизмы: гиперсети, выдающие веса INR по латентному коду, или метаобучение начальной инициализации, позволяющей подогнать новый сигнал за несколько шагов.
Примеры применения в реальных условиях#
- Медицинская визуализация: INR восстанавливают объёмы КТ и МРТ по разреженным или недостаточным измерениям: непрерывная функция заполняет промежутки между полученными выборками, формируя гладкий объём, согласованный с данными.
- Сверхразрешение: Локальные неявные функции изображения, например LIIF, предсказывают цвет в любых непрерывных координатах на основе близлежащих признаков, поэтому одна модель увеличивает изображения в произвольное число раз.
- Создание трёхмерного контента: Генераторы объектов по тексту и изображениям часто оптимизируют или предсказывают нейронные поля, которые затем преобразуются в сетки для игр и визуальных эффектов.
- Сжатие: COIN, разработанная Emilien Dupont и коллегами в 2021 году, хранит изображение в виде квантованных весов небольшого MLP и превосходит JPEG при низких битрейтах.










