Texture-Fix-VAE:为 Qwen-Image 2.1 带来更干净的 VAE 解码器

ComfyUI Wikinews

madebyollin 的 Texture-Fix-VAE 重新训练了 Qwen-Image 2.1 的 VAE 解码器,以消除棋盘格纹理伪影。把该文件放入 ComfyUI/models/vae,然后照常加载即可。

Texture-Fix-VAE-for-Qwen-Image-2.1 是 Qwen-Image 2.1 VAE 解码器的非官方微调版本。它保持了完全相同的 Latent 空间,只重新训练了解码器,让细腻纹理恢复干净,而不是呈现棋盘格。它是一个可直接替换的文件:复制到 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,因此任何差异都只来自解码器。

原始 Qwen-Image 2.1 VAETexture-Fix-VAE
原始 VAE,放大裁剪Texture-Fix-VAE,相同裁剪
原始 Qwen-Image 2.1 VAETexture-Fix-VAE
原始 VAE,第二处放大裁剪Texture-Fix-VAE,相同裁剪
原始 Qwen-Image 2.1 VAETexture-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 VAETexture-Fix-VAE
rFID,越低越好(COCO val2017,5000 张图像,256²)3.372.08
PSNR,越高越好(COCO val2017,256²)33.3032.86
LPIPS,越低越好(COCO val2017,256²)0.03570.0373
PSNR,越高越好(DIV2K valid,原生 1024² 裁剪)32.8632.46
LPIPS,越低越好(DIV2K valid,原生 1024² 裁剪)0.04600.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 登录后即可参与讨论。

评论加载中…
Texture-Fix-VAE:为 Qwen-Image 2.1 带来更干净的 VAE 解码器 | ComfyUI Wiki