Diffusers documentation

تكييف نموذج لمهمة جديدة

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

تكييف نموذج لمهمة جديدة

تشارك العديد من أنظمة الانتشار نفس المكونات، مما يتيح لك تكييف نموذج مُدرَّب مسبقًا لمهمة واحدة لتناسب مهمة مختلفة تمامًا.

ستُظهر لك هذه الدليل كيفية تكييف نموذج نص إلى صورة مُدرَّب مسبقًا لعملية inpainting من خلال تهيئة وتعديل بنية UNet2DConditionModel المُدرَّب مسبقًا.

تهيئة معلمات UNet2DConditionModel

يقبل UNet2DConditionModel افتراضياً 4 قنوات في عينة الإدخال. على سبيل المثال، حمّل نموذجاً مسبق التدريب لتوليد الصور من النص مثل stable-diffusion-v1-5/stable-diffusion-v1-5 واطّلع على عدد in_channels:

from diffusers import StableDiffusionPipeline

pipeline = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", use_safetensors=True)
pipeline.unet.config["in_channels"]
4

يتطلب التوليد داخل الصورة (Inpainting) 9 قنوات في العينة المدخلة. يمكنك التحقق من هذه القيمة في نموذج توليد داخل صورة مُدرَّب مسبقًا مثل stable-diffusion-v1-5/stable-diffusion-inpainting:

from diffusers import StableDiffusionPipeline

pipeline = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-inpainting", use_safetensors=True)
pipeline.unet.config["in_channels"]
9

لتكييف نموذج النص إلى صورة الخاص بك لإعادة الرسم، ستحتاج إلى تغيير عدد in_channels من 4 إلى 9.

قم بتهيئة UNet2DConditionModel باستخدام أوزان نموذج النص إلى الصورة المُسبقة التدريب، وغيّر in_channels إلى 9. إن تغيير عدد in_channels يعني أنك بحاجة إلى تعيين ignore_mismatched_sizes=True وlow_cpu_mem_usage=False لتجنب خطأ عدم تطابق الحجم لأن الشكل أصبح مختلفاً الآن.

from diffusers import AutoModel

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
unet = AutoModel.from_pretrained(
    model_id,
    subfolder="unet",
    in_channels=9,
    low_cpu_mem_usage=False,
    ignore_mismatched_sizes=True,
    use_safetensors=True,
)

تُهيّأ أوزان المكونات الأخرى المُسبَق تدريبها من نموذج النص إلى الصورة من نقاط التفتيش الخاصة بها، لكن أوزان قناة الإدخال (conv_in.weight) في unet تُهيّأ عشوائياً. من المهم ضبط النموذج بدقة لمهمة إعادة رسم الصور (inpainting)، وإلا فإن النموذج سيعيد ضوضاء.

Update on GitHub