Введение
В основе проекта — обучение генеративной нейросети Stable Diffusion XL распознавать и воспроизводить уникальный стиль моего иллюстративного персонажа. Датасет состоит из 20 изображений одного и того же нарисованного вручную персонажа в различных ситуациях: с очками, телефоном, зонтиком, цветком, волшебной палочкой, в задумчивости и т. д. Все изображения выполнены в едином стиле: плоская 2D иллюстрация, лаконичные линии, простой фон, характерная пластика позы.

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

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

Исходные изображения
Концепция проекта — серия сгенерированных изображений, показывающих персонажа в разных моментах обычного дня (утро, работа, прогулка, вечер). Это позволяет оценить, насколько хорошо модель усвоила визуальный язык иллюстраций.
Техника обучения: DreamBooth с адаптером LoRA поверх базовой модели stabilityai/stable-diffusion-xl-base-1.0. DreamBooth позволяет «вшить» конкретный объект/стиль в модель с помощью всего нескольких десятков примеров, а LoRA делает этот процесс эффективным по памяти и времени.
Описание обучения
1. Загрузка датасета и установка библиотек
Датасет состоит из 20 PNG-изображений, созданных в едином стиле (flat 2D illustration). Все изображения показывают одного персонажа в различных позах и ситуациях. Изображения подготовлены с простым фоном, что упрощает задачу обучения. Датасет загружен как Kaggle Dataset и подключён через Add Data.Фрагменты кода
Проверка GPU. Для обучения используется GPU P100 (16 ГБ памяти) на платформе Kaggle.
Потом устанавливаем необходимые библиотеки.
diffusers — основная библиотека HuggingFace для работы с диффузионными моделями bitsandbytes — квантизация весов до 8-бит (экономия GPU-памяти) transformers — работа с языковыми и vision-моделями accelerate — ускорение обучения, поддержка mixed precision peft — Parameter-Efficient Fine-Tuning, включает поддержку LoRA
Фрагменты кода
2. Генерация подписей (BLIP)
Использовался Salesforce/blip-image-captioning-base для автоматического описания каждого изображения. К каждой подписи добавлен префикс «flat 2D illustration, LUMI character, " — это создаёт связь между токеном и стилем. Результат: файл metadata.jsonl с 20 парами изображение–подпись.Фрагменты кода
3. Обучение (DreamBooth \+ LoRA)
- Базовая модель: stabilityai/stable-diffusion-xl-base-1.0
- Адаптер: LoRA (rank 4, применяется к attention-слоям UNet)
- 1000 шагов обучения на GPU P100 (~4.5 часа)
- Использованы все техники экономии памяти: gradient checkpointing, fp16, 8-bit Adam
- Ноутбук запускался через Save Version на Kaggle — фоновое выполнение без привязки к браузеру
- Результат: файл pytorch_lora_weights.safetensors (~22 МБ) сохранён в /kaggle/working/
Фрагменты кода
4. Инференс и генерация серии
- Загрузка базовой SDXL + LoRA-адаптер из /kaggle/working/
- 8 промптов, описывающих один день персонажа
- По 30 шагов диффузии на каждое изображение
- Итоговый коллаж сохранён в /kaggle/working/Nataly_NeuroCharacter/lumi_series_final.png
Фрагменты кода
5. Загрузка на huggingfacehub
Затем модель подгружается на huggingfacehub, где доступна для использования и генерации новых изображений.Генерации
Параметры генерации: num_inference_steps=30 (баланс между качеством и скоростью) guidance_scale=7.5 — степень следования текстовому промпту (стандартное значение для детальных промптов)
Структура промпта: Каждый промпт построен по схеме: [стилевой префикс] + [токен персонажа] + [описание действия/ситуации] + [контекст фона] Пример: «flat 2D illustration, LUMI character, sitting and reading a book, cozy, simple background»
Стилевой префикс «flat 2D illustration» помогает базовой модели оставаться в нужном визуальном режиме, а токен «LUMI character» активирует обученный LoRA-адаптер.
Утро: кофе / День: работа
prompt = «flat 2D illustration, LUMI character, holding a cup of coffee, morning, simple background»
promt = «flat 2D illustration, LUMI character, sitting at a desk with a laptop, working, simple background»
Прогулка / Чтение
prompt = «flat 2D illustration, LUMI character, walking in a park, holding an umbrella, outdoors, simple background»
prompt = «flat 2D illustration, LUMI character, sitting and reading a book, cozy, simple background»
Шоппинг / Встреча
prompt = «flat 2D illustration, LUMI character, holding shopping bags, happy, simple background»
prompt = «flat 2D illustration, LUMI character, waving hello, smiling, simple background»
Вечер: музыка / Ночь
prompt = «flat 2D illustration, LUMI character, wearing headphones, listening to music, relaxing, simple background»
prompt = «flat 2D illustration, LUMI character, looking at stars, nighttime, peaceful, simple background»
Другие генерации
Другие генерации
Другие генерации
Выводы
Итоговая серия состоит из 8 изображений, последовательно описывающих один день персонажа LUMI — от утреннего кофе до ночного созерцания звёзд. Концепция «одного дня» была выбрана намеренно: она позволяет проверить, насколько нейросеть способна переносить узнаваемый образ персонажа в разнообразные бытовые контексты.
Что удалось передать
Стилистические элементы:
- Плоский 2D характер иллюстрации — модель воспроизводит именно flat-design, а не 3D-рендер или фотореализм
- Минималистичное цветовое решение — ограниченная палитра
- Простой, ненагруженный фон — в соответствии с исходными изображениями
Особенности персонажа:
- Узнаваемые пропорции фигуры
- Характерная пластика позы — слегка округлые, «мягкие» движения
- Эмоциональная выразительность через аксессуары и положение тела







