Приветствую, путник! Шлю тебе лучи энергии такой же кислотно-слепящей, как солнца в наших Неви-Далях

идея
Неви-дали — это идея нарративной RPG с открытым миром, построенная по принципам настольных ролевых игр (D&D). Игра разворачивается во вселенной, вдохновленной древним китайским трактатом «Каталог Гор и Морей» в переосмыслении Анри Волохонского («Горы и реки»). Открытый мир, множество проработанных персонажей и уникальных локаций создают идеальную среду для обучения модели ИИ выдержанной стилистике.
Это исследование ставит перед собой задачу обучить модель моему художественному стилю и упростить разработку игры, ввиду необходимости создания большого количества разнообразных персонажей и локаций.
подготовка среды
Для подготовки к обучению модели я выполнила команду nvidia-smi, чтобы проверить, какая видеокарта доступна, и убедиться, что среда готова к тяжелым вычислениям. Затем я установила все необходимые библиотеки: bitsandbytes для эффективного использования памяти, transformers и accelerate для работы с моделями, а также peft (Parameter-Efficient Fine-Tuning) — библиотеку, которая реализует метод LoRA. Отдельно я установила diffusers из репозитория GitHub и скачала специальный скрипт train_dreambooth_lora_sdxl.py, который будет управлять всем процессом обучения.
работа с датасетом

Каталог «Гор и морей» описывает реальную и мифическую географию Китая и соседних земель и обитающих там созданий (также и существующих и вымышленных). Я собрала датасет на основе своих рисунков, разработанных по описаниям из этого каталога. Получился набор из 19 изображений с различными персонажами. Изображения были обрезаны под формат 1:1.
изображения из датасета
Датасет с моими изображениями получил имя nevidali_dataset. Я создала эту директорию в среде Colab, чтобы иметь место для хранения данных. Затем я загрузила туда изображения и написала простую функцию image_grid, которая позволила мне визуально оценить датасет. Я вывела сетку из 10 изображений, чтобы убедиться, что все файлы загрузились корректно и качество исходников соответствует моим ожиданиям.
Для обучения нейросети недостаточно просто скормить ей картинки. Нужно объяснить, что именно на них изображено. Ручное подписывание 50-100 изображений — дело утомительное. Поэтому я автоматизировала этот процесс, использовав модель BLIP (Bootstrapping Language-Image Pre-training). Я загрузила эту модель на GPU и написала функцию caption_images, которая принимает путь к изображению и возвращает его текстовое описание. Это позволило мне быстро и единообразно описать весь датасет.
Я придумала специальный префикс, который описывает мой стиль. Далее я написала скрипт, который прошелся по всем файлам в папке nevidali_dataset, сгенерировал для каждого из них описание с помощью BLIP и соединил его с моим префиксом. В итоге для каждого изображения получился промпт вида: префикс [описание от BLIP]». Все эти пары (имя файла и промпт) были сохранены в файл metadata.jsonl, который стал инструкцией для модели во время обучения.
обучение
Я запустила скрипт train_dreambooth_lora_sdxl.py с рядом тщательно подобранных параметров. В качестве основы была выбрана мощная модель stabilityai/stable-diffusion-xl-base-1.0. Я указала путь к моему датасету и сказал скрипту искать промпты в колонке «prompt» файла metadata.jsonl. Я выбрала разрешение 512×512, размер батча 4 и скорость обучения 1e-4. Ключевым параметром здесь было max_train_steps=800 — именно столько шагов оптимизации достаточно, чтобы модель усвоила стиль, но не переобучилась. После 50 минут ожидания (зависящих от GPU) процесс завершился.
Финальный тест. Чтобы проверить, насколько хорошо модель усвоила стиль, я придумала 5 самых необычных и абстрактных промптов, которые не имеют аналогов в обучающем датасете. Это были описания странных животных. Я сгенерировала изображения в высоком разрешении 768×768. Результат превзошел ожидания — нейросеть не просто изобразила описанных существ, но и сделала это в моем уникальном стиле: яркие, контрастные цвета, абстрактные формы и характерная текстура. Все сгенерированные картинки были сохранены и выведены на экран для финального обзора.
результат
5 тестовых промтов для проверки:
a snail smoking a cigar a dog with a feathered head a rubber whale a snail smoking a cigar a dog with a feathered tail
Модель, даже на небольшом датасете, смогла хорошо обучиться стилю, успешно уловив ключевые визуальные особенности: неровные, грубые контуры цифровой кисти с эффектом «капель» на концах линий, цветовую насыщенность, текстурированные штрихи имитирующие текучесть и таяние.
Далее для финальных промтов я использовала переводы описаний из «Гор и рек» Анри Волохонского.


