Diffusers documentation

GLM-Image

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GLM-Image

Tổng quan

GLM-Image là một mô hình tạo ảnh áp dụng kiến trúc giải mã lai tự hồi quy + khuếch tán, đẩy hiệu quả giới hạn trên của độ trung thực thị giác và các chi tiết tinh tế. Về chất lượng tạo ảnh nói chung, nó tương đương với các phương pháp dựa trên LDM chuẩn của ngành, đồng thời thể hiện lợi thế đáng kể trong các kịch bản tạo ảnh đòi hỏi nhiều kiến thức.

Kiến trúc mô hình: thiết kế bộ giải mã lai tự hồi quy + khuếch tán、

  • Bộ tạo tự hồi quy: một mô hình 9B tham số được khởi tạo từ GLM-4-9B-0414, với bảng từ vựng được mở rộng để tích hợp các token thị giác. Mô hình trước tiên tạo ra một mã hóa gọn gồm khoảng 256 token, sau đó mở rộng thành 1K–4K token, tương ứng với các đầu ra ảnh độ phân giải cao 1K–2K. Bạn có thể kiểm tra mô hình AR trong lớp GlmImageForConditionalGeneration của thư viện transformers.
  • Diffusion Decoder: một bộ giải mã 7B tham số dựa trên kiến trúc DiT đơn luồng để giải mã ảnh trong không gian ẩn. Nó được trang bị một mô-đun văn bản Glyph Encoder, cải thiện đáng kể khả năng hiển thị chính xác văn bản trong ảnh.

Huấn luyện sau với học tăng cường tách rời: mô hình giới thiệu một chiến lược phản hồi chi tiết, mô-đun hóa sử dụng thuật toán GRPO, cải thiện đáng kể cả khả năng hiểu ngữ nghĩa lẫn chất lượng chi tiết thị giác.

  • Module tự hồi quy: cung cấp các tín hiệu phản hồi tần số thấp tập trung vào thẩm mỹ và sự tương thích ngữ nghĩa, cải thiện khả năng tuân theo chỉ thị và tính biểu đạt nghệ thuật.
  • Mô-đun giải mã: cung cấp phản hồi tần số cao nhằm tối ưu độ trung thực của chi tiết và độ chính xác của văn bản, từ đó tạo ra kết cấu, ánh sáng và tái tạo màu sắc cực kỳ chân thực, đồng thời hiển thị văn bản chính xác hơn.

GLM-Image hỗ trợ cả tạo ảnh từ văn bản và tạo ảnh từ ảnh trong một mô hình duy nhất

  • Text-to-image: tạo ra các hình ảnh có độ chi tiết cao từ các mô tả bằng văn bản, với hiệu suất đặc biệt mạnh mẽ trong các kịch bản có mật độ thông tin cao.
  • Image-to-image: hỗ trợ nhiều tác vụ khác nhau, bao gồm chỉnh sửa ảnh, chuyển đổi phong cách, tính nhất quán đa chủ thể và tạo ảnh giữ nguyên danh tính cho người và vật thể.

Pipeline này được đóng góp bởi zRzRzRzRzRzRzR. Codebase có thể được tìm thấy tại đây.

Ví dụ sử dụng

Tạo hình ảnh từ văn bản

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")

Tạo ảnh từ ảnh

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")
  • Vì mô hình AR được sử dụng trong GLM-Image được cấu hình mặc định với do_sample=True và nhiệt độ là 0.95, các hình ảnh được tạo ra có thể khác nhau đáng kể giữa các lần chạy. Chúng tôi không khuyến nghị đặt do_sample=False, vì điều này có thể dẫn đến các đầu出不 chính xác hoặc suy thoái từ mô hình AR.

GlmImagePipeline

lớp diffusers.GlmImagePipeline

< >

( tokenizer: ByT5Tokenizerprocessor: GlmImageProcessortext_encoder: T5EncoderModelvision_language_encoder: GlmImageForConditionalGenerationvae: AutoencoderKLtransformer: GlmImageTransformer2DModelscheduler: FlowMatchEulerDiscreteScheduler )

Tham số

  • tokenizer (PreTrainedTokenizer) — Tokenizer cho bộ mã hóa văn bản.
  • processor (AutoProcessor) — Bộ xử lý cho mô hình AR để xử lý các mẫu chat và token hóa.
  • text_encoder (T5EncoderModel) — Bộ mã hóa văn bản đóng băng cho nhúng ký tự.
  • vision_language_encoder (GlmImageForConditionalGeneration) — Mô hình AR tạo ra các token hình ảnh từ các prompt văn bản.
  • vae (AutoencoderKL) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh từ và sang các biểu diễn ẩn.
  • transformer (GlmImageTransformer2DModel) — Một transformer có điều kiện văn bản để khử nhiễu các latents ảnh đã mã hóa (DiT).
  • scheduler (SchedulerMixin) — Một scheduler được sử dụng kết hợp với transformer để khử nhiễu các latents của ảnh đã mã hóa.

Pipeline để tạo ảnh từ văn bản sử dụng GLM-Image.

Pipeline này tích hợp cả mô hình AR (autoregressive) để tạo token và mô hình DiT (diffusion transformer) để giải mã hình ảnh.

__call__

< >

