Diffusers documentation
DreamBooth
DreamBooth
DreamBooth هي تقنية تدريب تحدّث نموذج الانتشار بالكامل من خلال التدريب على عدد قليل من الصور لموضوع أو أسلوب معين. تعمل عن طريق ربط كلمة خاصة في الأمر النصي بالصور النموذجية.
لتحميل نقطة تحقق مدربة للاستدلال، راجع تحميل نموذج DreamBooth للاستدلال.
إذا كنت تدرب على وحدة معالجة رسومية ذات ذاكرة vRAM محدودة، فيجب عليك محاولة تفعيل المعاملين gradient_checkpointing وmixed_precision في أمر التدريب. كما يمكنك تقليل بصمتك الذاكرة باستخدام الانتباه الموفر للذاكرة مع xFormers.
ستستكشف هذه الدليل سكربت train_dreambooth.py لمساعدتك على الاطلاع عليه بشكل أعمق، وكيفية تكييفه ليناسب حالتك الخاصة.
قبل تشغيل السكربت، تأكد من تثبيت المكتبة من المصدر:
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .انتقل إلى مجلد المثال الذي يحتوي على سكربت التدريب وقم بتثبيت التبعيات المطلوبة للسكربت الذي تستخدمه:
cd examples/dreambooth
pip install -r requirements.txt🤗 Accelerate هي مكتبة تساعدك على التدريب على عدة وحدات معالجة رسومية (GPU) أو وحدات معالجة مخصصة (TPU) أو باستخدام دقة مختلطة. ستقوم تلقائيًا بإعداد بيئة التدريب الخاصة بك بناءً على عتادك وبيئتك. اطّلع على جولة سريعة في 🤗 Accelerate لمعرفة المزيد.
قم بتهيئة بيئة 🤗 Accelerate:
accelerate config
لإعداد بيئة 🤗 Accelerate افتراضية دون اختيار أي تكوينات:
accelerate config default
أو إذا لم يدعم بيئتك shell تفاعليًا، كما هو الحال في notebook، يمكنك استخدام:
from accelerate.utils import write_basic_config
write_basic_config()أخيرًا، إذا كنت ترغب في تدريب نموذج على مجموعة بياناتك الخاصة، فاطّلع على دليل إنشاء مجموعة بيانات للتدريب لمعرفة كيفية إنشاء مجموعة بيانات تعمل مع سكربت التدريب.
تسلّط الأقسام التالية الضوء على أجزاء من سكربت التدريب التي تُعدّ مهمة لفهم كيفية تعديله، لكنها لا تغطي كل جانب من جوانب السكربت بالتفصيل. إذا كنت مهتمًا بالتعلّم أكثر، فلا تتردد في الاطلاع على السكربت وإعلامنا بأي أسئلة أو مخاوف لديك.
معاملات السكربت
تُعد DreamBooth حساسة للغاية لمعاملات التدريب الفائقة، ومن السهل حدوث الإفراط في التخصيص (overfitting). اقرأ منشور المدونة تدريب Stable Diffusion باستخدام Dreambooth مع 🧨 Diffusers للاطلاع على الإعدادات الموصى بها لمواضيع مختلفة لمساعدتك في اختيار المعاملات الفائقة المناسبة.
يوفر سكربت التدريب العديد من المعلمات لتخصيص عملية التدريب الخاصة بك. يمكنك العثور على جميع المعلمات ووصفها في الدالة parse_args(). يتم تعيين المعلمات بقيم افتراضية تعمل بشكل جيد بشكل عام دون أي إعدادات إضافية، لكن يمكنك أيضًا تعيين قيمك الخاصة في أمر التدريب إذا رغبت في ذلك.
على سبيل المثال، للتدريب في صيغة bf16:
accelerate launch train_dreambooth.py \
--mixed_precision="bf16"بعض المعلمات الأساسية والمهمة التي يجب معرفتها وتحديد
--pretrained_model_name_or_path: اسم النموذج على Hub أو مسار محلي إلى النموذج المُدرَّب مسبقًا--instance_data_dir: مسار إلى مجلد يحتوي على مجموعة بيانات التدريب (صور أمثلة)--instance_prompt: النص التوجيهي الذي يحتوي على الكلمة الخاصة للصور الممثّلة--train_text_encoder: ما إذا كان سيتم تدريب مُشفِّر النص أيضًا--output_dir: مكان حفظ النموذج المُدرَّب--push_to_hub: ما إذا كان سيتم دفع النموذج المُدرَّب إلى Hub--checkpointing_steps: تكرار حفظ نقطة تفتيش أثناء تدريب النموذج؛ وهذا مفيد إذا ما انقطع التدريب لسبب ما، إذ يمكنك مواصلة التدريب من تلك النقطة بإضافة--resume_from_checkpointإلى أمر التدريب الخاص بك
وزن Min-SNR
يمكن لاستراتيجية وزن Min-SNR أن تساعد في التدريب من خلال إعادة موازنة الدالة الخاسرة لتحقيق تقارب أسرع. يدعم سكربت التدريب التنبؤ بـ epsilon (الضوضاء) أو v_prediction، لكن Min-SNR متوافق مع كلا نوعي التنبؤ. هذه الاستراتيجية المدعومة فقط بواسطة PyTorch.
أضف معامل --snr_gamma واضبطه على القيمة الموصى بها وهي 5.0:
accelerate launch train_dreambooth.py \ --snr_gamma=5.0
خسارة الحفاظ على المسبق
خسارة الحفاظ على المسبق هي طريقة تستخدم العينات التي يولدها النموذج نفسه لمساعدته على تعلّم كيفية توليد صور أكثر تنوعًا. وبما أن صور العينات المولّدة تنتمي إلى نفس الفئة التي تنتمي إليها الصور التي قدمتها، فإنها تساعد النموذج على الاحتفاظ بما تعلّمه عن الفئة وكيفية استخدام ما يعرفه مسبقًا عنها لإنشاء تركيبات جديدة.
--with_prior_preservation: ما إذا كان سيتم استخدام خسارة الحفاظ على المسبق--prior_loss_weight: يتحكم في تأثير خسارة الحفاظ على المسبق على النموذج--class_data_dir: المسار إلى مجلد يحتوي على صور عينات الفئات المولّدة--class_prompt: النص الوصفي الذي يحدد فئة الصور المولّدة
accelerate launch train_dreambooth.py \
--with_prior_preservation \
--prior_loss_weight=1.0 \
--class_data_dir="path/to/class/images" \
--class_prompt="text prompt describing class"تدريب مُشفِّر النص
لتحسين جودة المخرجات المولّدة، يمكنك أيضًا تدريب مُشفّر النص بالإضافة إلى UNet. يتطلب ذلك ذاكرة إضافية وستحتاج إلى وحدة معالجة رسومية (GPU) بذاكرة vRAM تبلغ 24 جيجابايت على الأقل. إذا كان لديك العتاد اللازم، فإن تدريب مُشفّر النص يُنتج نتائج أفضل، خاصةً عند توليد صور للوجوه. فعّل هذا الخيار من خلال:
accelerate launch train_dreambooth.py \ --train_text_encoder
سكربت التدريب
يأتي DreamBooth مع فئات مجموعات بيانات خاصة به:
DreamBoothDataset: يعالج الصور وصور الفئة مسبقًا، ويقوم بتجزئة الأوامر النصية للتدريبPromptDataset: يولّد تمثيلات المحفّزات (prompt embeddings) لتوليد صور الفئات
إذا قمت بتفعيل prior preservation loss، يتم توليد صور الفئات هنا:
sample_dataset = PromptDataset(args.class_prompt, num_new_images)
sample_dataloader = torch.utils.data.DataLoader(sample_dataset, batch_size=args.sample_batch_size)
sample_dataloader = accelerator.prepare(sample_dataloader)
pipeline.to(accelerator.device)
for example in tqdm(
sample_dataloader, desc="Generating class images", disable=not accelerator.is_local_main_process
):
images = pipeline(example["prompt"]).imagesالتالي هو الدالة main() التي تتولى إعداد مجموعة البيانات للتدريب وحلقة التدريب نفسها. يقوم السكربت بتحميل tokenizer، المجدول والنماذج:
# Load the tokenizer
if args.tokenizer_name:
tokenizer = AutoTokenizer.from_pretrained(args.tokenizer_name, revision=args.revision, use_fast=False)
elif args.pretrained_model_name_or_path:
tokenizer = AutoTokenizer.from_pretrained(
args.pretrained_model_name_or_path,
subfolder="tokenizer",
revision=args.revision,
use_fast=False,
)
# Load scheduler and models
noise_scheduler = DDPMScheduler.from_pretrained(args.pretrained_model_name_or_path, subfolder="scheduler")
text_encoder = text_encoder_cls.from_pretrained(
args.pretrained_model_name_or_path, subfolder="text_encoder", revision=args.revision
)
if model_has_vae(args):
vae = AutoencoderKL.from_pretrained(
args.pretrained_model_name_or_path, subfolder="vae", revision=args.revision
)
else:
vae = None
unet = UNet2DConditionModel.from_pretrained(
args.pretrained_model_name_or_path, subfolder="unet", revision=args.revision
)ثم، حان الوقت لـ إنشاء مجموعة بيانات التدريب و DataLoader من DreamBoothDataset:
train_dataset = DreamBoothDataset(
instance_data_root=args.instance_data_dir,
instance_prompt=args.instance_prompt,
class_data_root=args.class_data_dir if args.with_prior_preservation else None,
class_prompt=args.class_prompt,
class_num=args.num_class_images,
tokenizer=tokenizer,
size=args.resolution,
center_crop=args.center_crop,
encoder_hidden_states=pre_computed_encoder_hidden_states,
class_prompt_encoder_hidden_states=pre_computed_class_prompt_encoder_hidden_states,
tokenizer_max_length=args.tokenizer_max_length,
)
train_dataloader = torch.utils.data.DataLoader(
train_dataset,
batch_size=args.train_batch_size,
shuffle=True,
collate_fn=lambda examples: collate_fn(examples, args.with_prior_preservation),
num_workers=args.dataloader_num_workers,
)أخيرًا، يتولى حلقة التدريب باقي الخطوات مثل تحويل الصور إلى الفضاء الكامن، وإضافة الضوضاء إلى المدخلات، والتنبؤ بباقي الضوضاء، وحساب الخسارة.
إذا كنت ترغب في معرفة المزيد حول كيفية عمل حلقة التدريب، فتوجه إلى شروحات فهم خطوط الأنابيب والنماذج والمجدولين التي تفصّل النمط الأساسي لعملية إزالة الضوضاء.
تشغيل السكربت
أنت الآن مستعد لإطلاق سكربت التدريب! 🚀
في هذا الدليل، ستقوم بتنزيل بعض الصور لـ كلب وتخزينها في مجلد. لكن تذكّر أنه يمكنك إنشاء مجموعة بيانات خاصة بك واستخدامها إذا أردت (انظر دليل إنشاء مجموعة بيانات للتدريب).
from huggingface_hub import snapshot_download
local_dir = "./dog"
snapshot_download(
"diffusers/dog-example",
local_dir=local_dir,
repo_type="dataset",
ignore_patterns=".gitattributes",
)اضبط متغير البيئة MODEL_NAME على معرّف نموذج في Hub أو مسار لنموذج محلي، وINSTANCE_DIR على المسار الذي حمّلت إليه صور الكلاب للتو، وOUTPUT_DIR على المكان الذي تريد حفظ النموذج فيه. ستستخدم sks ككلمة خاصة لربط التدريب بها.
إذا كنت مهتمًا بمتابعة عملية التدريب، يمكنك حفظ الصور المولّدة بشكل دوري أثناء تقدم التدريب. أضف المعاملات التالية إلى أمر التدريب:
--validation_prompt="a photo of a sks dog"
--num_validation_images=4
--validation_steps=100شيء آخر قبل أن تبدأ تشغيل السكربت! اعتمادًا على وحدة معالجة الرسوميات (GPU) التي تمتلكها، قد تحتاج إلى تفعيل بعض التحسينات لتدريب DreamBooth.
على بطاقة رسومية بسعة 16GB، يمكنك استخدام مُحسِّن bitsandbytes بدقة 8 بت وتقنية gradient checkpointing لمساعدتك في تدريب نموذج DreamBooth. قم بتثبيت bitsandbytes:
pip install bitsandbytes
ثم، أضف المعامل التالي إلى أمر التدريب الخاص بك:
accelerate launch train_dreambooth.py \ --gradient_checkpointing \ --use_8bit_adam \
على بطاقة رسومات بسعة 12 جيجابايت، ستحتاج إلى مُحسِّن bitsandbytes بدقة 8 بت، ونقطة تفتيش التدرجات، وxFormers، وإعداد التدرجات إلى None بدلاً من الصفر لتقليل استهلاك الذاكرة.
accelerate launch train_dreambooth.py \ --use_8bit_adam \ --gradient_checkpointing \ --enable_xformers_memory_efficient_attention \ --set_grads_to_none \
على بطاقة GPU بسعة 8GB، ستحتاج إلى DeepSpeed لنقل بعض المتجهات من الذاكرة vRAM إلى وحدة المعالجة المركزية CPU أو وحدة التخزين NVME، مما يتيح التدريب باستخدام ذاكرة GPU أقل.
نفّذ الأمر التالي لتكوين بيئة 🤗 Accelerate الخاصة بك:
accelerate config
أثناء التهيئة، تأكد من أنك تريد استخدام DeepSpeed. الآن يجب أن يصبح التدريب ممكناً باستخدام أقل من 8GB من ذاكرة vRAM من خلال الجمع بين DeepSpeed stage 2، والدقة المختلطة fp16، ونقل معاملات النموذج وحالة المُحسِّن إلى المعالج المركزي. العيب هو أن هذا يتطلب ذاكرة نظام أكبر (حوالي 25 GB). راجع توثيق DeepSpeed لمعرفة المزيد من خيارات التهيئة.
يجب أيضاً تغيير مُحسِّن Adam الافتراضي إلى النسخة المُحسَّنة من Adam الخاصة بـ DeepSpeed deepspeed.ops.adam.DeepSpeedCPUAdam لتحقيق تسريع كبير. يتطلب تفعيل DeepSpeedCPUAdam أن تكون إصدار سلسلة أدوات CUDA في نظامك مطابقاً للإصدار المثبت مع PyTorch.
يبدو أن مُحسّنات bitsandbytes ذات 8 بت غير متوافقة مع DeepSpeed في الوقت الحالي.
هذا كل شيء! لا تحتاج إلى إضافة أي معاملات إضافية إلى أمر التدريب الخاص بك.
export MODEL_NAME="stable-diffusion-v1-5/stable-diffusion-v1-5"
export INSTANCE_DIR="./dog"
export OUTPUT_DIR="path_to_saved_model"
accelerate launch train_dreambooth.py \
--pretrained_model_name_or_path=$MODEL_NAME \
--instance_data_dir=$INSTANCE_DIR \
--output_dir=$OUTPUT_DIR \
--instance_prompt="a photo of sks dog" \
--resolution=512 \
--train_batch_size=1 \
--gradient_accumulation_steps=1 \
--learning_rate=5e-6 \
--lr_scheduler="constant" \
--lr_warmup_steps=0 \
--max_train_steps=400 \
--push_to_hubبمجرد اكتمال التدريب، يمكنك استخدام النموذج الذي درّبته للتو للاستدلال!
هل لا تستطيع الانتظار لتجربة نموذجك للاستدلال قبل اكتمال التدريب؟ 🤭 تأكد من تثبيت أحدث إصدار من 🤗 Accelerate.
from diffusers import DiffusionPipeline, UNet2DConditionModel from transformers import CLIPTextModel import torch unet = UNet2DConditionModel.from_pretrained("path/to/model/checkpoint-100/unet") # if you have trained with `--args.train_text_encoder` make sure to also load the text encoder text_encoder = CLIPTextModel.from_pretrained("path/to/model/checkpoint-100/checkpoint-100/text_encoder") pipeline = DiffusionPipeline.from_pretrained( "stable-diffusion-v1-5/stable-diffusion-v1-5", unet=unet, text_encoder=text_encoder, dtype=torch.float16, ).to("cuda") image = pipeline("A photo of sks dog in a bucket", num_inference_steps=50, guidance_scale=7.5).images[0] image.save("dog-bucket.png")
from diffusers import DiffusionPipeline
import torch
pipeline = DiffusionPipeline.from_pretrained("path_to_saved_model", dtype=torch.float16, use_safetensors=True).to("cuda") # or "mps", "xpu", "cpu"
image = pipeline("A photo of sks dog in a bucket", num_inference_steps=50, guidance_scale=7.5).images[0]
image.save("dog-bucket.png")LoRA
تُعد LoRA تقنية تدريب تُقلّل بشكل كبير من عدد المعاملات القابلة للتدريب. ونتيجةً لذلك، يصبح التدريب أسرع، ويصبح تخزين الأوزان الناتجة أسهل لأنها أصغر بكثير (حوالي 100 ميغابايت). استخدم سكربت train_dreambooth_lora.py للتدريب باستخدام LoRA.
يتم مناقشة سكربت تدريب LoRA بتفصيل أكبر في دليل تدريب LoRA.
Stable Diffusion XL
يعتبر Stable Diffusion XL (SDXL) نموذجًا قويًا لتحويل النص إلى صور، حيث يولّد صورًا عالية الدقة، كما يضيف مشفّرًا نصيًا ثانيًا إلى بنيته. استخدم سكربت train_dreambooth_lora_sdxl.py لتدريب نموذج SDXL باستخدام LoRA.
يتم مناقشة سكربت تدريب SDXL بتفصيل أكبر في دليل تدريب SDXL.
DeepFloyd IF
DeepFloyd IF هو نموذج انتشار بكسل متسلسل يتكون من ثلاث مراحل. تولّد المرحلة الأولى صورة أساسية، بينما تقوم المرحلتان الثانية والثالثة بزيادة دقة الصورة الأساسية تدريجياً لتحويلها إلى صورة عالية الدقة بمقاس 1024x1024. استخدم سكربت train_dreambooth_lora.py أو train_dreambooth.py لتدريب نموذج DeepFloyd IF باستخدام LoRA أو النموذج الكامل.
يستخدم DeepFloyd IF التباين المتوقع، لكن سكربتات التدريب في Diffusers تستخدم الخطأ المتوقع، لذا يتم تبديل النماذج المدرَّبة من DeepFloyd IF إلى جدول تباين ثابت. سيقوم سكربتات التدريب بتحديث إعدادات المجدول (scheduler) للنموذج المدرَّب بالكامل نيابةً عنك. ومع ذلك، عند تحميل أوزان LoRA المحفوظة، يجب عليك أيضًا تحديث إعدادات المجدول (scheduler) في خط الأنابيب (pipeline).
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", use_safetensors=True)
pipe.load_lora_weights("<lora weights path>")
# Update scheduler config to fixed variance schedule
pipe.scheduler = pipe.scheduler.__class__.from_config(pipe.scheduler.config, variance_type="fixed_small")يتطلب النموذج في المرحلة 2 صور تحقق إضافية لرفع الدقة. يمكنك تنزيل نسخة مصغّرة من صور التدريب واستخدامها لهذا الغرض.
from huggingface_hub import snapshot_download
local_dir = "./dog_downsized"
snapshot_download(
"diffusers/dog-example-downsized",
local_dir=local_dir,
repo_type="dataset",
ignore_patterns=".gitattributes",
)توفر أمثلة الأكواد أدناه نظرة عامة موجزة حول كيفية تدريب نموذج DeepFloyd IF باستخدام مزيج من DreamBooth وLoRA. بعض المعلمات المهمة التي يجب ملاحظتها هي:
--resolution=64، حيث يتطلب الأمر دقة أصغر بكثير لأن DeepFloyd IF هو نموذج انتشار بكسل، وللتعامل مع البكسلات غير المضغوطة، يجب أن تكون الصور المدخلة أصغر--pre_compute_text_embeddings، لحساب تمثيلات النص مسبقًا لتوفير الذاكرة، لأن T5Model قد يستهلك مساحة ذاكرة كبيرة--tokenizer_max_length=77، يمكنك استخدام طول نص افتراضي أطول مع T5 كمشفّر للنص، لكن إجراء ترميز النموذج الافتراضي يستخدم طول نص أقصر--text_encoder_use_attention_mask، لتحويل قناع الانتباه إلى مُشفّر النص
يتطلب تدريب المرحلة 1 من DeepFloyd IF باستخدام LoRA وDreamBooth حوالي 28 جيجابايت من الذاكرة.
export MODEL_NAME="DeepFloyd/IF-I-XL-v1.0"
export INSTANCE_DIR="dog"
export OUTPUT_DIR="dreambooth_dog_lora"
accelerate launch train_dreambooth_lora.py \
--report_to wandb \
--pretrained_model_name_or_path=$MODEL_NAME \
--instance_data_dir=$INSTANCE_DIR \
--output_dir=$OUTPUT_DIR \
--instance_prompt="a sks dog" \
--resolution=64 \
--train_batch_size=4 \
--gradient_accumulation_steps=1 \
--learning_rate=5e-6 \
--scale_lr \
--max_train_steps=1200 \
--validation_prompt="a sks dog" \
--validation_epochs=25 \
--checkpointing_steps=100 \
--pre_compute_text_embeddings \
--tokenizer_max_length=77 \
--text_encoder_use_attention_maskفي المرحلة 2 من DeepFloyd IF مع LoRA وDreamBooth، انتبه إلى هذه المعلمات:
--validation_images، الصور التي سيتم تحسين دقتها أثناء التحقق--class_labels_conditioning=timesteps، لتكييف UNet بشكل إضافي كما هو مطلوب في المرحلة 2--learning_rate=1e-6، حيث يُستخدم معدل تعلم أقل مقارنةً بالمرحلة 1--resolution=256، الدقة المتوقعة لمُحسّن الدقة
export MODEL_NAME="DeepFloyd/IF-II-L-v1.0"
export INSTANCE_DIR="dog"
export OUTPUT_DIR="dreambooth_dog_upscale"
export VALIDATION_IMAGES="dog_downsized/image_1.png dog_downsized/image_2.png dog_downsized/image_3.png dog_downsized/image_4.png"
python train_dreambooth_lora.py \
--report_to wandb \
--pretrained_model_name_or_path=$MODEL_NAME \
--instance_data_dir=$INSTANCE_DIR \
--output_dir=$OUTPUT_DIR \
--instance_prompt="a sks dog" \
--resolution=256 \
--train_batch_size=4 \
--gradient_accumulation_steps=1 \
--learning_rate=1e-6 \
--max_train_steps=2000 \
--validation_prompt="a sks dog" \
--validation_epochs=100 \
--checkpointing_steps=500 \
--pre_compute_text_embeddings \
--tokenizer_max_length=77 \
--text_encoder_use_attention_mask \
--validation_images $VALIDATION_IMAGES \
--class_labels_conditioning=timestepsفي المرحلة 1 من DeepFloyd IF مع DreamBooth، انتبه إلى هذه المعلمات:
--skip_save_text_encoder، لتخطي حفظ مُشفّر النص T5 الكامل مع النموذج المُحسَّن--use_8bit_adam، لاستخدام مُحسِّن Adam ذي 8 بت لتوفير الذاكرة بسبب حجم حالة المُحسِّن عند تدريب النموذج الكامل--learning_rate=1e-7، يجب استخدام معدل تعلم منخفض جدًا لتدريب النموذج بالكامل، وإلا فإن جودة النموذج تتدهور (يمكنك استخدام معدل تعلم أعلى مع حجم دفعة أكبر)
عند التدريب باستخدام 8-bit Adam وحجم دفعة (batch size) قدره 4، يمكن تدريب النموذج الكامل بذاكرة تبلغ حوالي 48 جيجابايت.
export MODEL_NAME="DeepFloyd/IF-I-XL-v1.0"
export INSTANCE_DIR="dog"
export OUTPUT_DIR="dreambooth_if"
accelerate launch train_dreambooth.py \
--pretrained_model_name_or_path=$MODEL_NAME \
--instance_data_dir=$INSTANCE_DIR \
--output_dir=$OUTPUT_DIR \
--instance_prompt="a photo of sks dog" \
--resolution=64 \
--train_batch_size=4 \
--gradient_accumulation_steps=1 \
--learning_rate=1e-7 \
--max_train_steps=150 \
--validation_prompt "a photo of sks dog" \
--validation_steps 25 \
--text_encoder_use_attention_mask \
--tokenizer_max_length 77 \
--pre_compute_text_embeddings \
--use_8bit_adam \
--set_grads_to_none \
--skip_save_text_encoder \
--push_to_hubفي المرحلة 2 من DeepFloyd IF مع DreamBooth، انتبه إلى هذه المعلمات:
--learning_rate=5e-6، استخدم معدل تعلم أقل مع حجم دفعة فعّال أصغر--resolution=256، الدقة المتوقعة لمُحسّن الدقة--train_batch_size=2و--gradient_accumulation_steps=6، حيث يتطلب التدريب الفعلي على صور تحتوي على وجوه أحجام دفع أكبر
export MODEL_NAME="DeepFloyd/IF-II-L-v1.0"
export INSTANCE_DIR="dog"
export OUTPUT_DIR="dreambooth_dog_upscale"
export VALIDATION_IMAGES="dog_downsized/image_1.png dog_downsized/image_2.png dog_downsized/image_3.png dog_downsized/image_4.png"
accelerate launch train_dreambooth.py \
--report_to wandb \
--pretrained_model_name_or_path=$MODEL_NAME \
--instance_data_dir=$INSTANCE_DIR \
--output_dir=$OUTPUT_DIR \
--instance_prompt="a sks dog" \
--resolution=256 \
--train_batch_size=2 \
--gradient_accumulation_steps=6 \
--learning_rate=5e-6 \
--max_train_steps=2000 \
--validation_prompt="a sks dog" \
--validation_steps=150 \
--checkpointing_steps=500 \
--pre_compute_text_embeddings \
--tokenizer_max_length=77 \
--text_encoder_use_attention_mask \
--validation_images $VALIDATION_IMAGES \
--class_labels_conditioning timesteps \
--push_to_hubنصائح التدريب
قد يكون تدريب نموذج DeepFloyd IF صعبًا، لكن إليك بعض النصائح التي وجدناها مفيدة:
- يكفي استخدام LoRA لتدريب نموذج المرحلة 1، لأن دقة النموذج المنخفضة تجعل تمثيل التفاصيل الدقيقة صعبًا على أي حال.
- بالنسبة إلى الكائنات الشائعة أو البسيطة، لا يكون ضبط المُكبِّر (upscaler) ضروريًا بالضرورة. تأكد من تعديل الوصف (prompt) المُمرَّر إلى المُكبِّر لإزالة الرمز الجديد (token) من وصف الكائن (instance prompt). على سبيل المثال، إذا كان وصف المرحلة 1 هو “a sks dog” فيجب أن يكون وصف المرحلة 2 هو “a dog”.
- لتفاصيل أدق مثل الوجوه، يكون تدريب مُكبِّر المرحلة 2 بالكامل أفضل من تدريب نموذج المرحلة 2 باستخدام LoRA. كما يساعد استخدام معدلات تعلم أدنى مع أحجام دفع أكبر.
- يجب استخدام معدلات تعلم أدنى لتدريب نموذج المرحلة 2.
- يعمل DDPMScheduler بشكل أفضل من DPMSolver المستخدم في سكربتات التدريب.
الخطوات التالية
تهانينا على تدريب نموذج DreamBooth الخاص بك! لمعرفة المزيد حول كيفية استخدام نموذجك الجديد، قد يكون الدليل التالي مفيدًا:
- تعلّم كيفية تحميل نقطة تحقق DreamBooth للاستدلال.
- إذا قمت بالتدريب باستخدام LoRA، راجع LoRA للاستدلال.