Исходный размер 1710x2400

Gerhard Richter // Обучение генеративной нейросети

Рубрикатор

1. Описание идеи 2. Процесс обучения 3. Анализ получившихся генераций 4. Подведение итогов 5. Ссылка на блокнот и датасет 6. Источники и материалы

Описание идеи

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

Исходный размер 2480x1743

Оригинальные работы Герхарда Рихтера

В то же время мне показалось, что его художественный стиль сам по себе чем-то напоминает работу нейросети из-за своей хаотичности и фактурности, поэтому стало интересно попробовать поэкспериментировать и слить воедино концептуальность и техническое разнообразие Герхарда Рихтера и сумбурность искуственного интеллекта.

Исходный размер 2480x779

Оригинальные работы Герхарда Рихтера

Целью проекта является обучение нейросети Stable Diffusion генерации изображений, стилизованных под работы немецкого художника. Для этого используется метод DreamBooth в сочетании с LoRA (Low-Rank Adaptation), что позволяет эффективно адаптировать модель к новому стилю, используя ограниченный набор данных.

Исходный размер 2480x886

Оригинальные работы Герхарда Рихтера

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

Процесс обучения

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

Библиотеки:

  1. bitsandbytes: оптимизация вычислений для эффективного использования памяти;

  2. transformers, accelerate, peft: для работы с моделями и адаптацией весов;

  3. diffusers: основная библиотека для работы с Stable Diffusion.

Скрипт обучения: загружается train_dreambooth_lora_sdxl.py из репозитория Hugging Face.

Исходный размер 2480x1216
Исходный размер 2480x970

Для обучения использовалось 102 изображения работ Рихтера. Были специально отобраны разные по исполнению и текстурам картины.

Исходный размер 2480x1564

Параметры обучения:

  1. Learning rate (--learning_rate): обычно 1e-4 – 1e-5;

  2. Количество шагов (--max_train_steps): 500–1000;

  3. Размер батча (--train_batch_size): 1–2 (из-за ограничений GPU);

  4. Градиентный чекпоинтинг (--gradient_checkpointing): экономия памяти;

  5. 8-bit Adam (--use_8bit_adam): оптимизация памяти.

Исходный размер 2480x431
Исходный размер 2480x1252

Процесс обучения и тренировка

  1. Загрузка модели: Инициализация SDXL с предобученными весами;

  2. Загрузка данных: Изображения из папки Photo с аугментацией;

  3. Адаптация LoRA: добавляются низкоранговые матрицы к слоям модели. Обновляются только эти матрицы, что экономит ресурсы;

  4. Оптимизация: минимизация loss-функции (обычно MSE между сгенерированными и реальными изображениями). Контроль переобучения через раннюю остановку или фиксированное число шагов;

  5. Сохранение чекпоинтов.

Тестирование модели

DiffusionPipeline: Класс для запуска предобученных диффузионных моделей.

AutoencoderKL: Класс для работы с вариационными автоэнкодерами (VAE), которые сжимают изображения в латентное пространство и обратно.

Исходный размер 2480x841

madebyollin/sdxl-vae-fp16-fix: Предобученная VAE-модель, оптимизированная для работы с половинной точностью (float16).

torch_dtype=torch.float16: Указывает, что вычисления будут выполняться в половинной точности для экономии памяти и ускорения работы.

Анализ получившихся генераций

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

Исходный размер 2480x1210

prompt = «painting in Gerhard Richter style, textured, abstract, expressive brushstrokes, muted palette»

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

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

Пшеничное поле

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

Исходный размер 2480x1210

prompt = «a field of wheat dotted with rusty helmets, in the style of Gerhard Richter, with slits of light, earthy tones»

Одинокий подсолнух

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

Gerhard Richter // Обучение генеративной нейросети
Проект создан 10.04.2025
Мы используем файлы cookies для улучшения работы сайта и большего удобства его использования. Более подробную информац...
Показать больше