Diffusers documentation
FreeU
FreeU
يحسّن FreeU تفاصيل الصورة من خلال إعادة التوازن بين مقدار ما يستخلصه مُفكّك UNet من ميزات العمود الفقري (backbone) مقارنةً بميزات وصلات التخطي (skip-connection). يمكن أن تُغمر ميزات العمود الفقري الدلالية بواسطة وصلات التخطي، مما ينتج عنه تفاصيل غير طبيعية في المخرجات. لا يتطلب FreeU أي تدريب، ويمكنك تفعيله أو تعطيله في وقت الاستدلال (inference time) لأنابيب النص إلى الصورة والنص إلى الفيديو.
يعمل FreeU فقط مع خطوط الأنابيب المعتمدة على UNet مثل Stable Diffusion وSDXL وAnimateDiff. ولا يحظى بدعم خطوط الأنابيب المعتمدة على المحولات (transformers) مثل Flux أو Qwen-Image.
استخدم طريقة enable_freeu() على خط الأنابيب الخاص بك وقم بإعداد عوامل التوسيع. تُعزّز b1 وb2 ميزات الهيكل الأساسي، بينما تُخمد s1 وs2 ميزات التخطي. تشير 1 و2 إلى مرحلتي إعادة العينات الأولى والثانية في فكّ تشفير UNet. راجع مستودع FreeU للاطلاع على المعلمات الفائقة المرجعية للنماذج المختلفة.
ابدأ بقيم المستودع الخاصة بنموذج. لضبط نماذج أخرى، احتفظ بـs1=0.9 وs2=0.2 وقم بتعديل b1 وb2 أولاً. ضبط العوامل الأربعة جميعها على 1.0 يعادل تعطيل FreeU. تزيد القيم الأكبر لـb من قوة التأثير لكنها قد تُنعّم النسيج الدقيق بشكل مفرط، بينما يُخفّض خفض s1 وs2 من ذلك.
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16,
).to("cuda") # or "mps", "xpu", "cpu"
pipeline.enable_freeu(s1=0.9, s2=0.2, b1=1.3, b2=1.4)
generator = torch.Generator(device="cpu").manual_seed(13)
prompt = "A squirrel eating a burger"
image = pipeline(prompt, generator=generator).images[0]
image
استدعِ الطريقة disable_freeu() لتعطيل FreeU.
pipeline.disable_freeu()
الخطوات التالية
- راجع مرجع واجهة enable_freeu() للحصول على أوصاف كاملة للمعاملات.
- جرّب FreeU على الفيديو باستخدام AnimateDiff.