Создаем аватарки с помощью нейросети Stable Diffusion и DreamBooth

«Портрет, сделанный нейросетью» — все чаще читаем в новостной ленте, и каждый хотел бы сделать себе подобный, но удобные сервисы, просящие монету, или желание разбираться самому, отталкивают. Не нужно ничего скачивать. Час времени и каждый сможет сделать себе аватарку!

A epic and beautiful rococo painting of a young MossHubrGuide man half wolf covered in yellow cloth surrounded by wolves of ashes, standing before a desert of ashes. ultra-detailed. anime, pixiv, uhd 8k cryengine, octane renderA epic and beautiful rococo painting of a young MossHubrGuide man half wolf covered in yellow cloth surrounded by wolves of ashes, standing before a desert of ashes. ultra-detailed. anime, pixiv, uhd 8k cryengine, octane render

Введение

Значительный скачок в эволюции ИИ совершили модели «txt2img» (преобразование текста в изображение), обеспечив высококачественный и разнообразный синтез изображений из заданного текстового запроса. DreamBooth представляет новый подход к «персонализации» моделей «txt2img», специализируя их на потребностях пользователей.

Предварительно обученная модель настраивается путем добавления всего нескольких изображений объекта и соответствующего имени класса (например, «человек») в качестве входных данных. Таким образом, чтобы ИИ научилась связывать уникальный идентификатор (в нашем случае слово) с этим конкретным объектом. 

Результаты и возможности DreamBooth

  • Художественные представления:

    Оригинальные художественные изображения собаки в стиле известных художников. Отмечается, что многие сгенерированные позы не были замечены в тренировочном наборе, например, в исполнении Ван Гога и Уорхола. Также, что некоторые работы, похоже, имеют новую композицию и точно имитируют стиль художника — даже предполагая некоторый творческий подход (экстраполяция с учетом предыдущих знаний).

Художественные представленияХудожественные представления

  • Изменение «позы» представления:

    Метод позволяет синтезировать изображения с заданными точками обзора для кошки (слева направо: вид сверху, снизу, сбоку и сзади). Обратите внимание, что сгенерированные позы отличаются от входных поз, а фон меняется реалистичным образом при изменении позы. Также подчеркивают сохранение сложных меховых узоров на лбу исследуемой кошки.

Изменение представленияИзменение представления

  • Изменение свойств:

    Представляют изменения цвета в первом ряду (с помощью подсказок: »[цвет] [V] автомобиль») и скрещивания конкретной собаки и разных животных во втором ряду (с помощью подсказок: «порода [V] собаки и [целевого вида]»). Метод сохраняет уникальные визуальные особенности, которые придают предмету его индивидуальность или сущность, выполняя при этом требуемую модификацию свойств.

Изменение свойствИзменение свойств

  • Добавление аксессуаров:

    Оснащение собаки аксессуарами. Личность субъекта сохраняется и к собаке можно применить множество различных нарядов или аксессуаров, учитывая подсказку типа: »[V] собака в костюме [полицейского / повара / ведьмы]». Наблюдается реалистичное взаимодействие между предметной собакой и одеждой или аксессуарами, а также большое разнообразие возможных вариантов.

Добавление аксессуаровДобавление аксессуаров

Подготовка

  1. Для начала стоит убедится что на вашем Google Drive диске достаточный объем памяти. Нам потребуется не более 4–5 гб, но зная среднестатистического пользователя, диск пустует и имеет 10–15 гб свободного места.

  2. Заранее стоит подумать какие фотографии вы возьмете. Критериев не много, но они в значительно мере могут повлиять на результат: 1) разрешение 512 px*512 px (можно воспользоваться сервисом BIRME или другим аналогом). 2) объект один на фото. 3) вменяемое освещение.

  3. Создать аккаунт на сайте Hugging Face, , а далее в настройках создать новый токен с ролью «write» в соответствующем разделе. В результате сгенерируется ключ, который потребуется позднее.

Новый токен на сайте Hugging FaceНовый токен на сайте Hugging Face

Практика

  • Открываем блокнот Google Colab, где первым делом авторизируемся в гугл аккаунте и нажимаем подключится в правом верхнем углу. На GitHub -е разработчиков будет появляется актуальная ссылка на блокнот.

9aa09fe6e0a89bb9b487da919a2ae271.png

  • В самом верху, первым пунктом, проверяем выданную нам видеокарту, в большинстве случаев это будет Tesla T4 (лучший вариант). Если же выданная карта отличается — обновите страницу и повторите подключение. Так же сойдет видеокарта P100, но скорость работы может отличаться. В разделе ресурсов, по мимо «ОЗУ» и «Диск», появится соответствующий пункт «Оперативная память графического процессора».

*Хочу заметить, что каждый пункт будет сопровождается запуском кода по нажатию на кнопку «плей» (треугольничек в кружечке в начале каждой ячейки).

8fdef9e7897817bb488117bd75e1fa01.png

  • Install Requirements

    Устанавливаем пакеты и зависимости на выданный нам сервер. По завершению выдаст сообщение «done», а слева от пункта появится зеленая галочка с временим выполнения.

22e491c0aa5d653d3133525d9ed5aa34.png

  • Install xformers from precompiled wheel

    Данный пункт выполнится быстро, так как все уже скомпилировано.

    НО в случае возникновения ошибки, следует заменить первую строчку на код ниже и повторить. Перекомпиляция займет около 40 минут.

%pip install git+https://github.com/facebookresearch/xformers@4c06c79#egg=xformers
  • Settings and run

    Если есть желание воспользоваться моделью в следующий раз, то стоит установить галочку «save_to_gdrive».

    Имя и пути сохранения модели можно оставить стандартными.

    При запуске ячейки разрешите доступ к своему диску.

