QwenImage21Pipeline: image editing ignores the instruction and returns a haloed near-copy at output_resolution=1024 (default); 512/768 edit

QwenImage21Pipeline 在默认 output_resolution=1024 做图像编辑时,常见“返回带光晕、过锐、接近原图的复制品”或“替换主体”的现象;优先怀疑目标 latent 边长跨过了某个阈值(如 56/64),而非配置或精度问题。可优先尝试把编辑输出分辨率降到 960 或

快速结论:QwenImage21Pipeline 在默认 output_resolution=1024 做图像编辑时,常见“返回带光晕、过锐、接近原图的复制品”或“替换主体”的现象;优先怀疑目标 latent 边长跨过了某个阈值(如 56/64),而非配置或精度问题。可优先尝试把编辑输出分辨率降到 960 或 768 验证。

适用环境:Issue 中确认覆盖 diffusers main @80c7ed2、transformers 5.14.1 与 5.17.0、bf16 与 fp32;报错方在 Apple silicon(MPS),另有贡献者在 CUDA(RTX 3090 Ti)、torch 2.14.0+cu130 上复现;另在 ComfyUI 原生路径与一个 Swift/MLX 移植实现上复现。Python 版本、CUDA 驱动版本未在 Issue 中给出。

最快修复方案:暂无确认的一步修复方案。Issue 中唯一明确验证过的处理思路是把编辑时的 output_resolution 临时降到 960 或 768(报告方称 960 在该 fixture 上正常,@peterc 称 864 正常),并在降低分辨率后确认编辑结果是否恢复正常。

注意事项:降分辨率只是规避手段,不是根因修复,且不同平台/图像的阈值不同(报告方 1024 失败、896/960 正常;@peterc 896 失败、864 正常),不能保证所有输入都适用。换种子、改 true_cfg_scale、关闭 use_kv_cache、切换 fp32 或 transformers 版本均被证实无效或仅部分缓解。Issue 结束于讨论,未给出最终上游修复结论。

问题场景

用户在 diffusers 中使用 QwenImage21Pipeline 做参考图编辑(image editing / i2i),即传入一张图片作为 condition,再给编辑指令 prompt,例如“Make the dog wear a red scarf”或“Change the background to a sunset beach”。当 output_resolution 保持默认 1024 时,输出不再是干净编辑,而是带明显光晕、过锐、过饱和、接近原图的复制品;部分平台表现为主体被整体替换(例如“换背景”把狗弄丢,或把狗变成猫)。同一调用在 512 或 768 下输出正确。同一次安装下纯文生图(text-to-image)在 1024² 和 2048² 均正常。

报错原文

QwenImage21Pipeline: image editing ignores the instruction and returns a haloed near-copy at output_resolution=1024 (default); 512/768 edit correctly

No errors or warnings are emitted; the pipeline completes normally in every configuration.

原因分析

Issue 讨论到最后并未给出已确认的根因,以下为讨论中提出的可能原因:触发条件看起来与“目标输出网格的 latent 边长”相关,而不是与联合序列长度、CFG、种子、KV cache 或精度相关。报告方发现 768² 参考图 + 1024² 目标仍会退化,说明触发因素是目标网格而非 condition 网格;@peterc 则观察到 condition 图 latent 网格 max(h, w) >= 56 时失败,与报告方结论不一致。报告方还提到一个现象:1024² 下结果几乎与噪声无关,输出主要由参考图主导。讨论中另有一个未经证实的推测,认为可能与 vision tower 在 48×48 patch 网格(即 768×768)上的训练分布有关。由于这些都停留在讨论层面,均应视为可能原因。

环境排查

  • 确认 diffusers 版本(Issue 中为 main @80c7ed2,含 #14804)。
  • 确认 transformers 版本(Issue 中测试了 5.14.1 与 5.17.0,两者隐藏状态一致)。
  • 确认 torch_dtype(bf16 与 fp32 均在 Issue 中测试)。
  • 确认运行后端与设备:MPS 或 CUDA;CUDA 侧额外给出 torch 2.14.0+cu130、RTX 3090 Ti,可作为对照。
  • 确认 output_resolution 取值,以及是否使用 use_kv_cachetrue_cfg_scalenegative_promptgenerator 种子等参数,便于逐项排除。
  • 确认失败样本与成功样本的输入图像尺寸和内容,因为边界阈值被认为与 fixture 相关。

解决步骤

  1. 先用同一张参考图、同一 prompt、同一种子,分别跑 output_resolution=5127681024,确认问题是否只在 1024(或某个更高值)出现。
  2. 若 1024 复现,先把 output_resolution 降到 960 或 768(Issue 中报告方称 960 干净、@peterc 称 864 干净),验证编辑指令是否被正确执行。
  3. 逐项排除非分辨率因素:use_kv_cache=Falsetrue_cfg_scale=4.0 配空白 negative prompt、端到端 fp32、切换 transformers 5.14.1/5.17.0。Issue 表明这些不会改变 1024 下的结果,或仅部分出现红色色带而光晕仍在。
  4. 如果降分辨率后正常,可先以低分辨率作为临时默认,并把复现条件(设备、diffusers 提交、输入图、prompt、种子、latent 边长)整理后反馈到上游。
  5. 若必须使用 1024 输出,目前 Issue 中未给出可用的规避手段,只能等待上游结论。

验证方法

用同一张参考图和同一 prompt、同一种子,对比 output_resolution=1024 与 960/768 的输出:若低分辨率下编辑指令被正确执行(例如狗戴上红围巾、背景变成日落海滩),且没有光晕、过锐或主体被替换,说明该规避方式在当前 fixture 上有效。另外可对比同一分辨率下不同种子的输出差异,Issue 中提到 1024² 时结果几乎与噪声无关,可作为一个辅助观察点。

参考来源

huggingface/diffusers #14824

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25067

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注