Diffusers documentation

Lumina2

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

Lumina2

LoRA

Lumina Image 2.0: A Unified and Efficient Image Generative Model là một transformer khuếch tán dựa trên luồng (flow-based diffusion transformer) với 2 tỷ tham số, có khả năng tạo ra các hình ảnh đa dạng từ mô tả bằng văn bản.

Tóm tắt từ bài báo là:

Chúng tôi giới thiệu Lumina-Image 2.0, một mô hình text-to-image tiên tiến vượt qua các phương pháp state-of-the-art trước đó trên nhiều benchmark, đồng thời làm sáng tỏ tiềm năng của nó trong việc phát triển thành một mô hình trí tuệ thị giác tổng quát. Lumina-Image 2.0 thể hiện ba đặc tính chính: (1) Thống nhất – nó áp dụng kiến trúc thống nhất, coi các token văn bản và ảnh như một chuỗi liên kết, cho phép tương tác liên phương thức tự nhiên và tạo điều kiện mở rộng tác vụ. Ngoài ra, vì các captioner chất lượng cao có thể cung cấp các cặp huấn luyện văn bản-ảnh được căn chỉnh ngữ nghĩa tốt hơn, chúng tôi giới thiệu một hệ thống captioning thống nhất, UniCaptioner, tạo ra các caption toàn diện và chính xác cho mô hình. Điều này không chỉ đẩy nhanh sự hội tụ của mô hình mà còn tăng cường khả năng tuân thủ prompt, xử lý prompt có độ dài thay đổi và khả năng tổng quát hóa tác vụ thông qua các prompt template. (2) Hiệu quả – để cải thiện hiệu quả của kiến trúc thống nhất, chúng tôi phát triển một bộ kỹ thuật tối ưu hóa nhằm cải thiện việc học ngữ nghĩa và tạo texture chi tiết trong quá trình huấn luyện, đồng thời tích hợp các chiến lược tăng tốc suy luận mà không làm giảm chất lượng ảnh. (3) Minh bạch – chúng tôi mã nguồn mở tất cả các chi tiết huấn luyện, code và mô hình để đảm bảo khả năng tái lập hoàn toàn, với mục tiêu thu hẹp khoảng cách giữa các nhóm nghiên cứu đóng có nguồn lực dồi dào và các nhà phát triển độc lập.

Hãy chắc chắn xem qua hướng dẫn về Schedulers để tìm hiểu cách khám phá sự đánh đổi giữa tốc độ và chất lượng của scheduler, và xem phần tái sử dụng các thành phần giữa các pipeline để tìm hiểu cách nạp các thành phần giống nhau vào nhiều pipeline một cách hiệu quả.

Sử dụng tải Single File với Lumina Image 2.0

Tải tệp đơn cho Lumina Image 2.0 có sẵn cho Lumina2Transformer2DModel

import torch
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline

ckpt_path = "https://huggingface.co/Alpha-VLLM/Lumina-Image-2.0/blob/main/consolidated.00-of-01.pth"
transformer = Lumina2Transformer2DModel.from_single_file(
    ckpt_path, dtype=torch.bfloat16
)