efd1ad42c53e5991c13d3d5357d7af00.png

  • Start Training

    Самый большой пункт, где могут возникнуть вопросы.

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

    Нас же интересует, как мы будем связывать наш объект с текстом в списке concepts_list:

    Первый параметр instance_prompt — идентификатор нашего объекта

    class_prompt — класс, который связывает наш объект с объектами знакомыми для ИИ (пример: [ваше имя] — [guy/girl] или ElonMask — Man, TeslaModelX — Car и тд.)

    Параметры с названием директорий для удобства называем соответственно.

    Запускаем ячейку.

    Что должно получится: instance_prompt — MossHubrGuide (мой идентификатор), class_prompt — man (класс с которым ассоциирую).

8aabde99f2c008cb93659506550280cf.png

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

b9b7cf2ffe1c588de78ea941cf30bd7f.png

По окончанию загрузки изображений, в следующей ячейке нас интересуют строки:

--max_train_steps — количество шагов для обучения ИИ (для портретов рекомендуется использовать значения 800–1500)

--save_sample_prompt — должен иметь значение как и у instance_prompt для сохранения промежуточных выборок вместе с весами в директории.

Запускаем выполнение ячейки, которая начнет скачивание модели, генерацию классов и обработку изображений. Продлится это ~30–40 минут в зависимости от того, сколько шагов выбрано для обучения. В процессе обработки могут появиться окна капчи с проверкой присутствия на странице, если не подтвердить — придется начать сначала.

1e16a14671b67fa5e4769b0975501c04.png

Далее последовательно запускаем две ячейки, где первую оставляем пустой, а вторая сгенерирует 4 изображения «то как вас видит ИИ».

23c8e6c973d2cf6dac729108835a8e21.png

  • Convert weights to ckpt

    Данный пункт нужен если важно место на Google Drive, что сократит используемый объем до 2 гб. Но для повторного использования весов пропускаем пункт.

  • Inference

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

9ec39cce0a4620d932509afdf6fa7ac3.png

  • Run for generating images.

    Вот начинается самое интересное!

    prompt — тот самый текст/контекст, который определяет что будет рисовать ИИ. Тут уж пишите, что душе угодно (на английском языке), но есть достаточно эффективные сайты с готовыми промптом, пример: PromptsDatabase, Lexica. Промпт может выглядеть совершенно не похожем на предложения в привычном понимании, но ключевые слова и контекст имеют большую силу.

    Для рисования объекта, добавленного в модель ранее, в строке prompt добавляем наш instance_prompt, а для большей точности вместе с ним и class_prompt.

    Пример:»A epic and beautiful rococo painting of a young MossHubrGuide man half wolf covered in yellow cloth surrounded by wolves of ashes, standing before a desert of ashes. ultra-detailed. anime, pixiv, uhd 8k cryengine, octane render»

    num_samples — количество генерируемых изображений.

    guidance_scale
    num_inference_steps — параметры для более точного совпадения текста с содержимым. Оставляем дефолтными, а зависимость значений на результат можно увидеть в примечании в примечании.

    height
    width
     — размер получаемого изображения. Хотелось бы увеличить разрешение, но это может вызвать своеобразные артефакты. (*см. примечание)

e07c0dddb10ebc63a0e69bf74d9fc0d0.pngПримечание

Зависимость значений guidance_scale и num_inference_steps можно увидеть на следующем изображении:

Зависимость значений guidance_scale и num_inference_steps на исходное изображениеЗависимость значений guidance_scale и num_inference_steps на исходное изображение

При изменении высоты/ширины исходного изображения в отдельности от входящих возникают артефакты:

c06ee24eccd03b1487bddc1d60a48a06.jpg4a192ce67f3265d9dfd11e55e61fc23f.jpg

Запускаем ячейку!

Результат

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

A epic and beautiful rococo painting of a young MossHubrGuide man half wolf covered in yellow cloth surrounded by wolves of ashes, standing before a desert of ashes. ultra-detailed. anime, pixiv, uhd 8k cryengine, octane renderA epic and beautiful rococo painting of a young MossHubrGuide man half wolf covered in yellow cloth surrounded by wolves of ashes, standing before a desert of ashes. ultra-detailed. anime, pixiv, uhd 8k cryengine, octane renderFuturistic hightailed MossHubrGuide man with robotic implants on its face. in space, wes andersonFuturistic hightailed MossHubrGuide man with robotic implants on its face. in space, wes andersona anthropomorphic MossHubrGuide man warrior, D&D, fantasy, intricate, highly detailed, digital painting, artstation, concept art, smooth, sharp focus, illustration, art by artgerm and greg rutkowski and alphonse muchaa anthropomorphic MossHubrGuide man warrior, D&D, fantasy, intricate, highly detailed, digital painting, artstation, concept art, smooth, sharp focus, illustration, art by artgerm and greg rutkowski and alphonse muchaA portrait of a futuristic cyberpunk MossHubrGuide man  soldier in war scene, epic scene, epic lighting, pink vibe, by greg rutkowskiA portrait of a futuristic cyberpunk MossHubrGuide man soldier in war scene, epic scene, epic lighting, pink vibe, by greg rutkowski elon musk as superman, realistic portrait, symmetrical, highly detailed, digital painting, artstation, concept art, smooth, sharp focus, illustration, cinematic lighting, art by artgerm and greg rutkowski and alphonse muchaelon musk as superman, realistic portrait, symmetrical, highly detailed, digital painting, artstation, concept art, smooth, sharp focus, illustration, cinematic lighting, art by artgerm and greg rutkowski and alphonse mucha

© Habrahabr.ru