# DiT

[Các Mô hình Khuếch tán Có thể Mở rộng với Transformers](https://huggingface.co/papers/2212.09748) (DiT) do William Peebles và Saining Xie thực hiện.

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

*Chúng tôi khám phá một lớp mô hình khuếch tán mới dựa trên kiến trúc transformer. Chúng tôi huấn luyện các mô hình khuếch tán tiềm ẩn cho hình ảnh, thay thế bộ khung U-Net thường được sử dụng bằng một transformer hoạt động trên các lát tiềm ẩn. Chúng tôi phân tích khả năng mở rộng của các Diffusion Transformer (DiT) của mình thông qua lăng kính độ phức tạp của bước truyền thẳng được đo bằng Gflops. Chúng tôi nhận thấy rằng các DiT có Gflops cao hơn -- thông qua việc tăng độ sâu/chiều rộng của transformer hoặc tăng số lượng token đầu vào -- luôn có FID thấp hơn. Ngoài việc sở hữu các thuộc tính mở rộng tốt, các mô hình DiT-XL/2 lớn nhất của chúng tôi vượt trội hơn tất cả các mô hình khuếch tán trước đó trên các benchmark ImageNet 512x512 và 256x256 có điều kiện lớp, đạt được FID tiên tiến là 2.27 trên benchmark sau.*

Mã nguồn gốc có thể được tìm thấy tại [facebookresearch/dit](https://github.com/facebookresearch/dit).

> [!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ả.

## DiTPipeline[[diffusers.DiTPipeline]]

#### diffusers.DiTPipeline[[diffusers.DiTPipeline]]

```python
diffusers.DiTPipeline(transformer: DiTTransformer2DModel, vae: AutoencoderKL, scheduler: KarrasDiffusionSchedulers, id2label: dict[int, str] | None = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/dit/pipeline_dit.py#L38)

**Tham số:**

transformer ([DiTTransformer2DModel](/docs/diffusers/main/vi/api/models/dit_transformer2d#diffusers.DiTTransformer2DModel)) : Một lớp có điều kiện `DiTTransformer2DModel` để khử nhiễu các latent ảnh đã mã hóa. Ban đầu được công bố dưới dạng [`Transformer2DModel`](https://huggingface.co/facebook/DiT-XL-2-256/blob/main/transformer/config.json#L2) trong cấu hình, nhưng sự không khớp này có thể bỏ qua.

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.

scheduler ([DDIMScheduler](/docs/diffusers/main/vi/api/schedulers/ddim#diffusers.DDIMScheduler)) : 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.

Pipeline để tạo hình ảnh dựa trên khung xương Transformer thay vì UNet.

Mô hình này kế thừa từ [DiffusionPipeline](/docs/diffusers/main/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 được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

#### __call__[[diffusers.DiTPipeline.__call__]]

```python
__call__(class_labels: list, guidance_scale: float = 4.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, num_inference_steps: int = 50, output_type: str | None = 'pil', return_dict: bool = True)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/dit/pipeline_dit.py#L101)

**Tham số:**

class_labels (list[int]) : danh sách nhãn lớp ImageNet cho các hình ảnh sẽ được tạo ra.

guidance_scale (`float`, *optional*, mặc định là 4.0) : Giá trị guidance scale cao hơn khuyến khích mô hình tạo ra các hình ảnh gắn kết chặt chẽ với `prompt` văn bản, với cái giá là chất lượng hình ảnh thấp hơn. Guidance scale được kích hoạt khi `guidance_scale > 1`.

generator (`torch.Generator`, *tùy chọn*) : Một [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) để đảm bảo quá trình sinh là tất định.

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

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 ra. Chọn giữa `"pil"` (`PIL.Image`), `"np"` (`np.array`) hoặc `"pt"` (`torch.Tensor`).

return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một [ImagePipelineOutput](/docs/diffusers/main/vi/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) thay vì một tuple thông thường hay không.

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

Nếu `return_dict` là `True`, [ImagePipelineOutput](/docs/diffusers/main/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 gọi call của pipeline để tạo nội dung.

Ví dụ:

```py
>>> from diffusers import DiTPipeline, DPMSolverMultistepScheduler
>>> import torch

>>> pipe = DiTPipeline.from_pretrained("facebook/DiT-XL-2-256", torch_dtype=torch.float16)
>>> pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
>>> pipe = pipe.to("cuda")

>>> # pick words from Imagenet class labels
>>> pipe.labels  # to print all available words

>>> # pick words that exist in ImageNet
>>> words = ["white shark", "umbrella"]

>>> class_ids = pipe.get_label_ids(words)

>>> generator = torch.manual_seed(33)
>>> output = pipe(class_labels=class_ids, num_inference_steps=25, generator=generator)

>>> image = output.images[0]  # label 'white shark'
```

#### get_label_ids[[diffusers.DiTPipeline.get_label_ids]]

```python
get_label_ids(label: str | list[str])
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/dit/pipeline_dit.py#L76)

**Tham số:**

label (`str` hoặc `dict` của `str`) : Chuỗi nhãn cần ánh xạ tới các id lớp.

**Trả về:** `list` của `int`

Các id lớp cần được xử lý bởi pipeline.

Ánh xạ các chuỗi nhãn từ ImageNet sang các id lớp tương ứng.

## ImagePipelineOutput[[diffusers.ImagePipelineOutput]]

#### diffusers.ImagePipelineOutput[[diffusers.ImagePipelineOutput]]

```python
diffusers.ImagePipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray)
```

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

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

Lớp đầu ra cho các pipeline hình ảnh.

