Рецепт

Как использовать Stable Diffusion и другие нейросети для генерации изображений

by human

Вы наверняка слышали про то, что нейросети прекрасно справляются с генерацией изображений! В этой статье я опишу несколько способов начать использовать генеративную сеть Stable Diffusion.

Обновлено 1 декабря 2023 г.

Эта заметка готовилась как шпаргалка к интенсиву по нейросетевому искусству в магистратуре Art and Tech МИСиС, и с тех пор неоднократно обновлялась и использовалась как справочный материал на различных мастер-классах.

Нейросетевые генеративные модели

К этому моменту уже все слышали про то, что нейросети позволяют создавать визуально привлекательные изображения по текстовому запросу или по другому изображению. Я ранее писал про то, какую роль могут сыграть современные генеративные нейросети. Посмотреть примеры нейросетевого искусства вы можете в онлайн-галерее Experient.Art.

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

Прежде всего, существует несколько вариантов нейросетевых генеративных моделей:

  • Модели с открытыми весами и исходным кодом, такие, как Stable Diffusion (с запросами на английском языке) или ruDALL-E/Kandinsky (с запросами на русском языке) от Сбер.
  • Модели, относительно которых известна архитектура, но весов модели нет в свободном доступе (что не позволяет открыто и неограниченно их использовать). Таким моделям относятся Imagen от Google и DALL-E 2 / DALL-E 3 от OpenAI. Некоторые из этих моделей могут использоваться через программный интерфейс.
  • Закрытые модели, предназначенные для коммерциализации в среде художников и дизайнеров. Это в первую очередь Midjourney. Модель доступна по подписке.

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

Готовые интерактивные инструменты

Самыми простыми в использовании инструментами являются различные онлайн-инструменты для генерации изображений, доступные через интернет любому пользователю компьютера. Вам достаточно ввести текстовый запрос, и спустя некоторое время вы получаете сгенерированное изображение. Основным минусом таких инструментов является необходимость оплачивать подписку, хотя некоторое количество изображений вы сможете сгенерировать бесплатно.

К таким инструментам относятся:

Dream Studio

  • DreamStudio от создателей Stable Diffusion. Вам изначально доступно некоторое количество кредитов, что достаточно для генерации около 500 изображений, но далее - подписка.
  • Наверное самый известный из всех инструментов Midjourney. Зарегистрировашись, вы получаете доступ к Discord-сообществу, где можете запрашивать генерацию изображений через бота. Midjourney наверное на сегодняшний день даём лучшее качество художественных изображений, однако его закрытость не позволяет использовать эту модель в более сложных художественных экспериментах. К сожалению, в настоящее время в Midjourney совсем нет бесплатного лимита генерации изображений.
  • Leonardo - это попытка сделать аналог Midjourney, основываясь на бесплатных нейросетях типа Stable Diffusion, но при этом добавив несколько своих до-обученных закрытых моделей, более сложный пайплайн обработки и т.д. В результате получился инструмент, который приближается к Midjourney по стабильности и качеству результата, при этом даёт существенно больше возможностей для экспериментов (а также какое-то количество бесплатных генераций в день).

Leonardo

  • Инструмент Playground AI позволяет не только генерировать, но и редактировать изображения!

  • На сайте Stable Diffusion Web есть небольшой бесплатный генератор, правда, часто очереди на генерацию бывают очень долгими, так что придётся ждать своего изображения несколько десятков минут. Из интересных инструментов, там же есть ещё библиотека промптов, в которой вы можете находить уже сделанные кем-то ранее запросы по ключевым словам, и сразу смотреть на результат.
  • Набор нейросетевых инструментов Neural.Love, содержащий в том числе генератор изображений. В основном всё хорошее там за деньги, но что-то попробовать можно. Использует свою модель, которая может имитировать разные стили, правда, не всегда успешно.
  • Бесплатный генератор Craiyon на основе модели DALL-E Mini.

Craiyon

  • Очень мощный набор инструментов для генерации доступен в рамках сервиса Phygital+. Он позволяет вам графически комбинировать нейросетевые модели для достижения необходимого художественного результата.
  • Русскоязычные нейросети семейства ruDALL-E можно протестировать на сайте, или в приложении [Салют]

Вызов генеративных моделей из Python

Свободно-распространяемые генеративные модели вроде Stable Diffusion представляют собой обученные нейросети, с которыми можно работать из языка Python. Основной репозиторий таких моделей находится на портале HuggingFace - например, вот список моделей Text-to-Image по популярности. Если перейти на страничку модели, то часто можно увидеть пример её использования на языке Python:

from diffusers import StableDiffusionPipeline
import torch

model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(
  model_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")

prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]  
    
image.save("astronaut_rides_horse.png")

Для работы таких моделей необходимо наличие графического процессора GPU, причем зачастую необходима достаточно мощная модель с 16Gb памяти VRAM и более (хотя простая генерация может заработать на 8Gb или даже 4Gb, т.е. на картах “домашнего” уровня).

Есть несколько способов запуска таких моделей:

  • Используя общедоступные облачные инструменты с поддержкой GPU, например, Google Colab. Он позволяет вам использовать GPU по нескольку часов в день даже на бесплатном тарифе, а небольшая ежемесячная оплата снимает это ограничение. В интернет есть очень много заготовленных примеров, использующих именно бесплатный уровень Colab для работы.
  • Используя облачные сервера, например, Sber Cloud, Yandex Cloud или Microsoft Azure. Плюсом является то, что вы платите только за время использования GPU, что позволяет запускать ресурсоёмкие процессы без капиталовложений.
  • На домашнем компьютере - в этом случае вам нужно будет обзавестись графическим ускорителем и установить себе среду Python с поддержкой GPU.

