# Bria 3.2

Bria 3.2 là mô hình text-to-image thương mại hóa thế hệ tiếp theo. Với chỉ 4 tỷ tham số, nó mang lại thẩm mỹ và khả năng hiển thị văn bản vượt trội, được đánh giá là cho kết quả ngang bằng với các mô hình mã nguồn mở hàng đầu và vượt trội hơn các mô hình có giấy phép khác. Ngoài việc được xây dựng hoàn toàn trên dữ liệu có giấy phép, 3.2 còn cung cấp một số lợi thế cho việc sử dụng doanh nghiệp và thương mại:

- Hiệu suất tính toán - mô hình nhỏ hơn X3 so với các mô hình tương đương trên thị trường (4B tham số so với 12B tham số của các mô hình mã nguồn mở khác)
- Tính nhất quán về kiến trúc: Cùng kiến trúc với 3.1 — lý tưởng cho người dùng muốn nâng cấp mà không bị gián đoạn.
- Tăng tốc tinh chỉnh: tinh chỉnh nhanh gấp 2 lần trên L40S và A100.

Các checkpoint mô hình gốc của Bria 3.2 có thể được tìm thấy [tại đây](https://huggingface.co/briaai/BRIA-3.2). Kho Github của Bria 3.2 có thể được tìm thấy [tại đây](https://github.com/Bria-AI/BRIA-3.2).

Nếu bạn muốn tìm hiểu thêm về nền tảng Bria và nhận quyền truy cập thử nghiệm miễn phí, vui lòng truy cập [bria.ai](https://bria.ai).

## Cách sử dụng

_Vì mô hình được kiểm soát truy cập, trước khi sử dụng với diffusers, bạn cần truy cập [trang Hugging Face của Bria 3.2](https://huggingface.co/briaai/BRIA-3.2), điền biểu mẫu và chấp nhận điều kiện truy cập. Sau khi được cấp quyền, bạn cần đăng nhập để hệ thống xác nhận bạn đã chấp nhận điều kiện truy cập._

Sử dụng lệnh bên dưới để đăng nhập:

```bash
hf auth login
```

## BriaPipeline[[diffusers.BriaPipeline]]

#### diffusers.BriaPipeline[[diffusers.BriaPipeline]]

```python
diffusers.BriaPipeline(transformer: BriaTransformer2DModel, scheduler: diffusers.schedulers.scheduling_flow_match_euler_discrete.FlowMatchEulerDiscreteScheduler | diffusers.schedulers.scheduling_utils.KarrasDiffusionSchedulers, vae: AutoencoderKL, text_encoder: T5EncoderModel, tokenizer: T5Tokenizer, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/bria/pipeline_bria.py#L89)

**Tham số:**

transformer ([BriaTransformer2DModel](/docs/diffusers/main/vi/api/models/bria_transformer#diffusers.BriaTransformer2DModel)) : Kiến trúc Conditional Transformer (MMDiT) để khử nhiễu các latents ảnh đã mã hóa.

scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : Một trình lập lịch được sử dụng kết hợp với `transformer` để khử nhiễu các latent ảnh đã mã hóa.

vae ([AutoencoderKL](/docs/diffusers/main/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 (`T5EncoderModel`) : Bộ mã hóa văn bản đóng băng. Bria sử dụng [T5](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5EncoderModel), cụ thể là biến thể [t5-v1_1-xxl](https://huggingface.co/google/t5-v1_1-xxl).

tokenizer (`T5TokenizerFast`) : Tokenizer của lớp [T5Tokenizer](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5Tokenizer).

Dựa trên FluxPipeline với một số thay đổi:
- không có embedding được pool
- Chúng tôi sử dụng zero padding cho prompts
- Không có guidance embedding vì đây không phải là phiên bản đã được distilled

#### __call__[[diffusers.BriaPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 30, timesteps: list = None, guidance_scale: float = 5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list = ['latents'], max_sequence_length: int = 128, clip_value: None | float = None, normalize: bool = False)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/bria/pipeline_bria.py#L448)

**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ế.

height (`int`, *optional*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Chiều cao của hình ảnh được tạo ra, tính bằng pixel. Giá trị mặc định là 1024 để đạt kết quả tốt nhất.

width (`int`, *optional*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Độ rộng tính bằng pixel của hình ảnh được tạo ra. Mặc định được đặt là 1024 để đạt kết quả tốt nhất.

num_inference_steps (`int`, *optional*, mặc định là 50) : 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.

timesteps (`list[int]`, *optional*) : Các bước thời gian (timesteps) tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch (scheduler) hỗ trợ tham số `timesteps` 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. Phải được sắp xếp theo thứ tự giảm dần.

guidance_scale (`float`, *tùy chọn*, mặc định là 5.0) --

**Trả về:** `~pipelines.bria.BriaPipelineOutput` hoặc `tuple`

`~pipelines.bria.BriaPipelineOutput` nếu `return_dict` là True, ngược lại là một `tuple`. Khi trả về tuple, phần tử đầu tiên là một danh sách chứa các hình ảnh đã tạo.

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

<<<<<<< HEAD Thang độ dẫn hướng như được định nghĩa trong [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598). `guidance_scale` được định nghĩa là `w` của phương trình 2. trong [Imagen Paper](https://arxiv.org/pdf/2205.11487.pdf). 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 văn bản `prompt`, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn. negative_prompt (`str` hoặc `list[str]`, *tùy chọn*): ======= 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 văn bản `prompt`, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn. negative_prompt (`str` hoặc `list[str]`, *tùy chọn*):
>>>>>>> main
Các prompt hoặc prompt không dùng để hướng dẫn 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_images_per_prompt (`int`, *tùy chọn*, mặc định là 1): Số lượng ảnh cần tạo cho mỗi prompt. generator (`torch.Generator` hoặc `list[torch.Generator]`, *tùy chọn*): Một hoặc một danh sách [torch generator(s)](https://pytorch.org/docs/stable/generated/torch.Generator.html) để đảm bảo quá trình tạo ảnh là tất định. latents (`torch.FloatTensor`, *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.FloatTensor`, *tùy chọn*): Các text embeddings đã được tạo trước. Có thể dùng để dễ dàng tinh chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, text embeddings sẽ được tạo từ đối số đầu vào `prompt`. negative_prompt_embeds (`torch.FloatTensor`, *tùy chọn*): Các negative text embeddings đã được tạo trước. Có thể dùng để dễ dàng tinh chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`. output_type (`str`, *tùy chọn*, mặc định là `"pil"`): Định dạng đầu ra của ả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.bria.BriaPipelineOutput` thay vì một tuple đơn thuần hay không. attention_kwargs (`dict`, *tùy chọn*): 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](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py). 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`, *tùy chọn*): 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 như đối 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. max_sequence_length (`int` mặc định là 256): Độ dài chuỗi tối đa để sử dụng với `prompt`. clip_value (`float`, *tùy chọn*): Nếu được đặt, nhiễu dự đoán sẽ bị cắt (clip) vào khoảng `[-clip_value, clip_value]` ở mỗi bước khử nhiễu. normalize (`bool`, *tùy chọn*, mặc định là `False`): Có nên chuẩn hóa nhiễu dự đoán ở mỗi bước khử nhiễu hay không.

Ví dụ:
```py
>>> import torch
>>> from diffusers import BriaPipeline

>>> pipe = BriaPipeline.from_pretrained("briaai/BRIA-3.2", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
# BRIA's T5 text encoder is sensitive to precision. We need to cast it to bfloat16 and keep the final layer in float32.

>>> pipe.text_encoder = pipe.text_encoder.to(dtype=torch.bfloat16)
>>> for block in pipe.text_encoder.encoder.block:
...     block.layer[-1].DenseReluDense.wo.to(dtype=torch.float32)
# BRIA's VAE is not supported in mixed precision, so we use float32.

>>> if pipe.vae.config.shift_factor == 0:
...     pipe.vae.to(dtype=torch.float32)

>>> prompt = "Photorealistic food photography of a stack of fluffy pancakes on a white plate, with maple syrup being poured over them. On top of the pancakes are the words 'BRIA 3.2' in bold, yellow, 3D letters. The background is dark and out of focus."
>>> image = pipe(prompt).images[0]
>>> image.save("bria.png")
```

#### encode_prompt[[diffusers.BriaPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | list[str] | None = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 128, lora_scale: float | None = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/bria/pipeline_bria.py#L146)

**Tham số:**

prompt (`str` hoặc `list[str]`, *tùy chọn*) : prompt cần được mã hóa

device : (`torch.device`): thiết bị torch

num_images_per_prompt (`int`) : số lượng hình ảnh cần được tạo cho mỗi prompt

do_classifier_free_guidance (`bool`) : có sử dụng classifier free guidance hay không

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`).

prompt_embeds (`torch.FloatTensor`, *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ố của 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.FloatTensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã đượ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, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

