Продолжая цикл разъяснения параметров нашей любимой нейронной сети Stable Diffusion я решил в этот раз остановиться именно на Denoising Strength, ибо он каждый раз взрывал мне бошку. В прошлый раз я разбирал CFG Scale.
На данный момент шум могут декодировать VAE (вариационные автоэнкодеры), DPM (диффузионные вероятностные модели) и Сэмплеры (специализированные решатели высокого порядка для диффузионных уравнений).
Их задача сводится к тому, чтобы за определенное количество шагов генерации или Sampling steps из полного шума достать четкое изображение, к тому же сформированное по текстовой или визуальной подсказке (другой картинке).
В 2022 году был изобретен и адаптирован под диффузионные нейронные сети сэмплер DPM Solver, который значительно ускорил процесс декодирования шума. С момента его появления начали появляться, DPM Solver++, DPM ++ SDE Karras, DPM++ 2M Karras и другие, которые отличаются лишь методом решения дифференциальных уравнений (ими и убирается шум).
По итогу: чем быстрее вы решаете уравнение, тем меньше времени требуется для денойзинга картинки. И тут приходится балансировать между точностью и скоростью.
На картинке выше вы можете посмотреть скорость работы различных сэмплеров. DPM Adaptive вышел в топы по медлительности потому, что сам определяет количество шагов генерации, что значительно повышает его точность в зависимости от конкретного запроса.
Как работает параметр Denoising strength?
Если нужна научная статья со всей математикой, то рекомендую прочитать данный материал.
Этот параметр мы будем рассматривать в режиме работы img2img, где он нужен для того, чтобы определять, насколько будет преобразовано исходное изображение во что-то новое.
Сейчас коротко залезем в изнанку того, за счет чего вообще происходит генерация img2img и Inpaint.
Обратите внимание на самую правую колонку с Мона Лизой, разберем ее. Во-первых, для создания изображения используется не только текстовые эмбеддинги (зашифрованный текст), но и визуальные эмбеддинги (зашифрованные картинки), плюс учитывается исходник (Мона Лиза).
Т.е. нейросеть не просто накладывает поверх изображения шум и рисует что-то поверх, а полностью с нуля генерирует изображение, предварительно размазывая его с заданной силой.
И чем больше Denoising strength, тем с большей силой нейросеть может опираться не на исходник, а на внутренние эмбеддинги (зашифрованные в ней текст и картинки). А понижением денойза мы обрубаем эти эмбеддинги и не позволяем нейронке работать с шумом.
Выше представлено наглядное доказательство того, что модель Stable Diffusion учитывает исходник и генерирует разный шум в зависимости от контекста.
Слева учитывается контекст всей картинки с яблоком, а справа только определенная область в центре. Шум, сгенерированный на первом шаге, отличается: слева это целая область, а справа второе яблоко внутри первого.
Для закрепления: если Denoising strength небольшой, то шумом ка бы является исходное яблоко, которое уже без шума (его не надо пересоздавать). А если Denoising strength большой, то нейронка подавляет уже новосозданный шум и получает другой результат.
Если сложно, то посмотрим на это дело с другой стороны: представьте, что у вас в руках лупа. Более точная фокусировка эквивалентна низкому denoising strength: все уже сфокусировано, менять ничего не нужно. Ну, а если произошла расфокусировка, то нам срочно нужно это исправить и навести фокус: а пока мы это делаем — происходит генерация.
Разбираем больше примеров генерации шума
К примеру, у нас есть яблоко, и мы хотим его изменить на другое яблоко. Закидываем картинку в img2img, выставляем Denoising strength и жмем Generate.
На нулевом шаге генерации мы имеем наш исходник, который затем размывается и зашумляется. Как вы можете видеть, шум не похож на тот, который появляется при сбоях связи на телевизоре: он не заготовлен, а создается самой моделью. Нейронка как бы упрощает картинку донельзя и размывает ее, превращая в некую заготовку.
Даже при низком показателе Denoising strength мы получаем шум, однако на следующем шаге происходит перерасчет, и мы снова получаем исходное яблоко.
Сравнение методов генерации шума в режиме Inpaint
Далее посмотрим, как влияют на генерацию разные режимы работы генерации шума, среди которых: original, fill, latent noise, latent nothing. По мере продвижения буду комментировать и оставлять комменты для понимания, нафиг это нужно все вообще.
Тесты проводились на модели Deliberate_v2.
Метод original учитывает эмбеддинги исходника и придерживается их при генерации и декодировании шума. Хорош в том случае, если необходимо соблюдать контекст, цвета или формы.
Fill отлично подходит тогда, когда нужно убрать объект с фона или предмета. Этот метод размывает замаскированную область под маской, тем самым создавая пустое пространство.
Latent noise по сути создает случайный шум и затем его декодирует. С помощью данного метода можно как сгенерировать что-то новое в кадре, так и переделать часть объекта с нуля.
Latent nothing всегда создает определенный цвет, поверх которого затем происходит генерация.
Еще я заметил, что разные методики наложения шума по-разному меняют цветовую палитру. Для проведения этого эксперимента и размыл исходник в Photoshop в режиме Средняя, после чего проделал ту же операцию с картинками, на которых есть наложенный шум.
Чем правее стоит пример, тем больше он подвержен изменениям, и тем больше цвет отличается от исходника.
Отличие Inpaint модели от обычной
Inpaint-версия создает шум немного иначе, нежели обычная модель. Я привел данный пример, чтобы еще раз доказать, что шум — это многоэтапный и сложный процесс, который комбинируется с разными эмбеддингами и исходными данными.
Использовал в тестах Reliberate-inpaint. Такого рода модели обучаются дополнительно на масках и контентом под ним, а следование подсказке остается не в приоритете.
Шум Inpaint-модели максимально схож с оригинальной палитрой, а денойз стремится ближе к исходнику, т.е. эмбеддинги изображения явно перевешивают текстовые.
Вот еще примеры — и все также следование исходнику.
Congratulations, вы выжили!
Теперь вы разбираетесь в том, что такое Denoising strength в нейросетях. А если еще нет, то спамьте вопросами. Буду рад обратной связи и вашим комментариям, а также приглашаю в свой телеграм чат, где отвечу на все вопросы касаемо SD.
Буду рад видеть вас в телеграм-канале, где я собираю лучшие гайды по Stable Diffusion. А если не найду, то пишу сам.