Buckets:
| # توليد الصور غير المشروط | |
| نماذج توليد الصور غير المشروطة لا تُشترط على النصوص أو الصور أثناء التدريب. فهي تولّد صوراً تشبه توزيع بيانات التدريب الخاصة بها فقط. | |
| ستستكشف هذه الدليل سكربت التدريب [train_unconditional.py](https://github.com/huggingface/diffusers/blob/main/examples/unconditional_image_generation/train_unconditional.py) لمساعدتك على الاطلاع عليه، وكيفية تكييفه ليناسب حالتك الخاصة. | |
| قبل تشغيل السكربت، تأكد من تثبيت المكتبة من المصدر: | |
| ```bash | |
| git clone https://github.com/huggingface/diffusers | |
| cd diffusers | |
| pip install . | |
| ``` | |
| ثم انتقل إلى مجلد المثال الذي يحتوي على سكربت التدريب وقم بتثبيت الاعتماديات المطلوبة: | |
| ```bash | |
| cd examples/unconditional_image_generation | |
| 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/unconditional_image_generation/train_unconditional.py) وإعلامنا بأي أسئلة أو مخاوف لديك. | |
| توفر سكربت التدريب العديد من المعاملات لمساعدتك على تخصيص عملية التدريب. يمكنك العثور على جميع المعاملات ووصفاتها في الدالة [`parse_args()`](https://github.com/huggingface/diffusers/blob/096f84b05f9514fae9f185cbec0a4d38fbad9919/examples/unconditional_image_generation/train_unconditional.py#L55). توفر هذه الدالة قيمًا افتراضية لكل معامِل، مثل حجم الدفعة التدريبية ومعدل التعلم، لكن يمكنك أيضًا تعيين قيمك الخاصة في أمر التدريب إذا رغبت في ذلك. | |
| على سبيل المثال، لتسريع التدريب باستخدام الدقة المختلطة بتنسيق bf16، أضف معامل `--mixed_precision` إلى أمر التدريب: | |
| ```bash | |
| accelerate launch train_unconditional.py \ | |
| --mixed_precision="bf16" | |
| ``` | |
| تشمل بعض المعلمات الأساسية والمهمة التي يجب تحديدها ما يلي: | |
| - `--dataset_name`: اسم مجموعة البيانات على Hub أو مسار محلي لمجموعة البيانات التي سيتم التدريب عليها | |
| - `--output_dir`: مكان حفظ النموذج المُدرَّب | |
| - `--push_to_hub`: ما إذا كان سيتم دفع النموذج المُدرَّب إلى Hub | |
| - `--checkpointing_steps`: تكرار حفظ نقطة تفتيش أثناء تدريب النموذج؛ وهذا مفيد إذا انقطع التدريب، حيث يمكنك مواصلة التدريب من تلك النقطة بإضافة `--resume_from_checkpoint` إلى أمر التدريب الخاص بك | |
| أحضر مجموعة بياناتك، ودع سكربت التدريب يتولى كل ما عدا ذلك! | |
| ## سكربت التدريب | |
| توجد أكواد معالجة مجموعة البيانات مسبقًا وحلقة التدريب في الدالة [`main()`](https://github.com/huggingface/diffusers/blob/096f84b05f9514fae9f185cbec0a4d38fbad9919/examples/unconditional_image_generation/train_unconditional.py#L275). إذا كنت بحاجة إلى تكييف سكربت التدريب، فهنا ستحتاج إلى إجراء تعديلاتك. | |
| يُهيّئ سكربت `train_unconditional` [نموذج `UNet2DModel`](https://github.com/huggingface/diffusers/blob/096f84b05f9514fae9f185cbec0a4d38fbad9919/examples/unconditional_image_generation/train_unconditional.py#L356) إذا لم تُقدّم تكوينًا للنموذج. يمكنك تكوين UNet هنا إذا رغبت في ذلك: | |
| ```py | |
| 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](https://github.com/huggingface/diffusers/blob/096f84b05f9514fae9f185cbec0a4d38fbad9919/examples/unconditional_image_generation/train_unconditional.py#L418) و [optimizer](https://github.com/huggingface/diffusers/blob/096f84b05f9514fae9f185cbec0a4d38fbad9919/examples/unconditional_image_generation/train_unconditional.py#L429): | |
| ```py | |
| # 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, | |
| ) | |
| ``` | |
| ثم [يحمّل مجموعة بيانات](https://github.com/huggingface/diffusers/blob/096f84b05f9514fae9f185cbec0a4d38fbad9919/examples/unconditional_image_generation/train_unconditional.py#L451) ويمكنك تحديد كيفية [المعالجة المسبقة](https://github.com/huggingface/diffusers/blob/096f84b05f9514fae9f185cbec0a4d38fbad9919/examples/unconditional_image_generation/train_unconditional.py#L455) لها: | |
| ```py | |
| 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]), | |
| ] | |
| ) | |
| ``` | |
| أخيرًا، يتولى [حلقة التدريب](https://github.com/huggingface/diffusers/blob/096f84b05f9514fae9f185cbec0a4d38fbad9919/examples/unconditional_image_generation/train_unconditional.py#L540) كل ما هو متبقٍ، مثل إضافة الضوضاء إلى الصور، والتنبؤ بباقي الضوضاء، وحساب الخسارة، وحفظ نقاط التفتيش عند الخطوات المحددة، وحفظ النموذج ودفعه إلى Hub. إذا كنت ترغب في معرفة المزيد حول كيفية عمل حلقة التدريب، فتوجه إلى شروحات [فهم خطوط الأنابيب والنماذج والمجدولين](../using-diffusers/write_own_pipeline) الذي يوضح النمط الأساسي لعملية إزالة الضوضاء. | |
| ## تشغيل السكربت | |
| بمجرد أن تُجري جميع تعديلاتك أو تكون راضياً عن الإعداد الافتراضي، فأنت مستعد لإطلاق سكربت التدريب! 🚀 | |
| > [!WARNING] | |
| > يستغرق التدريب الكامل ساعتين على 4 وحدات معالجة رسومية من طراز V100. | |
| ```bash | |
| accelerate launch train_unconditional.py \ | |
| --dataset_name="huggan/flowers-102-categories" \ | |
| --output_dir="ddpm-ema-flowers-64" \ | |
| --mixed_precision="fp16" \ | |
| --push_to_hub | |
| ``` | |
| إذا كنت تتدرب باستخدام أكثر من وحدة معالجة رسومية واحدة، أضف معامل `--multi_gpu` إلى أمر التدريب: | |
| ```bash | |
| accelerate launch --multi_gpu train_unconditional.py \ | |
| --dataset_name="huggan/flowers-102-categories" \ | |
| --output_dir="ddpm-ema-flowers-64" \ | |
| --mixed_precision="fp16" \ | |
| --push_to_hub | |
| ``` | |
| ينشئ سكربت التدريب ويحفظ ملف نقطة تفتيش في مستودعك. يمكنك الآن تحميل نموذجك المدرّب واستخدامه للاستدلال: | |
| ```py | |
| 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] | |
| ``` | |
Xet Storage Details
- Size:
- 10.2 kB
- Xet hash:
- 016ee6569522ef312f45788e00aa5ee72a2c79dfd08a861cbcc9e1c6c1ac2ff1
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.