Введение в генерацию изображений с помощью Stable Diffusion

Автор статьи, участник AI-Лаборатории УИИ Александр Токарев
В последние годы мир генерации изображений с использованием искусственного
интеллекта претерпел значительные изменения. Одним из самых интересных и
перспективных подходов является метод Stable Diffusion. Этот метод предлагает
новые возможности для создания высококачественных изображений, начиная от
художественных произведений и заканчивая реалистичными фотографиями.
Stable Diffusion — это модель скрытой диффузии, представляющая собой
глубокую генеративную нейронную сеть, способную преобразовывать текстовые
запросы в изображения. Она предлагает новые возможности для создания
контента, автоматизации дизайнерских процессов и улучшения визуальной
коммуникации.

Также Stable Diffusion может быть использована для обучения нейронных сетей в
области компьютерного зрения. В частности,
  • для генерации изображений, которые трудно найти в достаточном для
  • обучения количестве или которые весьма дороги, если их покупать
  • для коррекции изображений, включая изменение размеров
  • для дополнения существующего датасета, например, восстановления
  • баланса между классами.
Модель имеет открытый код и веса, может быть установлена локально на большинстве устройств, оснащенных графическим процессором с объемом видеопамяти не менее 4 ГБ. Предусмотрено несколько вариантов модели, требующих разный объем памяти графического процессора, поэтому пользователь может выбрать модель, подходящую под его «железо». Также
доступна облачная версия (https://stablediffusionweb.com/) и работа по API. Запросы воспринимает только на английском языке, но в сети можно найти и русифицированные версии.
Допускается сделать 10 изображений в день бесплатно. Остальное – за деньги, ориентировочная стоимость около 4 руб. за изображение по API (на июнь 2024г.). Оплата с карт иностранных банков или аналогичных ресурсов. Работает в России без VPN.
Stable Diffusion предлагает широкий спектр преобразований для работы с
изображениями по API. Вот некоторые из ключевых возможностей:

  • Текстовая генерация изображений (Text-to-Image Generation). Пользователь вводит текст, описывающий желаемое изображение, и модель генерирует соответствующее изображение.

  • Изображение в изображение (Image-to-Image Translation): Преобразование одного изображения в другое, сохраняя основные элементы, но изменяя стиль или добавляя детали.

  • Интерполяция изображений (Image Interpolation): Создание промежуточных изображений между двумя исходными изображениями, что полезно для создания анимаций или морфинга.

  • Улучшение разрешения (Super-Resolution): Повышение разрешения и качества изображения, добавляя больше деталей и четкости.

  • Смешивание стилей (Style Mixing): Смешивание элементов стилей разных изображений, чтобы создать новое изображение.

  • Редактирование изображений (Image Editing): Возможность вносить изменения в существующие изображения, такие как изменение цветов, добавление элементов или исправление недостатков.

  • Инверсное моделирование (Inpainting): Восстановление или замена отсутствующих частей изображения. Пользователь может указать область, которая должна быть изменена или дополнена, и модель заполнит эту область соответствующим контентом.

  • Сегментация и изменение фона (Segmentation and Background Alteration): Разделение изображения на отдельные сегменты и изменение фона, дорисовка фона, добавление или удаление отдельных элементов.

  • Генерация на основе эскизов (Sketch-to-Image): Пользователи могут рисовать базовые формы, и модель преобразует их в реалистичные изображения.
При генерации изображений с помощью Stable Diffusion пользователи могут изменять различные настройки, чтобы получить желаемый результат. Не все из них доступны одновременно – это зависит от режима генерации. Вот некоторые из основных параметров, которые можно настраивать:

  • Количество итераций (Diffusion Steps): Большее количество шагов обычно приводит к более детализированным и качественным изображениям.

  • Уровень шума (Noise Level): Регулировка этого параметра позволяет контролировать степень детализации и гладкость изображения.

  • Размер изображения (Image Size): Разрешение генерируемого изображения. Пользователи могут указывать ширину и высоту изображения в пикселях. По умолчанию, при работе через API, размер кадра 1536х1536 пикселей.

  • Начальное значение инициатора случайных чисел (Random Seed): Установка определенного значения позволяет воспроизводить одни и те же результаты генерации.

  • Коэффициент содержания (Content Weight): Влияет на баланс между сохранением оригинального контента и применением стилистических изменений.

  • Температура (Sampling Temperature): Высокая температура приводит к более разнообразным и креативным изображениям.

  • Преобразование стиля (Style Transfer): Возможность применять определенные стили или фильтры к генерируемому изображению.

  • Интерполяция изображений (Image Interpolation): Генерация новых изображений путем смешивания нескольких исходных изображений. Этот параметр полезен для создания анимаций или серии связанных изображений.

  • Программные ограничения (Clip Guidance): Включение или отключение различных руководящих сигналов, таких как CLIP-модели, для улучшения соответствия изображения текстовому описанию.

  • Глубина генерации (Generation Depth): Влияет на количество слоев модели, используемых при генерации изображения, влияет на уровень детализации и сложность изображения.
Рассмотрим подробнее формирование запроса. Язык запроса по умолчанию – английский. Теоретически, можно использовать и другие языки, но результаты будут менее предсказуемыми, как пишут в сети.
Для получения желаемого результата, его надо описать как можно точнее. Расположение объектов их цвета, стиль изображения и многое другое весьма существенно влияет на результат. Например, хотим получить изображение медведя, сфотографированного с большой высоты. Вот простой запрос:
«a bear in the wood, view from high altitude, photostyle»

Как легко заметить, модель проигнорировала текст про вид с большой высоты. Поэтому и требуются более длинные и конкретные запросы. Для изменения влияния конкретных фраз или слов на результат можно использовать дополнительные методы. Во-первых, значение фразы тем больше, чем ближе она к началу. Для еще большего усиления можно заключить фразу в круглые скобки. Скобки можно вкладывать друг в друга. Каждая пара скобок усиливает фразу примерно на 10%.

«a bear in the wood, ((((((view from high altitude)))))), photostyle»

Как видим, изображение значительно изменилось. Также можно управлять значимостью фраз с помощью числа, записанного после слова через двоеточие, например grey cat:0.7.
Также есть отдельный раздел для негативных промтов, в которых пишем то, чего видеть не хотим.
Вот комбинация положительного и отрицательного промтов.
Prompt: «a bear in the wood, ((((((((view from high altitude)))))))), photostyle»
Negative prompt: «(((((green trees))))), shadows:4.0»
Видим, что по сравнению с предыдущим изображением, зеленый цвет деревьев почти пропал и тени тоже исчезли. Но также пропал и вид с большой высоты, не смотря на 8 пар скобок. В нейросети все знаки в запросе связаны и нельзя точно предсказать, чем обернется то или иное изменение в запросе.

Настройка seed задает начальное состояние «генератора случайных чисел». При одинаковых значениях seed и прочих неизменных параметрах получим абсолютно одинаковые изображения.
Две генерации подряд с одинаковыми параметрами и фиксированным значением
seed. В то же время, даже при одинаковых значениях seed при добавлении стиля
"style_preset":"photographic" изображение поменялось.
Seed=432
Seed=432, "style_preset":"photographic"
Seed=30
Seed=32
Seed=432
Для формирования качественных запросов, а также для формирования навыков составлению запросов очень поможет замечательная программа Clip Interrogator (https://huggingface.co/spaces/pharmapsychotic/CLIP-Interrogator). Эта онлайн программа создает запрос для Stable Diffusion на основании готового изображения. Изображение может быть любое – рисунок, эскиз, фото. Ниже представлен интерфейс программы. Изображение помещается слева, через некоторое время внизу появляется текст запроса к Stable Diffusion.
«a couple of animals that are standing in the snow, aerial photo, located in hajibektash complex, moose, still from the film, by Bruce Onobrakpeya, airborne view, eradication, heise jinyao, oklahoma, computer vision, tv capture, game screenshot»
Вот, что мы получим, если отправим этот запрос из сгенерированного текста в Stable Diffusion.
Обратите внимание, что запрос состоит из довольно большого набора слов. Более того, некоторые, кажется, вообще не имеют отношения к загруженной картинке (game screenshot). Некоторые даже не являются обычными словами, (heise jinyao). Также, часто используются имена и фамилии художников, фотографов (Bruce Onobrakpeya), в стиле которых, по мнению нейросети, сделана картинка. Я проверял – искал картины названных нейросетью художников. Ничего общего с исходным изображением они не имели.
Картина Bruce Onobrakpeya.
В сети уже выложено большое количество видеороликов разных авторов,
раскрывающих те или иные особенности Stable Diffusion, которые помогут
получить именно тот результат, к которому вы стремитесь. Так что пожелаю всем
отличных изображений.
Официальная документация очень качественно сделана и даже приведены
готовые коды для python. https://platform.stability.ai/
Регистрация крайне проста, API ключ можно получить сразу.

Более подробная информация о работе со Stable Diffusion содержится в статье
https://trends.rbc.ru/trends/industry/6453407a9a794740b2fd2b96

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

О локализации модели на свой компьютер подробно описано здесь:
https://habr.com/ru/companies/selectel/articles/712316/
Нейросеть Stable Diffusion допускает дообучение для решения уникальных задач.

Об этом написано здесь:
https://club.dns-shop.ru/blog/t-415-neiroseti-i-ai/92746-kak-obuchit-neiroset-stable-
diffusion-gotovim-svou-model-s-n/
Код для работы с облачной моделью по API, использованный для генерации
изображений этой статьи:
Made on
Tilda