Texture-Fix-VAE:为 Qwen-Image 2.1 带来更干净的 VAE 解码器
madebyollin 的 Texture-Fix-VAE 重新训练了 Qwen-Image 2.1 的 VAE 解码器,以消除棋盘格纹理伪影。把该文件放入 ComfyUI/models/vae,然后照常加载即可。
ComfyUI/models/vae/,然后在 Load VAE 节点中选择它即可。
Qwen-Image 2.1 在压缩后的 Latent 空间中执行去噪,而 VAE 解码器 是把该 Latent 还原为像素的最后一步。无论采样质量多好,解码器无法干净重建的部分都会固化到最终图像中。自发布以来,用户一直在描述这一症状:隐约的两像素网格,以及在树叶、头发和织物等细节密集区域略显抖动的观感。
Texture-Fix-VAE 专门针对这一步进行改进。编码器未被改动,因此 Latent 格式、采样调度以及所有 LoRA 或量化 checkpoint 都能照常工作,无需任何更改。
之前与之后
作者使用 Qwen-Image 2.1,基于一个充满细腻纹理的写实风格提示词生成了下方对比所用的 Latent:
Landscape photograph of a subalpine wildflower meadow in the Pacific Northwest in midsummer: a clear mountain stream winding over mossy boulders through purple lupine and red paintbrush, dense old-growth Douglas fir and western red cedar forest behind, a snow-capped volcano in the distance, golden late-afternoon light, highly detailed
两列解码的是相同的 Latent,因此任何差异都只来自解码器。
![]() | ![]() |
|---|---|
| 原始 VAE,放大裁剪 | Texture-Fix-VAE,相同裁剪 |
![]() | ![]() |
|---|---|
| 原始 VAE,第二处放大裁剪 | Texture-Fix-VAE,相同裁剪 |
![]() | ![]() |
|---|---|
| 原始 VAE,完整的 1024 x 1024 解码 | Texture-Fix-VAE,完整解码 |
内部有哪些变化
仅解码器经过了微调,训练约 5,000 步,学习率为 3e-5。两个最高分辨率的解码器阶段和输出头保持可训练状态,合计约 750 万个可训练参数,训练使用了作者为 TAESD 开发的配方。
该配方混合了三个损失函数族,每一个都从不同方向推动重建效果:
| 损失 | 它奖励什么 |
|---|---|
| MSE / MAE(偏重 PSNR) | 安全的平均化,会模糊掉无法确定位置的细节 |
| LPIPS | 感知上的合理性,对于细腻纹理就表现为模糊加棋盘格 |
| 对抗损失(GAN) | 锐利且合理的细节,看起来真实,而非明显是合成的 |
对抗项在这里正是关键所在。作者的判断是,原始 Qwen-Image 2.1 VAE 在训练时没有可用的对抗损失项,这正好可以解释网格问题:感知项可以自由地朝棋盘格方向推动,因为没有任何东西惩罚明显虚假的结构。
指标
| 指标 | Qwen-Image 2.1 VAE | Texture-Fix-VAE |
|---|---|---|
| rFID,越低越好(COCO val2017,5000 张图像,256²) | 3.37 | 2.08 |
| PSNR,越高越好(COCO val2017,256²) | 33.30 | 32.86 |
| LPIPS,越低越好(COCO val2017,256²) | 0.0357 | 0.0373 |
| PSNR,越高越好(DIV2K valid,原生 1024² 裁剪) | 32.86 | 32.46 |
| LPIPS,越低越好(DIV2K valid,原生 1024² 裁剪) | 0.0460 | 0.0480 |
这是 GAN 风格解码器常见的取舍:感知质量(rFID)提升约三分之一,而重建精度(PSNR 与 LPIPS)则略微下降。作者指出,这种改进在细节丰富的写实风格图像上最为明显,而在平坦的插画上则不太看得出来。
在 ComfyUI 中使用
将 texture_fix_vae_for_qwen_image_2.1_bf16.safetensors 下载到 ComfyUI/models/vae/,然后在 Load VAE 节点中选择它来替代 qwen_image_2.1_vae_bf16.safetensors。无需更改任何节点、工作流或采样器,随时都可以换回原文件。
在 ComfyUI 之外,相同的权重可作为普通 diffusers VAE 加载:
import torch
from diffusers import QwenImage21Pipeline, AutoencoderKLQwenImage21
vae = AutoencoderKLQwenImage21.from_pretrained(
"madebyollin/texture-fix-vae-for-qwen-image-2.1", torch_dtype=torch.bfloat16
)
pipe = QwenImage21Pipeline.from_pretrained(
"Qwen/Qwen-Image-2.1", vae=vae, torch_dtype=torch.bfloat16
).to("cuda")获取方式
权重: madebyollin/texture-fix-vae-for-qwen-image-2.1
ComfyUI 文件: texture_fix_vae_for_qwen_image_2.1_bf16.safetensors
基础模型: Qwen/Qwen-Image-2.1
作者更早的工作: TAESD、sdxl-vae-fp16-fix






评论
使用 GitHub 登录后即可参与讨论。