Text2Light核心原理解析(一):VQGAN双码本如何把全景图压缩成1024个离散token
发布时间:2026/8/26 14:25:12 作者:尧图编辑部 阅读量:1,286
:VQGAN双码本如何把全景图压缩成1024个离散token)
Text2Light核心原理解析一VQGAN双码本如何把全景图压缩成1024个离散token【免费下载链接】Text2Light[SIGGRAPH Asia 2022] Text2Light: Zero-Shot Text-Driven HDR Panorama Generation项目地址: https://gitcode.com/gh_mirrors/te/Text2LightText2Light 是 SIGGRAPH Asia 2022 的零样本文本驱动 HDR 全景图生成模型。它的底层基石是VQGAN 双码本先把一张全景图压缩成一串从 1024 个离散 token 里选出的索引序列再让 GPT 像写句子一样逐个预测 token最终解码回 4K 级 HDR 全景。本文带你读懂这套图像→token→图像的离散压缩机制。为什么生成全景图要先做离散化如果直接用扩散模型回归像素Transformer 无法直接处理一张 512×1024 的浮点图。Text2Light 的解法借鉴了语言模型的成功经验压缩用 VQGAN 编码器把图下采样成低分辨率特征图量化把每个特征向最近的码字codebook entry替换得到一个 0~1023 的整数索引生成GPT 在 1024 的词表上自回归地写出整串 token就像用 1024 个汉字写一篇文章重建解码器把索引查回码本向量再上采样回原图。这样一来生成图像被转化成了预测离散 token 序列天然适配 Transformer。 项目整体推理入口在 text2light.py训练脚本为 train_stage1.py。VQGAN 四件套编码器、量化器、解码器、判别器Text2Light 在 VQGAN 代码库taming/目录之上实现核心模型定义在 taming/models/vqgan.py组件作用关键配置Encoder把 256×256 图像压成 16×16 潜特征ch_mult: [1,1,2,2,4]即 16 倍下采样VectorQuantizer把每个潜向量替换成最近码字n_embed: 1024embed_dim: 256Decoder把量化后的特征图重建为图像与编码器对称的上采样网络判别器GAN 损失让重建图以假乱真VQLPIPSWithDiscriminator第 10000 步才开启编码器是一个标准的 U-Net 式下采样网络ch_mult有 4 个翻倍阶段因此 256×256 的图像被压缩成16×16 256 个潜向量。每个潜向量经过 1×1 卷积quant_conv投影到 256 维的码本空间。向量量化把无限种颜色归并为1024 个字量化逻辑在 taming/modules/vqvae/quantize.py 的VectorQuantizer中核心只有三步查距离计算每个潜向量 z 与 1024 个码字 eⱼ 的欧氏距离取最近者 argmin替换用该码字 z_q 取代 z同时返回它的索引——这就是图像的token直传梯度量化不可导代码用技巧z_q z (z_q - z).detach()把梯度直通给编码器再用带beta0.25的重建项反向更新码本防止码本坍缩。训练时的总损失 重建 L1 损失 LPIPS 感知损失 自适应权重的 GAN 损失 码本损失见 taming/modules/losses/vqperceptual.py。感知损失与判别器保证了离散化不会丢太多视觉细节。全局码本抓住全景图的整体布局Text2Light 用了两套独立训练的 VQGAN配置分别是 configs/global_codebook.yaml 与 configs/local_codebook.yaml全局码本训练在降分辨率后的整体全景图上holistic: 128即 128×256它学到的是场景的宏观信息哪里是天空、哪里是地面、主光方向在哪。量化后得到 8×16 128 个 token作为大纲它还使用了一个特别变体VQCirModel——循环边界编码器/解码器taming/modules/diffusionmodules/model_circular.py专门处理等距柱状投影全景图左右边缘必须无缝衔接的问题。局部码本负责 512×1024 的像素级细节局部码本训练在 256×256 随机裁剪块上专攻纹理与局部结构。推理时它要覆盖整幅 512×1024 的 LDR 全景下采样 16 倍后就是 32×64 2048 个 token。两套码本如何配合可以看 text2light.py 的生成流程全局采样器taming/models/global_sampler.py仅 12 层的小 GPT词表 1024在 CLIP 文本条件top-5 KNN 相似句向量下自回归生成 128 个全局 token解码出低分辨率草稿全景局部采样器taming/models/local_sampler.py24 层大 GPT以全局 token 球面坐标嵌入SPE为条件按 16×16 的滑动窗口逐块预测 2048 个局部 token解码出 512×1024 的高清 LDR 全景第二阶段 SRiTMO 再把它上采样并逆色调映射成 HDR。token 的排列顺序也值得一看taming/modules/transformer/permuter.py 提供了 Z 曲线、螺旋线等多种空间重排方式让序列中相邻 token 在图像上也相邻方便自回归模型看前文知后文。关键参数速查表参数值出处码本大小词表1024两个 codebook 配置n_embed码字维度256embed_dim下采样倍率16×ch_mult: [1,1,2,2,4]全局 token 数1288×16configs/local_sampler_spe.yamlblock_size注释局部 token 数204832×64text2light.py 第 86 行量化系数 β0.25taming/models/vqgan.py总结Text2Light 用双码本 双 GPT的分工把复杂的全景生成拆成两步小模型用 128 个全局 token 定布局大模型用 2048 个局部 token 填细节。1024 的码本大小正是这套离散语言的字典规模——全景图从此可以被像文本一样生成。下一篇我们将深入全局采样器CLIP 文本条件与 KNN 检索如何让 GPT听懂场景描述。【免费下载链接】Text2Light[SIGGRAPH Asia 2022] Text2Light: Zero-Shot Text-Driven HDR Panorama Generation项目地址: https://gitcode.com/gh_mirrors/te/Text2Light创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考