Buckets:

hf-doc-build/doc / diffusers /main /ar /training /t2i_adapters.md
mishig's picture
|
download
raw
12.1 kB
# T2I-Adapter
[T2I-Adapter](https://hf.co/papers/2302.08453) هو نموذج مُكيّف خفيف الوزن يوفر صورة إدخال إضافية كشرط (رسم خطي، canny، رسم تخطيطي، عمق، وضعية) للتحكم بشكل أفضل في توليد الصور. يشبه ControlNet، لكنه أصغر بكثير (حوالي 77 مليون معامل وحجم ملف حوالي 300 ميغابايت) لأنه يدرج الأوزان في UNet بدلاً من نسخه وتدريبه.
يتوفر T2I-Adapter للتدريب مع نموذج Stable Diffusion XL (SDXL) فقط.
ستستكشف هذه الدليل سكربت التدريب [train_t2i_adapter_sdxl.py](https://github.com/huggingface/diffusers/blob/main/examples/t2i_adapter/train_t2i_adapter_sdxl.py) لمساعدتك على الاطلاع عليه، وكيفية تكييفه ليناسب حالتك الخاصة.
قبل تشغيل السكربت، تأكد من تثبيت المكتبة من المصدر:
```bash
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .
```
ثم انتقل إلى مجلد المثال الذي يحتوي على سكربت التدريب وقم بتثبيت التبعيات المطلوبة للسكربت الذي تستخدمه:
```bash
cd examples/t2i_adapter
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/t2i_adapter/train_t2i_adapter_sdxl.py) وإعلامنا بأي أسئلة أو مخاوف لديك.
## معاملات السكربت
توفر سكربت التدريب العديد من المعاملات لمساعدتك على تخصيص عملية التدريب. يمكنك العثور على جميع المعاملات ووصفاتها في الدالة [`parse_args()`](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L233). توفر هذه الدالة قيمًا افتراضية لكل معامِل، مثل حجم الدفعة التدريبية ومعدل التعلم، لكن يمكنك أيضًا تعيين قيمك الخاصة في أمر التدريب إذا رغبت في ذلك.
على سبيل المثال، لتفعيل تراكم التدرجات، أضف معامل `--gradient_accumulation_steps` إلى أمر التدريب:
```bash
accelerate launch train_t2i_adapter_sdxl.py \
----gradient_accumulation_steps=4
```
يُوصف العديد من المعلمات الأساسية والمهمة في دليل تدريب [النص إلى صورة](text2image#script-parameters)، لذا يركّز هذا الدليل فقط على معلمات T2I-Adapter ذات الصلة:
- `--pretrained_vae_model_name_or_path`: المسار إلى نموذج VAE مُدرَّب مسبقًا؛ يُعرف أن VAE الخاص بـ SDXL يعاني من عدم استقرار عددي، لذا يتيح لك هذا المعامل تحديد [VAE](https://huggingface.co/madebyollin/sdxl-vae-fp16-fix) أفضل
- `--crops_coords_top_left_h` و`--crops_coords_top_left_w`: إحداثيات الارتفاع والعرض التي يجب تضمينها في تضمينات إحداثيات الاقتصاص الخاصة بـ SDXL
- `--conditioning_image_column`: عمود صور التكييف في مجموعة البيانات
- `--proportion_empty_prompts`: نسبة أوامر الصور التي سيتم استبدالها بنصوص فارغة
## سكربت التدريب
كما هو الحال مع معاملات السكربت، يتوفر شرح تفصيلي لسكربت التدريب في دليل التدريب [من النص إلى الصورة](text2image#training-script). وبدلاً من ذلك، يتناول هذا الدليل الأجزاء ذات الصلة بـ T2I-Adapter في السكربت.
يبدأ سكربت التدريب بتحضير مجموعة البيانات. ويتضمن ذلك [تجزئة الرموز](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L674) للموجّه و[تطبيق التحويلات](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L714) على الصور وصور الشروط.
```py
conditioning_image_transforms = transforms.Compose(
[
transforms.Resize(args.resolution, interpolation=transforms.InterpolationMode.BILINEAR),
transforms.CenterCrop(args.resolution),
transforms.ToTensor(),
]
)
```
داخل الدالة [`main()`](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L770)، يتم تحميل T2I-Adapter إما من مُكيّف مُدرَّب مسبقًا أو يتم تهيئته عشوائيًا:
```py
if args.adapter_model_name_or_path:
logger.info("Loading existing adapter weights.")
t2iadapter = T2IAdapter.from_pretrained(args.adapter_model_name_or_path)
else:
logger.info("Initializing t2iadapter weights.")
t2iadapter = T2IAdapter(
in_channels=3,
channels=(320, 640, 1280, 1280),
num_res_blocks=2,
downscale_factor=16,
adapter_type="full_adapter_xl",
)
```
يتم تهيئة [optimizer](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L952) لمعاملات T2I-Adapter:
```py
params_to_optimize = t2iadapter.parameters()
optimizer = optimizer_class(
params_to_optimize,
lr=args.learning_rate,
betas=(args.adam_beta1, args.adam_beta2),
weight_decay=args.adam_weight_decay,
eps=args.adam_epsilon,
)
```
أخيرًا، في [حلقة التدريب](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L1086)، تُمرَّر صورة التكييف الخاصة بالمُكيِّف (adapter) وتضمينات النص إلى UNet للتنبؤ بباقي الضوضاء:
```py
t2iadapter_image = batch["conditioning_pixel_values"].to(dtype=weight_dtype)
down_block_additional_residuals = t2iadapter(t2iadapter_image)
down_block_additional_residuals = [
sample.to(dtype=weight_dtype) for sample in down_block_additional_residuals
]
model_pred = unet(
inp_noisy_latents,
timesteps,
encoder_hidden_states=batch["prompt_ids"],
added_cond_kwargs=batch["unet_added_conditions"],
down_block_additional_residuals=down_block_additional_residuals,
).sample
```
إذا كنت ترغب في معرفة المزيد حول كيفية عمل حلقة التدريب، فتوجه إلى شروحات [فهم خطوط الأنابيب والنماذج والمجدولين](../using-diffusers/write_own_pipeline) التي تفصّل النمط الأساسي لعملية إزالة الضوضاء.
## تشغيل السكربت
الآن أنت مستعد لإطلاق سكربت التدريب! 🚀
لتدريب هذا المثال، ستستخدم مجموعة البيانات [fusing/fill50k](https://huggingface.co/datasets/fusing/fill50k). يمكنك أيضًا إنشاء مجموعة بياناتك الخاصة واستخدامها إذا أردت (انظر دليل [إنشاء مجموعة بيانات للتدريب](create_dataset)).
اضبط متغير البيئة `MODEL_DIR` على معرّف نموذج في Hub أو مسار لنموذج محلي، و`OUTPUT_DIR` على المكان الذي تريد حفظ النموذج فيه.
قم بتنزيل الصور التالية لتدريب نموذجك الشرطي باستخدامها:
```bash
wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_1.png
wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_2.png
```
> [!TIP]
> لمراقبة تقدم التدريب باستخدام Weights & Biases، أضف معامل `--report_to=wandb` إلى أمر التدريب. كما ستحتاج إلى إضافة `--validation_image` و`--validation_prompt` و`--validation_steps` إلى أمر التدريب لتتبع النتائج. وقد يكون ذلك مفيدًا للغاية لتصحيح أخطاء النموذج وعرض النتائج الوسيطة.
```bash
export MODEL_DIR="stabilityai/stable-diffusion-xl-base-1.0"
export OUTPUT_DIR="path to save model"
accelerate launch train_t2i_adapter_sdxl.py \
--pretrained_model_name_or_path=$MODEL_DIR \
--output_dir=$OUTPUT_DIR \
--dataset_name=fusing/fill50k \
--mixed_precision="fp16" \
--resolution=1024 \
--learning_rate=1e-5 \
--max_train_steps=15000 \
--validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
--validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
--validation_steps=100 \
--train_batch_size=1 \
--gradient_accumulation_steps=4 \
--report_to="wandb" \
--seed=42 \
--push_to_hub
```
بمجرد اكتمال التدريب، يمكنك استخدام T2I-Adapter الخاص بك للاستدلال:
```py
from diffusers import StableDiffusionXLAdapterPipeline, T2IAdapter, EulerAncestralDiscreteSchedulerTest
from diffusers.utils import load_image
import torch
adapter = T2IAdapter.from_pretrained("path/to/adapter", dtype=torch.float16)
pipeline = StableDiffusionXLAdapterPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", adapter=adapter, dtype=torch.float16
)
pipeline.scheduler = EulerAncestralDiscreteSchedulerTest.from_config(pipe.scheduler.config)
pipeline.enable_xformers_memory_efficient_attention()
pipeline.enable_model_cpu_offload()
control_image = load_image("./conditioning_image_1.png")
prompt = "pale golden rod circle with old lace background"
generator = torch.manual_seed(0)
image = pipeline(
prompt, image=control_image, generator=generator
).images[0]
image.save("./output.png")
```
## الخطوات التالية
تهانينا على تدريب نموذج T2I-Adapter! 🎉 لمعرفة المزيد:
- اقرأ منشور المدونة [التوليد القابل للتحكم بكفاءة لـ SDXL باستخدام T2I-Adapters](https://huggingface.co/blog/t2i-sdxl-adapters) لمعرفة المزيد من التفاصيل حول النتائج التجريبية من فريق T2I-Adapter.

Xet Storage Details

Size:
12.1 kB
·
Xet hash:
603dae434f4c08ba240704fa64a7b6ef135dd29af1bf4950185b56503e813fe0

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