Метод выборки (sampling method) в генеративных моделях, таких как Stable Diffusion или FLUX, определяет способ преобразования случайного шума в изображение в процессе диффузии. Этот метод напрямую влияет на качество, стиль и скорость генерации изображения.

В предыдущей статье я разбирал, как работает CFG Scale и для чего он нужен. Рекомендую ознакомиться, потому что будем его использовать.

1. Зачем нужен Sampling method

▍Sampling method необходим для нескольких ключевых задач:

  1. Постепенное уменьшение шума:

    • Основная задача метода выборки — это постепенное уменьшение шума и улучшение структуры изображения на каждом шаге. Каждый шаг итерации уменьшает уровень шума и добавляет детали, приближая изображение к целевому.

  2. Управление процессом диффузии:

    • Методы выборки управляют процессом диффузии, определяя, как модель должна обновлять изображение на каждом этапе. Это позволяет контролировать скорость и качество генерации.

  3. Оптимизация качества и скорости:

    • Различные методы выборки предлагают компромиссы между качеством конечного изображения и скоростью его генерации.

  4. Стабилизация процесса:

    • Методы выборки также помогают стабилизировать процесс генерации, чтобы избежать артефактов и нежелательных искажений. Это особенно важно при работе с сложными текстовыми подсказками или при генерации высококачественных изображений.

2. Основные параметры Sampling method

  1. Качество изображения:

    • Некоторые методы выборки могут обеспечивать более высокое качество изображения, лучше сохраняя детали и улучшая реалистичность.

  2. Стиль изображения:

    • Разные методы могут приводить к различным стилям изображения. Например, одни методы могут создавать более сглаженные изображения, а другие — более детализированные.

  3. Скорость генерации:

    • Методы выборки могут различаться по скорости. Некоторые методы быстрее, но могут уступать в качестве, тогда как другие медленнее, но обеспечивают лучшее качество.

3. Основные типы методов выборки

  1. DDIM (Denoising Diffusion Implicit Models):

    • Преимущества: быстрая генерация, возможность управления стилем.

    • Недостатки: может уступать в качестве более медленным методам.

  2. PLMS (Pseudo Linear Multistep):

    • Преимущества: хорошая комбинация скорости и качества, улучшенная устойчивость к шумам.

    • Недостатки: жрет много времени.

  3. DPM‑Solver:

    • Преимущества: высокое качество изображения, более точное управление процессом диффузии.

    • Недостатки: более высокая вычислительная сложность и время генерации.

  4. Euler A and B:

    • Преимущества: быстрая и стабильная генерация, подходит для широкого спектра задач.

    • Недостатки: может уступать в качестве более специализированным методам.

  5. LMS (Laplacian Pyramid Sampling):

    • Преимущества: хорошее сохранение деталей и текстур.

    • Недостатки: могут быть более медленными по сравнению с другими методами.

5. Алгоритм работы метода выборки на примере DDIM

В данном разделе рассмотрим процесс взаимодействия CFG Scale и метода выборки, чтобы понимать механизмы денойза.

▍Шаг 1: Инициализация

В начале процесса инициализируем случайный шум (x_T), который генерируется по нормальному распределению:

x_T \sim \mathcal{N}(0, 1)где T — начальный момент времени.

Шум нужен для того, чтобы модели было что расшумлять — это называется обратной диффузией и лежит в основе современных генеративных нейросетей.

Он генерируется только один раз в начале всего цикла, чтобы запустить весь процесс, описанный далее.

▍Шаг 2: Расчет результирующего состояния на основе CFG Scale

Подробнее про CFG Scale.

На этом этапе модель генерирует 3 изображения из шума: одно на основе позитивного промпта, одно на основе негативного + одно безусловное изображение — без какого‑либо промпта.

Здесь задействуется модель CLIP для перевода промпта в векторы (язык нейросети) и U‑Net для непосредственно генерации.

Важно отметить, что на этом этапе модель лишь частично преобразует шум, выделяя самые общие паттерны и формы, соотносящиеся с текстовой подсказкой.

