# SanaTransformer2DModel

[SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers](https://huggingface.co/papers/2410.10629) による2次元データ向けの Diffusion Transformer モデルが、NVIDIA と MIT HAN Lab の Enze Xie、Junsong Chen、Junyu Chen、Han Cai、Haotian Tang、Yujun Lin、Zhekai Zhang、Muyang Li、Ligeng Zhu、Yao Lu、Song Han によって紹介されました。

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

*Sanaは、最大4096×4096解像度の画像を効率的に生成できるテキストから画像への生成フレームワークです。Sanaは、ノートPCのGPU上でデプロイ可能であり、驚くほど高速な速度で、テキストと画像の整合性が強い高解像度かつ高品質な画像を合成できます。コアな設計には以下が含まれます：(1) 深い圧縮オートエンコーダ：従来のAEが画像を8倍にしか圧縮しないのに対し、私たちは画像を32倍に圧縮できるAEを訓練し、潜在トークンの数を効果的に削減しました。(2) Linear DiT：DiT内のすべてのバニラアテンションを、品質を犠牲にせずに高解像度でより効率的に動作する線形アテンションに置き換えました。(3) デコーダー専用のテキストエンコーダ：T5を最新のデコーダー専用の小型LLMに置き換え、コンテキスト内学習を用いた複雑な人間指示を設計することで、画像とテキストの整合性を高めました。(4) 効率的な訓練とサンプリング：サンプリングステップを削減するためのFlow-DPM-Solverを提案し、効率的なキャプションラベリングと選択によって収束を加速します。その結果、Sana-0.6Bは、現代の巨大な拡散モデル（例：Flux-12B）と非常に競争力があり、サイズは20分の1、測定されたスループットでは100倍以上速いです。さらに、Sana-0.6Bは16GBのノートPC GPU上でデプロイでき、1024×1024解像度の画像を1秒未満で生成できます。Sanaは低コストでのコンテンツ作成を可能にします。コードとモデルは公開リリース予定です。*

モデルは、以下のコードスニペットで読み込むことができます。

```python
from diffusers import SanaTransformer2DModel

transformer = SanaTransformer2DModel.from_pretrained("Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", subfolder="transformer", dtype=torch.bfloat16)
```

## SanaTransformer2DModel[[diffusers.SanaTransformer2DModel]]

#### diffusers.SanaTransformer2DModel[[diffusers.SanaTransformer2DModel]]

```python
diffusers.SanaTransformer2DModel(in_channels: int = 32, out_channels: int | None = 32, num_attention_heads: int = 70, attention_head_dim: int = 32, num_layers: int = 20, num_cross_attention_heads: int | None = 20, cross_attention_head_dim: int | None = 112, cross_attention_dim: int | None = 2240, caption_channels: int = 2304, mlp_ratio: float = 2.5, dropout: float = 0.0, attention_bias: bool = False, sample_size: int = 32, patch_size: int = 1, norm_elementwise_affine: bool = False, norm_eps: float = 1e-06, interpolation_scale: int | None = None, guidance_embeds: bool = False, guidance_embeds_scale: float = 0.1, qk_norm: str | None = None, timestep_scale: float = 1.0)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/sana_transformer.py#L294)

**パラメータ:**

in_channels (`int`、デフォルトは`32`) : 入力におけるチャネル数。

out_channels (`int`, *optional*, デフォルトは `32`) : 出力のチャネル数。

num_attention_heads (`int`、デフォルトは`70`) : マルチヘッドアテンションで使用するヘッド数。

attention_head_dim (`int`、デフォルトは`32`) : 各ヘッドのチャネル数。

num_layers (`int`、デフォルトは`20`) : 使用する Transformer ブロックの層数。

num_cross_attention_heads (`int`、*任意*、デフォルトは`20`) : クロスアテンションに使用するヘッド数。

cross_attention_head_dim (`int`、*任意*、デフォルトは`112`) : クロスアテンションにおける各ヘッドのチャネル数。

cross_attention_dim (`int`、*任意*、デフォルトは`2240`) : クロスアテンションの出力のチャネル数。

caption_channels (`int`、デフォルトは`2304`) : キャプション埋め込みのチャネル数。

mlp_ratio (`float`、デフォルトは`2.5`) : GLUMBConv層で使用する拡張比率。

dropout (`float`、デフォルトは`0.0`) : dropout の確率。

attention_bias (`bool`、デフォルトは`False`) : アテンション層でバイアスを使用するかどうか。

sample_size (`int`、デフォルトは`32`) : 入力潜在変数の基本サイズ。

patch_size (`int`、デフォルトは`1`) : パッチ埋め込み層で使用するパッチのサイズ。

norm_elementwise_affine (`bool`、デフォルトは`False`) : 正規化層で要素ごとのアフィニティを使用するかどうか。

norm_eps (`float`、デフォルトは`1e-6`) : 正規化レイヤーのepsilon値です。

qk_norm (`str`、*任意*、デフォルトは`None`) : クエリとキーに使用する正規化。

timestep_scale (`float`、デフォルトは`1.0`) : タイムステップに使用するスケール。

[Sana](https://huggingface.co/papers/2410.10629)モデルファミリーで導入された2次元Transformerモデルです。

#### forward[[diffusers.SanaTransformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: Tensor, timestep: Tensor, guidance: typing.Optional[torch.Tensor] = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, attention_kwargs: dict[str, typing.Any] | None = None, controlnet_block_samples: tuple[torch.Tensor] | None = None, return_dict: bool = True)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/sana_transformer.py#L419)

**パラメータ:**

hidden_states (`torch.Tensor`、形状 `(batch_size, in_channels, height, width)`) : 入力 `hidden_states`。

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

timestep (`torch.LongTensor`) : デノイジングステップを示すために使用されます。

guidance (`torch.Tensor`, *任意*) : ガイダンススケール埋め込み。

encoder_attention_mask (`torch.Tensor`, *任意*) : `encoder_hidden_states` に適用されるクロスアテンションマスク。

attention_mask (`torch.Tensor`, *任意*) : `hidden_states` に適用される自己注意マスク。

attention_kwargs (`dict`, *任意*) : 指定された場合、[diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) の `self.processor` で定義されている `AttentionProcessor` に渡される kwargs の辞書です。

controlnet_block_samples (`tuple` of `torch.Tensor`, *optional*) : 指定された場合、transformer ブロックの残差に追加されるテンソルのリスト。

return_dict (`bool`、*任意*、デフォルトは`True`) : プレーンなタプルではなく`~models.transformer_2d.Transformer2DModelOutput`を返すかどうか。

**戻り値:**

`return_dict` が True の場合、`~models.transformer_2d.Transformer2DModelOutput` が返され、それ以外の場合は、最初の要素がサンプルテンソルである `tuple` が返されます。

[SanaTransformer2DModel](/docs/diffusers/v0.43.0/ja/api/models/sana_transformer2d#diffusers.SanaTransformer2DModel) の forward メソッド。

## Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

#### diffusers.models.modeling_outputs.Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

```python
diffusers.models.modeling_outputs.Transformer2DModelOutput(sample: torch.Tensor)
```

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

**パラメータ:**

sample (`torch.Tensor`、shape は `(batch_size, num_channels, height, width)`、または [Transformer2DModel](/docs/diffusers/v0.43.0/ja/api/models/transformer2d#diffusers.Transformer2DModel) が離散型の場合 `(batch size, num_vector_embeds - 1, num_latent_pixels)`) : `encoder_hidden_states` 入力を条件とする隠れ状態の出力です。離散型の場合、ノイズ除去されていない潜在ピクセルの確率分布を返します。

[Transformer2DModel](/docs/diffusers/v0.43.0/ja/api/models/transformer2d#diffusers.Transformer2DModel)の出力です。

