MOSS-Image SFT Destripe LoRA: убираем вертикальные полосы в ComfyUI

ComfyUI Wikinews

LoRA размером 1,9 МБ убирает слабые вертикальные цветовые полосы, которые MOSS-Image SFT рисует на небе и однородных фонах, и загружается через штатный загрузчик LoRA в ComfyUI.

MOSS-Image SFT рисует регулярный узор из слабых вертикальных цветовых полос на гладких областях: небо, туман, однотонные стены, студийные фоны. 18 октября nynxz опубликовал LoRA размером 1,9 МБ, SFT Destripe, которая убирает их, почти не меняя всё остальное в модели SFT. Это патч весов, а не переобучение: никаких пользовательских нод, никаких новых чекпойнтов, один LoraLoaderModelOnly после модели, о которой сайт рассказывал на релизе.

MOSS-Image SFT с LoRA Destripe и без неё

Сверху: выход SFT, обычный и с убранной яркостью и усиленным в 5 раз цветом. Снизу: тот же промпт и тот же сид с LoRA Destripe при силе 1,5. Полосы это сдвиг цвета, а не яркости, поэтому на обычном изображении они и остаются незаметными. Источник: nynxz/MOSS-Image

Что это за полосы

Артефакт легко пропустить при обычном просмотре и невозможно развидеть, когда цвет усилен. Он держится на фиксированном периоде: около 16 px при ширине 768 px и 21,3 px при ширине 1024 px, что в обоих случаях даёт 48 циклов по ширине изображения. Поскольку период масштабируется вместе с шириной, это не похоже на шум сенсора или шов тайлинга. По поведению это узор, который модель научилась рисовать.

Пользователи сообщили о нём в репозитории SFT в первые дни после релиза: первый тред с отчётом появился 16 октября вместе с примерами рендеров, и версии в нём шли от неправильного VAE до артефакта дистиллированного учителя. Ни одна из них не подтверждена. Тред до сих пор открыт, а OpenMOSS объяснений не публиковал.

Как LoRA размером 1,9 МБ её убирает

LoRA извлекается из разницы между Base и SFT, а не обучается. В общих чертах:

  1. Для каждого из 252 линейных слоёв SFT берётся дельта весов относительно Base и раскладывается на направления ранга 1 с помощью SVD. Каждое направление это одно правило «входной паттерн к выходному паттерну», добавленное файнтюнингом.
  2. Каждое направление оценивается по тому, насколько сильно оно питает полосу. Полоса измеряется как энергия колоночного паттерна с 48 циклами в собственном предсказании модели, на ранних шагах выборки, где она формируется (в заголовке файла записаны шаги с 4 по 13 из прогона на 25 шагов, ER-SDE, CFG 2.5, 768 px, два сида). Один обратный проход даёт для каждого направления скорость роста этой энергии полос при добавлении направления.
  3. Вычитание 64 направлений с наибольшим баллом. Они попадают в 25 матриц в слоях с 24 по 41, одиннадцать из них в MLP ffn_up_gate, остальные в ffn_down, q, k, v и o. Ранги от 1 до 7, поэтому файл весит 1,9 МБ: 945 152 сохранённых числа. По анализу весов MATLOWAI это около 0,09 процента энергии полного изменения SFT относительно Base.

Именно оценка направлений делает файл маленьким, но не грубым. Два более ранних исправления откатывают целые слои к Base и платят за это дрейфом; это удаляет только те направления внутри этих слоёв, которые несут полосу. В качестве каузальной проверки: применение тех же направлений с противоположным знаком делает полосы примерно в 22 раза сильнее.

Использование в ComfyUI

Положите moss_sft_destripe_top64_bf16.safetensors в ComfyUI/models/loras/, загрузите MOSS-Image SFT (moss_image_sft_bf16 или moss_image_sft_int8_convrot из Comfy-Org/MOSS-Image), добавьте LoraLoaderModelOnly и задайте силу в зависимости от ширины:

  • 1,0 при 768 px
  • 1,5 при 1024 px

При 1024 px сила 1,0 убирает полосу на 6 из 12 тестовых изображений и оставляет слабый след на остальных. Сила 1,5 доводит результат до 1 из 12, а 2,0 не лучше 1,5 и при этом сильнее уводит от SFT. LoRA построена на собственных изменениях SFT, поэтому на Base она ничего полезного не делает. Ключи используют префикс diffusion_model., и штатный загрузчик сопоставляет их напрямую.

Одна оговорка по загрузчику взята из того же репозитория: если использовать Load LoRA (Bypass), адаптеры q/k/v отбрасываются на слитых чекпойнтах Comfy-Org, а эта LoRA затрагивает q, k и v в нескольких слоях. Обычное применение патча на слитых файлах работает нормально.

