# UVit2DModel

[U-ViT](https://hf.co/papers/2301.11093)モデルは、Vision Transformer (ViT) をベースとしたUNetです。このモデルは、ViTの要素（時間、条件、ノイズ付き画像パッチなどのすべての入力をトークンとして扱う）と、UNetの要素（浅い層と深い層間の長いスキップ接続）を組み合わせています。スキップ接続は、ピクセルレベルの特徴を予測するために重要です。画像の品質を向上させるため、最終出力の前に追加の3x3畳み込みブロックが適用されます。

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

*現在、高解像度画像のピクセル空間に拡散モデルを適用することは困難です。そのため、既存のアプローチでは、低次元空間での拡散（潜在拡散）に焦点を当てたり、カスケードと呼ばれる複数の超解像度レベルの生成を行ったりしています。これらのアプローチのデメリットは、拡散フレームワークに追加の複雑さを生じさせる点です。本論文では、モデルをできるだけシンプルに保ちながら、高解像度画像向けのデノイジング拡散を改善することを目的としています。本論文は、次の研究課題を中心に据えています。高解像度画像で標準的なデノイジング拡散モデルを訓練し、かつこれらの代替アプローチと同等の性能を得るにはどうすればよいか。主な発見は以下の4点です。1) 高解像度画像にはノイズスケジュールの調整が必要であること、2) アーキテクチャの一部のみをスケーリングすれば十分であること、3) アーキテクチャの特定の箇所にドロップアウトを追加すべきであること、4) ダウンサンプリングは高解像度の特徴マップを回避する効果的な戦略であること。これらのシンプルかつ効果的な手法を組み合わせることで、ImageNetにおいてサンプリング修正なしの拡散モデルの中で、画像生成の最先端性能を達成しました。*

## UVit2DModel[[diffusers.UVit2DModel]]

#### diffusers.UVit2DModel[[diffusers.UVit2DModel]]

```python
diffusers.UVit2DModel(hidden_size: int = 1024, use_bias: bool = False, hidden_dropout: float = 0.0, cond_embed_dim: int = 768, micro_cond_encode_dim: int = 256, micro_cond_embed_dim: int = 1280, encoder_hidden_size: int = 768, vocab_size: int = 8256, codebook_size: int = 8192, in_channels: int = 768, block_out_channels: int = 768, num_res_blocks: int = 3, downsample: bool = False, upsample: bool = False, block_num_heads: int = 12, num_hidden_layers: int = 22, num_attention_heads: int = 16, attention_dropout: float = 0.0, intermediate_size: int = 2816, layer_norm_eps: float = 1e-06, ln_elementwise_affine: bool = True, sample_size: int = 64)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L38)

#### forward[[diffusers.UVit2DModel.forward]]

```python
forward(input_ids, encoder_hidden_states, pooled_text_emb, micro_conds, cross_attention_kwargs = None)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L150)

**パラメータ:**

input_ids (`torch.LongTensor`) : マスクされた潜在画像トークンのトークン ID。形状は `(batch_size, height, width)` です。

encoder_hidden_states (`torch.Tensor`) : 使用する条件埋め込み（プロンプトなどの入力条件から計算される埋め込み）。

pooled_text_emb (`torch.Tensor`) : 追加の条件付けに使用されるプーリング済みテキスト埋め込み。

micro_conds (`torch.Tensor`) : `pooled_text_emb` に埋め込まれて結合されるマイクロ条件付け値。

cross_attention_kwargs (`dict`, *任意*) : 指定された場合、`AttentionProcessor` に渡される kwargs の辞書です。

**戻り値:** `torch.Tensor`

各画像トークンに対するコードブックの logits で、形状は `(batch_size, codebook_size, height, width)` です。

#### set_default_attn_processor[[diffusers.UVit2DModel.set_default_attn_processor]]

```python
set_default_attn_processor()
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L232)

カスタムアテンションプロセッサを無効にし、デフォルトのアテンション実装を設定します。

## UVit2DConvEmbed[[diffusers.models.unets.uvit_2d.UVit2DConvEmbed]]

#### diffusers.models.unets.uvit_2d.UVit2DConvEmbed[[diffusers.models.unets.uvit_2d.UVit2DConvEmbed]]

```python
diffusers.models.unets.uvit_2d.UVit2DConvEmbed(in_channels, block_out_channels, vocab_size, elementwise_affine, eps, bias)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L248)

## UVitBlock[[diffusers.models.unets.uvit_2d.UVitBlock]]

#### diffusers.models.unets.uvit_2d.UVitBlock[[diffusers.models.unets.uvit_2d.UVitBlock]]

```python
diffusers.models.unets.uvit_2d.UVitBlock(channels, num_res_blocks: int, hidden_size, hidden_dropout, ln_elementwise_affine, layer_norm_eps, use_bias, block_num_heads, attention_dropout, downsample: bool, upsample: bool)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L263)

## ConvNextBlock[[diffusers.models.unets.uvit_2d.ConvNextBlock]]

#### diffusers.models.unets.uvit_2d.ConvNextBlock[[diffusers.models.unets.uvit_2d.ConvNextBlock]]

```python
diffusers.models.unets.uvit_2d.ConvNextBlock(channels, layer_norm_eps, ln_elementwise_affine, use_bias, hidden_dropout, hidden_size, res_ffn_factor = 4)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L362)

## ConvMlmLayer[[diffusers.models.unets.uvit_2d.ConvMlmLayer]]

#### diffusers.models.unets.uvit_2d.ConvMlmLayer[[diffusers.models.unets.uvit_2d.ConvMlmLayer]]

```python
diffusers.models.unets.uvit_2d.ConvMlmLayer(block_out_channels: int, in_channels: int, use_bias: bool, ln_elementwise_affine: bool, layer_norm_eps: float, codebook_size: int)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L407)

