Diffusers documentation

SanaTransformer2DModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

SanaTransformer2DModel

SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers による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は低コストでのコンテンツ作成を可能にします。コードとモデルは公開リリース予定です。

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

from diffusers import SanaTransformer2DModel

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

SanaTransformer2DModel

class diffusers.SanaTransformer2DModel

< >

( in_channels: int = 32out_channels: int | None = 32num_attention_heads: int = 70attention_head_dim: int = 32num_layers: int = 20num_cross_attention_heads: int | None = 20cross_attention_head_dim: int | None = 112cross_attention_dim: int | None = 2240caption_channels: int = 2304mlp_ratio: float = 2.5dropout: float = 0.0attention_bias: bool = Falsesample_size: int = 32patch_size: int = 1norm_elementwise_affine: bool = Falsenorm_eps: float = 1e-06interpolation_scale: int | None = Noneguidance_embeds: bool = Falseguidance_embeds_scale: float = 0.1qk_norm: str | None = Nonetimestep_scale: float = 1.0 )

パラメータ

  • in_channels (int, デフォルトは 32) — 入力におけるチャネル数。
  • out_channels (int、任意、デフォルトは 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) — attention層でbiasを使用するかどうか。
  • 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モデルファミリーで導入された2次元Transformerモデルです。

forward

< >

( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorguidance: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneattention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_block_samples: tuple[torch.Tensor] | None = Nonereturn_dict: bool = True )

パラメータ

  • hidden_states (torch.Tensor、形状 (batch_size, in_channels, height, width)) — 入力となる hidden_states。
  • encoder_hidden_states (torch.Tensor、形状 (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 で定義されている self.processor 内の AttentionProcessor に渡される kwargs 辞書です。
  • controlnet_block_samples (tuple of torch.Tensor, optional) — 指定された場合、transformer ブロックの残差に追加されるテンソルのリストです。
  • return_dict (bool、任意、デフォルトは True) — プレーンなタプルではなく ~models.transformer_2d.Transformer2DModelOutput を返すかどうか。

SanaTransformer2DModel の forward メソッド。

Transformer2DModelOutput

クラス diffusers.models.modeling_outputs.Transformer2DModelOutput

< >

( sample: torch.Tensor )

パラメータ

  • sample (torch.Tensor、形状 (batch_size, num_channels, height, width)、または Transformer2DModel が離散型の場合 (batch size, num_vector_embeds - 1, num_latent_pixels)) — encoder_hidden_states 入力を条件とする隠れ状態の出力です。離散型の場合、ノイズ除去されていない潜在ピクセルの確率分布を返します。

Transformer2DModelの出力です。

Update on GitHub