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

Россия глазами голландцев XVII века. Stable Diffusion

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

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

big
Исходный размер 5262x2087

Виллем Клас Хеда. Натюрморт с серебряным кувшином и пирогом. 1645 / Питер Клас. Натюрморт с солонкой. Ок. 1644 / Геррит Виллемс Хеда. Натюрморт с глиняным кувшином

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

датасет

big
Исходный размер 5262x2044

исходные изображения из датасета

Для обучения модели я собрала датасет из 69 изображений картин таких художников как Питер Клас, Виллем Клас Хеда, Виллем Калф, Абрахам ван Бейерен, Балтасар ван дер Аст, Виллем ван Алст, Ян ван Хёйсум и др.

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

процесс обучения модели

В процессе обучения модели я работала в Google Colaboratory на GPU T4, используя fine-tuning Stable Diffusion XL, а также методы DreamBooth, BLIP и LoRA для дообучения.

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

  • Настройка среды
  • Работа с датасетом
  • Генерация описаний изображений методом BLIP
  • Обучение модели
Исходный размер 3720x2253

этап 1 — настройка среды обучения

На этом этапе происходит подготовка окружения и инструментов для дообучения модели SDXL с использованием техники LoRA. Сначала проверяется доступность графического процессора NVIDIA T4, который будет использоваться для вычислений. Затем устанавливаются необходимые библиотеки: bitsandbytes для оптимизации памяти, transformers и accelerate для работы с моделями, а также diffusers — основная библиотека для генерации изображений. После этого скачивается специальный скрипт train_dreambooth_lora_sdxl.py, который реализует процесс обучения: он позволяет адаптировать предобученную модель под новый объект или стиль, используя эффективный метод LoRA, что требует значительно меньше ресурсов, чем полное дообучение.

Исходный размер 3720x2433

этап 2 — работа с датасетом

На этом этапе происходит загрузка и подготовка пользовательского датасета с изображениями формата 768х768 для обучения модели. Сначала создается локальная директория ./dutch/, куда будут сохраняться изображения. Затем с помощью интерфейса Google Colab активируется виджет для загрузки изображений с компьютера пользователя — эти файлы сохраняются в созданную папку. После загрузки определяется функция image_grid(), которая создает коллаж из изображений для визуальной проверки качества датасета: она изменяет размер всех картинок до заданного значения (по умолчанию 256 пикселей) и размещает их в виде сетки с указанным количеством строк и столбцов. В завершение загружаются все .jpg файлы из папки dutch, и первые 5 из них отображаются в виде превью. Этот шаг критически важен для контроля качества входных данных: пользователь может убедиться, что загружены правильные изображения нужного разрешения, и они корректно читаются перед началом обучения.

Исходный размер 3720x2944

этап 3 — генерация описаний изображений методом BLIP

На этом этапе происходит автоматическая генерация текстовых описаний для загруженных изображений с использованием модели BLIP - Bootstrapping Language-Image Pre-training. Сначала загружается предобученная модель и процессор из библиотеки Hugging Face, которые переносятся на GPU для ускорения обработки. Затем определяется функция caption_images(), которая принимает изображение и возвращает сгенерированное текстовое описание.

После этого все изображения из папки dutch загружаются и для каждого из них генерируется описание с добавлением пользовательского префикса "photo collage in Dutch Still Life Of 17th Century style" — это позволяет задать единый стилистический контекст для всех примеров в датасете. Полученные пары "имя файла — промпт" сохраняются в формате JSONL (каждая строка — отдельный JSON-объект) в файл metadata.jsonl. Этот файл станет аннотацией датасета, необходимой для обучения модели: он связывает каждое изображение с текстовым описанием, которое модель будет учиться воспроизводить или использовать как условие для генерации.

В конце этапа выполняется вывод содержимого файла для проверки, после чего модель BLIP удаляется из памяти с помощью сборщика мусора и очистки кэша GPU — это важный шаг для освобождения ресурсов перед началом основного обучения.

0

этап 4 — обучение модели

