news 2026/10/22 1:20:43

MSE、LPIPS 还是 GAN 损失?texture-fix-vae-for-qwen-image-2.1 对抗微调根治棋盘格伪影的完整机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MSE、LPIPS 还是 GAN 损失?texture-fix-vae-for-qwen-image-2.1 对抗微调根治棋盘格伪影的完整机制
  • 人工智能
  • 大模型
  • 计算机视觉
  • 媒体生成
  • 微调

【免费下载链接】texture-fix-vae-for-qwen-image-2.1

项目地址:https://ai.gitcode.com/hf_mirrors/madebyollin/texture-fix-vae-for-qwen-image-2.1
点击查看免费下载

texture-fix-vae-for-qwen-image-2.1 是针对 Qwen-Image-2.1 官方 VAE 的一个对抗微调版本(unofficial finetune),专门用于根治生成图像中的棋盘格伪影(checkerboard artifacts),同时顺带修复了官方 VAE 在 fp16 下输出 NaN 的问题。它不改架构、不增参数,只是把解码器的训练配方补上了"缺失的一环"——GAN 对抗损失。

📌TL;DR 速览

  • 棋盘格伪影是训练配方的副作用,不是模型结构缺陷
  • MSE / LPIPS / GAN 三种损失各有"副作用",缺一不可;GAN 正是常被忽略的关键项
  • 只解冻7.5M 参数的微调(约 5000 步)即可根治
  • 附带收益:fp16 下 185 个压力测试输入从 75 个 NaN 降到0 个,rFID 从 3.38 降到2.07

棋盘格伪影是怎么来的

用 Qwen-Image-2.1 生成照片风格的高细节图像(草地、苔藓、岩石、花丛)时,放大局部很容易看到规律性的一格一格噪点,俗称"棋盘格伪影"。

问题出在 VAE 解码环节:扩散模型输出的 latent 被解码成像素时,解码器对无法从 64 通道 latent 中精确恢复的高频细节,会"偷懒"填充出低成本的规律性图案。官方 VAE 解码同一片 lupine 花田,岩石和花丛区域就能观察到明显的网格纹:

而用 texture-fix-vae-for-qwen-image-2.1 解码同一份 latent(即不重跑扩散采样,只换解码器),纹理明显更干净:

三驾马车:MSE、LPIPS、GAN 损失各起什么作用

VAE 这类图像自编码器的训练,几乎都采用"多损失混合"配方。核心逻辑很简单:当 latent 信息不足以精确重建某个细节时,三种损失会把解码器往三个不同方向拉扯:

损失函数优化目标细节缺失时的"副作用"
MSE / MAE(PSNR 导向)像素级保真鼓励模糊(取像素均值最安全)
LPIPS感知相似度鼓励模糊 + 棋盘格等伪影
对抗(GAN)图像真实感鼓励生成锐利、合理的细节

三种力量博弈后的平衡点,就决定了输出的纹理风格:

  • 只靠 MSE → 画面糊;
  • 加上 LPIPS → 在难重建区域更容易出现棋盘格;
  • 补上 GAN 对抗损失→ 判别器会惩罚"一眼假的规律性网格",倒逼解码器生成锐利且合理的细节(哪怕细节本身是"编"出来的)。

这正是该项目 README 中描述的完整机制:TAESD 配方混合了 PSNR 导向(MSE/MAE)、LPIPS 与对抗(GAN)三项损失,其中 GAN 项是抑制棋盘格的关键。

为什么官方 VAE 还会出棋盘格?

作者的判断很直接:原版 Qwen-Image-2.1-VAE 很可能是在没有"起作用的对抗损失项"的情况下训练的(或对抗项权重/实现失效)。缺少 GAN 的"监督压力"后,LPIPS 损失很容易被低成本的棋盘格模式"骗过",于是高频纹理区域就留下了规律性网格。

这也解释了为什么伪影集中在细节丰富的照片风格图像上:平坦色块不需要重建高频信息,自然无感;而花田、岩石、草叶这类区域恰恰是细节信息最超出 latent 容量的地方。

对抗微调实操:只解冻 7.5M 参数

修复方式并不是从头训练,而是针对性微调解码器的最高分辨率部分。具体做法(见 README.md 的 Mechanism 与 Version History 章节):

  1. 只解冻最高分辨率的两个 decoder 阶段 + 输出头,可训练参数仅 7.5M(对照 config.json:decoder_base_dim: 144,dim_mult: [1,2,4,8,8],微调的正是靠近输出端的两个 8 倍上采样阶段);
  2. 采用 TAESD 开发的对抗配方(MSE/MAE + LPIPS + GAN 混合损失),学习率 3e-5,约 5000 步(首发版本),微调时间很短,避免把已有能力"练坏";
  3. 2026-10-05 更新版在此基础上又做了 fp16 稳定性加固:约 60k 步微调解码器权重(61k 参数)在保持输出不变的前提下压低激活幅度,再重跑 8000 步对抗微调恢复纹理细节,最后将权重按精确 2 的幂缩放(decoder ÷512、encoder ÷8)——由于每个残差分支都以 RMSNorm 开头,这种缩放不改变函数输出。

值得注意的是:编码器权重仅做了 2 的幂缩放,计算函数与原版完全一致(详见 NOTICE),因此它可以直接替换官方 VAE 而不影响扩散采样端的 latent 分布。

