Texture-Fix-VAE: более чистый декодер VAE для Qwen-Image 2.1

ComfyUI Wikinews

Texture-Fix-VAE от madebyollin дообучает декодер VAE Qwen-Image 2.1, чтобы убрать шахматные артефакты текстуры. Поместите файл в ComfyUI/models/vae и загружайте его как обычно.

Texture-Fix-VAE-for-Qwen-Image-2.1 это неофициальный файнтюн декодера VAE Qwen-Image 2.1. Он сохраняет точно такое же латентное пространство и дообучает только декодер, чтобы мелкая текстура возвращалась чистой, а не в клетку. Это файл для прямой замены: скопируйте его в ComfyUI/models/vae/ и выберите в ноде Load VAE.

Qwen-Image 2.1 выполняет денойзинг в сжатом латентном пространстве, а декодер VAE это последний шаг, который превращает латент обратно в пиксели. Всё, что декодер не может восстановить чисто, закрепляется в готовом изображении, независимо от того, насколько хорошей была выборка. Пользователи описывали этот симптом с момента релиза: слабая сетка размером в два пикселя и слегка дизеренный вид на насыщенных участках, таких как листва, волосы и ткань.

Texture-Fix-VAE воздействует именно на этот шаг. Энкодер не тронут, поэтому латентный формат, расписание выборки и любая LoRA или квантованный checkpoint продолжают работать без изменений.

До и после

Автор сгенерировал латенты для приведённого ниже сравнения с помощью Qwen-Image 2.1 по промпту в фотостиле, насыщенному мелкими текстурами:

Пейзажная фотография субальпийского луга с дикими цветами на Тихоокеанском Северо-Западе в разгар лета: прозрачный горный ручей, вьющийся по замшелым валунам среди фиолетового люпина и красной кастиллеи, позади густой лес из старовозрастной дугласовой пихты и западного красного кедра, вдали заснеженный вулкан, золотой свет позднего дня, высокая детализация

Обе колонки декодируют одни и те же латенты, поэтому любое различие обусловлено только декодером.

Оригинальный VAE Qwen-Image 2.1Texture-Fix-VAE
Оригинальный VAE, увеличенный фрагментTexture-Fix-VAE, тот же фрагмент
Оригинальный VAE Qwen-Image 2.1Texture-Fix-VAE
Оригинальный VAE, второй увеличенный фрагментTexture-Fix-VAE, тот же фрагмент
Оригинальный VAE Qwen-Image 2.1Texture-Fix-VAE
Оригинальный VAE, полное декодирование 1024 x 1024Texture-Fix-VAE, полное декодирование

Что изменилось внутри

Дообучался только декодер, примерно 5 000 шагов со скоростью обучения 3e-5. Две стадии декодера с наивысшим разрешением и выходная голова были оставлены размороженными, что составляет около 7,5 млн обучаемых параметров, а для обучения использовался рецепт, который автор разработал для TAESD.

Этот рецепт объединяет три семейства функций потерь, и каждое подталкивает реконструкцию в своём направлении:

Функция потерьЧто она поощряет
MSE / MAE (с акцентом на PSNR)Безопасное усреднение, которое размывает детали, которые невозможно разместить
LPIPSПерцептивную правдоподобность, которая для мелкой текстуры проявляется как размытие плюс шахматный узор
Состязательная (GAN)Резкие, правдоподобные детали, которые выглядят реально, а не явно синтетически

Именно состязательный член и даёт здесь разницу. По мнению автора, оригинальный VAE Qwen-Image 2.1 обучался без работающего состязательного члена потерь, и это объясняло бы сетку: перцептивный член мог свободно смещаться в сторону шахматного узора, поскольку ничто не штрафовало явно фальшивую структуру.

Метрики

МетрикаVAE Qwen-Image 2.1Texture-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 те же веса загружаются как обычный VAE diffusers:

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: более чистый декодер VAE для Qwen-Image 2.1 | ComfyUI Wiki