获取 YOLO 许可
返回 Ultralytics 术语表

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 及其同事提出的 Fourier 特征以及 NeRF 的位置编码;另一种是用正弦激活函数替换 ReLU,例如 Vincent Sitzmann 及其同事提出的 SIREN。

下面的 PyTorch 示例将同一个 MLP 对一张照片拟合两次,一次使用原始坐标,另一次使用 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")

经过 1,000 步训练后,使用原始坐标的网络达到 22.0 dB 峰值信噪比,生成的图像比较模糊;而使用 Fourier 特征的网络达到 46.0 dB,几乎可以精确复制原图。这里的频率尺度设为 10,但需要针对不同信号进行调整:太低时拟合结果仍然模糊,太高时网络会记住采样点,却在采样点之间产生噪声值。Meta 的 Segment Anything Model 在 Ultralytics 软件包中运行,它使用相同的随机高斯 Fourier 特征对点提示和边界框提示的坐标进行编码,然后再将其传给掩码解码器。

形状、场景与速度#

用于 3D 形状的 INR 于 2019 年出现:DeepSDF 预测有符号距离,Occupancy Networks 则预测任意 3D 点位于形状内部还是外部的概率,因此可以在任意分辨率下提取网格。NeRF 于 2020 年问世,将位置和视角方向映射为颜色和密度,用于新视角合成。纯 MLP 训练和查询速度都很慢,因此混合设计会将学习到的特征存储在网格中,再用一个极小的 MLP 解码。Thomas Müller 及其 NVIDIA 同事提出的 Instant-NGP 使用多分辨率特征哈希表,可在几秒内拟合 NeRF,而非数小时。

与 INR 不同,像素网格、体素网格、网格和点云等显式表示会直接存储数值,并且会随分辨率增大;体素网格的增长速度则是立方级。高斯泼溅是 NeRF 的一种近期显式替代方案,它通过光栅化数百万个 3D 高斯实现更快渲染。由于基础 INR 只针对单个信号进行拟合,要让它泛化到多个信号就需要额外机制:超网络根据潜在代码输出 INR 权重,或通过元学习学习一个能够在几步内拟合新信号的初始化参数。

实际应用#

  • 医学影像:INR 可根据稀疏或欠采样的测量结果重建 CT 和 MRI 体数据,因为连续函数能够在已采集样本之间填补空缺,生成平滑且符合数据的体数据。
  • 超分辨率:LIIF 等局部隐式图像函数能够根据邻近特征预测任意连续坐标处的颜色,因此一个模型就能按任意比例放大图像。
  • 3D 内容创作:文生 3D 和图生 3D 生成器通常会优化或预测神经场,然后将其转换为网格,用于游戏和视觉特效。
  • 压缩:Emilien Dupont 及其同事于 2021 年提出的 COIN 将图像存储为小型 MLP 的量化权重,在低比特率下优于 JPEG。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来