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

Подготовка изображений.

StableDiffusion может обучаться на ваших изображениях и первое что вам нужно это подготовить качественные изображения. Я попробовал собрать изображения бельгийского оперного певца Werner Van Mechelen

Werner Van Mechelen
Werner Van Mechelen

После этого необходимо обрезать изображения до квадрата 512х512 это можно сделать с помощью этого сервиса. Загружаете туда изображения выбираете область кропа и сохраняете как зип файл себе на компьютер.

Birme
Birme

Затем нужно переименовать изображения следующим образом. Одинаковое имя + (n) по этому имени вы будете делать запрос к нейросети для генерации вашего изображения. Так что выбирайте то что не занято, что бы не запутать StableDiffusion я использую токен sks.

Именование изображений
Именование изображений

Инициализация collab

копируем себе эту версию dreamBooth https://colab.research.google.com/github/TheLastBen/fast-stable-diffusion/blob/main/fast-DreamBooth.ipynb#scrollTo=O3KHGKqyeJp9

И запускаем эти две ячейки:

Дальше нужно выбрать модель и предоставить токен для скачивания модели. Выбираем тут модель версии 1.5. Можете попытать счастье с версией 2, но у меня не запускалось обучение через этот колаб на второй версии модели, вероятно дело в том, что она появилась буквально несколько дней назад и это ещё не стабильная версия. также вторая версия сложнее в обучения, так что я рекомендую использовать v1.5

Если нет аккаунта на Hugging Face то создайте его и выпустите себе токен для того что бы колаб смог скачать модель StableDiffusion https://huggingface.co/settings/tokens

Дальше создаем сессию, на гуглдиске будет создана папка Fast-Dreambooth/Sessions/werner-van-mechelen так же выбираем опцию Contains_faces так как я обучал на фотографиях мужчины, то выбираю Male.

Теперь запускаем ячейку с загрузкой картинок и перетаскиваем туда картинки. После того как картинки будут загружены ячейка будет выполнена.

Теперь нужно запустить обучения и выбрать некоторые параметры

Training_Steps Умножаем количество картинок на 200 и вводим это число. Это будет количество тренировочных шагов.

Resolution 512

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

Train_text_encoder_for выбираем процент сколько шагов будет тренироваться текстовый энкодер. Чем выше процент, тем более точно сеть будет повторять входные изображения. Но за счёт этого снижается способность к "стилизации". Чем ниже процент тем проще будет стилизовать ваше изображение.

Save_Checkpoint_Every_n_Steps Не рекомендую включать эту галку, так как это может занять много места на гугл диске.

Ждем пока завершится обучение и запускаем получившеюся модель

В результате блокнот даст ссылку на следующий интерфейс:

Я смотрю примеры запросов на этом сайте OpenArt тут можно найти какие изображения генерирует сеть по разным запросам и попробовать найти то что вам понравится. Далеко не все изображения удачные, можно поиграться с запросами и просто попробовать выполнить один запрос несколько раз, так как каждый раз вы будете получать разные изображения.

Вот несколько результатов:

Заключение

Этот блокнот предоставляет очень простой интерфейс для обучения сети и вдобавок сеть версии 1.5 обучается очень легко. Процесс обучения для 20 изображений занимает примерно 2-3 часа. По моим наблюдениям легче всего обучить её на лицах и генерировать разные арты персонажа.

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


  1. Alexrook
    30.11.2022 08:41
    +2

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


    1. Alexey2005
      30.11.2022 12:18

      Руки и обрезка не самые серьёзные проблемы: по крайней мере понятно, как их решать, и в следующих версиях SD-нейронок с ними очевидно справятся.

      А вот т.н. "проблема Красной Шапочки" (Red Riding Hood Issue) является фундаментальной, и именно из-за неё многие предполагают, что модели, основанные на CLIP - это тупиковая ветвь развития генеративных сетей.

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

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


      1. VitalySh
        30.11.2022 17:11
        +10

        Вызов брошен - сгенерил специально для вас (0% фотошопа, исключительно нейронка с "тупиковой" моделью)