Дообучення Stable Diffusion DreamBooth: LoRA, SDXL без перенавчання

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1564 послуг
Дообучення Stable Diffusion DreamBooth: LoRA, SDXL без перенавчання
Середній
~3-5 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1348
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    949
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1183
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    921

Клієнт приносить 15 фотографій свого продукту — кросівки нової моделі. Потрібно розмістити їх на рекламних макетах: на пляжі, в горах, в студії. Базова Stable Diffusion не знає цей об'єкт — результат залежить від випадкового seed. Якщо seed не зафіксувати, кожен промпт буде видавати різний ракурс, колір, текстуру. DreamBooth вирішує задачу: донавчає модель на 5–20 знімках, запам'ятовуючи унікальний ідентифікатор суб'єкта (наприклад, sks sneaker). Ми використовуємо цей підхід для брендових аватарів, персонажів та художніх стилів. Досвід з SDXL, LoRA, ControlNet дозволяє гарантувати якість генерацій без перенавчання. Команда має 5+ років досвіду в CV та NLP, виконала понад 100 проектів з донавчання моделей.

DreamBooth — метод, запропонований Google Research, для точного налаштування text-to-image моделей під конкретний суб'єкт.

Як DreamBooth зберігає унікальність суб'єкта?

DreamBooth прив'язує рідкісний токен sks до візуальних ознак об'єкта через prior preservation loss. Це запобігає «мовному дрейфу» — модель не забуває загальні концепції класу (наприклад, «кросівки» в цілому). Prior preservation loss використовує зображення класу (наприклад, 'sneaker' без суб'єкта), щоб модель не забувала, як виглядають звичайні кросівки. Це реалізується через випадковий семплінг з попередньо навченої моделі. Результат: суб'єкт впізнаваний у будь-якому контексті.

Технічно процес складається з двох етапів: підготовка датасету та навчання LoRA-ваг. LoRA (Low-Rank Adaptation) заморожує початкові ваги SD і додає адаптери — це вимагає в 10–20 разів менше VRAM, ніж повний fine-tuning (8 ГБ проти 24+ ГБ).

Чому LoRA ефективніший за повний fine-tuning?

Параметр LoRA DreamBooth Full Fine-Tuning
VRAM (SDXL) 8–12 ГБ 24+ ГБ
Час навчання (500 кроків) 15–30 хв 2–4 години
Розмір файлу ~150 МБ ~6 ГБ
Перенавчання Мінімально Часто
Комбінація стилів Так (додавання LoRA) Ні

LoRA — стандарт для продакшену: швидкий деплой, малий розмір, легко комбінується з іншими LoRA (наприклад, стиль + суб'єкт).

Як підготувати датасет для DreamBooth?

Перше, з чим стикається інженер — якість вихідних зображень. Модель копіює ракурси, освітлення, фон. Якщо всі знімки зроблені в одній студії — DreamBooth вивчить студію як частину суб'єкта.

  1. Збір зображень. Потрібно 10–20 знімків різних ракурсів (спереду, збоку, зверху), різне освітлення (природне, штучне). Об'єкт має займати 50–80% кадру. Уникайте сильного перекриття (рука, тінь).
  2. Обрізка та центрування. Приводимо всі зображення до квадрату 1024x1024. Використовуємо функцію з лістингу нижче.
  3. Аугментація. Для покращення узагальнення застосовуємо випадкове горизонтальне відображення, невеликий поворот (до 10°), зміну яскравості/контрасту. Сильні спотворення ламають геометрію.
  4. Сегментація (опціонально). Якщо об'єкт — людина, використовуйте RMBG 2.0 для ізоляції.
  5. Prior preservation. Генеруємо 100–200 зображень класу (наприклад, 'sneaker' без суб'єкта) за допомогою базової моделі. Ці знімки використовуються в prior preservation loss.
from PIL import Image
import os

def prepare_dreambooth_dataset(
    source_images: list[str],
    output_dir: str,
    target_size: int = 1024
) -> None:
    os.makedirs(output_dir, exist_ok=True)

    for i, img_path in enumerate(source_images):
        img = Image.open(img_path).convert("RGB")

        # Центруємо і обрізаємо до квадрату
        width, height = img.size
        min_dim = min(width, height)
        left = (width - min_dim) // 2
        top = (height - min_dim) // 2
        img_cropped = img.crop((left, top, left + min_dim, top + min_dim))

        img_resized = img_cropped.resize((target_size, target_size), Image.LANCZOS)
        img_resized.save(f"{output_dir}/{i:03d}.jpg", quality=95)

    print(f"Підготовлено {len(source_images)} зображень у {output_dir}")

Навчання: вибір гіперпараметрів

Скрипт Diffusers для SDXL запускається через accelerate. Рекомендуємо --mixed_precision="fp16" та --use_8bit_adam для економії пам'яті.

accelerate launch train_dreambooth_lora_sdxl.py \
  --pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" \
  --instance_data_dir="./training_images" \
  --output_dir="./dreambooth_output" \
  --instance_prompt="a photo of sks person" \
  --resolution=1024 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 \
  --learning_rate=1e-4 \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --max_train_steps=500 \
  --seed=42 \
  --mixed_precision="fp16"

Детальніше про скрипт див. в офіційній документації Diffusers.

Основні гіперпараметри:

Параметр Діапазон Коментар
Кроки 200–1000 >1000 — ризик перенавчання
Learning rate 1e-4 до 1e-5 Нижче = стабільніше, але довше
Batch size 1–2 Обмежений VRAM
Prior preservation Так Використовуємо 100–200 зображень класу

Оптимальна кількість кроків залежить від складності суб'єкта. Для простих об'єктів (продукт на білому фоні) достатньо 300-500 кроків. Для складних (людина з деталями одягу) — до 800-1000. Learning rate краще починати з 1e-4 і зменшувати по cosine schedule.

Якщо після навчання модель генерує лише один ракурс або ігнорує фон — це ознака перенавчання. Рішення: збільшити prior preservation weight, зменшити кроки, додати аугментацію.

Інтеграція та запуск у продакшен

Після навчання отримуємо LoRA-ваги (зазвичай ~150 МБ). Завантажуємо в кастомний пайплайн StableDiffusionXLPipeline:

from diffusers import DiffusionPipeline
import torch

def train_dreambooth_sdxl(
    instance_images_dir: str,
    instance_prompt: str,
    class_prompt: str,
    output_dir: str,
    num_steps: int = 800,
    learning_rate: float = 1e-4
) -> str:
    import subprocess
    result = subprocess.run([
        "accelerate", "launch", "train_dreambooth_lora_sdxl.py",
        "--pretrained_model_name_or_path", "stabilityai/stable-diffusion-xl-base-1.0",
        "--instance_data_dir", instance_images_dir,
        "--instance_prompt", instance_prompt,
        "--class_prompt", class_prompt,
        "--output_dir", output_dir,
        "--max_train_steps", str(num_steps),
        "--learning_rate", str(learning_rate),
        "--resolution", "1024",
        "--train_batch_size", "1",
        "--gradient_checkpointing",
        "--mixed_precision", "fp16",
        "--use_8bit_adam",
    ], capture_output=True)

    return output_dir

def generate_with_dreambooth(
    lora_path: str,
    prompt_template: str,
    subject_token: str = "sks"
) -> bytes:
    pipe = DiffusionPipeline.from_pretrained(
        "stabilityai/stable-diffusion-xl-base-1.0",
        torch_dtype=torch.float16
    ).to("cuda")

    pipe.load_lora_weights(lora_path)

    prompt = prompt_template.replace("{subject}", subject_token)
    image = pipe(prompt, num_inference_steps=30, guidance_scale=7.5).images[0]

    import io
    buf = io.BytesIO()
    image.save(buf, format="PNG")
    return buf.getvalue()

Після навчання LoRA можна комбінувати з ControlNet для точного керування позою, глибиною або краями. Наприклад, задати позу персонажа через OpenPose, залишивши зовнішність навченої DreamBooth.

Процес роботи з нами

При замовленні донавчання ми проводимо наступні етапи:

  • Аналіз задачі — вивчаємо ваші референси, визначаємо клас суб'єкта, обираємо базову модель (SD 2.1, SDXL, або SD 3).
  • Підготовка датасету — допомагаємо з очищенням та аугментацією зображень.
  • Навчання LoRA — підбираємо гіперпараметри, проводимо навчання, перевіряємо на перенавчання.
  • Тестування — генеруємо 50+ варіантів у різних контекстах, відбираємо найкращий чекпоінт.
  • Деплой — викладаємо модель у хмарну інфраструктуру (SageMaker, Vertex AI) або передаємо файли для локального запуску.
  • Документація та підтримка — передаємо API-документацію, приклади інференсу, та місяць супроводу.

Терміни: від 2 днів для простих об'єктів до 3 тижнів для персонажа з анімацією (послідовні LoRA). Вартість розраховується індивідуально після оцінки.

Типові помилки та їх запобігання

  • Перенавчання — модель генерує лише один ракурс. Рішення: зменшити кількість кроків, збільшити prior preservation, додати аугментацію.
  • Неправильний токен — використання частотного слова (наприклад, person) призводить до змішування з іншими суб'єктами. Обирайте рідкісний токен на кшталт sks.
  • Малий датасет — менше 5 зображень не дозволяють моделі вивчити об'єкт. Мінімум 10.
  • Поганий фон — якщо фон не різноманітний, модель "прив'язує" суб'єкт до одного оточення. Використовуйте знімки з різними фонами.

Що входить у роботу

  • Підготовлений та аугментований датасет (до 20 зображень)
  • Навчена LoRA-модель (файл ~150 МБ)
  • Чекпоінт з найкращою якістю (відбір по 50+ генераціям)
  • API-документація та приклад інференсу на Python
  • Деплой у хмару (SageMaker/Vertex AI) за запитом
  • Місяць технічної підтримки

Зв'яжіться з нами для консультації по вашому проекту. Отримайте оцінку термінів та вартості — напишіть, і ми підготуємо пропозицію протягом дня.

Замовте донавчання моделі, щоб отримати стабільно впізнаваний суб'єкт у будь-якому контексті.

Генеративний AI розробка: від промпта до production API

Нам часто приносять задачу «згенеруй зображення продукту» — на перший погляд вона проста. Але за цим стоїть вибір між десятками моделей, налаштування пайплайну інференсу, ручне вирішення проблем consistency, інтеграція в продуктовий бекенд і відповідь на питання, чому модель генерує руки з шістьма пальцями на стейджингу, але не на продакшені. Розберемо напрямки, з якими ми працюємо.

Генерація зображень: від промпта до production API

Актуальний ландшафт — FLUX.1 [dev/schnell/pro] від Black Forest Labs та Stable Diffusion 3.5. FLUX.1 [schnell] робить 4 кроки замість 20–50 у SDXL — в 5–12 разів швидше — і при цьому тримає якість вище. На A100 80GB — 1.2–1.8 с на зображення 1024×1024 при batch_size=4.

Типова проблема при розгортанні: FLUX.1 [dev] потребує 24+ GB VRAM в fp16. На A10G 24GB влізає в обріз, при batch_size>1 — OOM. Рішення: torch_dtype=torch.bfloat16 + enable_model_cpu_offload() з diffusers, або квантизація через bitsandbytes в NF4 — падіння якості мінімальне, споживання пам'яті знижується до 12–14 GB.

ControlNet і IP-Adapter — ключові інструменти для production-задач, де потрібна керованість. ControlNet з Canny/Depth/Pose картою дає структурний контроль. IP-Adapter (особливо IP-Adapter-FaceID) дозволяє переносити identity персонажа на генерації — це основа для персоналізованого контенту.

Кейс: e-commerce фото-зйомка. Рітейлер з 8000 SKU потребував lifestyle-фото для кожного продукту. Пайплайн: сегментація продукту (Segment Anything Model 2) → видалення фону → inpainting FLUX.1 [dev] з product image як IP-Adapter reference → upscale через RealESRGAN_x4plus. Вартість генерації на орендованих A100 значно нижча порівняно з професійною зйомкою, економія багатократна. Throughput — 200 зображень/год на 2× A100. Багаторічний досвід 30+ проектів гарантує, що ми оберемо оптимальну модель під ваше завдання — оцінку можна отримати на старті.

Чому вибір моделі — лише половина успіху?

Fine-tuning під конкретний стиль або персонаж

Dreambooth і LoRA — стандарт для адаптації під конкретний візуальний стиль або об'єкт. LoRA навчається за 2–4 години на 20–30 референсних зображеннях на одному A100. Rank 16–32 зазвичай достатньо для стилю, rank 64+ потрібен для точного відтворення облич.

Часта помилка: навчати LoRA занадто довго — модель перенавчається на референси, втрачає здатність до варіативності. Ознака: на cfg_scale=7 всі зображення схожі на copy-paste референсу. Лікується ранньою зупинкою (зазвичай 1500–2000 кроків для 20 зображень) та prior_preservation_loss.

Для більш глибокої кастомізації — full fine-tuning через diffusers + accelerate з FSDP на декількох GPU. Але це вже 40–80 годин навчання і потрібен дійсно великий датасет (1000+ зображень).

Порівняння підходів до генерації зображень

Модель Швидкість (1024×1024, A100) Якість (CLIP score) Керованість (ControlNet, IP-Adapter) VRAM (fp16)
Stable Diffusion 3.5 2.0–3.5 с 0.28–0.31 через ControlNet (дозволено) 16–20 GB
FLUX.1 [schnell] 0.8–1.2 с 0.30–0.33 обмежена (без ControlNet) 12–14 GB (4‑кроковий)
FLUX.1 [dev] 3–5 с (50 кроків) 0.32–0.34 через IP-Adapter, ControlNet (адаптер) 24+ GB
Midjourney (API) 5–10 с (черга) 0.31–0.33 промпт + style reference не потрібно

Які моделі кращі для генерації відео?

Модель Доступність Довжина Роздільна здатність Керованість
Sora (OpenAI) API (обмежений) до 60 с 1080p промпт, image-to-video
Wan2.1 (Alibaba) open weights до 81 кадр 720p промпт, I2V, V2V
CogVideoX-5B open weights 6 с 720p промпт, I2V
Kling 1.6 API до 30 с 1080p промпт, I2V
Mochi-1 open weights 5.4 с 480p промпт

Open-weight відеомоделі поки відстають від комерційних за стабільністю та довжиною. Wan2.1 — найкращий вибір для self-hosted: 14B параметрів, працює на 2× A100, дає прийнятну якість для коротких кліпів.

Головний біль відеогенерації — temporal consistency: персонаж змінює колір одягу на третій секунді, об'єкт «пливе». Часткове рішення — генерація з motion_bucket_id і noise_aug_strength в Stable Video Diffusion, або використання I2V (image-to-video) замість чистого text-to-video. Як зазначається в дослідженні VideoPoet, consistency досягається за рахунок навчання на довгих послідовностях.

AnimateDiff залишається робочим інструментом для коротких петель та motion-ефектів поверх SD/FLUX. Не Sora, але деплоїться локально і передбачуваний.

Генерація музики та аудіо

AudioCraft від Meta (MusicGen + AudioGen) — production-готовий стек для музичної генерації. musicgen-large (3.3B) генерує 30 с музики за ~8 с на A100. Керування через текстовий промпт та melody conditioning — можна задати мелодію наспівуванням.

Stable Audio Open від Stability AI — альтернатива з довжиною до 47 с, краща керованість структурою (intro/verse/chorus). Деплой аналогічний: diffusers + FastAPI.

Для voice-over та озвучки — ElevenLabs API або self-hosted XTTS v2 (див. послугу Speech AI). Для sound design та foley — AudioGen.

3D-генерація: практичний стан

3D-генерація все ще не дісталася тієї ж зрілості, що 2D. Але для конкретних задач інструменти вже робочі:

TripoSG та Shap-E — text/image-to-3D. Shap-E від OpenAI генерує прості 3D-меші за секунди, але геометрія грубувата. TripoSG дає більш детальні результати, але потребує постпроцесінгу (ремешинг, UV-розгортка).

Wonder3D та Zero123++ — реконструкція 3D з одного зображення. Працюють через генерацію multi-view (6–8 видів) та подальше 3D-відновлення через NeuS або instant-ngp.

Gaussian Splatting (3DGS) — не генерація, а реконструкція з серії фото/відео. Для товарних карток та нерухомості це вже production: 50–200 фото → 3DGS модель за 15–30 хв на RTX 4090 → інтерактивний 3D-в'ювер в браузері.

Інфраструктура та деплой

Для генеративних моделей критично:

  • Черга задач — Celery + Redis або Ray Serve. Синхронний HTTP для генерації зображень неприйнятний при >5 конкурентних запитах.
  • Кешування — схожі промпти дають схожі результати. Семантичний кеш через ембеддінги (faiss + sentence-transformers) може знизити навантаження на GPU на 20–40%.
  • Моніторинг якості — CLIP score для text-image alignment, FID для оцінки розподілу генерацій. Інтеграція в MLflow або Weights & Biases.
  • Зберігання — згенеровані зображення одразу в S3/MinIO, не на диску сервера інференсу.

Що входить в роботу (deliverables)

Ми беремо проект під ключ — від вибору моделі до деплою та моніторингу. В результат входить:

  • Модель (або API-інтеграція) з бенчмарками продуктивності (latency p99, throughput).
  • Документація пайплайну (prompt engineering guide, model card, версії залежностей).
  • Інтеграція з вашим бекендом (REST/gRPC, черги).
  • Налаштований моніторинг (дашборди, алерти по дрейфу якості).
  • Навчальний воркшоп для команди (2–4 години).
  • Гарантійна підтримка 3 місяці після запуску — в рамках сертифікату якості на нашу роботу.

Історично ми виконали 30+ проектів в генеративному AI — це дає нам право гарантувати результат.

Як будується процес розробки генеративного AI?

  1. Аналітика (1–2 дні): аудит поточної архітектури, уточнення use case, вибір моделей та метрик успіху. Оцінюємо проект безкоштовно.
  2. Proof of Concept (1–3 тижні): швидкий прототип на ваших даних — щоб бачити реальну якість, а не демо з блогу.
  3. Проектування (1–2 тижні): архітектура пайплайну, інфраструктура (GPU-кластер/API), план A/B-тестування.
  4. Реалізація та fine-tuning (4–12 тижнів): розробка, навчання LoRA/full fine-tuning, інтеграція з чергою та кешем.
  5. Тестування (1–2 тижні): навантажувальні тести, валідація метрик, перевірка на edge-case (негативні сценарії).
  6. Деплой та моніторинг (1–2 тижні): розгортання на production, налаштування моніторингу, документування.
Що ми перевіряємо на етапі Proof of Concept
  • Відповідність очікувань та реальної якості генерації (CLIP score, user study).
  • Швидкість інференсу при різних batch_size та типах GPU.
  • Ймовірність токсичних/некоректних генерацій — перевірка safety filters.
  • Можливість масштабування: чи буде модель вивозити пікове навантаження.

Строки орієнтовно

Інтеграція готового API (DALL‑E 3, Midjourney API, Stability API) — 1–2 тижні. Self-hosted пайплайн з fine-tuning — 6–12 тижнів. Повна платформа з UI, чергами та моніторингом — 3–6 місяців. Конкретна вартість розраховується індивідуально після аналізу вашого сценарію.

Зв'яжіться з нами — замовте консультацію, і ми підберемо оптимальну архітектуру для вашого проекту. Отримайте попередню оцінку термінів безкоштовно.