pipe = Lumina2Pipeline.from_pretrained(
    "Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
image = pipe(
    "a cat holding a sign that says hello",
    generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("lumina-single-file.png")

Sử dụng các checkpoint lượng tử hóa GGUF với Lumina Image 2.0

Các checkpoint lượng tử hóa GGUF cho Lumina2Transformer2DModel có thể được nạp thông qua from_single_file với GGUFQuantizationConfig

from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline, GGUFQuantizationConfig 

ckpt_path = "https://huggingface.co/calcuis/lumina-gguf/blob/main/lumina2-q4_0.gguf"
transformer = Lumina2Transformer2DModel.from_single_file(
    ckpt_path,
    quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
    dtype=torch.bfloat16,
)

pipe = Lumina2Pipeline.from_pretrained(
    "Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
image = pipe(
    "a cat holding a sign that says hello",
    generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("lumina-gguf.png")

Lumina2Pipeline

lớp diffusers.Lumina2Pipeline

< >

( transformer: Lumina2Transformer2DModelscheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: Gemma2PreTrainedModeltokenizer: GemmaTokenizer )

Tham số

  • 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.
  • text_encoder (Gemma2PreTrainedModel) — Bộ mã hóa văn bản Gemma2 đã đóng băng.
  • tokenizer (GemmaTokenizer hoặc GemmaTokenizerFast) — Tokenizer của Gemma.
  • transformer (Transformer2DModel) — Một Transformer2DModel có điều kiện văn bản để khử nhiễu các latents ảnh đã mã hóa.
  • 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 Lumina-T2I.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các pipeline (chẳng hạn như tải xuống hoặc lưu, chạy trên một thiết bị cụ thể, v.v.)

__call__

< >

( prompt: str | list[str] = Nonewidth: int | None = Noneheight: int | None = Nonenum_inference_steps: int = 30guidance_scale: float = 4.0negative_prompt: str | list[str] = Nonesigmas: list = Nonenum_images_per_prompt: int | None = 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] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']system_prompt: str | None = Nonecfg_trunc_ratio: float = 1.0cfg_normalization: bool = Truemax_sequence_length: int = 256 ) → ImagePipelineOutput 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. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • num_inference_steps (int, tùy chọn, mặc định là 30) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn với chi phí là suy luận chậm hơn.
  • sigmas (list[float], tùy chọn) — Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch hỗ trợ đối số sigmas trong phương thức set_timesteps của chúng. Nếu không được định nghĩa, hành vi mặc định khi num_inference_steps được truyền sẽ được sử dụng.
  • guidance_scale (float, tùy chọn, mặc định là 4.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặt guidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với prompt văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.
  • 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.
  • height (int, tùy chọn, mặc định là self.unet.config.sample_size) — Chiều cao của hình ảnh được tạo ra, tính bằng pixel.
  • width (int, tùy chọn, mặc định là self.unet.config.sample_size) — Chiều rộng của hình ảnh được tạo ra, tính bằng pixel.
  • generator (torch.Generator hoặc list[torch.Generator], tuỳ chọn) — Một hoặc một danh sách torch generator để đảm bảo quá trình sinh là tất định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
  • 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.
  • prompt_attention_mask (torch.Tensor, tùy chọn) — Mặt nạ chú ý (attention mask) được tạo sẵn cho các vector nhúng văn bản.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Đối với Lumina-T2I, prompt âm này nên là "". Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • negative_prompt_attention_mask (torch.Tensor, tùy chọn) — Mặt nạ chú ý (attention mask) được tạo sẵn cho các vector nhúng văn bản âm (negative text embeddings).
  • output_type (str, tùy chọn, mặc định là "pil") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL: PIL.Image.Image hoặc np.array.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một ~pipelines.stable_diffusion.IFPipelineOutput thay vì một tuple thông thường hay không.
  • attention_kwargs — Một từ điển kwargs mà nếu được chỉ định sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
  • callback_on_step_end (Callable, tùy chọn) — Một hàm được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận. Hàm này được gọi với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, optional) — Danh sách các tensor đầu vào cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
  • system_prompt (str, tùy chọn) — Lệnh hệ thống (system prompt) được sử dụng cho việc tạo ảnh.
  • cfg_trunc_ratio (float, tùy chọn, mặc định là 1.0) — Tỷ lệ của khoảng thời gian bước (timestep) để áp dụng thang độ hướng dẫn dựa trên chuẩn hóa.
  • cfg_normalization (bool, tùy chọn, mặc định là True) — Có áp dụng thang độ hướng dẫn dựa trên chuẩn hóa hay không.
  • max_sequence_length (int, mặc định là 256) — Chiều dài tối đa của chuỗi để sử dụng với prompt.

Trả về

ImagePipelineOutput hoặc tuple

Nếu return_dict là True, ImagePipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh đã được tạo

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

Ví dụ:

>>> import torch
>>> from diffusers import Lumina2Pipeline

>>> pipe = Lumina2Pipeline.from_pretrained("Alpha-VLLM/Lumina-Image-2.0", torch_dtype=torch.bfloat16)
>>> # Enable memory optimizations.
>>> pipe.enable_model_cpu_offload()

>>> prompt = "Upper body of a young woman in a Victorian-era outfit with brass goggles and leather straps. Background shows an industrial revolution cityscape with smoky skies and tall, metal structures"
>>> image = pipe(prompt).images[0]

encode_prompt

< >

( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str | list[str] = Nonenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonesystem_prompt: str | None = Nonemax_sequence_length: int = 256 )

Tham số

  • prompt (str hoặc list[str], tùy chọn) — prompt cần được mã hóa
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1). Đối với Lumina-T2I, giá trị này nên là "".
  • 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
  • device — (torch.device, tùy chọn): thiết bị torch để đặt các embedding kết quả lên
  • 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.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Đối với Lumina-T2I, đây nên là các embedding của chuỗi "".
  • max_sequence_length (int, mặc định là 256) — Độ dài tối đa của chuỗi được sử dụng cho prompt.

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

Update on GitHub