Buckets:

mishig's picture
|
download
raw
21.1 kB

مرخّص بموجب ترخيص Apache الإصدار 2.0 (المسمى "الترخيص")

لا يجوز لك استخدام هذا الملف إلا وفقاً لشروط الترخيص.

يمكنك الحصول على نسخة من الترخيص في

http://www.apache.org/licenses/LICENSE-2.0

ما لم يقتضِ ذلك القانون المعمول به أو ما اتُّفق عليه كتابياً، البرمجيات

تُوزَّع بموجب الرخصة على أساس "كما هي"،

بلا أي ضمانات أو شروط من أي نوع، سواء صريحة أو ضمنية.

راجع الترخيص لمعرفة اللغة المحددة التي تحكم الصلاحيات و

الشروط المحددة في الترخيص.

-->

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]]

diffusers.GlmImagePipeline[[diffusers.GlmImagePipeline]]

diffusers.GlmImagePipeline(tokenizer: ByT5Tokenizer, processor: GlmImageProcessor, text_encoder: T5EncoderModel, vision_language_encoder: GlmImageForConditionalGeneration, vae: AutoencoderKL, transformer: GlmImageTransformer2DModel, scheduler: FlowMatchEulerDiscreteScheduler)

المصدر

المعاملات:

tokenizer (PreTrainedTokenizer) : مُرمِّز (Tokenizer) لمُرمِّز النص (text encoder).

processor (AutoProcessor) : مُعالِج لنموذج AR للتعامل مع قوالب المحادثة والتجزئة (Tokenization).

text_encoder (T5EncoderModel) : مُشفِّر نص ثابت لتضمينات الرموز.

vision_language_encoder (GlmImageForConditionalGeneration) : نموذج AR الذي يولّد رموز الصور من أوامر نصية.

vae (AutoencoderKL) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.

transformer (GlmImageTransformer2DModel) : نموذج تحويل مشروط بالنص لإزالة الضوضاء من الكامنات المُرمّزة للصورة (DiT).

scheduler (SchedulerMixin) : مُجدول يُستخدم بالاقتران مع transformer لإزالة الضوضاء من الكامنات المُرمّزة للصورة.

خط أنابيب لتوليد الصور من النص باستخدام GLM-Image.

تدمج هذه المسار (pipeline) كلا من نموذج AR (التوليد الذاتي) لتوليد الرموز (tokens) ونموذج DiT (محوّل الانتشار) لفك ترميز الصور.

call[[diffusers.GlmImagePipeline.call]]

__call__(prompt: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] | None = None, sigmas: list[float] | None = None, guidance_scale: float = 1.5, num_images_per_prompt: int = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prior_token_ids: typing.Optional[torch.Tensor] = None, prior_token_image_ids: list[torch.Tensor] | None = None, source_image_grid_thw: list[torch.Tensor] | None = None, crops_coords_top_left: tuple[int, int] = (0, 0), output_type: str = 'pil', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 2048)

المصدر

المعاملات:

prompt (str أو list[str]، اختياري) : الموجه أو الموجهات التي توجّه توليد الصورة. يجب أن تحتوي على معلومات الأبعاد بالصيغة 'H W' حيث H و W هما أبعاد الرموز (d32). مثال: "A beautiful sunset36 24" يولّد صورة بأبعاد 1152x768.

image : صور شرطية اختيارية لتوليد الصور من الصور.

height (int, اختياري) : الارتفاع بالبكسلات. إذا لم يُقدَّم، يُشتق من معلومات شكل الموجه.

width (int, اختياري) : العرض بالبكسلات. إذا لم يُقدَّم، يُشتق من معلومات شكل الموجه.

num_inference_steps (int، اختياري، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء في DiT.

timesteps (list[int]، اختياري) : خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم الجدولة الافتراضية للمجدول لـnum_inference_steps.

sigmas (list[float]، اختياري) : قيم سيجما مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، يتم استخدام الجدول الافتراضي للمجدول.

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[[diffusers.GlmImagePipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None, max_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 dtype

max_sequence_length (int، القيمة الافتراضية هي 2048) : الحد الأقصى لطول التسلسل في الموجه المُرمَّز. يمكن ضبطه على قيم أخرى، لكن قد يؤدي ذلك إلى نتائج أقل جودة.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

generate_prior_tokens[[diffusers.GlmImagePipeline.generate_prior_tokens]]

generate_prior_tokens(prompt: str | list[str], height: int, width: int, image: list[list[PIL.Image.Image]] | None = None, device: typing.Optional[torch.device] = None, generator: typing.Optional[torch.Generator] = None)

المصدر

المعاملات:

prompt : موجه واحد أو قائمة بالموجّهات

height : ارتفاع الصورة المستهدفة

width : عرض الصورة المستهدفة

image : مدخلات الصور المُطبَّعة على شكل List[List[PIL.Image]]. يجب التحقق منها مسبقًا باستخدام _validate_and_normalize_images() قبل استدعاء هذه الطريقة.

device : جهاز الهدف

generator : مولّد عشوائي للتكرارية

يعيد: Tuple of

  • prior_token_ids: مصفوفة (Tensor) بأبعاد (batch_size, num_tokens) تحتوي على الرموز السابقة المُوسَّعة
  • prior_token_image_ids_per_sample: قائمة من المصفوفات (tensors)، واحدة لكل عينة. تحتوي كل مصفوفة على معرّفات الرموز المسبقة (prior token ids) المُوسَّعة (upsampled) لجميع صور الشرط (condition images) في تلك العينة. تكون القيمة None في حالة التوليد من نص إلى صورة (t2i).
  • source_image_grid_thw_per_sample: قائمة من الموترات (tensors)، واحد لكل عينة. لكل موتر شكل (num_condition_images, 3) مع معلومات الشبكة المُوسَّعة (upsampled grid info). تكون None لـ t2i.

أنشئ الرموز المسبقة لنموذج DiT باستخدام نموذج AR.

get_glyph_texts[[diffusers.GlmImagePipeline.get_glyph_texts]]

get_glyph_texts(prompt)

المصدر

استخراج نصوص الرموز من الأوامر. تُرجع قائمة قوائم لمعالجة الدُفعات.

GlmImagePipelineOutput[[diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput]]

diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput[[diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput]]

diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray)

المصدر

المعاملات:

images (List[PIL.Image.Image] أو np.ndarray) : قائمة من صور PIL منزوعة الضوضاء بطول batch_size أو مصفوفة numpy بأبعاد (batch_size, height, width, num_channels). تمثل صور PIL أو مصفوفة numpy صورًا منزوعة الضوضاء من خط أنابيب الانتشار.

فئة الإخراج لخطوط أنابيب CogView3.

Xet Storage Details

Size:
21.1 kB
·
Xet hash:
71035470b6eef77c0374f92c23c3070427dea8f443912fa4b0c96c3f5c9f4347

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.