Метод выборки (sampling method) в генеративных моделях, таких как Stable Diffusion или FLUX, определяет способ преобразования случайного шума в изображение в процессе диффузии. Этот метод напрямую влияет на качество, стиль и скорость генерации изображения.
В предыдущей статье я разбирал, как работает CFG Scale и для чего он нужен. Рекомендую ознакомиться, потому что будем его использовать.
1. Зачем нужен Sampling method
▍Sampling method необходим для нескольких ключевых задач:
-
Постепенное уменьшение шума:
Основная задача метода выборки — это постепенное уменьшение шума и улучшение структуры изображения на каждом шаге. Каждый шаг итерации уменьшает уровень шума и добавляет детали, приближая изображение к целевому.
-
Управление процессом диффузии:
Методы выборки управляют процессом диффузии, определяя, как модель должна обновлять изображение на каждом этапе. Это позволяет контролировать скорость и качество генерации.
-
Оптимизация качества и скорости:
Различные методы выборки предлагают компромиссы между качеством конечного изображения и скоростью его генерации.
-
Стабилизация процесса:
Методы выборки также помогают стабилизировать процесс генерации, чтобы избежать артефактов и нежелательных искажений. Это особенно важно при работе с сложными текстовыми подсказками или при генерации высококачественных изображений.
2. Основные параметры Sampling method
-
Качество изображения:
Некоторые методы выборки могут обеспечивать более высокое качество изображения, лучше сохраняя детали и улучшая реалистичность.
-
Стиль изображения:
Разные методы могут приводить к различным стилям изображения. Например, одни методы могут создавать более сглаженные изображения, а другие — более детализированные.
-
Скорость генерации:
Методы выборки могут различаться по скорости. Некоторые методы быстрее, но могут уступать в качестве, тогда как другие медленнее, но обеспечивают лучшее качество.
3. Основные типы методов выборки
-
DDIM (Denoising Diffusion Implicit Models):
Преимущества: быстрая генерация, возможность управления стилем.
Недостатки: может уступать в качестве более медленным методам.
-
PLMS (Pseudo Linear Multistep):
Преимущества: хорошая комбинация скорости и качества, улучшенная устойчивость к шумам.
Недостатки: жрет много времени.
-
DPM‑Solver:
Преимущества: высокое качество изображения, более точное управление процессом диффузии.
Недостатки: более высокая вычислительная сложность и время генерации.
-
Euler A and B:
Преимущества: быстрая и стабильная генерация, подходит для широкого спектра задач.
Недостатки: может уступать в качестве более специализированным методам.
-
LMS (Laplacian Pyramid Sampling):
Преимущества: хорошее сохранение деталей и текстур.
Недостатки: могут быть более медленными по сравнению с другими методами.
5. Алгоритм работы метода выборки на примере DDIM
В данном разделе рассмотрим процесс взаимодействия CFG Scale и метода выборки, чтобы понимать механизмы денойза.
▍Шаг 1: Инициализация
В начале процесса инициализируем случайный шум , который генерируется по нормальному распределению:
где — начальный момент времени.
Шум нужен для того, чтобы модели было что расшумлять — это называется обратной диффузией и лежит в основе современных генеративных нейросетей.
Он генерируется только один раз в начале всего цикла, чтобы запустить весь процесс, описанный далее.
▍Шаг 2: Расчет результирующего состояния на основе CFG Scale
Подробнее про CFG Scale.
На этом этапе модель генерирует 3 изображения из шума: одно на основе позитивного промпта, одно на основе негативного + одно безусловное изображение — без какого‑либо промпта.
Здесь задействуется модель CLIP для перевода промпта в векторы (язык нейросети) и U‑Net для непосредственно генерации.
Важно отметить, что на этом этапе модель лишь частично преобразует шум, выделяя самые общие паттерны и формы, соотносящиеся с текстовой подсказкой.
Применяем формулу CFG Scale для получения результирующего состояния на основе безусловной и условной генерации:
где:
— безусловная генерация (случайное изображение).
— условная положительная генерация (с учетом положительного условия).
— условная негативная генерация (с учетом отрицательного условия).
— коэффициент, который регулирует, насколько сильно положительные и отрицательные условия влияют на итоговое состояние изображения (его мы вводим ручками в интерфейсе).
▍Шаг 3: Вычисление модифицированного шума
На основе результата из шага 2, модель рассчитывает модифицированный шум, учитывающий влияние условий:
— предсказанный шум для безусловного процесса на основе полученного состояния.
— предсказанный шум с учетом положительного условия.
— предсказанный шум с учетом отрицательного условия.
— коэффициент, регулирующий степень влияния положительного и отрицательного условий.
— это результирующее состояние, подающееся на вход модели (получили на шаге 2).
— текущий шаг времени в процессе генерации
— позитивный промпт
— негативный промпт
В этом шаге, исходя из полученного , модель вычисляет разные предсказанные шумы (, , ), а затем получает модифицированный шум , который используется в формуле DDIM для обновления состояния изображения.
Этот шаг — своего рода «корректировка» на основе уже имеющегося состояния изображения и специфических условий. Благодаря этому процессу итоговое изображение становится более адаптированным к условиям, которые были заданы.
Данный шаг также нужен из‑за несовершенства математики — для оптимизации вычислений. Именно значения из третьего шага взаимодействуют с формулой метода выборки. В прошлом же шаге подготавливается база для этого.
Это как 1+1=2, где без одной единицы двойка не получится.
Вычисления на данном шаге также проводятся с помощью U‑Net.
▍Шаг 4: Применение метода выборки (DDIM)
Далее модифицированный шум и результирующее состояние подставляются в формулу метода выборки, чтобы скорректировать мелкие детали и стабилизировать общий процесс генерации.
На этом шаге будет решено: где шум добавить, а где убрать.
Зачем добавлять шум? Чтобы повысить детализацию. Вспомните снимки со своего смартфона ночью — если убрать весь шум, то они будут смазанными.
Формула метода выборки DDIM:
где — текущее состояние изображения на шаге .
и — коэффициенты, контролирующие скорость изменения состояния изображения на каждом шаге. Они зависят от заданных параметров шума и времени.
Подставляем значения модифицированного шума в формулу DDIM:
Результатом всего процесса будет являться матрица векторов — т. е. изображение в скрытом пространстве нейросети, очищенное от части шума.
Обратный диффузионный процесс идет в обратном направлении по времени, начиная с шума и постепенно очищая его до целевого изображения .
обозначает состояние изображения на шаге , которое является результатом применения модифицированного шума к текущему состоянию . Также на каждом шаге корректируются и , отвечающие за количество шума, который будет исключен на текущем и следующем шаге.
▍Шаг 5: Повторение процесса
Теперь все значения будут рассчитываться для , которое затем нужно подставить в формулу метода выборки DDIM:
После вычисления мы вычисляем , и так далее до .
6. Метод выборки DPM++ 2M Karras
Метод выборки DPM++ 2M (Denoising Diffusion Probabilistic Models++) является одним из методов улучшения процесса диффузии. Рассмотрим его, так как он, по моему мнению, является самым удачным сэмплером по соотношению качество / скорость.
DPM++ 2M использует прогрессивные улучшения и шаги для более точного и стабильного уменьшения шума.
Karras указывает на применение оптимизаций, которые могут включать улучшенные методы планирования шагов, адаптивное уменьшение шума и другие техники, направленные на повышение качества.
Вот так выглядит формула метода выборки DPM++ 2M Karras:
Здесь:
— текущее состояние изображения на шаге t.
— состояние изображения на предыдущем шаге.
— коэффициент шага.
— весовой коэффициент для градиента.
— градиент функции потерь.
— функции, включающие оптимизации, предложенные Тимо Керрасом.
7. Заключение
Как вы, надеюсь, поняли, sampling method работает не в отрыве от всего остального, а является звеном в конвейерной цепочки по генерации изображения. Он, как и все рассмотренные в статье шаги, сделан для корректировки работы основном модели, чтобы генерации получались точнее и детальнее.
Кратко повторим материал:
Для запуска процесса генерации нужен первичный шум, который мы подаем на вход модели вместе с текстовыми подсказками.
Модель преобразует шум, чтобы наметить общие формы (шаг 2).
Затем модель этот шум повторно корректирует, чтобы еще больше конкретизировать формы и детали (шаг 3).
После этого предсказания из шага 2 и 3 объединяются в формуле метода выборки, и тогда модель конкретно и с высокой точностью начинает убирать и добавлять шум, чтобы вытягивать из шума детали и приближать его к целевому.
Далее уже не нужно генерировать случайный шум — на вход подаётся полученное на 4 шаге изображение, после чего алгоритм повторяется до тех пор, пока не пройдёт все шаги.
Интересный факт: нет смысла ставить чрезмерное количество шагов сэмплирования, так как модель начнет на чистое изображение добавлять шум и его же убирать, из-за чего могут возникать артефакты и неточности.
Буду рад видеть вас в телеграм‑канале, где я пишу гайды по Stable Diffusion и FLUX. Там же будут и анонсы новых статей.
JustPeople
Из этого может сложиться впечатление что выбирая различные Sampling Method'ы мы можем влиять на результат генерации. И если для SD моделей это верно, то FLUX работает только с Euler Simple. Попытки выбрать что то другое приведут к ошибке. По крайней мере так было на релизе модели несколько недель назад, возможно сейчас что-то изменилось? Поправьте если я в чем то неправ.
dima_yiu Автор
У FLUX dev в ComfyUI у меня также работал Euler Normal и DPM++, но с последним параметры точно не помню, один раз его использовал
Euler normal чуть быстрее преобразовывает