Buckets:

mishig's picture
|
download
raw
31.2 kB
# DreamBooth
[DreamBooth](https://huggingface.co/papers/2208.12242) هي تقنية تدريب تحدّث نموذج الانتشار بالكامل من خلال التدريب على عدد قليل من الصور لموضوع أو أسلوب معين. تعمل عن طريق ربط كلمة خاصة في الأمر النصي بالصور النموذجية.
لتحميل نقطة تحقق مدربة للاستدلال، راجع [تحميل نموذج DreamBooth للاستدلال](../using-diffusers/dreambooth).
إذا كنت تدرب على وحدة معالجة رسومية ذات ذاكرة vRAM محدودة، فيجب عليك محاولة تفعيل المعاملين `gradient_checkpointing` و`mixed_precision` في أمر التدريب. كما يمكنك تقليل بصمتك الذاكرة باستخدام الانتباه الموفر للذاكرة مع [xFormers](../optimization/attention_backends).
ستستكشف هذه الدليل سكربت [train_dreambooth.py](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth.py) لمساعدتك على الاطلاع عليه بشكل أعمق، وكيفية تكييفه ليناسب حالتك الخاصة.
قبل تشغيل السكربت، تأكد من تثبيت المكتبة من المصدر:
```bash
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .
```
انتقل إلى مجلد المثال الذي يحتوي على سكربت التدريب وقم بتثبيت التبعيات المطلوبة للسكربت الذي تستخدمه:
```bash
cd examples/dreambooth
pip install -r requirements.txt
```
> [!TIP]
> 🤗 Accelerate هي مكتبة تساعدك على التدريب على عدة وحدات معالجة رسومية (GPU) أو وحدات معالجة مخصصة (TPU) أو باستخدام دقة مختلطة. ستقوم تلقائيًا بإعداد بيئة التدريب الخاصة بك بناءً على عتادك وبيئتك. اطّلع على [الجولة السريعة](https://huggingface.co/docs/accelerate/quicktour) في 🤗 Accelerate لمعرفة المزيد.
قم بتهيئة بيئة 🤗 Accelerate:
```bash
accelerate config
```
لإعداد بيئة 🤗 Accelerate افتراضية دون اختيار أي تكوينات:
```bash
accelerate config default
```
أو إذا لم يدعم بيئتك shell تفاعليًا، كما هو الحال في notebook، يمكنك استخدام:
```py
from accelerate.utils import write_basic_config
write_basic_config()
```
أخيرًا، إذا كنت ترغب في تدريب نموذج على مجموعة بياناتك الخاصة، فاطّلع على دليل [إنشاء مجموعة بيانات للتدريب](create_dataset) لمعرفة كيفية إنشاء مجموعة بيانات تعمل مع سكربت التدريب.
> [!TIP]
> تسلّط الأقسام التالية الضوء على أجزاء من سكربت التدريب التي تُعدّ مهمة لفهم كيفية تعديله، لكنها لا تغطي كل جانب من جوانب السكربت بالتفصيل. إذا كنت مهتمًا بالتعلّم أكثر، فلا تتردد في قراءة [السكربت](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth.py) وإعلامنا بأي أسئلة أو مخاوف لديك.
## معاملات السكربت
> [!WARNING]
> تُعد DreamBooth حساسة للغاية لمعاملات التدريب الفائقة، ومن السهل حدوث الإفراط في التخصيص (overfitting). اقرأ منشور المدونة [تدريب Stable Diffusion باستخدام Dreambooth مع 🧨 Diffusers](https://huggingface.co/blog/dreambooth) للاطلاع على الإعدادات الموصى بها لمواضيع مختلفة لمساعدتك في اختيار المعاملات الفائقة المناسبة.
يوفر سكربت التدريب العديد من المعلمات لتخصيص عملية التدريب الخاصة بك. يمكنك العثور على جميع المعلمات ووصفها في الدالة [`parse_args()`](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L228). يتم تعيين المعلمات بقيم افتراضية تعمل بشكل جيد بشكل عام دون أي إعدادات إضافية، لكن يمكنك أيضًا تعيين قيمك الخاصة في أمر التدريب إذا رغبت في ذلك.
على سبيل المثال، للتدريب في صيغة bf16:
```bash
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](https://huggingface.co/papers/2303.09556) أن تساعد في التدريب من خلال إعادة موازنة الدالة الخاسرة لتحقيق تقارب أسرع. يدعم سكربت التدريب التنبؤ بـ `epsilon` (الضوضاء) أو `v_prediction`، لكن Min-SNR متوافق مع كلا نوعي التنبؤ. هذه الاستراتيجية المدعومة فقط بواسطة PyTorch.
أضف معامل `--snr_gamma` واضبطه على القيمة الموصى بها وهي 5.0:
```bash
accelerate launch train_dreambooth.py \
--snr_gamma=5.0
```
### خسارة الحفاظ على المسبق
خسارة الحفاظ على المسبق هي طريقة تستخدم العينات التي يولدها النموذج نفسه لمساعدته على تعلّم كيفية توليد صور أكثر تنوعًا. وبما أن صور العينات المولّدة تنتمي إلى نفس الفئة التي تنتمي إليها الصور التي قدمتها، فإنها تساعد النموذج على الاحتفاظ بما تعلّمه عن الفئة وكيفية استخدام ما يعرفه مسبقًا عنها لإنشاء تركيبات جديدة.
- `--with_prior_preservation`: ما إذا كان سيتم استخدام خسارة الحفاظ على المسبق
- `--prior_loss_weight`: يتحكم في تأثير خسارة الحفاظ على المسبق على النموذج
- `--class_data_dir`: المسار إلى مجلد يحتوي على صور عينات الفئات المولّدة
- `--class_prompt`: النص الوصفي الذي يحدد فئة الصور المولّدة
```bash
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 جيجابايت على الأقل. إذا كان لديك العتاد اللازم، فإن تدريب مُشفّر النص يُنتج نتائج أفضل، خاصةً عند توليد صور للوجوه. فعّل هذا الخيار من خلال:
```bash
accelerate launch train_dreambooth.py \
--train_text_encoder
```
## سكربت التدريب
يأتي DreamBooth مع فئات مجموعات بيانات خاصة به:
- [`DreamBoothDataset`](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L604): يعالج الصور وصور الفئة مسبقًا، ويقوم بتجزئة الأوامر النصية للتدريب
- [`PromptDataset`](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L738): يولّد تمثيلات المحفّزات (prompt embeddings) لتوليد صور الفئات
إذا قمت بتفعيل [prior preservation loss](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L842)، يتم توليد صور الفئات هنا:
```py
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()`](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L799) التي تتولى إعداد مجموعة البيانات للتدريب وحلقة التدريب نفسها. يقوم السكربت بتحميل [tokenizer](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L898)، [المجدول والنماذج](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L912C1-L912C1):
```py
# 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
)
```
ثم، حان الوقت لـ [إنشاء مجموعة بيانات التدريب](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L1073) و DataLoader من `DreamBoothDataset`:
```py
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,
)
```
أخيرًا، يتولى [حلقة التدريب](https://github.com/huggingface/diffusers/blob/072e00897a7cf4302c347a63ec917b4b8add16d4/examples/dreambooth/train_dreambooth.py#L1151) باقي الخطوات مثل تحويل الصور إلى الفضاء الكامن، وإضافة الضوضاء إلى المدخلات، والتنبؤ بباقي الضوضاء، وحساب الخسارة.
إذا كنت ترغب في معرفة المزيد حول كيفية عمل حلقة التدريب، فتوجه إلى شروحات [فهم خطوط الأنابيب والنماذج والمجدولين](../using-diffusers/write_own_pipeline) التي تفصّل النمط الأساسي لعملية إزالة الضوضاء.
## تشغيل السكربت
أنت الآن مستعد لإطلاق سكربت التدريب! 🚀
في هذا الدليل، ستقوم بتنزيل بعض الصور لـ [كلب](https://huggingface.co/datasets/diffusers/dog-example) وتخزينها في مجلد. لكن تذكّر أنه يمكنك إنشاء مجموعة بيانات خاصة بك واستخدامها إذا أردت (انظر دليل [إنشاء مجموعة بيانات للتدريب](create_dataset)).
```py
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` ككلمة خاصة لربط التدريب بها.
إذا كنت مهتمًا بمتابعة عملية التدريب، يمكنك حفظ الصور المولّدة بشكل دوري أثناء تقدم التدريب. أضف المعاملات التالية إلى أمر التدريب:
```bash
--validation_prompt="a photo of a sks dog"
--num_validation_images=4
--validation_steps=100
```
شيء آخر قبل أن تبدأ تشغيل السكربت! اعتمادًا على وحدة معالجة الرسوميات (GPU) التي تمتلكها، قد تحتاج إلى تفعيل بعض التحسينات لتدريب DreamBooth.
على بطاقة رسومية بسعة 16GB، يمكنك استخدام مُحسِّن bitsandbytes بدقة 8 بت وتقنية gradient checkpointing لمساعدتك في تدريب نموذج DreamBooth. قم بتثبيت bitsandbytes:
```py
pip install bitsandbytes
```
ثم، أضف المعامل التالي إلى أمر التدريب الخاص بك:
```bash
accelerate launch train_dreambooth.py \
--gradient_checkpointing \
--use_8bit_adam \
```
على بطاقة رسومية بسعة 12GB، ستحتاج إلى محسّن 8-bit من bitsandbytes، ونقطة تدرّج (gradient checkpointing)، وxFormers، وإعداد التدرّجات إلى `None` بدلاً من الصفر لتقليل استهلاك الذاكرة.
```bash
accelerate launch train_dreambooth.py \
--use_8bit_adam \
--gradient_checkpointing \
--enable_xformers_memory_efficient_attention \
--set_grads_to_none \
```
على بطاقة رسومات بسعة 8 جيجابايت، ستحتاج إلى [DeepSpeed](https://www.deepspeed.ai/) لنقل بعض المتجهات من ذاكرة vRAM إلى وحدة المعالجة المركزية أو NVME للسماح بالتدريب باستخدام ذاكرة أقل على بطاقة الرسومات.
نفّذ الأمر التالي لتكوين بيئة 🤗 Accelerate الخاصة بك:
```bash
accelerate config
```
أثناء التهيئة، تأكد من أنك تريد استخدام DeepSpeed. الآن يجب أن يصبح التدريب ممكناً باستخدام أقل من 8GB من ذاكرة vRAM من خلال الجمع بين DeepSpeed stage 2، والدقة المختلطة fp16، ونقل معاملات النموذج وحالة المُحسِّن إلى المعالج المركزي. العيب هو أن هذا يتطلب ذاكرة نظام أكبر (حوالي 25 GB). راجع [توثيق DeepSpeed](https://huggingface.co/docs/accelerate/usage_guides/deepspeed) لمعرفة المزيد من خيارات التهيئة.
يجب أيضاً تغيير مُحسِّن Adam الافتراضي إلى النسخة المُحسَّنة من Adam الخاصة بـ DeepSpeed [`deepspeed.ops.adam.DeepSpeedCPUAdam`](https://deepspeed.readthedocs.io/en/latest/optimizers.html#adam-cpu) لتحقيق تسريع كبير. يتطلب تفعيل `DeepSpeedCPUAdam` أن تكون إصدار سلسلة أدوات CUDA في نظامك مطابقاً للإصدار المثبت مع PyTorch.
يبدو أن مُحسّنات bitsandbytes ذات 8 بت غير متوافقة مع DeepSpeed في الوقت الحالي.
هذا كل شيء! لا تحتاج إلى إضافة أي معاملات إضافية إلى أمر التدريب الخاص بك.
```bash
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
```
بمجرد اكتمال التدريب، يمكنك استخدام النموذج الذي درّبته للتو للاستدلال!
> [!TIP]
> هل لا تستطيع الانتظار لتجربة نموذجك للاستدلال قبل اكتمال التدريب؟ 🤭 تأكد من تثبيت أحدث إصدار من 🤗 Accelerate.
>
> ```py
> 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")
> ```
```py
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](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth_lora.py) للتدريب باستخدام LoRA.
يتم مناقشة سكربت تدريب LoRA بتفصيل أكبر في دليل [تدريب LoRA](lora).
## Stable Diffusion XL
يعتبر Stable Diffusion XL (SDXL) نموذجًا قويًا لتحويل النص إلى صور، حيث يولّد صورًا عالية الدقة، كما يضيف مشفّرًا نصيًا ثانيًا إلى بنيته. استخدم سكربت [train_dreambooth_lora_sdxl.py](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth_lora_sdxl.py) لتدريب نموذج SDXL باستخدام LoRA.
يتم مناقشة سكربت تدريب SDXL بتفصيل أكبر في دليل [تدريب SDXL](sdxl).
## DeepFloyd IF
DeepFloyd IF هو نموذج انتشار بكسل متسلسل يتكون من ثلاث مراحل. تولّد المرحلة الأولى صورة أساسية، بينما تقوم المرحلتان الثانية والثالثة بزيادة دقة الصورة الأساسية تدريجياً لتحويلها إلى صورة عالية الدقة بمقاس 1024x1024. استخدم سكربت [train_dreambooth_lora.py](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth_lora.py) أو [train_dreambooth.py](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth.py) لتدريب نموذج DeepFloyd IF باستخدام LoRA أو النموذج الكامل.
يستخدم DeepFloyd IF التباين المتوقع، لكن سكربتات التدريب في Diffusers تستخدم الخطأ المتوقع، لذا يتم تبديل النماذج المدرَّبة من DeepFloyd IF إلى جدول تباين ثابت. سيقوم سكربتات التدريب بتحديث إعدادات المجدول (scheduler) للنموذج المدرَّب بالكامل نيابةً عنك. ومع ذلك، عند تحميل أوزان LoRA المحفوظة، يجب عليك أيضًا تحديث إعدادات المجدول (scheduler) في خط الأنابيب (pipeline).
```py
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 صور تحقق إضافية لرفع الدقة. يمكنك تنزيل نسخة مصغّرة من صور التدريب واستخدامها لهذا الغرض.
```py
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](https://huggingface.co/docs/transformers/main/en/model_doc/t5#transformers.T5Model) قد يستهلك مساحة ذاكرة كبيرة
* `--tokenizer_max_length=77`، يمكنك استخدام طول نص افتراضي أطول مع T5 كمشفّر للنص، لكن إجراء ترميز النموذج الافتراضي يستخدم طول نص أقصر
* `--text_encoder_use_attention_mask`، لتحويل قناع الانتباه إلى مُشفّر النص
يتطلب تدريب المرحلة 1 من DeepFloyd IF باستخدام LoRA وDreamBooth حوالي 28 جيجابايت من الذاكرة.
```bash
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`، الدقة المتوقعة لمُحسّن الدقة
```bash
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 جيجابايت.
```bash
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`، حيث يتطلب التدريب الفعلي على صور تحتوي على وجوه أحجام دفع أكبر
```bash
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](/docs/diffusers/main/ar/api/schedulers/ddpm#diffusers.DDPMScheduler) بشكل أفضل من DPMSolver المستخدم في سكربتات التدريب.
## الخطوات التالية
تهانينا على تدريب نموذج DreamBooth الخاص بك! لمعرفة المزيد حول كيفية استخدام نموذجك الجديد، قد يكون الدليل التالي مفيدًا:
- تعلّم كيفية [تحميل نقطة تحقق DreamBooth](../using-diffusers/dreambooth) للاستدلال.
- إذا قمت بالتدريب باستخدام LoRA، راجع [LoRA للاستدلال](../tutorials/using_peft_for_inference).

Xet Storage Details

Size:
31.2 kB
·
Xet hash:
fa5dec101db8a86ccaf9ba9e7c8af8a327572638f271cb12f1d260eb72c3ba51

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.