"Портрет, сделанный нейросетью" - все чаще читаем в новостной ленте, и каждый хотел бы сделать себе подобный, но удобные сервисы, просящие монету, или желание разбираться самому, отталкивают. Не нужно ничего скачивать. Час времени и каждый сможет сделать себе аватарку!
Введение
Значительный скачок в эволюции ИИ совершили модели "txt2img" (преобразование текста в изображение), обеспечив высококачественный и разнообразный синтез изображений из заданного текстового запроса. DreamBooth представляет новый подход к "персонализации" моделей "txt2img", специализируя их на потребностях пользователей.
Предварительно обученная модель настраивается путем добавления всего нескольких изображений объекта и соответствующего имени класса (например, "человек") в качестве входных данных. Таким образом, чтобы ИИ научилась связывать уникальный идентификатор (в нашем случае слово) с этим конкретным объектом.
Результаты и возможности DreamBooth
-
Художественные представления:
Оригинальные художественные изображения собаки в стиле известных художников. Отмечается, что многие сгенерированные позы не были замечены в тренировочном наборе, например, в исполнении Ван Гога и Уорхола. Также, что некоторые работы, похоже, имеют новую композицию и точно имитируют стиль художника - даже предполагая некоторый творческий подход (экстраполяция с учетом предыдущих знаний).
-
Изменение "позы" представления:
Метод позволяет синтезировать изображения с заданными точками обзора для кошки (слева направо: вид сверху, снизу, сбоку и сзади). Обратите внимание, что сгенерированные позы отличаются от входных поз, а фон меняется реалистичным образом при изменении позы. Также подчеркивают сохранение сложных меховых узоров на лбу исследуемой кошки.
-
Изменение свойств:
Представляют изменения цвета в первом ряду (с помощью подсказок: "[цвет] [V] автомобиль") и скрещивания конкретной собаки и разных животных во втором ряду (с помощью подсказок: "порода [V] собаки и [целевого вида]"). Метод сохраняет уникальные визуальные особенности, которые придают предмету его индивидуальность или сущность, выполняя при этом требуемую модификацию свойств.
-
Добавление аксессуаров:
Оснащение собаки аксессуарами. Личность субъекта сохраняется и к собаке можно применить множество различных нарядов или аксессуаров, учитывая подсказку типа: "[V] собака в костюме [полицейского / повара / ведьмы]". Наблюдается реалистичное взаимодействие между предметной собакой и одеждой или аксессуарами, а также большое разнообразие возможных вариантов.
Подготовка
Для начала стоит убедится что на вашем Google Drive диске достаточный объем памяти. Нам потребуется не более 4-5гб, но зная среднестатистического пользователя, диск пустует и имеет 10-15гб свободного места.
Заранее стоит подумать какие фотографии вы возьмете. Критериев не много, но они в значительно мере могут повлиять на результат: 1) разрешение 512px*512px (можно воспользоваться сервисом BIRME или другим аналогом). 2) объект один на фото. 3) вменяемое освещение.
Создать аккаунт на сайте Hugging Face, а далее в настройках создать новый токен с ролью "write" в соответствующем разделе. В результате сгенерируется ключ, который потребуется позднее.
Практика
Открываем блокнот Google Colab, где первым делом авторизируемся в гугл аккаунте и нажимаем подключится в правом верхнем углу. На GitHub -е разработчиков будет появляется актуальная ссылка на блокнот.
В самом верху, первым пунктом, проверяем выданную нам видеокарту, в большинстве случаев это будет Tesla T4 ( лучший вариант). Если же выданная карта отличается - обновите страницу и повторите подключение. Так же сойдет видеокарта P100, но скорость работы может отличаться. В разделе ресурсов, по мимо "ОЗУ" и "Диск", появится соответствующий пункт "Оперативная память графического процессора".
*Хочу заметить, что каждый пункт будет сопровождается запуском кода по нажатию на кнопку "плей" ( треугольничек в кружечке в начале каждой ячейки).
-
Install Requirements
Устанавливаем пакеты и зависимости на выданный нам сервер. По завершению выдаст сообщение "done", а слева от пункта появится зеленая галочка с временим выполнения.
-
Login to HuggingFace
Вставляем ранее созданный токен с сайта Hugging Face и запускаем код ячейки.
-
Install xformers from precompiled wheel
Данный пункт выполнится быстро, так как все уже скомпилировано.
НО в случае возникновения ошибки, следует заменить первую строчку на код ниже и повторить. Перекомпиляция займет около 40 минут.
%pip install git+https://github.com/facebookresearch/xformers@4c06c79#egg=xformers
-
Settings and run
Если есть желание воспользоваться моделью в следующий раз, то стоит установить галочку "save_to_gdrive".
Имя и пути сохранения модели можно оставить стандартными.
При запуске ячейки разрешите доступ к своему диску.
-
Start Training
Самый большой пункт, где могут возникнуть вопросы.
Встречает нас таблица, ее мы пропускаем, так как она предназначается продвинутым пользователям для гибкой настройки скорости, качества и веса модели.
Нас же интересует, как мы будем связывать наш объект с текстом в списке concepts_list:
Первый параметр instance_prompt - идентификатор нашего объекта
class_prompt - класс, который связывает наш объект с объектами знакомыми для ИИ (пример: [ваше имя] - [guy/girl] или ElonMask - Man, TeslaModelX - Car и тд.)
Параметры с названием директорий для удобства называем соответственно.
Запускаем ячейку.
Что должно получится: instance_prompt - MossHubrGuide (мой идентификатор), class_prompt - man (класс с которым ассоциирую).
Далее запускаем следующую ячейку, выбираем заготовленные изображения и ждем окончания загрузки.
По окончанию загрузки изображений, в следующей ячейке нас интересуют строки:
--max_train_steps - количество шагов для обучения ИИ (для портретов рекомендуется использовать значения 800-1500)
--save_sample_prompt - должен иметь значение как и у instance_prompt для сохранения промежуточных выборок вместе с весами в директории.
Запускаем выполнение ячейки, которая начнет скачивание модели, генерацию классов и обработку изображений. Продлится это ~30-40 минут в зависимости от того, сколько шагов выбрано для обучения. В процессе обработки могут появиться окна капчи с проверкой присутствия на странице, если не подтвердить - придется начать сначала.
Далее последовательно запускаем две ячейки, где первую оставляем пустой, а вторая сгенерирует 4 изображения "то как вас видит ИИ".
-
Convert weights to ckpt
Данный пункт нужен если важно место на Google Drive, что сократит используемый объем до 2гб. Но для повторного использования весов пропускаем пункт.
-
Inference
Так же последовательно запускаем обе ячейки.
-
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 - размер получаемого изображения. Хотелось бы увеличить разрешение, но это может вызвать своеобразные артефакты. (*см. примечание)
Примечание
Зависимость значений guidance_scale и num_inference_steps можно увидеть на следующем изображении:
При изменении высоты/ширины исходного изображения в отдельности от входящих возникают артефакты:
Запускаем ячейку!
Результат
Ниже приведу пример с несколькими не самыми удачными, но не менее интересными изображениями и их промптом.
Guul
Про dreambooth не знаю, но простенькие аватарки можно сделать с помощью img2img который доступен на stable horde бесплатно, без смс и регистрации.