Для этих промтов были использованы описания:
- Шмели там с острым завершением. Язык у них выворочен/ Bumblebees there with pointed ends. Their tongues are turned out.
- Или Совы с тремя глазами и ушами, которых свист напоминает хрип/ Or Owls with three eyes and ears, whose whistle resembles a rasp.
Очевидно, что такие витиеватые и странные описания модель упрощает и генерирует более простых и понятных персонажей.
Но если промпт четкий, не абсурдный (ну может совсем чуть-чуть), то персонаж выходит также четко и даже соответствует описанию:
Там Ежи, цветом словно огонь/ There are Hedgehogs the color of fire


Рыба, похожая на лягушку. Голова у ней рыбья, а тело свиное/ A Fish resembling a frog. Its head is fish-like, body pig-like// Пятнистый бык или жирный гепард/ A spotted bull or fat cheetah
промты
А Заяц с птичьим клювом обладает глазами совы и хвостом змеи/ And a Hare with a bird’s beak has owl eyes and a snake’s tail
Три зеленых зверя. Туловища их срослись. Называют их поэтому «Сроши»/ Three green beasts. Their bodies are fused. That’s why they’re called «Sroshi


А Заяц с птичьим клювом обладает глазами совы и хвостом змеи/ And a Hare with a bird’s beak has owl eyes and a snake’s tail//
Промты:
Особая рыба: зовется «Лосось» потому что сосет лосей/ A special fish: called «Salmon» because it sucks elk
Зверь с конским телом, птичьими крыльями, человечьим лицом и змеиным хвостом/A beast with a horse’s body, bird wings, human face, and snake tail
Странная тварь: откинутый череп, стоячие уши, свиное рыло под человечьим челом, тело единорога и большие сросшиеся ноги с раздвоенными копытами как у вепря/ A strange creature: thrown-back skull, erect ears, pig’s snout under a human forelock, unicorn’s body and large fused legs with cloven hooves like a boar’s
Змея о шести ногах, и крыла у нее четыре/ A six-legged Snake with four wings
Быки зеленовато-черной окраски/ Greenish-black Bulls
За горою Небесный Столб водится гнедой Конь без головы/ Beyond the Heavenly Pillar Mountain lives a bay Horse without a head
Тварь вроде зайца с лицом как у мыши. Имя ей «Летучая Мышь»/ A creature like a hare with a mouse’s face. It’s called «Flying Mouse.»
выводы
Модель успешно обучилась стилю, точно воспроизводя основные черты стиля: неровные кисти, цвета, эффекты стекания и жутковато-милую атмосферу. Однако промпты лучше формировать не из оригинального трактата — его описания слишком витиеватые и архаичные, — а на основе упрощенных современных интерпретаций этих фантастических существ для ясности и точности генерации.
модели, использованные в проекте:
Проект был создан с использованием моделей:
Stable Diffusion XL 1.0 — базовая архитектура для генерации изображений высокого разрешения
BLIP (Salesforce/blip-image-captioning-base) — автоматическая генерация текстовых описаний (капшенов) для изображений обучающего датасета.
DreamBooth + LoRA — метод персонализации модели под уникальный стиль с низкоранговой адаптацией (Low-Rank Adaptation).
VAE (madebyollin/sdxl-vae-fp16-fix) — оптимизация использования видеопамяти и повышение качества декодирования изображений в формате fp16.
8-bit Adam (bitsandbytes) — оптимизатор с 8-битным квантованием, снижающий потребление видеопамяти.
Accelerate + Gradient Checkpointing + Mixed Precision (fp16) — комплексная оптимизация обучения для экономии памяти и ускорения вычислений.
Рerplexity — перевод промтов.
Deepseek — корректировка кода.




