# DiT

[Scalable Diffusion Models with Transformers](https://huggingface.co/papers/2212.09748)(DiT)은 William Peebles와 Saining Xie가 작성했습니다.

해당 논문의 초록은 다음과 같습니다:

*트랜스포머 아키텍처를 기반으로 한 새로운 종류의 확산 모델을 탐구합니다. 이미지의 잠재 공간 확산 모델을 학습하면서, 일반적으로 사용되는 U-Net 백본을 잠재 패치에서 작동하는 트랜스포머로 대체합니다. Gflops로 측정되는 순전파 복잡성의 관점에서 Diffusion Transformers(DiTs)의 확장성을 분석합니다. 트랜스포머의 깊이/너비 증가 또는 입력 토큰 수 증가를 통해 Gflops가 더 높은 DiTs는 일관되게 더 낮은 FID를 보인다는 것을 발견했습니다. 좋은 확장성 특성을 갖는 것 외에도, 가장 큰 DiT-XL/2 모델은 클래스 조건부 ImageNet 512x512 및 256x256 벤치마크에서 이전 모든 확산 모델보다 우수한 성능을 보여주며, 후자의 경우 최첨단 FID 2.27를 달성합니다.*

원본 코드베이스는 [facebookresearch/dit](https://github.com/facebookresearch/dit)에서 찾을 수 있습니다.

> [!TIP]
> Scheduler의 [가이드](../../using-diffusers/schedulers)를 확인하여 스케줄러의 속도와 품질 사이의 트레이드오프를 탐색하는 방법을 배우고, [파이프라인 간 구성 요소 재사용](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) 섹션을 확인하여 동일한 구성 요소를 여러 파이프라인에 효율적으로 로드하는 방법을 배워보세요.

## DiTPipeline[[diffusers.DiTPipeline]]

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

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

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

**매개변수:**

transformer ([DiTTransformer2DModel](/docs/diffusers/main/ko/api/models/dit_transformer2d#diffusers.DiTTransformer2DModel)) : 인코딩된 이미지 라텐트를 디노이즈하도록 조건부 설정된 `DiTTransformer2DModel` 클래스입니다. 처음에는 설정 파일에서 [`Transformer2DModel`](https://huggingface.co/facebook/DiT-XL-2-256/blob/main/transformer/config.json#L2)로 게시되었지만, 이러한 불일치는 무시할 수 있습니다.

vae ([AutoencoderKL](/docs/diffusers/main/ko/api/models/autoencoderkl#diffusers.AutoencoderKL)) : 이미지를 잠재 표현으로 인코딩하고 잠재 표현에서 이미지로 디코딩하는 Variational Auto-Encoder (VAE) 모델입니다.

scheduler ([DDIMScheduler](/docs/diffusers/main/ko/api/schedulers/ddim#diffusers.DDIMScheduler)) : `transformer`와 함께 사용되어 인코딩된 이미지 latents의 노이즈를 제거하는 스케줄러입니다.

UNet 대신 Transformer 백본을 기반으로 하는 이미지 생성용 Pipeline입니다.

이 모델은 [DiffusionPipeline](/docs/diffusers/main/ko/api/pipelines/overview#diffusers.DiffusionPipeline)에서 상속됩니다. 모든 파이프라인에 대해 구현된 일반적 메서드(다운로드, 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.

#### __호출__[[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)
```

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

**매개변수:**

class_labels (list[int]) : 생성할 이미지에 대한 ImageNet 클래스 라벨 목록.

guidance_scale (`float`, *선택 사항*, 기본값 4.0) : guidance scale 값이 높을수록 모델은 이미지 품질이 낮아지는 대신 텍스트 `prompt`와 밀접하게 연결된 이미지를 생성하도록 유도됩니다. `guidance_scale > 1`일 때 guidance scale이 활성화됩니다.

generator (`torch.Generator`, *선택 사항*) : 생성을 결정적으로 만들기 위한 [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html)입니다.

num_inference_steps (`int`, *선택 사항*, 기본값 250) : 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 추론 속도가 느려지는 대신 더 높은 품질의 이미지를 생성합니다.

output_type (`str`, *선택 사항*, 기본값 `"pil"`) : 생성된 이미지의 출력 형식입니다. `"pil"` (`PIL.Image`), `"np"` (`np.array`) 또는 `"pt"` (`torch.Tensor`) 중 하나를 선택할 수 있습니다.

return_dict (`bool`, *선택 사항*, 기본값 `True`) : 일반 튜플 대신 [ImagePipelineOutput](/docs/diffusers/main/ko/api/pipelines/consistency_models#diffusers.ImagePipelineOutput)을 반환할지 여부.

**반환값:** [ImagePipelineOutput](/docs/diffusers/main/ko/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) 또는 `tuple`

`return_dict`가 `True`인 경우 [ImagePipelineOutput](/docs/diffusers/main/ko/api/pipelines/consistency_models#diffusers.ImagePipelineOutput)가 반환되고, 그렇지 않으면 첫 번째 요소가 생성된 이미지의 목록인 `tuple`이 반환됩니다.

생성을 위한 pipeline의 호출 함수.

예:

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

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

**매개변수:**

label (`str` 또는 `str`의 `dict`) : 클래스 ID에 매핑될 라벨 문자열.

**반환값:** `list` of `int`

pipeline에서 처리할 클래스 ID입니다.

ImageNet의 레이블 문자열을 해당하는 클래스 ID로 매핑합니다.

## ImagePipelineOutput[[diffusers.ImagePipelineOutput]]

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

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

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

**매개변수:**

images (`List[PIL.Image.Image]` 또는 `np.ndarray`) : `batch_size` 길이의 노이즈 제거된 PIL 이미지 목록 또는 `(batch_size, height, width, num_channels)` 모양의 NumPy 배열.

이미지 파이프라인의 출력 클래스입니다.