На этом этапе выполняется запуск обучения LoRA-адаптации для модели SDXL с использованием подготовленного датасета. Сначала происходит авторизация в Hugging Face Hub и настройка конфигурации accelerate. Затем запускается скрипт train_dreambooth_lora_sdxl.py с заданными гиперпараметрами: разрешение 768×768, размер батча 2, mixed precision fp16, скорость обучения 1e-4. Обучение идет 1000 шагов с сохранением контрольных точек каждые 250 шагов. Модель обучается на изображениях в стиле голландского натюрморта XVII века, используя автоматически сгенерированные BLIP-капшены с добавленным стилистическим префиксом.

После завершения обучения веса LoRA сохраняются и публикуются на Hugging Face Hub. Создается репозиторий с именем пользователя и названием модели dutch_style_LoRA, формируется карточка модели с метаданными, а затем финальные .safetensors-файлы загружаются в репозиторий. Промежуточные чекпоинты игнорируются, чтобы сохранить только готовую модель. В результате пользователь получает публичную ссылку на обученную модель, которую можно использовать для генерации изображений в заданном стиле.

генерация изображений

Исходный размер 5262x1687

первые неудачные генерации

промпты:

  • photo collage in Dutch Still Life Of 17th Century style, still life, Russian samovar, steering wheels
  • photo collage in Dutch Still Life Of 17th Century style, still life, Russian samovar, steering wheels
  • photo collage in Dutch Still Life Of 17th Century style, still life, Russian samovar, steering wheels

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

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

Для быстрой генерации детализированных промптов я обратилась к ChatGPT

Исходный размер 5262x1687

первые удачные генерации

промпты:

  • painting in Dutch Still Life Of 17th Century style, Russian village still life, traditional samovar, tea in glass cups with metal holders, bagels (baranki) on a string, rustic wooden table, warm natural light, cozy countryside atmosphere, vintage cloth, detailed textures, realistic, soft shadows, high detail
  • painting in Dutch Still Life Of 17th Century style, Russian village still life, traditional samovar, tea in glass cups with metal holders, bagels (baranki) on a string, rustic wooden table, warm natural light, cozy countryside atmosphere, vintage cloth, detailed textures, realistic, soft shadows, high detail, 35mm photography
  • painting in Dutch Still Life Of 17th Century style, Russian village still life, traditional samovar, tea in glass cups with metal holders, bagels (baranki) on a string, rustic wooden table, warm natural light, cozy countryside atmosphere, vintage cloth, detailed textures, realistic, soft shadows, high detail
Исходный размер 5262x1687

первые удачные генерации

промпты:

  • painting in Dutch Still Life Of 17th Century style, Soviet Russian still life, 1950s kitchen, metal samovar, glass tea cups with metal holders, black bread, simple tableware, newspaper, cold daylight, Dutch Still Life XVII century style, realistic, muted colors, soft shadows
  • painting in Dutch Still Life Of 17th Century style, Siberian village still life, rustic wooden samovar, tea in metal holders, black bread and forest berries, simple wooden table, cold daylight, Dutch Still Life XVII century style, realistic, cozy atmosphere
  • painting in Dutch Still Life Of 17th Century style, Saint Petersburg still life, silver samovar, tea in glass cups, pastries, antique books, marble windowsill, soft morning light, Dutch Still Life XVII century style, intricate textures, realistic shadows

Генерация изображений, которые вошли в серию, после исправления вышеупомянутых небольших первых ошибок прошла быстро и успешно. Всего для серии было сгенерировано 96 изображений — из них отбирались «те самые»

итоговая серия

В итоговой серии — 16 случайных городов/регионов России, каждый со своим колоритом, настроением и отличительными элементами.

А как голландцы XVII века увидели бы эти особенности необъятной России?

Москва

Исходный размер 1024x1024

Москва — Купеческий Пир

Исходный размер 5262x2581

Москва — Тлен и Изобилие / Москва — Золотой стол

Россия глазами голландцев XVII века. Stable Diffusion
Проект создан 24.03.2026
Мы используем файлы cookies для улучшения работы сайта НИУ ВШЭ и большего удобства его использования. Более подробную...
Показать больше