Как стать автором
Обновить

Stable Diffusion: стилизовать за 60 секунд

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров14K

Многие из вас сталкивались со Stable Diffusion и знают, что с помощью этой нейросети можно генерировать изображения. Однако немногие знают, что с её помощью можно также стилизовать существующие изображения, что довольно сильно расширяет простор для её применения. Этот процесс намного проще генерации изображений с нуля. Этим мы и займёмся, а в качестве основы возьмём колоритную фотографию Джеймса Гандольфини.

Фотография

Инструменты

  1. Любой GUI для работы со Stable Diffusion, который поддерживает ControlNet. Я буду использовать самый популярный - AUTOMATIC1111. Установка и настройка находятся за рамками статьи и включают в себя много нюансов, однако могу посоветовать использовать этот удобный установщик и почитать это.

  2. В случае AUTOMATIC1111 потребуется плагин для поддержки ControlNet.

  3. Модели для ControlNet - Tile и Canny. Кидать в stable-diffusion-webui\extensions\sd-webui-controlnet\models.

  4. Textual Inversion модель для улучшения качества итогового изображения - easynegative. Кидать в stable-diffusion-webui\embeddings.

  5. Чекпойнт на базе Stable Diffusion 1.5 непосредственно для генерации изображений. Я буду использовать Dreamshaper 8. Кидать в stable-diffusion-webui\models\Stable-diffusion.

  6. VAE для улучшения цветопередачи - vae-ft-mse-840000-ema-pruned. Кидать в stable-diffusion-webui\models\VAE.

Подготовка

Идём во вкладку Settings, жмём Show all pages и через Ctrl + F ищем quicksettings. В найденном поле выбираем два элемента - sd_vae и CLIP_stop_at_last_layers. После в самом верху жмём Apply settings и Reload UI.

Настройки

После перезагрузки интерфейса видим, что в шапке страницы у нас появилось две новых настройки. В Stable Diffusion checkpoint выбираем скачанный чекпойнт, в SD VAE - скачанный VAE, Clip Skip устанавливаем в 2 (для интересующихся, но в целом на большинстве чекпойнтов тоже улучшает результаты).

Настройки


Базовая генерация

На этом все подготовительные этапы закончились. Идём во вкладку img2img и перетаскиваем наше изображение в окно. В поле Prompt нужно описать его. Самые ленивые могут нажать на кнопку Interrogate CLIP, чтобы нейросеть CLIP описала изображение за нас, а нам осталось только это описание скорректировать. В поле Negative prompt вставляем название скачанной ранее Textual Inversion модели - easynegative. В Sampling method и Sampling steps выбираем DPM++ 2M Karras и 22 (для интересующихся). Далее ищем иконку с транспортиром и жмём на неё, чтобы установить разрешение выбранного изображения в качестве разрешения для генерации. Если изображение больше 2000 пикселей по одной из сторон или вашей видеокарте не хватает памяти, то пропорционально уменьшайте разрешение.

Настройки

Один из основных параметров, которые нам придётся корректировать, - это Denoising strength. Он отвечает за то, насколько сильно базовое изображение будет изменено в процессе генерации. Как это всё работает в совокупности, проще всего понять при помощи графиков. Графики различаются дописанным в промпт стилем (он указан под графиком).

Графики
(anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5)
(anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5)
(renaissance painting, oil colors, hand drawn:1.5)
(renaissance painting, oil colors, hand drawn:1.5)

Как видно, чем больше Denoising strength, тем меньше на результат влияет наше базовое изображение. Уже на данном этапе вас могут устроить какие-то результаты, однако заметно, что при сильной стилизации изображение начинает сильно уходить далеко от базового, и дальше мы будем с этим бороться.

Продвинутая генерация

Итоговое изображение генерируется на основе случайного шума, за основу для которого берётся число seed. Зафиксируем его, нажав на кнопку с зелёными стрелочками (для этого предварительно нужно сгенерировать что-то - seed берётся у последнего сгенерированного изображения). Таким образом мы сможем отслеживать, как на результат влияют различные настройки.

Идём во вкладку ControlNet, в ControlNet Unit 0 перетаскиваем наше изображение. Включаем чекбоксы Enable, Pixel Perfect, Allow Preview и Preview as Input. В Control Type выбираем Canny, после чего у нас автоматически должны заполниться поля Preprocessor и Model. Нажимаем на иконку рядом с Preprocessor и видим, что у нас появилось изображение с контуром на основе базового изображения. За детализацию этого контура отвечают ползунки Canny Low Threshold и Canny High Threshold. Если контур будет чересчур детализированным, то у итогового изображения появятся артефакты. Если же деталей будет не хватать, то сходство с базовым изображением будет хромать. Нужно поймать баланс. Очередной важный параметр - Control Weight. Он отвечает за то, как сильно этот самый ControlNet Unit будет влиять на результат. Подробнее его влияние мы разберём дальше на графиках.