AUTOMATIC 1111

Стандартом де факто для установки Stable Diffusion к себе на компьютер является пакет Stable Diffusion Web-UI, известный также как AUTOMATIC 1111 (по псевдониму своего создателя). Это расширяемое окружение, запускающееся на вашем компьютере, и открывающее доступ ко множеству различных моделей для генерации через интерактивный веб-интерфейс (я чуть было не написал удобный, но нет - интерфейс может показаться немного пугающим для типовых пользователей).

Установить AUTOMATIC можно как на Windows с видеокартой NVIDIA, так и на Mac с процессорами M1/M2. Сам процесс установки максимально упрощен и автоматизирован, и вы найдёте его описание в репозитории проекта.

AUTOMATIC 1111

Очень удобной возможностью является запуск AUTOMATIC 1111 из Google Colab - в этом случае вы используете бесплатные вычислительные мощности Google, при этом получаете в своё распоряжение веб-интерфейс для генерации со всеми новыми возможностями, поддерживаемыми Stable Diffusion WebUI. Вот несколько вариантов готовых Colab-ноутбуков для запуска AUTOMATIC:

Процесс запуска во всех случаях примерно такой:

  • Заходите в репозиторий проекта
  • Находите ссылку на последнюю версию ноутбука Google Colab
  • Запускаете её
  • В Colab прокликиваете все ячейки по очереди, устанавливая где необходимо какие-то параметры. В конце после запуска WebUI вы должны получить ссылку на AUTOMATIC WebUI, которую можно будет открыть в соседней вкладке, и наслаждаться генерацией.

Работа в Python / Google Colab

Наибольшую гибкость предоставляет использование нейросетевых моделей непосредственно из среды Python. Например, так вы сможете автоматически генерировать множество изображений по набору запросов, или же перебирать параметры генерации и создавать много изображений “на выбор”. Более того, самые продвинутые нейросетевые техники, вроде генерации стилизованного видео, становятся доступны именно программистам, знакомым с “внутренним устройством” моделей.

Однако, даже имея небольшие навыки программирования или немного здравого смысла, вы уже сможете воспользоваться готовыми примерами в Google Colab. Вот несколько полезных примеров:

  • Stable Diffusion Workbook, который я для вас с любовью подготовил - генерация с помощью нескольких моделей Stable Diffusion, включая режим Image-to-Image и Upscaling
  • Русскоязычные модели Kandinsky 2.2 и предыдущее поколение ruDALL-E. Обратите также внимание на ruDALL-E Aspect Ratio, позволяющее получить изображения нестандартных форматов
  • Очень много примеров использования различных нейросетевых моделей есть в GitHub cameduru. На первой странице приведён постоянно обновляющийся список различных colab-ов.
  • Предыдущее поколение инструментов генерации на основе VQGAN+CLIP:

Описанные здесь инструменты и некоторые другие доступны в моём репозитории AI Art Workbooks.

Обучение своих моделей: DreamBooth, Textual Inversion, LoRA

Наиболее интересная особенность Stable Diffusion состоит в том, что существуют способы до-обучить модель на своих изображениях. Это имеет смысл делать в двух случаях:

  • До-обучить модель для изображения специфических предметов, объектов или людей
  • До-обучить модель какому-то оригинальному стилю

В обоих случаях можно обойтись небольшим количеством фотографий: говорят, что можно брать около 5-10 фото, хотя в моём случае хорошие результаты с портретами людей стали получаться с датасетами в районе 100-200 фото.

Фотографии для обучения стоит заранее привести к требуемому размеру (512x512), при этом выбирая по возможности только хорошие качественные фотографии с правильной композицией.

Есть несколько алгоритмов до-обучения модели:

  • DreamBooth до-обучает исходную модель целиком, в этом случае нам приходится хранить новую модель размером около 5Gb и использовать её. Рекомендуемый DreamBooth Colab
  • Textual Inversion - это подход, при котором для нового объекта или стиля подбираются правильные семантические векторы, а сам процесс генерации изображения остаётся неизменным. В итоге необходимо сохранять лишь часть текстовой модели, кроме того, появляется возможность комбинировать несколько текстовых инверсий в одном изображении. Качество текстовой инверсии обычно несколько уступает DreamBooth.
  • LoRA (Low-Rank Adaptation) - это один из самых современных подходов, при котором сохраняются все плюсы DreamBooth, но при этом обучается не целиком исходная нейросеть (у которой большое количество параметров), а только “дельта”, которую можно с незначительной потерей точности представить как разложение на две матрицы меньшего ранга. В результате процесс обучения происходит намного быстрее, а результирующие веса занимают существенно меньше места на диске.

Каталоги предобученных моделей

По мере того, как процесс до-обучения моделей становится всё более простым, многие участники сообщества до-обучают свои модели и делятся ими с сообществом. Большую коллекцию таких обученных моделей для разных случаев жизни можно найти на сайте CIVITAI. Некоторые из наиболее известных моделей:

Вы можете использовать эти модели как из программного кода, так и из инструментов типа Stable Diffusion Web UI. В последнем случае вам нужно следовать инструкции и положить веса модели в соответствующую папку на диске.

Ещё несколько полезных колабов

Примеры ниже не связаны напрямую с генерацией изображений, но могут оказаться интересными!

  • Style Transfer - Пример Style Transfer для изображений и для видео
  • Генерация текста с LSTM - пример обучения нейросети для генерации текста по символам или по словам

Данный список будет постепенно дополняться

Надеюсь, этот список поможет вам разобраться с тем, как начать использовать нейрогенерацию изображений! Если всё получилось, очень рекомендую устроить нейрогенеративную вечеринку

Диалоги и обсуждения