Original size 2480x3500

Обучение генеративной модели для имитации художественного

PROTECT STATUS: not protected
6
The project is taking part in the competition
big
Original size 2538x1080

Идея проекта

Темой моего проекта стали портреты XVIII века — жанр, в котором особенно чётко проявляется характер человека, внимание к свету, фактуре и композиции. Меня заинтересовало, как современные технологии могут переосмысливать такие образы и сохранять их выразительность в цифровой среде.

Для этого я использую нейросеть Stable Diffusion и метод обучения LoRA, который позволяет адаптировать модель под нужный стиль без больших вычислительных затрат. Цель проекта — обучить нейросеть создавать изображения в духе классической живописи и понять, насколько точно она способна передавать настроение и эстетику XVIII века.

Далее я поэтапно расскажу о каждом процессе внутри проекта — от подбора и подготовки датасета до обучения модели и анализа полученных результатов

1. Импорт библиотек

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

big
Original size 1312x458

torch и torch.nn отвечают за построение и обучение нейронных сетей, torchvision.transforms используется для предварительной обработки изображений, diffusers содержит реализацию Stable Diffusion, а peft — модуль, который позволяет обучать лёгкие адаптационные слои LoRA без изменения основной модели.

Path, os и PIL.Image обеспечивают работу с файлами и изображениями, tqdm выводит прогресс обучения, а random помогает при случайной выборке данных и промптов.

Таким образом, этот блок подготавливает окружение и инструменты для всех последующих шагов.

На первом этапе для обучения модели я использовала изображения портретов, которые изначально были взяты с сайта Kaggle — Art Portraits. После скачивания все файлы были размещены в папке проекта на Google Drive

Original size 2168x2168

2. Подключение Google Drive

Original size 2120x214

Данный этап обеспечивает сохранность данных. Так как обучение выполнялось в среде Google Colab, файлы модели и результаты сохраняются на Google Drive, чтобы не потеряться после завершения теста.

Это позволяет напрямую работать с датасетом (/data/train) и сохранять обученные веса (/lora/) в постоянное хранилище.

3. Настройка путей проекта

На этом шаге я задала структуру проекта:

1. base_dir — корневая директория всех файлов, 2. train_dir — путь к обучающим изображениям, 3. output_dir — папка, где сохраняются веса LoRA.

Original size 2126x348

Если директории отсутствуют, они создаются автоматически. Такая структура помогает организовать проект и упростить навигацию между файлами.

Original size 809x1000

«Женский портрет» Константин Маковский

4. Определение параметров обучения

На этом этапе задаются все основные гиперпараметры обучения:

model_id — идентификатор базовой модели Stable Diffusion v1-5;

seed — фиксированное случайное зерно, обеспечивающее воспроизводимость результатов;

image_size — размер входных изображений (512×512 пикселей);

epochs, max_steps — количество эпох и максимальное число итераций обучения;

save_every — шаг сохранения промежуточных чекпоинтов;

lr — скорость обучения (learning rate).

Original size 2128x520

Далее автоматически определяется устройство для вычислений — GPU или CPU, и тип данных (float16 при работе на GPU для экономии памяти).

5. Создание датасета

Для обучения модели я создала собственный класс PortraitDataset, наследуемый от torch.utils.data.Dataset.

Он выполняет следующие функции:

1.Считывает все изображения из указанной папки (train_dir). 2. Приводит каждое изображение к нужному размеру и нормализует его. 3. Случайным образом назначает каждому изображению текстовое описание (prompt) из заранее подготовленного списка.

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

6. Подготовка модели и подключение LoRA

На данном этапе загружается предобученная модель Stable Diffusion v1-5. Основной компонент модели — UNet, который отвечает за генерацию изображений

Original size 1722x1108

С помощью LoraConfig создаётся конфигурация для добавления адаптационных слоёв LoRA. Параметры r=4, alpha=16 и dropout=0.1 задают глубину и силу влияния новых весов.

Далее через функцию get_peft_model LoRA подключается к UNet, что позволяет проводить лёгкое и целенаправленное дообучение, не изменяя саму структуру основной модели.

7. Цикл обучения

Основная часть кода — процесс обучения LoRA. Каждая итерация проходит следующие шаги:

1. Из датасета загружается изображение и соответствующий текст. 2. Изображение кодируется в латентное пространство с помощью VAE. 3. В латент добавляется случайный шум — так модель учится «восстанавливать» изображение. 4. UNet предсказывает, как убрать шум, используя подсказку (caption). 5. Вычисляется функция потерь (loss) между предсказанным и реальным шумом. 6. Градиенты обновляют веса LoRA. 7. Процесс повторяется заданное количество шагов (max_steps), а tqdm визуализирует прогресс обучения.

8. Сохранение промежуточных результатов

Чтобы не потерять результаты обучения, каждые 50 шаговmсохраняются промежуточные версии весов LoRA. Это удобно для последующего анализа — можно сравнить, как менялся стиль генерации на разных этапах обучения.

Original size 1903x746

Примеры неудачных генераций, где сильно искажается лицо

Original size 1903x746

Примеры генераций где меняется анатомия

9. Сохранение финальной модели

После завершения цикла обучения LoRA сохраняется в отдельную папку final. Эти веса можно подключить обратно к Stable Diffusion, чтобы использовать обученный стиль при генерации новых изображений. Финальные веса занимают всего 100–200 МБ, поэтому их легко хранить и переносить между проектами.

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

Original size 1903x746

Примеры удачных генераций

Original size 1752x1158

Готовые генерации

Итоги

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

Модель научилась:

1. Использовать мягкое освещение и плавные мазки 2. передавать фактуру холста и реалистичные тени 3. Распознавать композицию и атмосферу классических портретов

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

Обучение генеративной модели для имитации художественного
6