А пока переходим во вкладку ControlNet Unit 1 и перетаскиваем наше изображение и туда. Включаем чекбоксы Enable и Pixel Perfect. Control Type - Tile, Preprocessor - tile_colorfix+sharp.

Настройки
Canny
Canny
Tile
Tile

А теперь, когда мы указали все необходимые параметры, можно наконец-то разобраться, что же вообще происходит. Конечно же, при помощи графиков. По оси X меняется Control Weight модели Tile, по Y - Control Weight модели Canny.

Графики
Denoising Strength - 1.0
Denoising Strength - 1.0
Denoising Strength - 0.5
Denoising Strength - 0.5

Проще самому понять, что происходит на этих графиках, чем объяснить. Но явно видно закономерность: чем больше X, тем больше изображение походит на базовое; чем больше Y, тем больше сходство в деталях. На разных базовых изображениях и при разном Denoising Strength лучшие сочетанияControl Weight также могут различаться, но с большой вероятностью это будут значения где-то из середины графика (0.25-0.75).

Также видно, что при высоком Denoising Strength по оси Y у изображения начинают проявляться артефакты. Это может быть связано как с тем, что вы задали слишком детализированный контур, так и с тем, что промпт для стилизации пережаривает результат. Чтобы усилить какую-то часть промпта, её оборачивают в скобки и указывают коэффициент силы - (anime style:1.5). Как это влияет на наш результат, рассмотрим на любимом графике :)

График
X - сила промпта для стилизации, Y - Control Weight для Tileмодели
X - сила промпта для стилизации, Y - Control Weight для Tileмодели

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


Итоги

Наибольшее влияние на результат стилизации, помимо чекпойнта, оказывают 4 настройки:

  • Denoising Strength,

  • Tile Control Weight,

  • Canny Control Weight,

  • Prompt Strength.

Базовый процесс стилизации изображения включает в себя следующие этапы:

  1. Описываем базовое изображение, устанавливаем основные параметры, ControlNet пока не включаем. Описываем стиль. Генерируем изображения на Denoising Strength 0.5-1.0, чтобы понять, на что ориентироваться на выходе, хороший ли мы выбрали чекпойнт, правильно ли описали желаемый стиль.

  2. Как только сгенерировали стилистически хорошее изображение, фиксируем seed и включаем ControlNet. Задаём Control Weight в диапазоне 0.25-0.75 и смотрим, насколько хорошо ложится стиль, насколько хорошее сходство с оригиналом, не появляются ли артефакты. Если что-то не устраивает, крутим один из основных параметров.

  3. Как только поймали хорошие параметры, ставим seed в -1 и генерируем нужное количество изображений.

  4. Как только захотели сменить стиль, учтите, что в зависимости от стиля может потребоваться повысить/понизить Control Weight. Если мы хотим изображение в стиле, например, Гигера, то при высоком Control Weight стилистически хороший результат не получится, но при низком мы потеряем сходство. Опять же, нужно поймать баланс.

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

Также можно случайно выбирать один из заданных заранее стилей при помощи этого расширения, а ещё можно полистать этот и подобные сайты, где наглядно продемонстрированы стили разных художников, но это всё уже как домашнее задание :)

Ещё немного случайных примеров
Style - (renaissance painting, oil colors, hand drawn:1.5), Denoising strength - 1.0, Canny Control Weight - 0.4, Tile Control Weight - 0.75
Style - (renaissance painting, oil colors, hand drawn:1.5), Denoising strength - 1.0, Canny Control Weight - 0.4, Tile Control Weight - 0.75
Style - (anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5), Denoising Strength - 1.0, Canny Control Weight - 0.4, Tile Control Weight - 0.75
Style - (anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5), Denoising Strength - 1.0, Canny Control Weight - 0.4, Tile Control Weight - 0.75
Style - (anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5), Denoising Strength - 0.75, Canny Control Weight - 0.5, Tile Control Weight - 0.75
Style - (anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5), Denoising Strength - 0.75, Canny Control Weight - 0.5, Tile Control Weight - 0.75
Style - (anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5), Denoising Strength - 1.0, Canny Control Weight - 0.4, Tile Control Weight - 0.75
Style - (anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5), Denoising Strength - 1.0, Canny Control Weight - 0.4, Tile Control Weight - 0.75
Style - (renaissance painting, oil colors, hand drawn:1.5), Denoising strength - 1.0, Canny Control Weight - 1.0, Tile Control Weight - 0.5
Style - (renaissance painting, oil colors, hand drawn:1.5), Denoising strength - 1.0, Canny Control Weight - 1.0, Tile Control Weight - 0.5
Style - (anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5), Denoising Strength - 1.0, Canny Control Weight - 0.4, Tile Control Weight - 0.75
Style - (anime style, vintage cartoon style, hard lines, bold contours, by mappa studio:1.5), Denoising Strength - 1.0, Canny Control Weight - 0.4, Tile Control Weight - 0.75

Теги:
Хабы:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Публикации

Истории

Работа

Data Scientist
72 вакансии

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн