# Lumina-T2X
![concepts](https://github.com/Alpha-VLLM/Lumina-T2X/assets/54879512/9f52eabb-07dc-4881-8257-6d8a5f2a0a5a)

[Lumina-Next: Làm cho Lumina-T2X mạnh hơn và nhanh hơn với Next-DiT](https://huggingface.co/papers/2406.18583) từ Alpha-VLLM, OpenGVLab, Shanghai AI Laboratory.

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

*Lumina-T2X là một gia đình các mô hình mới nổi thuộc dòng Flow-based Large Diffusion Transformers (Flag-DiT), thiết lập một khung thống nhất để biến nhiễu thành các phương thức khác nhau, chẳng hạn như hình ảnh và video, dựa trên các chỉ dẫn văn bản. Mặc dù có tiềm năng lớn, Lumina-T2X vẫn gặp phải các thách thức như sự bất ổn trong huấn luyện, suy luận chậm và các hiện tượng ngoại suy sai lệch. Trong bài báo này, chúng tôi giới thiệu Lumina-Next, một phiên bản cải tiến của Lumina-T2X, thể hiện hiệu suất tạo ra mạnh mẽ hơn với hiệu quả huấn luyện và suy luận cao hơn. Chúng tôi bắt đầu bằng một phân tích toàn diện về kiến trúc Flag-DiT và xác định một số thành phần chưa tối ưu, sau đó giải quyết chúng bằng cách giới thiệu kiến trúc Next-DiT với 3D RoPE và các phép chuẩn hóa dạng sandwich. Để cho phép ngoại suy độ phân giải tốt hơn, chúng tôi so sánh kỹ lưỡng các phương pháp ngoại suy ngữ cảnh khác nhau được áp dụng cho việc tạo hình ảnh từ văn bản với 3D RoPE, và đề xuất Frequency- and Time-Aware Scaled RoPE được thiết kế riêng cho các diffusion transformer. Ngoài ra, chúng tôi giới thiệu lịch rời rạc hóa thời gian dạng sigmoid để giảm số bước lấy mẫu khi giải Flow ODE và phương pháp Context Drop để gộp các token thị giác dư thừa nhằm đánh giá mạng nhanh hơn, từ đó tăng tốc độ lấy mẫu tổng thể một cách hiệu quả. Nhờ những cải tiến này, Lumina-Next không chỉ nâng cao chất lượng và hiệu quả của việc tạo hình ảnh từ văn bản cơ bản mà còn thể hiện khả năng ngoại suy độ phân giải vượt trội và khả năng tạo đa ngôn ngữ bằng cách sử dụng các LLM dựa trên decoder làm bộ mã hóa văn bản, tất cả đều theo cách zero-shot. Để xác nhận thêm Lumina-Next như một khung tạo ra đa năng, chúng tôi triển khai nó trên nhiều nhiệm vụ khác nhau bao gồm nhận diện thị giác, đa góc nhìn, âm thanh, nhạc và tạo đám mây điểm, thể hiện hiệu suất mạnh mẽ trên các lĩnh vực này. Bằng cách phát hành tất cả mã nguồn và trọng số mô hình tại https://github.com/Alpha-VLLM/Lumina-T2X, chúng tôi hướng tới việc thúc đẩy sự phát triển của AI tạo ra thế hệ tiếp theo có khả năng mô hình hóa phổ quát.*

**Những điểm nổi bật**: Lumina-Next là một Diffusion Transformer thế hệ tiếp theo, nâng cao đáng kể khả năng tạo ảnh từ văn bản, tạo đa ngôn ngữ và hiệu suất đa nhiệm bằng cách giới thiệu kiến trúc Next-DiT, 3D RoPE, và RoPE nhận thức tần số và thời gian, cùng nhiều cải tiến khác.

Lumina-Next có các thành phần sau:
* Nó cải thiện hiệu quả lấy mẫu với ít Bước hơn và nhanh hơn.
* Nó sử dụng Next-DiT làm xương sống transformer với Sandwichnorm 3D RoPE và Grouped-Query Attention.
* Nó sử dụng Scaled RoPE nhận thức về Tần số và Thời gian.

---

[Lumina-T2X: Chuyển đổi văn bản sang bất kỳ phương thức, độ phân giải và thời lượng nào thông qua các Transformer khuếch tán lớn dựa trên luồng](https://huggingface.co/papers/2405.05945) từ Alpha-VLLM, OpenGVLab, Shanghai AI Laboratory.

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

*Sora hé lộ tiềm năng của việc mở rộng Diffusion Transformer để tạo ra các hình ảnh và video chân thực như thật ở các độ phân giải, tỷ lệ khung hình và thời lượng tùy ý, nhưng vẫn còn thiếu các chi tiết triển khai đầy đủ. Trong báo cáo kỹ thuật này, chúng tôi giới thiệu dòng Lumina-T2X - một loạt các Flow-based Large Diffusion Transformers (Flag-DiT) được trang bị zero-initialized attention, như một khung thống nhất được thiết kế để biến nhiễu thành hình ảnh, video, các đối tượng 3D đa góc nhìn và các đoạn âm thanh dựa trên các chỉ dẫn bằng văn bản. Bằng cách mã hóa không gian không gian-thời gian tiềm ẩn và tích hợp các placeholder có thể học được như các token [nextline] và [nextframe], Lumina-T2X thống nhất liền mạch các biểu diễn của các chế độ khác nhau trên các độ phân giải không gian-thời gian khác nhau. Cách tiếp cận thống nhất này cho phép huấn luyện trong một khung duy nhất cho các chế độ khác nhau và cho phép tạo ra dữ liệu đa chế độ một cách linh hoạt ở bất kỳ độ phân giải, tỷ lệ khung hình và độ dài nào trong quá trình suy luận. Các kỹ thuật tiên tiến như RoPE, RMSNorm và flow matching tăng cường tính ổn định, tính linh hoạt và khả năng mở rộng của Flag-DiT, cho phép các mô hình của Lumina-T2X mở rộng lên đến 7 tỷ tham số và mở rộng cửa sổ ngữ cảnh lên 128K token. Điều này đặc biệt hữu ích cho việc tạo ra các hình ảnh siêu nét với mô hình Lumina-T2I của chúng tôi và các video 720p dài với mô hình Lumina-T2V của chúng tôi. Đáng chú ý, Lumina-T2I, được hỗ trợ bởi Flag-DiT 5 tỷ tham số, chỉ cần 35% chi phí tính toán huấn luyện so với DiT ngây thơ 600 triệu tham số. Phân tích toàn diện hơn của chúng tôi nhấn mạnh khả năng sơ bộ của Lumina-T2X trong ngoại suy độ phân giải, chỉnh sửa độ phân giải cao, tạo ra các góc nhìn 3D nhất quán và tổng hợp các video với các chuyển cảnh liền mạch. Chúng tôi kỳ vọng việc mã nguồn mở Lumina-T2X sẽ thúc đẩy thêm sự sáng tạo, minh bạch và đa dạng trong cộng đồng AI tạo sinh.*

Bạn có thể tìm thấy mã nguồn gốc tại [Alpha-VLLM](https://github.com/Alpha-VLLM/Lumina-T2X) và tất cả các checkpoint khả dụng tại [Alpha-VLLM Lumina Family](https://huggingface.co/collections/Alpha-VLLM/lumina-family-66423205bedb81171fd0644b).

**Điểm nổi bật**: Lumina-T2X hỗ trợ mọi chế độ, độ phân giải và thời lượng.

Lumina-T2X có các thành phần sau:
* Nó sử dụng Large Diffusion Transformer dựa trên Flow làm khung xương
* Nó hỗ trợ các chế độ dữ liệu khác nhau với một backbone duy nhất cùng bộ mã hóa và bộ giải mã tương ứng.

Pipeline này được đóng góp bởi [PommesPeter](https://github.com/PommesPeter). Mã nguồn gốc có thể được tìm thấy [tại đây](https://github.com/Alpha-VLLM/Lumina-T2X). Trọng số gốc có thể được tìm thấy tại [hf.co/Alpha-VLLM](https://huggingface.co/Alpha-VLLM).

> [!TIP]
> Hãy chắc chắn xem qua [hướng dẫn](../../using-diffusers/schedulers) 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](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) để 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ả.

### Inference (Chuyển văn bản thành hình ảnh)

Sử dụng [`torch.compile`](https://huggingface.co/docs/diffusers/main/en/tutorials/fast_diffusion#torchcompile) để giảm độ trễ suy luận.

Đầu tiên, tải pipeline:

```python
from diffusers import LuminaPipeline
import torch

pipeline = LuminaPipeline.from_pretrained(
	"Alpha-VLLM/Lumina-Next-SFT-diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"
```

Sau đó, thay đổi bố trí bộ nhớ của các thành phần `transformer` và `vae` trong pipeline thành `torch.channels-last`:

```python
pipeline.transformer.to(memory_format=torch.channels_last)
pipeline.vae.to(memory_format=torch.channels_last)
```

Cuối cùng, biên dịch các thành phần và chạy suy luận:

```python
pipeline.transformer = torch.compile(pipeline.transformer, mode="max-autotune", fullgraph=True)
pipeline.vae.decode = torch.compile(pipeline.vae.decode, mode="max-autotune", fullgraph=True)

image = pipeline(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").images[0]
```

## Lượng tử hóa

Quantization giúp giảm yêu cầu về bộ nhớ của các mô hình rất lớn bằng cách lưu trữ trọng số mô hình trong kiểu dữ liệu có độ chính xác thấp hơn. Tuy nhiên, lượng tử hóa có thể ảnh hưởng khác nhau đến chất lượng video tùy thuộc vào mô hình video.

Tham khảo phần tổng quan [Lượng tử hóa](../../quantization/overview) để tìm hiểu thêm về các backend lượng tử hóa được hỗ trợ và cách chọn một backend lượng tử hóa phù hợp với trường hợp sử dụng của bạn. Ví dụ bên dưới minh họa cách tải một [LuminaPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/lumina#diffusers.LuminaPipeline) đã được lượng tử hóa để suy luận bằng bitsandbytes.

```py
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, Transformer2DModel, LuminaPipeline
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel

quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
    "Alpha-VLLM/Lumina-Next-SFT-diffusers",
    subfolder="text_encoder",
    quantization_config=quant_config,
    dtype=torch.float16,
)

quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = Transformer2DModel.from_pretrained(
    "Alpha-VLLM/Lumina-Next-SFT-diffusers",
    subfolder="transformer",
    quantization_config=quant_config,
    dtype=torch.float16,
)

pipeline = LuminaPipeline.from_pretrained(
    "Alpha-VLLM/Lumina-Next-SFT-diffusers",
    text_encoder=text_encoder_8bit,
    transformer=transformer_8bit,
    dtype=torch.float16,
    device_map="balanced",
)

prompt = "a tiny astronaut hatching from an egg on the moon"
image = pipeline(prompt).images[0]
image.save("lumina.png")
```

## LuminaPipeline[[diffusers.LuminaPipeline]]

#### diffusers.LuminaPipeline[[diffusers.LuminaPipeline]]

```python
diffusers.LuminaPipeline(transformer: LuminaNextDiT2DModel, scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: GemmaPreTrainedModel, tokenizer: GemmaTokenizer)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/lumina/pipeline_lumina.py#L135)

**Tham số:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/vi/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh sang và từ các biểu diễn ẩn.

text_encoder (`GemmaPreTrainedModel`) : Bộ mã hóa văn bản Gemma đóng băng.

tokenizer (`GemmaTokenizer` hoặc `GemmaTokenizerFast`) : Tokenizer của Gemma.

transformer ([Transformer2DModel](/docs/diffusers/v0.43.0/vi/api/models/transformer2d#diffusers.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](/docs/diffusers/v0.43.0/vi/api/schedulers/overview#diffusers.SchedulerMixin)) : Một trình lập lịch được sử dụng kết hợp với `transformer` để khử nhiễu các latents ả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](/docs/diffusers/v0.43.0/vi/api/pipelines/overview#diffusers.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__[[diffusers.LuminaPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, width: int | None = None, height: int | None = None, num_inference_steps: int = 30, guidance_scale: float = 4.0, negative_prompt: str | list[str] = None, sigmas: list[float] = None, num_images_per_prompt: int | None = 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, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, clean_caption: bool = True, max_sequence_length: int = 256, scaling_watershed: float | None = 1.0, proportional_attn: bool | None = True, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'])
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/lumina/pipeline_lumina.py#L631)

**Tham số:**

prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt để hướng dẫn 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 được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải 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`, *optional*, 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 cái giá là suy luận chậm hơn.

sigmas (`list[float]`, *optional*) : 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ợ tham 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 vào sẽ được sử dụng.

guidance_scale (`float`, *optional*, mặc định là 4.0) : Thang độ dẫn hướng như được định nghĩa trong [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` được định nghĩa là `w` của phương trình 2. trong [Imagen Paper](https://huggingface.co/papers/2205.11487). 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`, *tuỳ chọn*, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.

height (`int`, *tuỳ 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`, *tuỳ chọn*, mặc định là self.unet.config.sample_size) : Độ rộng tính bằng pixel của hình ảnh được tạo ra.

generator (`torch.Generator` hoặc `list[torch.Generator]`, *tùy chọn*) : Một hoặc một danh sách [torch generator](https://pytorch.org/docs/stable/generated/torch.Generator.html) để đả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, đượ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ể được sử 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 ra 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 vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng 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 trước cho các vector nhúng văn bản.

negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng 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 trước cho các vector nhúng văn bản âm.

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](https://pillow.readthedocs.io/en/stable/): `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.

clean_caption (`bool`, *tùy chọn*, mặc định là `True`) : Có dọn dẹp chú thích trước khi tạo embeddings hay không. Yêu cầu `beautifulsoup4` và `ftfy` phải được cài đặt. Nếu các phụ thuộc này không được cài đặt, embeddings sẽ được tạo từ prompt thô.

max_sequence_length (`int` mặc định là 120) : Độ dài tối đa của chuỗi để sử dụng với `prompt`.

scaling_watershed (`float`, *tuỳ chọn*, mặc định là 1.0) : Ngưỡng tỷ lệ phân giải được Lumina sử dụng để chuyển đổi giữa chú ý ngữ cảnh tiêu chuẩn và chú ý ngữ cảnh mở rộng.

proportional_attn (`bool`, *tùy chọn*, mặc định là True) : Có nên tỷ lệ hóa chú ý (attention) theo tỷ lệ cho việc tạo nội dung độ phân giải cao hay không.

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 một 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 đầu vào tensor 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.

**Trả về:** [ImagePipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) hoặc `tuple`

Nếu `return_dict` là `True`, [ImagePipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/consistency_models#diffusers.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ụ:
```py
>>> import torch
>>> from diffusers import LuminaPipeline

>>> pipe = LuminaPipeline.from_pretrained("Alpha-VLLM/Lumina-Next-SFT-diffusers", 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[[diffusers.LuminaPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, negative_prompt: str | list[str] = None, num_images_per_prompt: int = 1, device: typing.Optional[torch.device] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, clean_caption: bool = False, **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/lumina/pipeline_lumina.py#L261)

**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]`, *tuỳ chọn*) : Prompt không dùng để hướng dẫn 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ỏ 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 vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng 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 vector nhúng văn bản âm đã được tạo trước. Đối với Lumina-T2I, đây nên là các vector nhúng của chuỗi "".

clean_caption (`bool`, mặc định là `False`) : Nếu `True`, hàm sẽ tiền xử lý và làm sạch chú thích được cung cấp trước khi mã hóa.

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.