( 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

Tham số

  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Phải chứa thông tin hình dạng theo định dạng ’H W’ trong đó H và W là kích thước token (d32). Ví dụ: “A beautiful sunset36 24” tạo ra ảnh 1152x768.
  • image — Ảnh điều kiện tùy chọn cho việc tạo ảnh từ ảnh.
  • height (int, tùy chọn) — Chiều cao tính bằng pixel. Nếu không được cung cấp, sẽ được suy ra từ thông tin hình dạng của prompt.
  • width (int, tùy chọn) — Chiều rộng tính bằng pixel. Nếu không được cung cấp, giá trị sẽ được suy ra từ thông tin hình dạng của prompt.
  • num_inference_steps (int, tùy chọn, mặc định là 50) — Số bước khử nhiễu cho DiT.
  • timesteps (list[int], tùy chọn) — Các bước thời gian tùy chỉnh để sử dụng cho quá trình khử nhiễu. Nếu không được định nghĩa, lịch mặc định của trình lập lịch cho num_inference_steps sẽ được sử dụng.
  • sigmas (list[float], tùy chọn) — Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu. Nếu không được định nghĩa, lịch mặc định của trình lập lịch sẽ được sử dụng.
  • guidance_scale (float, tùy chọn, mặc định là 1.5) — Thang độ dẫn hướng cho classifier-free guidance.
  • num_images_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • generator (torch.Generator, tùy chọn) — Bộ tạo ngẫu nhiên để đảm bảo khả năng tái lập.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước để sử dụng làm đầu vào cho việc tạo ảnh.
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Nếu không được cung cấp, các embedding sẽ được tạo từ prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Được sử dụng khi classifier-free guidance được bật.
  • prior_token_ids (torch.Tensor, tùy chọn) — Các id token trước đã được tạo sẵn từ generate_prior_tokens. Nếu được cung cấp, quá trình tạo trước sẽ bị bỏ qua.
  • prior_token_image_ids (list[torch.Tensor], tùy chọn) — Các id token hình ảnh liên quan đến prior_token_ids.
  • source_image_grid_thw (list[torch.Tensor], tùy chọn) — Thông tin lưới THW cho từng mẫu của các token ảnh nguồn.
  • crops_coords_top_left (tuple[int, int], tuỳ chọn, mặc định là (0, 0)) — Tọa độ góc trên bên trái của vùng crop được sử dụng cho các embedding điều kiện.
  • output_type (str, tùy chọn, mặc định là "pil") — Định dạng đầu ra: “pil”, “np” hoặc “latent”.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một GlmImagePipelineOutput thay vì một tuple thông thường hay không.
  • attention_kwargs (dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đến AttentionProcessor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — Một hàm được gọi vào cuối mỗi bước khử nhiễu.
  • callback_on_step_end_tensor_inputs (list[str], tùy chọn) — Các tensor đầu vào được truyền đến callback_on_step_end.
  • max_sequence_length (int, tùy chọn, mặc định là 2048) — Chiều dài tối đa của chuỗi cho trình mã hóa văn bản.

Trả về

GlmImagePipelineOutput hoặc tuple

Hình ảnh được tạo ra.

Hàm được gọi khi gọi pipeline cho việc sinh.

Ví dụ:

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

< >

( 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 )

Tham số

  • prompt (str hoặc list[str], tùy chọn) — prompt cần được mã hóa
  • do_classifier_free_guidance (bool, tùy chọn, mặc định là True) — Có sử dụng classifier free guidance hay không.
  • num_images_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • device — (torch.device, tùy chọn): thiết bị torch
  • dtype — (torch.dtype, tùy chọn): torch dtype
  • max_sequence_length (int, mặc định là 2048) — Độ dài tối đa của chuỗi trong prompt đã được mã hóa. Có thể đặt thành các giá trị khác nhưng có thể dẫn đến kết quả kém hơn.

Mã hóa prompt thành các trạng thái ẩn của text encoder.

generate_prior_tokens

< >

( 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

Tham số

  • prompt — Một prompt duy nhất hoặc danh sách các prompt
  • height — Chiều cao của ảnh đích
  • width — Độ rộng của ảnh đích
  • image — Đầu vào ảnh đã chuẩn hóa dưới dạng List[List[PIL.Image]]. Cần được kiểm tra và chuẩn hóa trước bằng _validate_and_normalize_images() trước khi gọi phương thức này.
  • device — Thiết bị đích
  • generator — Bộ tạo ngẫu nhiên để đảm bảo khả năng tái lập

Trả về

Bộ

  • prior_token_ids: Tensor có shape (batch_size, num_tokens) chứa các token trước đã được upsample
  • prior_token_image_ids_per_sample: Danh sách các tensor, mỗi tensor tương ứng với một mẫu. Mỗi tensor chứa các id token prior đã được upsample cho tất cả các ảnh điều kiện trong mẫu đó. Là None đối với t2i.
  • source_image_grid_thw_per_sample: Danh sách các tensor, mỗi tensor tương ứng với một mẫu. Mỗi tensor có hình dạng (num_condition_images, 3) chứa thông tin lưới đã được mở rộng (upsampled). Giá trị là None đối với t2i.

Sinh các token trước cho mô hình DiT bằng mô hình AR.

get_glyph_texts

< >

( prompt )

Trích xuất văn bản glyph từ prompt. Trả về một danh sách các danh sách để xử lý theo lô.

GlmImagePipelineOutput

lớp diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarray )

Tham số

  • images (List[PIL.Image.Image] hoặc np.ndarray) — Danh sách các hình ảnh PIL đã khử nhiễu có độ dài batch_size hoặc mảng numpy có hình dạng (batch_size, height, width, num_channels). Các hình ảnh PIL hoặc mảng numpy thể hiện các hình ảnh đã khử nhiễu của pipeline khuếch tán.

Lớp đầu ra cho các pipeline của CogView3.

Update on GitHub