Img2ShaderToy / FIELD GUIDE
交互图解 512 × 512English ↗

AN INTERACTIVE GUIDE TO NEURAL COMPRESSION

一张图像,
藏在网络里。

三张特征网格,一个小型神经网络。
用不同尺度与精度的局部特征,以接近 BC7 的数据量还原图像。

压缩数据255.5 KiB包含解码描述
重建质量46.049 dB无滤波 · RGB8 PSNR
相对 BC7+3.144 dB当前单张测试图

512 × 512 · 针对这张图单独训练 · 相近码率比较

RECONSTRUCTION / 001512 × 512
神经模型重建的测试图 BC7 重建的同一测试图 BC7我们的模型
右侧始终为模型重建
不是直接存下 RGB,而是学会如何还原它。LOCAL FEATURES → SMALL NETWORK → COLOR

01 / FOLLOW A PIXEL

一个像素的旅程

在图上选一个位置。看它访问哪些特征,
又如何经过网络,变成一个颜色。

正在载入本地模型…
UV —真实参数 · 实时计算

载入后,点击任意节点查看它的数值。

色块表示数值,不是 RGB 特征图。隐藏层颜色越深,激活绝对值越大;正负值用不同色相区分。

展开数学与解码细节 41 → 80 → 80 → 80 → 3

像素坐标使用 uv = ((x + 0.5) / 512, (y + 0.5) / 512)。每级网格坐标为 uv × size − 0.5,边界取值 Clamp。细网格四点直接拼接;粗网格与高精度网格分别双线性插值。高精度值按 code / 65535 解码,插值后减去 0.5 作为网络输入,不直接叠加到输出。

位置编码频率为 64、128、256 cycles,分别产生 sin(x)、sin(y)、cos(x)、cos(y)。隐藏层为 h = sin(30 × (Wh + b)),输出层线性映射到 RGB 后限制在 [0, 1]。

此处 JavaScript 解码器从真实的 model.bin 读取参数,浮点累计与 GPU 存在细微差异;全图指标来自已验证的 RGB8 重建。改变显示大小时先还原训练像素,再做图像重采样,不假设网络具有任意坐标的连续重建能力。

载入后执行参考像素校验。

02 / INSIDE THE FILE

255 KiB,
都用在了哪里?

约 91% 的空间留给局部特征。
小网络把这些特征解释成颜色。

255.538 KiB261,671 bytes
压缩数据 + 解码描述
BC7 的块数据预算256.000 KiB

两者均不含通用解码程序。压缩体积、GLSL 文本体积与运行时显存是三个不同的量。

细网格 · 学习到的特征
−7/168/16

伪彩色表示量化特征值,不是缩小的原图。

03 / ENCODING THE IMAGE

图像如何
变成编码?

从图像拟合到量化,再到整数编码搜索。
这些步骤决定模型如何存储和还原图像。

  1. 01
    针对原图拟合

    高精度网格用图像块均值初始化,再与其他特征和网络共同训练。训练后不要求保留底色含义。

  2. 02
    量化与解码器微调

    两级网格使用 4-bit,高精度网格使用 16-bit,网络权重使用 10-bit;固定网格后微调解码器。

  3. 03
    直接挑选更好的编码

    4-bit 编码尝试相邻值,高精度编码尝试多种步长;后段还联合搜索 4-bit 通道对,按当前目标保留更好的选择。

    q − 1qq + 1
    候选集合示意 · 最优选项取决于实际误差

图中是本模型微调后的 15 轮真实搜索:前 12 轮优化浮点误差,后 3 轮优化区域加权 RGB8 误差。曲线统一展示全图 RGB8 PSNR。

DISCRETE SEARCH / 实测压缩数据 255.538 KiB
44.342 dB第 0 / 15 轮
搜索起点
微调后 44.342 dB最终 46.049 dB
搜索前 · 第 0 轮
搜索后 · 第 15 轮

固定展示搜索起点与最终结果,选区与上方像素同步。曲线滑块只改变指标,不代表中间轮次图像。

04 / LOOK CLOSER

让细节自己说话。

三张图,同一个位置,同一种放大方式。
全局指标更好,不代表每个局部都更好。

以 (193, 224) 为中心重新选点 ↑
原图REFERENCE
BC742.904 dB · 256 KiB
我们的模型46.049 dB · 255.538 KiB

最近邻放大,保留原始像素。各图标题的 PSNR 为全图指标。

分区域看重建误差。

在这张图中,模型在边缘、平坦和其余三类区域的平均误差均低于 BC7。距边缘 2–8 像素的其余区域误差则高于 BC7:0.758 对 0.582。区域平均值与局部表现可以分别观察。

区域BC7 RMSE模型 RMSE
边缘 · 20.84%3.4292.137
平坦 · 11.95%0.3040.116
其余 · 67.21%1.1370.992

RMSE 使用 0–255 的 RGB 值,越低越好。