Концепция проекта
Несколько лет назад из-за несчастного случая на моем лице появился большой шрам, который изменил мою внешность. Иногда я задумываюсь о том, как могла бы выглядеть моя жизнь, если бы этого события не произошло.
В рамках этого проекта я попыталась представить одну из возможных параллельных версий своей жизни — себя без шрама, но в разных профессиях, которые были мне интересны с детства.
С помощью генеративной нейросети были созданы портреты, показывающие альтернативные версии моей жизни и моей внешности.
Исходные изображения для обучения
Для обучения модели были использованы мои фотографии, сделанные до появления шрама. Изображения были подобраны таким образом, чтобы лицо было видно не только в анфас, но и с разных ракурсов.
Это позволяет модели лучше понять особенности моей внешности и генерировать более реалистичные и похожие на меня портреты. Также были включены фотографии, на которых хорошо различима форма ушей и другие характерные черты лица.
Принцип работы генеративной модели
Для обучения и генерации изображений в проекте использована модель Stable Diffusion XL.
В качестве исходных данных был создан датасет из моих фотографий, сделанных до появления шрама. Изображения были загружены в блокнот Kaggle и приведены к разрешению 512×512, после чего подключены к среде выполнения.
Подготовка среды и загрузка датасета
На первом этапе проверяется доступность GPU с помощью команды nvidia-smi. Затем устанавливаются необходимые библиотеки для работы с моделью Stable Diffusion XL и обучения LoRA.После этого из репозитория HuggingFace скачивается скрипт для дообучения модели train_dreambooth_lora_sdxl.py. Далее создаётся папка zaya_photos, в которую копируются изображения из подготовленного датасета.
Создание текстовых описаний изображений
На следующем этапе для изображений датасета автоматически создаются текстовые описания. Для этого используется модель BLIP (Bootstrapping Language-Image Pretraining), которая генерирует подписи к изображениям.Каждая фотография обрабатывается моделью, после чего к сгенерированному описанию добавляется имя naranzaya oyunbaatar. Полученные подписи сохраняются в файл metadata.jsonl, который используется в дальнейшем для обучения модели.
После завершения генерации описаний модель BLIP удаляется из памяти, чтобы освободить ресурсы GPU перед этапом обучения.
Обучение модели и подготовка к генерации изображений
На следующем этапе устанавливаются необходимые версии библиотек для работы с моделью Stable Diffusion XL и инструментами обучения LoRA. После этого настраивается среда accelerate, которая используется для запуска обучения нейросети на GPU.Далее из репозитория HuggingFace скачивается скрипт для обучения train_dreambooth_lora_sdxl.py, после чего запускается процесс дообучения модели Stable Diffusion XL методом DreamBooth LoRA. Модель обучается на подготовленном датасете zaya_photos с текстовыми описаниями из файла metadata.jsonl. В результате обучения создаются веса LoRA, которые сохраняются в папке zaya_portrait_LoRA.
После завершения обучения устанавливаются совместимые версии библиотек PyTorch и diffusers, чтобы обеспечить корректную работу модели при генерации изображений. Затем загружается базовая модель Stable Diffusion XL и к ней подключаются обученные веса LoRA.
Генерация изображений
После обучения модели были сгенерированы изображения на основе текстовых запросов (prompts). Ниже приведён пример кода для генерации одного изображения.Для каждого портрета задавался отдельный текстовый запрос, описывающий профессию, окружение и стиль освещения.
Для улучшения качества изображения также использовался negative_prompt, который уменьшает вероятность появления артефактов и искажений на лице.
Результаты генерации и текстовые запросы
Для повышения реалистичности изображений в текстовые запросы были добавлены параметры, характерные для профессиональной портретной фотографии, такие как professional portrait photography, 85 mm lens и sharp focus.
Также в текстовые запросы были добавлены выражения realistic skin texture и ultra detailed, которые помогают модели генерировать более детализированные и реалистичные изображения лица.
Поскольку среди исходных изображений были фотографии с боковых ракурсов, мне хотелось проверить, насколько хорошо модель научилась воспроизводить такие ракурсы. Поэтому в некоторые текстовые запросы было добавлено выражение side view.
В текстовых запросах также использовались различные описания освещения, такие как cinematic lighting, soft natural lighting, dramatic stage lighting и warm golden hour light, что позволило получить более разнообразные и атмосферные изображения.
Развернутый комментарий результатов
• Модель успешно усвоила основные особенности моей внешности. На сгенерированных изображениях хорошо воспроизводятся такие черты лица, как форма бровей, губ, носа и глаз, которые во многом совпадают с моей внешностью на исходных фотографиях.
• Характерные особенности лица также передаются достаточно точно. Например, модель корректно воспроизводит форму щёк, что делает портреты более похожими на реальные.
• Пропорции и форма головы сохраняются достаточно стабильно. Даже при генерации изображений с разным освещением и ракурсами основные черты лица остаются узнаваемыми.
• На изображениях №5 и №6 можно увидеть, что модель корректно воспроизводит боковой ракурс. Это особенно заметно по форме щёк и ушей, которые сохраняют правильную форму.
Вероятно, такие результаты связаны с тем, что в обучающем датасете использовались фотографии с разных ракурсов. Благодаря разнообразию исходных изображений модель смогла лучше усвоить форму головы и особенности лица.
Итоговая серия изображений
В данном разделе представлена итоговая серия изображений. Сначала портреты были сгенерированы с помощью обученной модели Stable Diffusion XL + LoRA на основе текстовых запросов (prompts). Далее полученные изображения были дополнительно обработаны в ChatGPT (сервис недоступен в РФ) с запросом «make more realistic».
Дополнительная обработка использовалась для повышения фотореалистичности изображений. Несмотря на успешное обучение модели, некоторые детали (текстура кожи, освещение, мелкие черты лица) могли выглядеть недостаточно естественно, поэтому постобработка позволила улучшить качество и сделать итоговые портреты более реалистичными.
1. Космонавт
2. Путешественник
3. Балерина
4. Повар
5. Певица
6. Пианист
7. Врач
8. Пилот
Генеративные модели открывают возможность визуализировать параллельные версии реальности. С помощью искусственного интеллекта в рамках этого проекта мне удалось представить альтернативную версию собственной жизни — увидеть себя без шрама и в разных профессиях, которые были мне интересны с детства.