Original size 1710x2400

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

6

Рубрикатор

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

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

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

big
Original size 2480x1743

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

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

big
Original size 2480x779

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

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

Original size 2480x886

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

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

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

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

Библиотеки:

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

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

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

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

Original size 2480x1216
Original size 2480x970

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

Original size 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): оптимизация памяти.

Original size 2480x431
Original size 2480x1252

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

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

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

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

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

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

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

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

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

Original size 2480x841

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

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

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

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

Original size 2480x1210

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

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

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

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

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

Original size 2480x1210

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

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

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

Original size 2480x1210

prompt = «a ruined landscape in the style of Gerhard Richter, with cracks in the ground, a single sunflower sticking out of the ashes, rough texture, with elements of rusty metal»

Стопка старых книг

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

Original size 2480x1210

prompt = «a stack of ancient books in the style of Gerhard Richter, background is a cracked concrete wall, monochrome palette»

Старая библиотека

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

Original size 2480x1210

prompt = «endless shelves of books, in the style of Gerhard Richter, chaotic atmosphere»

Вавилонская башня

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

Original size 2480x1210

prompt = «the destroyed tower of babel in the style of Gerhard Richter, clay structure, burnt wood covered with cracks, flying black birds in the sky, rough texture, dark tones with bright flashes»

Статуя

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

Original size 2480x1210

prompt = «a face of an ancient statue, half-hidden under layers of dirt, in the style of Gerhard Richter, texture with visible smears»

Лес и призраки

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

Original size 2480x1210

prompt = «a forest with trees made of lead and covered with ash, in the style of Gerhard Richter, ghosts between the trunks, pale colors»

Собор

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

Original size 2480x1210

prompt = «a ruined cathedral wrapped in lead wire, in the style of Gerhard Richter, background is inscriptions on the walls with old spells, floor covered with ashes and fallen petals, cold palette»

Лодка

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

Original size 2480x1210

prompt = «a boat made of rusty metal and bones, floating on a river of milk, in the style of Gerhard Richter, background is foggy»

Письменный стол

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

Original size 2480x1210

prompt = «a table littered with lead books and dried insects, in the style of Gerhard Richter, diagrams on the wall with alchemical symbols, dark brown and gray colors»

Подведение итогов

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

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

Источники и материалы

1. archive.org: для поиска работ художника

2. huggingface.co: для создания токена при работе с обучением нейросети

3. DeepSeek: для помощи в корректировке некоторых промптов при обучении нейросети

4. Google Colab: для обучения генеративной нейросети

Gerhard Richter // Обучение генеративной нейросети
6
We use cookies to improve the operation of the HSE website and to enhance its usability. More detailed information on the use of cookies can be fou...
Show more