Implicit Neural Representations (INRs)
Le rappresentazioni neurali implicite codificano un'immagine, una forma o una scena 3D in una rete neurale che mappa coordinate a valori e può essere interrogata a qualsiasi risoluzione.
Le rappresentazioni neurali implicite (INR) memorizzano un segnale come funzione continua appresa da una rete neurale, di solito un piccolo percettrone multistrato (MLP), che mappa coordinate in valori. Un'immagine diventa una funzione che mappa la posizione di un pixel (x, y) in un colore, una forma 3D diventa una funzione che mappa un punto (x, y, z) nella sua distanza con segno dalla superficie e una scena diventa una funzione che mappa un punto e una direzione di visualizzazione in colore e densità. I pesi della rete costituiscono la rappresentazione: non esiste una griglia di pixel o voxel, quindi è possibile interrogare il segnale a qualsiasi coordinata, la memoria non cresce con la risoluzione dell'output e le derivate sono disponibili gratuitamente tramite differenziazione automatica. Le INR sono chiamate anche reti basate su coordinate o campi neurali e sono alla base dei campi di radianza neurale e di gran parte della moderna ricostruzione 3D.
Come funzionano le rappresentazioni neurali implicite#
Una INR viene adattata a un segnale alla volta. L'addestramento campiona coordinate, confronta l'output della rete con i valori reali in corrispondenza di quelle coordinate e aggiorna i pesi tramite discesa del gradiente: l'adattamento è quindi un overfitting intenzionale, perché l'obiettivo è memorizzare quel segnale. Un semplice MLP con attivazioni ReLU ha difficoltà, perché le reti apprendono le basse frequenze molto più rapidamente di quelle alte: un effetto che Nasim Rahaman e colleghi hanno chiamato bias spettrale nel 2019. Se riceve coordinate grezze, la rete produce una versione sfocata del segnale. Nel 2020 due soluzioni hanno reso pratiche le INR: mappare le coordinate tramite seni e coseni a molte frequenze, le caratteristiche di Fourier di Matthew Tancik e colleghi e la codifica posizionale di NeRF, e sostituire ReLU con una funzione di attivazione sinusoidale, come in SIREN di Vincent Sitzmann e colleghi.
Questo esempio in PyTorch adatta due volte lo stesso MLP a una foto, una volta con coordinate grezze e una volta con caratteristiche di Fourier:
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")Dopo 1.000 passaggi, la rete con coordinate grezze raggiunge un rapporto segnale-rumore di picco di 22.0 dB e produce un'immagine sfocata, mentre la rete con caratteristiche di Fourier raggiunge 46.0 dB, ottenendo una copia quasi esatta. La scala delle frequenze, qui pari a 10, si regola in base al segnale: se è troppo bassa l'adattamento resta sfocato, se è troppo alta la rete memorizza i campioni con valori rumorosi tra loro. Il Segment Anything Model di Meta, eseguito nel pacchetto Ultralytics, codifica le coordinate dei prompt a punto e a riquadro usando le stesse caratteristiche di Fourier gaussiane casuali prima di passarle al decoder delle maschere.
Forme, scene e velocità#
Le INR per le forme 3D sono arrivate nel 2019, quando DeepSDF prevedeva la distanza con segno e Occupancy Networks la probabilità che un punto 3D si trovasse all'interno o all'esterno, consentendo di estrarre una mesh a qualsiasi risoluzione. Nel 2020 è arrivato NeRF, che mappa posizione e direzione di visualizzazione in colore e densità per la sintesi di nuove viste. Gli MLP puri sono lenti da addestrare e interrogare, quindi i modelli ibridi memorizzano caratteristiche apprese in una griglia e le decodificano con un piccolo MLP. Instant-NGP di Thomas Müller e colleghi di NVIDIA usa una tabella hash multirisoluzione di caratteristiche e adatta un NeRF in pochi secondi anziché in ore.
Le INR si distinguono dalle rappresentazioni esplicite, come griglie di pixel, griglie di voxel, mesh e nuvole di punti, che memorizzano direttamente i valori e crescono con la risoluzione, in modo cubico nel caso dei voxel. Lo splatting gaussiano è una recente alternativa esplicita a NeRF che esegue il rendering più rapidamente rasterizzando milioni di gaussiane 3D. Poiché una INR di base viene adattata a un singolo segnale, per generalizzare a molti segnali serve ulteriore strumentazione: iperreti che producono i pesi INR a partire da un codice latente oppure meta-apprendimento di un'inizializzazione che adatta un nuovo segnale in pochi passaggi.
Applicazioni nel mondo reale#
- Imaging medico: le INR ricostruiscono volumi CT e MRI da misurazioni sparse o sottocampionate, poiché la funzione continua colma gli spazi tra i campioni acquisiti con un volume regolare e coerente con i dati.
- Super-risoluzione: funzioni d'immagine implicite locali come LIIF prevedono un colore a qualsiasi coordinata continua a partire dalle caratteristiche vicine, consentendo a un singolo modello di ingrandire le immagini con fattori arbitrari.
- Creazione di contenuti 3D: i generatori da testo a 3D e da immagine a 3D spesso ottimizzano o prevedono campi neurali, che vengono poi convertiti in mesh per videogiochi ed effetti visivi.
- Compressione: COIN, realizzato da Emilien Dupont e colleghi nel 2021, memorizza un'immagine come pesi quantizzati di un piccolo MLP e supera JPEG a bassi bitrate.