实测对比:棋盘格 vs 干净纹理

同一段溪流岩石场景,两种 VAE 解码同一 latent 的局部放大:

官方 VAE 的岩石表面有明显的灰白网格纹:

texture-fix 版本同一区域纹理连贯、无规律性网格:

官方 README.md 中还提供了 2048px 完整对比图(由"太平洋西北高山野花草甸"照片风格提示词生成的 latent 解码而来),latent 文件即pnw_meadow_stream_2048.latent.pt。

指标:感知质量显著提升,重建精度轻微让步

指标(COCO val2017 @ 256²)官方 VAE (bf16)texture-fix (bf16)texture-fix (fp16)
rFID ↓(感知质量)3.382.072.06
PSNR ↑(像素保真)33.2932.7332.79
LPIPS ↓(感知距离)0.03570.03840.0380

这张表恰好印证了损失博弈的本质:rFID 大幅改善(人眼看更真实),而 PSNR/LPIPS 略有回退——这就是 GAN 项的"代价":允许生成"锐利、合理但可能是编造"的细节,换取整体观感的干净。对出图应用来说,这笔交易几乎总是值得的。

附带修复:fp16 下的 NaN 大坑

微调还顺带解决了官方 VAE 的一个隐蔽问题:fp16 下解码器激活值溢出,产生大片 NaN(解码透明贴纸类图像时尤其明显,NaN 还会"渗透"到周围内容)。

fp16 指标官方 Qwen-Image-2.1-VAEtexture-fix 版
解码器最大激活值(fp16 上限 65504)~3.5M(溢出)~1.3k
产生 NaN 的输入(185 个压力测试)750

做法分两步:① 微调解码器卷积与 RMSNorm 的 scale/bias,保持输出不变的同时压低激活幅度(类似 SDXL-VAE-FP16-Fix 的思路);② 手动按 2 的幂缩小特定权重,进一步压缩残差流规模。仓库附带 fp16_demo.py 可复现该可视化(官方 bf16 / 官方 fp16 / 修复版 fp16 三方对比,NaN 区域用洋红色标出)。

如何使用:ComfyUI 与 Diffusers 接入

ComfyUI(最省事):下载 texture_fix_vae_for_qwen_image_2.1_bf16.safetensors,放入ComfyUI/models/vae/,在Load VAE节点中替换掉官方qwen_image_2.1_vae_bf16.safetensors即可,--fp16-vae参数同样兼容。

Diffusers(两行代码):

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")

模型文件为 diffusion_pytorch_model.safetensors,配置见 config.json。

⚠️许可提醒:本项目基于 Qwen-Image-2.1 权重微调,遵循 Qwen RESEARCH LICENSE(见 LICENSE),仅限非商业/研究用途,商用前请确认合规。

总结

回到标题的问题:是 MSE、LPIPS 还是 GAN 损失?答案是"全都要,但 GAN 是决定项"。

  • MSE/MAE 负责打底保真,副作用是模糊;
  • LPIPS 负责感知对齐,副作用是棋盘格;
  • GAN 对抗损失负责"收尾",逼出锐利且合理的纹理,是棋盘格的克星。

texture-fix-vae-for-qwen-image-2.1 的价值就在于演示了一条低成本修复路径:判断伪影根因(对抗项缺失/失效)→ 只解冻解码器最高分辨率部分(7.5M 参数)→ 用 TAESD 对抗配方微调数千步。这套"病灶定位 + 靶向微调"的思路,对其他出现棋盘格的 VAE 解码器同样具有参考价值。

  • 人工智能
  • 大模型
  • 计算机视觉
  • 媒体生成
  • 微调

【免费下载链接】texture-fix-vae-for-qwen-image-2.1

项目地址:https://ai.gitcode.com/hf_mirrors/madebyollin/texture-fix-vae-for-qwen-image-2.1
点击查看免费下载

相关推荐

上一篇:Puppeteer-Sharp 实战:使用 WaitForFunctionAsync 等待 JavaScript 表达式为真
下一篇:Puppeteer Sharp入门教程:掌握.NET版浏览器自动化利器

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 1:20:18

MATLAB R2024b下载安装教程全网最详细(附安装包)2025最新版图文教程

文章目录引言:MATLAB R2024b功能介绍MATLAB R2024b安装详细步骤1. 准备工作:解压安装包2. 开始安装MATLAB R2024b3. 填写授权信息4. 选择安装位置与组件5. 等待安装完成6. 完成永久使用设置7. 启动并验证MATLAB常见问题解答安装相关问题使用中的常见异常…

作者头像 李华
网站建设 2026/10/22 1:14:40

【C++进阶之路】初始C++语法(上)

文章目录前言一.命名空间命名冲突命名空间的使用展开命名空间作用域限定符访问作用域命名空间的合并命名空间的嵌套二.输入输出打印流插入运算符输入流提取运算符三.缺省参数全缺省半缺省跨文件缺省函数参数缺省参数的使用格式四.函数重载参数个数不同参数类型不同参数顺序不同…

作者头像 李华
网站建设 2026/10/22 1:14:26

设计模式16——适配器

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 1:14:00

【Pytorch】Docker:Pytorch报错insufficient shared memory (shm)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华