انتقل إلى المحتوى الرئيسي

الوحدة 3 — عدد الخطوات ومقياس التوجيه والبذرة العشوائيّة

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

عدد الخطوات: كم مرّة نستدعي U-Net

كلّ خطوة إزالة ضجيج هي استدعاء واحد لـU-Net. 30 خطوة تعني 30 استدعاء، وهذا هو الوقت الحقيقيّ للتوليد. الشائع 20 إلى 50 خطوة، لكن الرقم المثاليّ يعتمد على المخطّط.

جدول تقريبيّ لعدد الخطوات المُنصَح به على SDXL:

المخطّطحدّ أدنى مقبولنطاق موصى بهفوق ذلك
Euler ancestral2025-35تشتّت بلا تحسّن
DPM++ 2M Karras1520-30تشبّع سريع
UniPC810-20نتيجة تُقارَب بأقلّ من نصف الخطوات
DDIM3040-50تحسّن هامشيّ

الفخّ الأشهر: افتراض أنّ 100 خطوة أفضل من 30. عمليًّا، بعد نقطة ما (تسمّى التشبّع) لا تتغيّر الصورة، ونهدر ثلاثة أضعاف الحساب. الحكم البصريّ: أنتج نفس التعليمة والبذرة بـ20، 30، 50 خطوة؛ إن كانت 30 و50 متطابقتَين بصريًّا، ابقَ على 30.

المخطّط: أكثر من مجرّد اسم

المخطّط يُغيّر ثلاثة أشياء: السرعة (بعضها يحتاج نصف الخطوات)، الحتميّة (المخطّطات بحرف a مثل «Euler a» و«DPM2 a» تُدخل عشوائيّة في كلّ خطوة فتتغيّر الصورة قليلًا حتّى بنفس البذرة)، والأسلوب (Karras schedules تعطي حوافّ أنعم، LMS تُعطي حوافّ أحدّ).

توصية عمليّة: DPM++ 2M Karras كخيار افتراضيّ لـSDXL. سريع، حتميّ، جودة عالية. Euler a للاستكشاف السريع، UniPC للتصيير الجماعيّ حيث الوقت أهمّ من آخر 5% من الجودة.

from diffusers import DPMSolverMultistepScheduler

pipe.scheduler = DPMSolverMultistepScheduler.from_config(
pipe.scheduler.config,
use_karras_sigmas=True,
algorithm_type="dpmsolver++",
)

مقياس التوجيه (guidance scale)

يُسمّى أيضًا CFG scale. يُحدّد قوّة الالتزام بالتعليمة مقابل حريّة النموذج في التوليد. القيم النمطيّة بين 1 و20، والافتراضيّ 7.5 مضبوط على SD 1.5 والقيم المنخفضة (5-7) أنسب لـSDXL.

  • 1-3: النموذج يتجاهل التعليمة تقريبًا. مفيد للاستكشاف الفنّيّ العشوائيّ.
  • 5-8: منطقة سعيدة لأغلب الصور. توازن بين الاحترام والجودة.
  • 10-14: التزام صارم بالتعليمة، لكن تفقد الصورة نعومتها وتصبح مُشبَعة الألوان.
  • 15+: تشوّه واضح، حوافّ مقطعة، ألوان صناعيّة. لا تُستعمل إلّا عمدًا لأثر بصريّ خاصّ.

للكرسيّ المرجعيّ لعلامة الأثاث، القيمة 6.0 على SDXL أعطت أفضل توازن بين احترام «walnut wood» و«soft lighting» وطبيعيّة النتيجة.

البذرة العشوائيّة: مفتاح إعادة الإنتاج

كلّ توليد يبدأ من latent عشوائيّ. البذرة (seed) عدد صحيح يُثبّت هذا العشوائيّ. نفس البذرة + نفس التعليمة + نفس المعلمات + نفس النموذج = نفس الصورة بالبت (باستثناء بعض المخطّطات الـa).

import torch

generator = torch.Generator(device="cuda").manual_seed(42)

image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
num_inference_steps=30,
guidance_scale=6.0,
generator=generator,
).images[0]

هذا يُغيّر طريقة العمل جذريًّا:

  • الاستكشاف: أنتج 8 صور ببذور مختلفة (0-7)، اختر البذرة الأقرب للمطلوب، ثمّ اضبط تعليمة تلك البذرة فقط. لا تُغيّر التعليمة والبذرة معًا، لأنّك ستفقد المرجع.
  • إعادة الإنتاج: حفظ البذرة يسمح لعميل أو زميل بإنتاج نفس الصورة بالضبط.
  • الاختبار A/B للتعليمة: تثبيت البذرة يعزل أثر تغيير التعليمة عن أثر العشوائيّ.

ملاحظة: البذرة تعتمد على GPU. نفس البذرة على CUDA وعلى CPU لا تُنتج نفس الصورة. إعادة الإنتاج مطلقة تتطلّب أيضًا نفس البطاقة الرسوميّة.

المقايضة الحقيقيّة: جودة مقابل زمن

كلّ مشروع يواجه نفس السؤال: هل نُنتج 100 صورة مقبولة، أم 10 صور ممتازة؟ الجواب يعتمد على المرحلة:

المرحلةخطواتتوجيهملاحظة
استكشاف مبكّر (100 تعليمة)155.0UniPC للسرعة، نبحث عن أفكار
اختيار المرشّحين (20 تعليمة)256.0DPM++ 2M Karras، جودة مقبولة
الإنتاج النهائيّ (5 صور)407.0DPM++ 2M Karras، توليدات متعدّدة ببذور مختلفة
Refiner SDXL (اختياريّ)+106.0تحسين آخر 20% من الخطوات على الصور المختارة

هذا الترتيب يُوفّر ساعات على الآلات المتواضعة، مع نفس الجودة النهائيّة.

الخيط الأحمر: شبكة معلمات على الكرسيّ

نُنتج شبكة 4×4: أربع بذور × أربع قيم توجيه (4، 6، 8، 12)، بنفس التعليمة و30 خطوة. النتيجة البصريّة عادةً واضحة: الصفّ 4 «حرّ» جدًّا (كراسٍ متباعدة عن التعليمة)، الصفّ 12 مُشبَع الألوان بحوافّ صلبة، الصفّان 6 و8 هما ما نُنتج منه. البذرة التي أعطت أفضل تركيب عبر القيم الأربع هي المرشّحة للإنتاج النهائيّ.

فخّ التحسين اللانهائيّ

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

الخلاصة

  • عدد الخطوات يعتمد على المخطّط؛ 20-30 كافية غالبًا مع DPM++ 2M Karras على SDXL.
  • مقياس التوجيه بين 5 و8 هو المنطقة السعيدة؛ فوق 12 تفقد الصورة طبيعيّتها.
  • البذرة تفصل بين أثر العشوائيّ وأثر التعليمة؛ تثبيتها ضرورة للاختبار A/B وإعادة الإنتاج.
  • مقايضة جودة/زمن: استكشاف بجودة منخفضة، إنتاج نهائيّ بجودة عالية على المرشّحين المختارين فقط.