Применяем формулу CFG Scale для получения результирующего состояния (x_t) на основе безусловной и условной генерации:

x_t = x_{t, \text{unconditional}} + s \cdot (x_{t, \text{positive conditional}} - x_{t, \text{negative conditional}})

где:

  • (x_{t, \text{unconditional}})— безусловная генерация (случайное изображение).

  • (x_{t, \text{positive conditional}})— условная положительная генерация (с учетом положительного условия).

  • (x_{t, \text{negative conditional}})— условная негативная генерация (с учетом отрицательного условия).

(s)— коэффициент, который регулирует, насколько сильно положительные и отрицательные условия влияют на итоговое состояние изображения (его мы вводим ручками в интерфейсе).

▍Шаг 3: Вычисление модифицированного шума

На основе результата из шага 2, модель рассчитывает модифицированный шум, учитывающий влияние условий:

\epsilon_\text{cfg} = \epsilon_\theta(x_t, t) + s \cdot (\epsilon_\theta(x_t, t, c_\text{pos}) - \epsilon_\theta(x_t, t, c_\text{neg}))

  • \epsilon_\theta(x_t, t)— предсказанный шум для безусловного процесса на основе полученного состояния.

  • \epsilon_\theta(x_t, t, c_\text{pos})— предсказанный шум с учетом положительного условия.

  • \epsilon_\theta(x_t, t, c_\text{neg})— предсказанный шум с учетом отрицательного условия.

  • (s)— коэффициент, регулирующий степень влияния положительного и отрицательного условий.

  • (x_t)— это результирующее состояние, подающееся на вход модели (получили на шаге 2).

  • (t)— текущий шаг времени в процессе генерации

  • c_\text{pos}— позитивный промпт

  • c_\text{neg}— негативный промпт

В этом шаге, исходя из полученного (x_t), модель вычисляет разные предсказанные шумы (\epsilon_\theta(x_t, t), \epsilon_\theta(x_t, t, c_\text{pos}), \epsilon_\theta(x_t, t, c_\text{neg})), а затем получает модифицированный шум \epsilon_\text{cfg}, который используется в формуле DDIM для обновления состояния изображения.

Этот шаг — своего рода «корректировка» на основе уже имеющегося состояния изображения и специфических условий. Благодаря этому процессу итоговое изображение становится более адаптированным к условиям, которые были заданы.

Данный шаг также нужен из‑за несовершенства математики — для оптимизации вычислений. Именно значения из третьего шага взаимодействуют с формулой метода выборки. В прошлом же шаге подготавливается база для этого.

Это как 1+1=2, где без одной единицы двойка не получится.

Вычисления на данном шаге также проводятся с помощью U‑Net.

▍Шаг 4: Применение метода выборки (DDIM)

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

На этом шаге будет решено: где шум добавить, а где убрать.

Зачем добавлять шум? Чтобы повысить детализацию. Вспомните снимки со своего смартфона ночью — если убрать весь шум, то они будут смазанными.

Формула метода выборки DDIM:

x_{t-1} = x_t + \sqrt{1 - \alpha_t} \cdot \left( \epsilon_\text{cfg} \right) \cdot \sqrt{1 - \alpha_{t-1}}

где (x_t) — текущее состояние изображения на шаге (t).

\sqrt{1 - \alpha_t}и \sqrt{1 - \alpha_{t-1}} — коэффициенты, контролирующие скорость изменения состояния изображения на каждом шаге. Они зависят от заданных параметров шума и времени.

Подставляем значения модифицированного шума в формулу DDIM:

x_{t-1} = x_t + \sqrt{1 - \alpha_t} \cdot \left( \epsilon_\theta(x_t, t) + s \cdot (\epsilon_\theta(x_t, t, c_\text{pos}) - \epsilon_\theta(x_t, t, c_\text{neg})) \right) \cdot \sqrt{1 - \alpha_{t-1}}

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

Обратный диффузионный процесс идет в обратном направлении по времени, начиная с шума (x_T) и постепенно очищая его до целевого изображения (x_0).

