Diffusers documentation

توليد الصور غير المشروط

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

توليد الصور غير المشروط

نماذج توليد الصور غير المشروطة لا تُشترط على النصوص أو الصور أثناء التدريب. فهي تولّد صوراً تشبه توزيع بيانات التدريب الخاصة بها فقط.

ستستكشف هذه الدليل سكربت التدريب train_unconditional.py لمساعدتك على الاطلاع عليه، وكيفية تكييفه ليناسب حالتك الخاصة.

قبل تشغيل السكربت، تأكد من تثبيت المكتبة من المصدر:

git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .

ثم انتقل إلى مجلد المثال الذي يحتوي على سكربت التدريب وقم بتثبيت الاعتماديات المطلوبة:

cd examples/unconditional_image_generation
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()

أخيرًا، إذا كنت ترغب في تدريب نموذج على مجموعة بياناتك الخاصة، فاطّلع على دليل إنشاء مجموعة بيانات للتدريب لمعرفة كيفية إنشاء مجموعة بيانات تعمل مع سكربت التدريب.

معاملات السكربت

تسلّط الأقسام التالية الضوء على أجزاء من سكربت التدريب التي تُعدّ مهمة لفهم كيفية تعديله، لكنها لا تغطي كل جانب من جوانب السكربت بالتفصيل. إذا كنت مهتمًا بالتعلّم أكثر، فلا تتردد في الاطلاع على السكربت وإعلامنا بأي أسئلة أو مخاوف لديك.

توفر سكربت التدريب العديد من المعاملات لمساعدتك على تخصيص عملية التدريب. يمكنك العثور على جميع المعاملات ووصفاتها في الدالة parse_args(). وتوفر هذه الدالة قيمًا افتراضية لكل معامِل، مثل حجم الدفعة التدريبية ومعدل التعلم، لكن يمكنك أيضًا تعيين قيمك الخاصة في أمر التدريب إذا رغبت في ذلك.

على سبيل المثال، لتسريع التدريب باستخدام الدقة المختلطة بتنسيق bf16، أضف معامل --mixed_precision إلى أمر التدريب:

accelerate launch train_unconditional.py \
  --mixed_precision="bf16"

تشمل بعض المعلمات الأساسية والمهمة التي يجب تحديدها ما يلي:

  • --dataset_name: اسم مجموعة البيانات على Hub أو مسار محلي لمجموعة البيانات التي سيتم التدريب عليها
  • --output_dir: مكان حفظ النموذج المُدرَّب
  • --push_to_hub: ما إذا كان سيتم دفع النموذج المُدرَّب إلى Hub
  • --checkpointing_steps: تكرار حفظ نقطة تفتيش أثناء تدريب النموذج؛ وهذا مفيد إذا انقطع التدريب، حيث يمكنك مواصلة التدريب من تلك النقطة بإضافة --resume_from_checkpoint إلى أمر التدريب الخاص بك

أحضر مجموعة بياناتك، ودع سكربت التدريب يتولى كل ما عدا ذلك!

سكربت التدريب

توجد أكواد معالجة مجموعة البيانات مسبقًا وحلقة التدريب في الدالة main(). إذا كنت بحاجة إلى تكييف سكربت التدريب، فهنا ستحتاج إلى إجراء تعديلاتك.

يُهيّئ سكربت train_unconditional نموذج UNet2DModel إذا لم تُقدّم إعدادات نموذج. يمكنك تكوين UNet هنا إذا رغبت في ذلك:

model = UNet2DModel(
    sample_size=args.resolution,
    in_channels=3,
    out_channels=3,
    layers_per_block=2,
    block_out_channels=(128, 128, 256, 256, 512, 512),
    down_block_types=(
        "DownBlock2D",
        "DownBlock2D",
        "DownBlock2D",
        "DownBlock2D",
        "AttnDownBlock2D",
        "DownBlock2D",
    ),
    up_block_types=(
        "UpBlock2D",
        "AttnUpBlock2D",
        "UpBlock2D",
        "UpBlock2D",
        "UpBlock2D",
        "UpBlock2D",
    ),
)

بعد ذلك، يقوم السكربت بمبادرة scheduler و optimizer:

# Initialize the scheduler
accepts_prediction_type = "prediction_type" in set(inspect.signature(DDPMScheduler.__init__).parameters.keys())
if accepts_prediction_type:
    noise_scheduler = DDPMScheduler(
        num_train_timesteps=args.ddpm_num_steps,
        beta_schedule=args.ddpm_beta_schedule,
        prediction_type=args.prediction_type,
    )
else:
    noise_scheduler = DDPMScheduler(num_train_timesteps=args.ddpm_num_steps, beta_schedule=args.ddpm_beta_schedule)

# Initialize the optimizer
optimizer = torch.optim.AdamW(
    model.parameters(),
    lr=args.learning_rate,
    betas=(args.adam_beta1, args.adam_beta2),
    weight_decay=args.adam_weight_decay,
    eps=args.adam_epsilon,
)

ثم يحمّل مجموعة بيانات ويمكنك تحديد كيفية المعالجة المسبقة لها:

dataset = load_dataset("imagefolder", data_dir=args.train_data_dir, cache_dir=args.cache_dir, split="train")

augmentations = transforms.Compose(
    [
        transforms.Resize(args.resolution, interpolation=transforms.InterpolationMode.BILINEAR),
        transforms.CenterCrop(args.resolution) if args.center_crop else transforms.RandomCrop(args.resolution),
        transforms.RandomHorizontalFlip() if args.random_flip else transforms.Lambda(lambda x: x),
        transforms.ToTensor(),
        transforms.Normalize([0.5], [0.5]),
    ]
)

أخيرًا، يتولى حلقة التدريب كل ما هو متبقٍ، مثل إضافة الضوضاء إلى الصور، والتنبؤ بباقي الضوضاء، وحساب الخسارة، وحفظ نقاط التفتيش عند الخطوات المحددة، وحفظ النموذج ودفعه إلى Hub. إذا كنت ترغب في معرفة المزيد حول كيفية عمل حلقة التدريب، فتوجه إلى شروحات فهم خطوط الأنابيب والنماذج والمجدولين الذي يوضح النمط الأساسي لعملية إزالة الضوضاء.

تشغيل السكربت

بمجرد أن تُجري جميع تعديلاتك أو تكون راضياً عن الإعداد الافتراضي، تكون مستعداً لإطلاق سكربت التدريب! 🚀

يستغرق التدريب الكامل ساعتين على 4 وحدات معالجة رسومية من طراز V100.

وحدة معالجة رسومات واحدة
متعدد GPUs
accelerate launch train_unconditional.py \
  --dataset_name="huggan/flowers-102-categories" \
  --output_dir="ddpm-ema-flowers-64" \
  --mixed_precision="fp16" \
  --push_to_hub

ينشئ سكربت التدريب ويحفظ ملف نقطة تفتيش في مستودعك. يمكنك الآن تحميل نموذجك المدرّب واستخدامه للاستدلال:

from diffusers import DiffusionPipeline
import torch

pipeline = DiffusionPipeline.from_pretrained("anton-l/ddpm-butterflies-128").to("cuda")  # or "mps", "xpu", "cpu"
image = pipeline().images[0]
Update on GitHub