לקוח מביא 15 תמונות של המוצר שלו — דגם נעלי סניקרס חדש. הוא צריך למקם אותן על מוקאפים לפרסום: חוף, הרים, סטודיו. Stable Diffusion בסיסי לא מכיר את האובייקט הזה — התוצאה תלויה ב-seed אקראי. אם ה-seed לא מקובע, כל prompt יניב זווית, צבע ומרקם שונים. DreamBooth פותר את הבעיה: הוא מכוונן את המודל על 5–20 תמונות, תוך שינון מזהה ייחודי לנושא (לדוגמה, sks sneaker). אנו משתמשים בגישה זו עבור אווטארים של מותגים, דמויות וסגנונות אמנותיים. ניסיון עם SDXL, LoRA, ControlNet מבטיח איכות יצירה ללא overfitting. על ידי שילוב של DreamBooth, LoRA ושימור קודם (prior preservation), אנו משיגים התאמה אישית באיכות גבוהה ללא overfitting. לצוות יש ניסיון של 5+ שנים ב-CV ו-NLP, עם השלמת למעלה מ-100 פרויקטי fine-tuning. העלות האופיינית נעה בין $500 ל-$2000 בהתאם למורכבות.
DreamBooth היא שיטה שהוצעה על ידי Google Research לכוונון עדין של מודלי טקסט-לתמונה לנושא ספציפי.
שימור נושא עם DreamBooth
DreamBooth מקשר token נדיר sks למאפיינים החזותיים של האובייקט באמצעות prior preservation loss. זה מונע "סחיפת שפה" — המודל לא שוכח מושגי מחלקה כלליים (לדוגמה, 'סניקרס' באופן כללי). prior preservation loss משתמש בתמונות מחלקה (לדוגמה, 'סניקרס' ללא הנושא) כדי למנוע מהמודל לשכוח איך נראות נעלי סניקרס רגילות. זה מיושם על ידי דגימה אקראית מהמודל המאומן מראש. תוצאה: הנושא מזוהה בכל הקשר.
מבחינה טכנית, התהליך מורכב משני שלבים: הכנת מערך נתונים ואימון משקלי LoRA. LoRA (Low-Rank Adaptation) מקפיא את משקלי ה-SD המקוריים ומוסיף מתאמים (adapters) — זה דורש פי 3 פחות VRAM מאשר fine-tuning מלא (8 GB לעומת 24+ GB). LoRA מהיר עד פי 10 ומשתמש בפי 3 פחות VRAM מאשר fine-tuning מלא.
למה LoRA יעיל יותר מ-Fine-Tuning מלא
| פרמטר | LoRA DreamBooth | Fine-Tuning מלא |
|---|---|---|
| VRAM (SDXL) | 8–12 GB | 24+ GB |
| זמן אימון (500 צעדים) | 15–30 דקות | 2–4 שעות |
| גודל קובץ | ~150 MB | ~6 GB |
| Overfitting | מינימלי | נפוץ |
| שילוב סגנונות | כן (מיזוג LoRA) | לא |
LoRA הוא הסטנדרט היצרני: פריסה מהירה, גודל קטן, קל לשילוב עם LoRA אחרים (לדוגמה, סגנון + נושא). שימוש ב-LoRA מפחית עלויות מחשוב בעד 70%, וחוסך בממוצע כ-$500 לפרויקט. כל יצירה משתמשת ב-30 צעדי inference ו-guidance scale של 7.5 לאיכות אופטימלית.
איך להכין מערך נתונים ל-DreamBooth
הדבר הראשון שמהנדס נתקל בו הוא איכות תמונות המקור. המודל מעתיק זוויות, תאורה ורקע. אם כל הצילומים צולמו באותו סטודיו — DreamBooth ילמד את הסטודיו כחלק מהנושא.
- איסוף תמונות. יש צורך ב-10–20 צילומים מזוויות שונות (קדמי, צד, עליון), תאורה שונה (טבעית, מלאכותית). הנושא צריך לתפוס 50–80% מהפריים. הימנעו מהסתרה כבדה (יד, צל).
- חיתוך ומירכוז. הביאו את כל התמונות לריבוע של 1024x1024. השתמשו בפונקציה מהרשימה למטה.
- הגדלה (Augmentation). כדי לשפר הכללה, הפעילו היפוך אופקי אקראי, סיבוב קל (עד 10°), שינויי בהירות/ניגודיות. עיוותים חזקים שוברים גאומטריה.
- סגמנטציה (אופציונלי). אם הנושא הוא אדם, השתמשו ב-RMBG 2.0 לבידוד.
- שימור קודם (Prior preservation). צרו 100–200 תמונות מחלקה (לדוגמה, 'סניקרס' ללא הנושא) באמצעות המודל הבסיסי. תמונות אלה משמשות ב-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 מורץ באמצעות 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}") . אנו ממליצים על accelerate ו---mixed_precision="fp16" כדי לחסוך בזיכרון. דרגת ה-LoRA (r=64) מאזנת בין התאמה להכללה.
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 — סיכון ל-overfitting |
| קצב למידה | 1e-4 עד 1e-5 | נמוך יותר = יציב יותר, אבל איטי יותר |
| גודל אצווה | 1–2 | מוגבל על ידי VRAM |
| שימור קודם | כן | השתמשו ב-100–200 תמונות מחלקה |
מספר הצעדים האופטימלי תלוי במורכבות הנושא. עבור אובייקטים פשוטים (מוצר על רקע לבן) 300-500 צעדים מספיקים. עבור מורכבים (אדם עם פרטי לבוש) — עד 800-1000. עדיף להתחיל עם קצב למידה של 1e-4 ולהקטין עם לוח זמנים קוסינוס (cosine schedule).
אם לאחר האימון המודל מייצר רק זווית אחת או מתעלם מהרקע — זה סימן ל-overfitting. פתרון: הגדילו את משקל השימור הקודם, הקטינו צעדים, הוסיפו augmentation.
אינטגרציה ופריסה לייצור
לאחר האימון אנו מקבלים משקלי LoRA (בדרך כלל ~150 MB). טוענים אותם לתוך --use_8bit_adam מותאם אישית:
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.
תהליך העבודה שלנו
בהזמנת fine-tuning, אנו מבצעים את השלבים הבאים:
- ניתוח משימה — אנו לומדים את ההפניות שלכם, מגדירים את מחלקת הנושא, בוחרים את המודל הבסיסי (SD 2.1, SDXL, או SD 3).
- הכנת מערך נתונים — אנו עוזרים בניקוי והגדלת תמונות.
- אימון LoRA — אנו בוחרים היפרפרמטרים, מריצים אימון, בודקים overfitting.
- בדיקות — אנו מייצרים 50+ וריאנטים בהקשרים שונים, בוחרים את ה-checkpoint הטוב ביותר.
- פריסה — אנו פורסים את המודל לתשתית ענן (SageMaker, Vertex AI) או מספקים קבצים לשימוש מקומי.
- תיעוד ותמיכה — אנו מספקים תיעוד API, דוגמאות inference וחודש תמיכה.
ציר זמן: מיומיים עבור אובייקטים פשוטים עד 3 שבועות עבור דמות עם אנימציה (LoRA רציף). העלות מחושבת באופן אישי לאחר הערכה.
טעויות נפוצות ואיך להימנע מהן
- Overfitting — המודל מייצר רק זווית אחת. פתרון: הקטינו צעדים, הגדילו שימור קודם, הוסיפו augmentation.
- Token שגוי — שימוש במילה נפוצה (לדוגמה,
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") מוביל לערבוב עם נושאים אחרים. בחרו token נדיר כמוStableDiffusionXLPipeline. - מערך נתונים קטן — פחות מ-5 תמונות לא יאפשר למודל ללמוד את האובייקט. מינימום 10.
- רקע גרוע — אם הרקע לא מגוון, המודל מקשר את הנושא לסביבה אחת. השתמשו בצילומים עם רקעים שונים.
מה כלול
- מערך נתונים מוכן ומוגדל (עד 20 תמונות)
- מודל LoRA מאומן (קובץ ~150 MB)
- Checkpoint עם האיכות הטובה ביותר (נבחר מתוך 50+ יצירות)
- תיעוד API ודוגמת inference ב-Python
- פריסת ענן (SageMaker/Vertex AI) לפי בקשה
- חודש תמיכה טכנית
צרו קשר לייעוץ על הפרויקט שלכם. קבלו הערכת זמנים ועלות — כתבו לנו, ונכין הצעה תוך יום.
הזמינו fine-tuning של מודל כדי לקבל נושא מזוהה באופן עקבי בכל הקשר.
כוונון עדין של Stable Diffusion DreamBooth עם LoRA מספק התאמה אישית באיכות גבוהה. לתוצאות מיטביות, השתמשו ב-10-20 תמונות מגוונות ו-token נדיר כמו sks. גישה זו מבטיחה שימור הנושא על פני הקשרים ללא overfitting.







