Diffusers documentation
GLM-Image
GLM-Image
نظرة عامة
يعتمد نموذج GLM-Image لتوليد الصور على بنية فك تشفير هجينة تجمع بين التوليد الذاتي التتابعي (autoregressive) والتفكيك التدرجي (diffusion)، مما يدفع بفعالية الحد الأعلى من الوضوح البصري والتفاصيل الدقيقة. وبشكل عام، تتوافق جودة توليد الصور فيه مع الأساليب القياسية في الصناعة القائمة على LDM، مع إظهار مزايا كبيرة في سيناريوهات توليد الصور التي تتطلب كثافة معرفية.
بنية النموذج: تصميم هجين لمفكك يعتمد على التوليد الذاتي والتوزيع
- المولّد التلقائي التتابعي: نموذج بـ 9 مليارات من المعاملات مُهيّأ من GLM-4-9B-0414، مع قاموس موسّع لدمج الرموز البصرية. يولّد النموذج أولاً ترميزاً مضغوطاً يتكون من حوالي 256 رمزاً، ثم يتمدد إلى 1K–4K رمزاً، مما يقابل مخرجات صور عالية الدقة بحجم 1K–2K. يمكنك الاطلاع على نموذج AR في الفئة
GlmImageForConditionalGenerationضمن مكتبةtransformers. - مفكّك الانتشار: مفكّك يحتوي على 7 مليارات من المعاملات، مبني على بنية DiT أحادية التيار لفكّ ترميز الصور في الفضاء الكامن. وهو مزوّد بوحدة نصية لمشفّر الرموز (Glyph Encoder)، مما يحسّن بشكل كبير دقة عرض النص داخل الصور.
التدريب بعد التدريب باستخدام التعلم المعزز المنفصل: يقدم النموذج استراتيجية تغذية راجعة دقيقة ومنظمة على شكل وحدات باستخدام خوارزمية GRPO، مما يعزز بشكل كبير كلًا من الفهم الدلالي وجودة التفاصيل البصرية.
- وحدة التوليد التتابعي: توفر إشارات تغذية راجعة منخفضة التردد تركز على الجماليات والمواءمة الدلالية، مما يحسّن من اتباع التعليمات والتعبير الفني.
- وحدة فك الترميز: توفر تغذية راجعة عالية التردد تستهدف دقة التفاصيل ودقة النص، مما يؤدي إلى نسيج وإضاءة وتكرار ألوان واقعية للغاية، بالإضافة إلى عرض نص أكثر دقة.
يدعم GLM-Image كلًا من توليد الصور من النص وتوليد الصور من الصور ضمن نموذج واحد
- النص إلى صورة: توليد صور عالية التفاصيل من الأوصاف النصية، مع أداء قوي بشكل خاص في السيناريوهات كثيفة المعلومات.
- من صورة إلى صورة: يدعم مجموعة واسعة من المهام، بما في ذلك تحرير الصور، ونقل الأسلوب، والاتساق متعدد العناصر، والتوليد مع الحفاظ على الهوية للأشخاص والأشياء.
تمت مساهمة خط المعالجة هذا بواسطة zRzRzRzRzRzRzR. يمكن العثور على قاعدة الأكواد هنا.
أمثلة على الاستخدام
توليد الصور من النص
import torch
from diffusers.pipelines.glm_image import GlmImagePipeline
pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image",dtype=torch.bfloat16,device_map="cuda")
prompt = "A beautifully designed modern food magazine style dessert recipe illustration, themed around a raspberry mousse cake. The overall layout is clean and bright, divided into four main areas: the top left features a bold black title 'Raspberry Mousse Cake Recipe Guide', with a soft-lit close-up photo of the finished cake on the right, showcasing a light pink cake adorned with fresh raspberries and mint leaves; the bottom left contains an ingredient list section, titled 'Ingredients' in a simple font, listing 'Flour 150g', 'Eggs 3', 'Sugar 120g', 'Raspberry puree 200g', 'Gelatin sheets 10g', 'Whipping cream 300ml', and 'Fresh raspberries', each accompanied by minimalist line icons (like a flour bag, eggs, sugar jar, etc.); the bottom right displays four equally sized step boxes, each containing high-definition macro photos and corresponding instructions, arranged from top to bottom as follows: Step 1 shows a whisk whipping white foam (with the instruction 'Whip egg whites to stiff peaks'), Step 2 shows a red-and-white mixture being folded with a spatula (with the instruction 'Gently fold in the puree and batter'), Step 3 shows pink liquid being poured into a round mold (with the instruction 'Pour into mold and chill for 4 hours'), Step 4 shows the finished cake decorated with raspberries and mint leaves (with the instruction 'Decorate with raspberries and mint'); a light brown information bar runs along the bottom edge, with icons on the left representing 'Preparation time: 30 minutes', 'Cooking time: 20 minutes', and 'Servings: 8'. The overall color scheme is dominated by creamy white and light pink, with a subtle paper texture in the background, featuring compact and orderly text and image layout with clear information hierarchy."
image = pipe(
prompt=prompt,
height=32 * 32,
width=36 * 32,
num_inference_steps=30,
guidance_scale=1.5,
generator=torch.Generator(device="cuda").manual_seed(42), # or "mps", "xpu", "cpu"
).images[0]
image.save("output_t2i.png")توليد صورة من صورة
import torch
from diffusers.pipelines.glm_image import GlmImagePipeline
from PIL import Image
pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image",dtype=torch.bfloat16,device_map="cuda")
image_path = "cond.jpg"
prompt = "Replace the background of the snow forest with an underground station featuring an automatic escalator."
image = Image.open(image_path).convert("RGB")
image = pipe(
prompt=prompt,
image=[image], # can input multiple images for multi-image-to-image generation such as [image, image1]
height=33 * 32,
width=32 * 32,
num_inference_steps=30,
guidance_scale=1.5,
generator=torch.Generator(device="cuda").manual_seed(42), # or "mps", "xpu", "cpu"
).images[0]
image.save("output_i2i.png")- بما أن نموذج AR المستخدم في GLM-Image مُهيأ افتراضيًا مع
do_sample=Trueودرجة حرارة0.95، فقد تختلف الصور المولدة اختلافًا كبيرًا بين التشغيلات. لا نوصي بإعداد do_sample=False، لأن ذلك قد يؤدي إلى مخرجات غير صحيحة أو متدهورة من نموذج AR.
GlmImagePipeline
فئة diffusers.GlmImagePipeline
< source >( tokenizer: ByT5Tokenizerprocessor: GlmImageProcessortext_encoder: T5EncoderModelvision_language_encoder: GlmImageForConditionalGenerationvae: AutoencoderKLtransformer: GlmImageTransformer2DModelscheduler: FlowMatchEulerDiscreteScheduler )
المعاملات
- tokenizer (
PreTrainedTokenizer) — مُقسِّم النص لمُشفِّر النص. - processor (
AutoProcessor) — المعالج الخاص بنموذج AR للتعامل مع قوالب الدردشة والتجزئة. - text_encoder (
T5EncoderModel) — مُشفِّر نص ثابت (غير قابل للتعديل) لتضمينات الرموز. - vision_language_encoder (
GlmImageForConditionalGeneration) — نموذج AR الذي يولّد رموز الصور من أوامر نصية. - vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
- transformer (GlmImageTransformer2DModel) — نموذج transformer مشروط بالنص لإزالة الضوضاء من الكامنات المُرمّزة للصورة (DiT).
- scheduler (SchedulerMixin) —
مجدول يُستخدم بالاقتران مع
transformerلإزالة الضوضاء من الكامنات المُرمّزة للصورة.
خط أنابيب لتوليد الصور من النص باستخدام GLM-Image.
تدمج هذه المسار (pipeline) كلا من نموذج AR (التوليد الذاتي) لتوليد الرموز (tokens) ونموذج DiT (محوّل الانتشار) لفك ترميز الصور.
__call__
< source >( prompt: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list[int] | None = Nonesigmas: list[float] | None = Noneguidance_scale: float = 1.5num_images_per_prompt: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprior_token_ids: typing.Optional[torch.Tensor] = Noneprior_token_image_ids: list[torch.Tensor] | None = Nonesource_image_grid_thw: list[torch.Tensor] | None = Nonecrops_coords_top_left: tuple = (0, 0)output_type: str = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 2048 ) → GlmImagePipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. يجب أن تحتوي على معلومات الأبعاد بالصيغة ’H W ’ حيث H و W هما أبعاد الرموز (d32). مثال: “غروب جميل 36 24 ” يولّد صورة بأبعاد 1152x768. - image — صور شرطية اختيارية لتوليد الصور من الصور.
- height (
int، اختياري) — الارتفاع بالبكسلات. إذا لم يُقدَّم، يُشتق من معلومات شكل الموجه. - width (
int، اختياري) — العرض بالبكسل. إذا لم يُقدَّم، يُشتق من معلومات شكل الموجه. - num_inference_steps (
int، اختياري، القيمة الافتراضية50) — عدد خطوات إزالة الضوضاء في DiT. - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، يتم استخدام الجدول الافتراضي للمجدول لـnum_inference_steps. - sigmas (
list[float]، اختياري) — قيم sigmas مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، يتم استخدام الجدول الافتراضي للمجدول. - guidance_scale (
float، اختياري، القيمة الافتراضية1.5) — مقياس التوجيه للتوجيه الحر من التصنيف. - num_images_per_prompt (
int، اختياري، القيمة الافتراضية1) — عدد الصور التي سيتم توليدها لكل موجه. - generator (
torch.Generator، اختياري) — مولّد عشوائي للتكرارية. - latents (
torch.Tensor، اختياري) — كائنات ضجيج مُولّدة مسبقًا تُستخدم كمدخلات لتوليد الصور. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. إذا لم تُقدَّم، فسيتم توليد التضمينات منprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. تُستخدم عند تمكين التوجيه الحر من التصنيف (classifier-free guidance). - prior_token_ids (
torch.Tensor، اختياري) — معرّفات الرموز السابقة المُولَّدة مسبقًا منgenerate_prior_tokens. إذا تم تقديمها، يتم تجاوز التوليد السابق. - prior_token_image_ids (
list[torch.Tensor]، اختياري) — معرّفات رموز الصور المرتبطة بـprior_token_ids. - source_image_grid_thw (
list[torch.Tensor]، اختياري) — معلومات شبكة THW لكل عينة لرموز الصورة المصدرية. - crops_coords_top_left (
tuple[int, int]، اختياري، القيمة الافتراضية(0, 0)) — إحداثيات الزاوية العلوية اليسرى للمقتطع المستخدم لتضمين الشروط. - output_type (
str، اختياري، الافتراضي"pil") — صيغة الإخراج: “pil” أو “np” أو “latent”. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاعGlmImagePipelineOutputبدلاً من tuple عادي. - attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorإذا تم تحديده. - callback_on_step_end (
Callable،PipelineCallback،MultiPipelineCallbacks، اختياري) — دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء. - callback_on_step_end_tensor_inputs (
list[str]، اختياري) — مدخلات المصفوفات التي تُمرَّر إلىcallback_on_step_end. - max_sequence_length (
int، اختياري، القيمة الافتراضية2048) — أقصى طول للتسلسل في مُشفِّر النص.
يعيد
GlmImagePipelineOutput أو tuple
الصور المولّدة.
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> import torch
>>> from diffusers import GlmImagePipeline
>>> pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt).images[0]
>>> image.save("output.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonedevice: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = Nonemax_sequence_length: int = 2048 )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - do_classifier_free_guidance (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام classifier free guidance أم لا. - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي يجب توليدها لكل موجه. جهاز torch الذي سيتم وضع التضمينات الناتجة عليه - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - device — (
torch.device، اختياري): جهاز torch - dtype — (
torch.dtype، اختياري): نوع بيانات torch - max_sequence_length (
int، القيمة الافتراضية2048) — الحد الأقصى لطول التسلسل في الموجه المُرمَّز. يمكن ضبطه على قيم أخرى، لكن قد يؤدي ذلك إلى نتائج أقل جودة.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
generate_prior_tokens
< source >( prompt: str | list[str]height: intwidth: intimage: list[list[PIL.Image.Image]] | None = Nonedevice: typing.Optional[torch.device] = Nonegenerator: typing.Optional[torch.Generator] = None ) → Tuple of
المعاملات
- prompt — موجه واحد أو قائمة بالموجّهات
- height — ارتفاع الصورة المستهدف
- width — عرض الصورة المستهدف
- image — مدخل صورة مُعايَر على شكل List[List[PIL.Image]]. يجب التحقق منه مسبقًا وتعايرته باستخدام _validate_and_normalize_images() قبل استدعاء هذه الطريقة.
- device — الجهاز المستهدف
- generator — مولّد عشوائي للتكرارية
يعيد
مجموعة من
- prior_token_ids: مصفوفة (Tensor) بأبعاد (batch_size, num_tokens) تحتوي على الرموز السابقة المُوسَّعة
- prior_token_image_ids_per_sample: قائمة من المصفوفات (tensors)، واحدة لكل عينة. تحتوي كل مصفوفة على معرّفات الرموز (token ids) المُوسَّعة (upsampled) لجميع صور الشرط (condition images) في تلك العينة. تكون القيمة None في حالة التوليد من نص إلى صورة (t2i).
- source_image_grid_thw_per_sample: قائمة من الموترات (tensors)، واحد لكل عينة. لكل موتر شكل (num_condition_images, 3) مع معلومات الشبكة المُوسَّعة (upsampled). تكون None لـ t2i.
أنشئ الرموز المسبقة لنموذج DiT باستخدام نموذج AR.
استخراج نصوص الرموز من الأوامر. تُرجع قائمة قوائم لمعالجة الدُفعات.
GlmImagePipelineOutput
فئة diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
فئة الإخراج لخطوط أنابيب CogView3.