# DiT

[Scalable Diffusion Models with Transformers](https://huggingface.co/papers/2212.09748)（DiT）は、William Peebles と Saining Xie によるものです。

論文の抄録は以下の通りです：

*Transformerアーキテクチャに基づく新しいクラスの拡散モデルを探索します。画像の潜在拡散モデルを訓練し、一般的に使用されているU-Netバックボーンを、潜在パッチ上で動作するTransformerに置き換えます。Gflopsで測定されるフォワードパスの複雑さという観点から、私たちのDiffusion Transformers（DiTs）のスケーラビリティを分析します。Transformerの深さ/幅の増加または入力トークン数の増加によってGflopsを高くしたDiTsは、一貫して低いFIDを示すことがわかりました。優れたスケーラビリティ特性を持つだけでなく、私たちの最大のDiT-XL/2モデルは、クラス条件付きImageNet 512x512および256x256ベンチマークにおいて、これまでにないすべての拡散モデルを上回り、後者では最先端のFID 2.27を達成しました。*

元のコードベースは [facebookresearch/dit](https://github.com/facebookresearch/dit) で確認できます。

> [!TIP]
> スケジューラーのトレードオフ、すなわち速度と品質のバランスをどのように探求するかを学ぶには、[ガイド](../../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/v0.43.0/src/diffusers/pipelines/dit/pipeline_dit.py#L38)

**パラメータ:**

transformer ([DiTTransformer2DModel](/docs/diffusers/v0.43.0/ja/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/v0.43.0/ja/api/models/autoencoderkl#diffusers.AutoencoderKL)) : 画像を潜在表現にエンコードし、潜在表現からデコードするための変分オートエンコーダ（VAE）モデル。

scheduler ([DDIMScheduler](/docs/diffusers/v0.43.0/ja/api/schedulers/ddim#diffusers.DDIMScheduler)) : `transformer`と組み合わせて、エンコードされた画像の潜在変数をデノイズするために使用するスケジューラ。

UNetではなくTransformerバックボーンに基づいた画像生成用のPipeline。

このモデルは [DiffusionPipeline](/docs/diffusers/v0.43.0/ja/api/pipelines/overview#diffusers.DiffusionPipeline) を継承しています。すべてのパイプラインに実装されている汎用的なメソッド（ダウンロード、保存、特定のデバイスでの実行など）については、スーパークラスのドキュメントを参照してください。

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

```python
__call__(class_labels: list[int], 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/v0.43.0/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`, *optional*, デフォルトは 250) : デノイジングのステップ数です。デノイジングのステップ数を増やすと、推論速度が遅くなる代わりに、通常はより高品質な画像が得られます。

output_type (`str`、*任意*、デフォルトは`"pil"`) : 生成された画像の出力形式。`"pil"` (`PIL.Image`)、`"np"` (`np.array`)、または`"pt"` (`torch.Tensor`) から選択します。

return_dict (`bool`、*任意*、デフォルトは`True`) : プレーンなタプルではなく、[ImagePipelineOutput](/docs/diffusers/v0.43.0/ja/api/pipelines/consistency_models#diffusers.ImagePipelineOutput)を返すかどうか。

**戻り値:** [ImagePipelineOutput](/docs/diffusers/v0.43.0/ja/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) または `tuple`

`return_dict` が `True` の場合、[ImagePipelineOutput](/docs/diffusers/v0.43.0/ja/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/v0.43.0/src/diffusers/pipelines/dit/pipeline_dit.py#L76)

**パラメータ:**

label (`str` または `str` の `dict`) : クラス ID にマッピングされるラベル文字列。

**戻り値:** `list` of `int`

パイプラインで処理されるクラス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/v0.43.0/src/diffusers/pipelines/pipeline_utils.py#L135)

**パラメータ:**

images (`List[PIL.Image.Image]` または `np.ndarray`) : 長さ `batch_size` のデノイズ済み PIL 画像のリスト、または形状 `(batch_size, height, width, num_channels)` の NumPy 配列。

画像パイプライン用の出力クラス。