( x_{t-1} )обозначает состояние изображения на шаге ( t-1 ), которое является результатом применения модифицированного шума к текущему состоянию ( x_t ). Также на каждом шаге корректируются (\alpha_t) и (\alpha_{t-1}), отвечающие за количество шума, который будет исключен на текущем и следующем шаге.

▍Шаг 5: Повторение процесса

Теперь все значения будут рассчитываться для (x_{t-1}), которое затем нужно подставить в формулу метода выборки DDIM:

x_{t-2} = x_{t-1} + \sqrt{1 - \alpha_{t-1}} \cdot \left( \epsilon_\text{cfg} \right) \cdot \sqrt{1 - \alpha_{t-2}}

После вычисления (x_{t-2}) мы вычисляем (x_{t-3}), и так далее до (x_0).

6. Метод выборки DPM++ 2M Karras

Метод выборки DPM++ 2M (Denoising Diffusion Probabilistic Models++) является одним из методов улучшения процесса диффузии. Рассмотрим его, так как он, по моему мнению, является самым удачным сэмплером по соотношению качество / скорость.

  • DPM++ 2M использует прогрессивные улучшения и шаги для более точного и стабильного уменьшения шума.

  • Karras указывает на применение оптимизаций, которые могут включать улучшенные методы планирования шагов, адаптивное уменьшение шума и другие техники, направленные на повышение качества.

Вот так выглядит формула метода выборки DPM++ 2M Karras:

x_t = x_{t-1} - η * (λ * ∇_x L(x_t, x_{t-1}) + KarrasOptimizations(x_t, x_{t-1}))

Здесь:

  • (x_t)— текущее состояние изображения на шаге t.

  • (x_{t-1})— состояние изображения на предыдущем шаге.

  • η— коэффициент шага.

  • λ— весовой коэффициент для градиента.

  • ∇_x L(x_t, x_{t-1})— градиент функции потерь.

  • KarrasOptimizations— функции, включающие оптимизации, предложенные Тимо Керрасом.

7. Заключение

Как вы, надеюсь, поняли, sampling method работает не в отрыве от всего остального, а является звеном в конвейерной цепочки по генерации изображения. Он, как и все рассмотренные в статье шаги, сделан для корректировки работы основном модели, чтобы генерации получались точнее и детальнее.

Кратко повторим материал:

  1. Для запуска процесса генерации нужен первичный шум, который мы подаем на вход модели вместе с текстовыми подсказками.

  2. Модель преобразует шум, чтобы наметить общие формы (шаг 2).

  3. Затем модель этот шум повторно корректирует, чтобы еще больше конкретизировать формы и детали (шаг 3).

  4. После этого предсказания из шага 2 и 3 объединяются в формуле метода выборки, и тогда модель конкретно и с высокой точностью начинает убирать и добавлять шум, чтобы вытягивать из шума детали и приближать его к целевому.

  5. Далее уже не нужно генерировать случайный шум — на вход подаётся полученное на 4 шаге изображение, после чего алгоритм повторяется до тех пор, пока не пройдёт все шаги.

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

Буду рад видеть вас в телеграм‑канале, где я пишу гайды по Stable Diffusion и FLUX. Там же будут и анонсы новых статей.

Комментарии (2)


  1. JustPeople
    27.09.2024 07:49
    +1

    Метод выборки (sampling method) в генеративных моделях, таких как Stable Diffusion или FLUX, определяет способ преобразования случайного шума в изображение в процессе диффузии.

    Из этого может сложиться впечатление что выбирая различные Sampling Method'ы мы можем влиять на результат генерации. И если для SD моделей это верно, то FLUX работает только с Euler Simple. Попытки выбрать что то другое приведут к ошибке. По крайней мере так было на релизе модели несколько недель назад, возможно сейчас что-то изменилось? Поправьте если я в чем то неправ.


    1. dima_yiu Автор
      27.09.2024 07:49

      У FLUX dev в ComfyUI у меня также работал Euler Normal и DPM++, но с последним параметры точно не помню, один раз его использовал

      Euler normal чуть быстрее преобразовывает