Что показывают цифры автора

Слепой тест использует четыре промпта с большими гладкими областями (песчаные дюны, однотонная стена, открытая вода, портрет на размытом фоне) по три сида каждый, и ни один из них не применялся при создании исправления. Оценка это метрика bandviz от MATLOWAI, где меньше значит меньше полосатости, а примерно 16 и ниже читается как чисто.

Модельbandviz, 768 pxПолоса всё ещё главный пикSSIM к SFT
SFT9,89 из 121,000
SFT + Destripe @ 1.04,21 из 120,995
Base, для сравнения4,25 из 120,876

При 1024 px обычная SFT набирает 24,0, а полоса оказывается главным пиком на 11 из 12 изображений; LoRA при 1,5 набирает 5,9 с 1 из 12 против 4,0 у Base. Изображение остаётся более чем на 99 процентов похожим на то, что выдала SFT.

Однородный цвет: здесь артефакт проще всего заметить и сложнее всего убрать, потому что сплошной области полосе негде спрятаться:

SFT, однородный цветDestripe, однородный цвет
Сплошной бежевый фон, обычная SFTТот же промпт и сид, LoRA при 1,5

Лица это другая сторона компромисса: та часть изображения, которую грубое исправление обычно смягчает:

Портрет, SFTПортрет, Destripe
Портрет, обычная SFTТот же промпт и сид, LoRA при 1,5

Сторонние рендеры из бенчмарка MATLOWAI, который измеряет идентичность с помощью ArcFace: 0,94 при стандартных настройках пресета и 0,96 с собственными настройками семплера для LoRA. Источник: MOSS-Image-SFT-DeBand

Проверка третьей стороной

Самые сильные внешние данные от MATLOWAI: они ещё до появления этой LoRA опубликовали исследование тех же полос и набор исправлений с откатом слоёв. Теперь этот бенчмарк включает LoRA Destripe в прямом сравнении с альтернативами и называет её мягким концом диапазона:

ИсправлениеСплошные области, медиана dBХудший случайСходство лиц
Destripe @ 1.0−3,2−1,90,94
Destripe @ 1.5−3,9−1,80,94
Destripe @ 1.5, свои настройки семплера−4,6−3,00,96
Базовая модель, для сравнения−16,6−10,40,45

В том же тексте компромисс назван прямо: LoRA лишь частично очищает однородные цветные области, примерно на −4 dB, поэтому полосы становятся слабее, но всё ещё могут быть видны при усиленном цвете, где исправления с откатом слоёв идут дальше ценой изменения всего изображения. В README теперь тем, кому нужны минимально возможные изменения, рекомендуют эту LoRA, а тем, кому нужны максимально чистые однородные фоны, более тяжёлое исправление.

Ограничения

  • Измерения охватывают 768 и 1024 px с ER-SDE, 25 шагами и CFG 2.5. Другие семплеры, число шагов и разрешения не тестировались, а полосатость сильно меняется от сида к сиду.
  • Исправление частичное по замыслу: 64 направления, оценённые первопорядковой оценкой на одном разрешении. Более широкие изображения (1536 px и выше) дают другую, более волнистую полосу, против которой эта LoRA не оценивалась.
  • Официальных слов от OpenMOSS нет. Текст автора в репозитории SFT, опубликованный 19 октября, спрашивает, использовались ли в пайплайне данных SFT масштабирование позиций, бакетирование или изменение размера изображений, и предлагает оценки по направлениям; ответа на момент написания нет.

Также в репозитории

В том же репозитории есть версии обоих чекпойнтов MOSS-Image с раздельными q/k/v: q, k и v каждого слоя внимания хранятся отдельными тензорами вместо одного слитого qkv. Веса это те же самые числа в другой раскладке: 463 тензора вместо 379. Они существуют для работы с адаптерами: тренеры вроде AI Toolkit пишут отдельные слои q, k и v, а на слитых файлах такие адаптеры приходится отображать на срезы. Они загружаются через Load Diffusion Model вместо файлов Comfy-Org.

Доступность

Оба артефакта на Hugging Face. Текстовый энкодер и VAE не изменены и берутся из Comfy-Org/MOSS-Image. Анализ полосатости и метрика bandviz, на которой построена оценка, принадлежат MATLOWAI, в MOSS-Image-SFT-DeBand, вместе с интерактивным сравнением всех исправлений на тех же промптах и сидах.

Комментарии

Войдите через GitHub, чтобы участвовать в обсуждении.

Загрузка комментариев…
MOSS-Image SFT Destripe LoRA: убираем вертикальные полосы в ComfyUI | ComfyUI Wiki