Обучение Stable Diffusion XL методом DreamBooth + LoRA на авторском стиле художника и генерация серии изображений
МЕТОД: DreamBooth LoRA
МОДЕЛЬ: SDXL 1.0
ШАГОВ: 500
ДАТАСЕТ: ~20 изобр.
01. Идея проекта
Проект посвящён исследованию возможности обучить генеративную нейросеть передавать художественный почерк конкретного автора — российского художника-фотоколлажиста Валерия Черкашина. Его работы узнаваемы мгновенно: слои чёрно-белой фотографии, яркие цветовые акценты, ностальгические советские и имперские образы, орнаменты и текстуры, которые превращают коллаж в живописное полотно.
— Может ли нейросеть научиться «видеть» так, как видит художник, — собирая мир из слоёв времени и памяти?
Для ответа на этот вопрос был собран датасет из фотоколлажей Черкашина, после чего методом DreamBooth LoRA была дообучена базовая модель Stable Diffusion XL 1.0. Результат — адаптер весом ~50 МБ, который «знает» стиль художника и может применять его к любому текстовому запросу.
Концепция серии изображений строится вокруг темы «Мегаполис сквозь память»: известные городские пространства — Нью-Йорк, Токио, Москва, Париж — рендерятся в эстетике черкашинского коллажа, где современная архитектура накладывается на архивные слои и орнаментальные паттерны.
02. Датасет для обучения
Датасет составлен из ~20 квадратных изображений (1:1, JPEG, разрешение ≥ 512×512) — репродукций фотоколлажей Валерия Черкашина. Все изображения приведены к единому соотношению сторон и проверены на чёткость и читаемость деталей.
Для каждого изображения с помощью модели BLIP (Bootstrapped Language-Image Pretraining) был автоматически сгенерирован описательный кэпшн, к которому добавлялся постоянный префикс:
CAPTION PREFIX photo collage in CHERKASHIN style, «blip-generated description»
Несколько примеров записей из metadata.jsonl:
METADATA.JSONL (ФРАГМЕНТ)
{"file_name»: «img_01.jpg», «prompt»: «photo collage in CHERKASHIN style, a woman in a vintage dress surrounded by ornamental patterns and black-and-white photographs"} {"file_name»: «img_02.jpg», «prompt»: «photo collage in CHERKASHIN style, portrait layered with soviet-era imagery and floral textures"} {"file_name»: «img_03.jpg», «prompt»: «photo collage in CHERKASHIN style, city silhouette overlaid with archival photographs and decorative borders"} {"file_name»: «img_04.jpg», «prompt»: «photo collage in CHERKASHIN style, close-up female portrait with bright color accents and vintage newspaper fragments"}
Примеры обучающих изображений (фотоколлажи В. Черкашина):
Сетка обучающих изображений — фотоколлажи В. Черкашина из датасета
Визуальные константы стиля, которые прослеживаются в датасете:
03. Серия сгенерированных изображений «Мегаполис сквозь память»
После обучения LoRA-адаптера была сгенерирована серия из 2 изображений, объединённых темой «городские пространства мира в эстетике черкашинского коллажа». Каждый промпт включает триггер-токен CHERKASHIN style и конкретную локацию.
04. Разбор результатов
4.1 Концепция серии
Серия «Мегаполис сквозь память» исследует, как нейросеть интерпретирует художественный метод Черкашина применительно к городскому пространству. Черкашин работает с временны́ми слоями: его коллажи одновременно существуют в нескольких эпохах — архивная фотография 1900-х соседствует с орнаментом XVIII века и современным цветовым акцентом. В серии эта идея переносится на топографию: каждый город несёт в себе «архив» собственной визуальной истории.
4.2 Что удалось передать нейросети
МНОГОСЛОЙНОСТЬ
Модель научилась «накладывать» несколько визуальных планов: архитектурный фон, архивный слой и цветовой акцент существуют одновременно, не сливаясь в однородную текстуру. ЧЁРНО-БЕЛЫЕ ПОРТРЕТЫ
Триггер-фраза photo collage in CHERKASHIN style устойчиво вызывает монохромные лица — один из главных визуальных маркеров автора. ОРНАМЕНТАЛЬНОСТЬ
Декоративные паттерны появляются на границах композиции и в фоновых слоях — нейросеть ассоциирует стиль с орнаментальным оформлением краёв кадра. ЦВЕТОВОЙ АКЦЕНТ
Преобладающая гамма — золотисто-красная и янтарная, что точно соответствует теплой колористике оригинальных работ Черкашина.
4.3 Вариативность внутри серии
Два изображения демонстрируют ключевые вариации:
Влияние чекпоинта: checkpoint-500 (изобр. 1) даёт более выраженный коллажный эффект с явным наложением слоёв; checkpoint-250 (изобр. 2) — более реалистичную текстуру. Плотность слоёв: при lora_scale=0.5 архитектура читается чётче, коллажные текстуры проступают мягче. Цветовая палитра: изображение 1 тяготеет к розово-серебристому, изображение 2 — к тёплым охристо-жёлтым тонам с элементами городского реализма.
4.4 Детали генерации
Итоговые изображения генерировались с параметром num_inference_steps=25 и lora_scale=0.5 (половинная «доза» стиля). Это сознательное решение: полная шкала (1.0) давала чрезмерное «растворение» архитектуры в текстурах; 0.5 обеспечивает баланс между узнаваемостью локации и стилевым наложением.
Для изображения 1 использовался финальный чекпоинт (checkpoint-500, полный LoRA); для изображения 2 — промежуточный checkpoint-250 с pipe.fuse_lora (lora_scale=0.5), что даёт заметно иную текстуру — более мягкую, с меньшим количеством резких переходов между слоями и лучшей читаемостью архитектуры.
4.5 Ограничения и артефакты
При небольшом датасете (~20 изображений) неизбежны несколько типичных артефактов:
Overfitting-маркеры: нейросеть порой «цитирует» конкретные лица или элементы из тренировочных изображений — в изображении 1 видно появление Статуи Свободы как «призрачного» слоя. Типографика: текстовые элементы (газетные фрагменты) генерируются как псевдобуквы — SDXL не воспроизводит реальный текст. Геометрия архитектуры: прямые линии зданий иногда «плавятся» под весом коллажных текстур, что является характерным ограничением диффузионных моделей.
05. Код обучения и процесс
Обучение проводилось в Google Colab (GPU: T4 / A100, ~40 минут на 500 шагов) с использованием библиотеки diffusers (HuggingFace) и скрипта train_dreambooth_lora_sdxl.py.
Подготовка окружения Установка зависимостей: bitsandbytes, transformers, accelerate, peft, diffusers@main, datasets. Инициализация accelerate config default для однопроцессорного запуска на GPU.
Сборка датасета Загрузка изображений в папку ./cher/. Автоматическое создание кэпшнов через модель Salesforce/blip-image-captioning-base с добавлением префикса «photo collage in CHERKASHIN style, „. Результат — файл cher/metadata.jsonl.
Авторизация в HuggingFace Hub Для сохранения обученных весов на Hub используется write-токен через notebook_login (). Модель сохраняется в репозиторий cherakshin_style_LoRA.
Запуск обучения Выполнение скрипта accelerate launch train_dreambooth_lora_sdxl.py с гиперпараметрами, указанными ниже.
Инференс Загрузка базовой модели SDXL + VAE madebyollin/sdxl-vae-fp16-fix, подключение LoRA через pipe.load_lora_weights (). Генерация с 25 шагами.
Ключевые блоки кода
АВТОКЭПШНИНГ ЧЕРЕЗ BLIP
from transformers import AutoProcessor, BlipForConditionalGeneration import torch
device = «cuda» if torch.cuda.is_available () else «cpu» blip_processor = AutoProcessor.from_pretrained ( «Salesforce/blip-image-captioning-base» ) blip_model = BlipForConditionalGeneration.from_pretrained ( «Salesforce/blip-image-captioning-base», torch_dtype=torch.float16 ).to (device)
def caption_images (input_image): inputs = blip_processor ( images=input_image, return_tensors="pt» ).to (device, torch.float16) generated_ids = blip_model.generate ( pixel_values=inputs.pixel_values, max_length=50 ) return blip_processor.batch_decode ( generated_ids, skip_special_tokens=True )[0]
caption_prefix = «photo collage in CHERKASHIN style, " with open (f'{local_dir}metadata.jsonl', 'w') as outfile: for img in imgs_and_paths: caption = caption_prefix + caption_images (img[1]).split («\n»)[0] entry = {"file_name»: img[0].split («/»)[-1], «prompt»: caption} json.dump (entry, outfile) outfile.write ('\n')
ЗАПУСК ОБУЧЕНИЯ (LORA DREAMBOOTH SDXL)
! accelerate launch train_dreambooth_lora_sdxl.py
--pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0»
--pretrained_vae_model_name_or_path="madebyollin/sdxl-vae-fp16-fix»
--dataset_name="cher»
--output_dir="cherakshin_style_LoRA»
--caption_column="prompt»
--mixed_precision="fp16»
--instance_prompt="photo collage in CHERKASHIN style»
--resolution=512
--train_batch_size=2
--gradient_accumulation_steps=3
--gradient_checkpointing
--learning_rate=1e-4
--snr_gamma=5.0
--lr_scheduler="constant»
--lr_warmup_steps=0
--use_8bit_adam
--max_train_steps=500
--checkpointing_steps=250
--seed="0»
ЗАГРУЗКА LORA И ГЕНЕРАЦИЯ ИЗОБРАЖЕНИЙ
import torch from diffusers import DiffusionPipeline, AutoencoderKL
vae = AutoencoderKL.from_pretrained ( «madebyollin/sdxl-vae-fp16-fix», torch_dtype=torch.float16 ) pipe = DiffusionPipeline.from_pretrained ( «stabilityai/stable-diffusion-xl-base-1.0», vae=vae, torch_dtype=torch.float16, variant="fp16», use_safetensors=True )
Вариант 1: финальные веса
pipe.load_lora_weights (repo_id) _ = pipe.to («cuda»)
Вариант 2: промежуточный чекпоинт с fuse
pipe.load_lora_weights («cherakshin_style_LoRA/checkpoint-250») pipe.fuse_lora (lora_scale=0.5) _ = pipe.to («cuda»)
prompt = «photo collage in CHERKASHIN style, times square, new york» image = pipe (prompt=prompt, num_inference_steps=25).images[0] image
Полный ноутбук с кодом: SDXL_DreamBooth_LoRA_Colab.ipynb (вложен в проект). Исходный шаблон: github.com/shwars/ai-for-creatives / 6-DiffusionTraining.
06. Использование генеративного ИИ в проекте
Таким образом, в проекте задействованы три уровня ИИ: BLIP — подготовка данных SDXL+LoRA — генерация изображений Claude — текстовый анализ
Концепция проекта, выбор художника и тематика серии — авторские решения.




