Diffusers documentation

UNet2DConditionModel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

UNet2DConditionModel

UNetモデルは、Ronneberger らによって生体医用画像のセグメンテーションのために最初に提案されましたが、入力と同じサイズの画像を出力するため、🤗 Diffusers でも広く使用されています。実際の拡散プロセスを担うため、拡散システムにおいて最も重要なコンポーネントの一つです。🤗 Diffusers には、次元数や条件付きモデルかどうかによっていくつかの UNet モデルのバリアントが存在します。これは 2D の条件付き UNet モデルです。

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

深層ネットワークの成功した学習には、数千枚のラベル付き訓練サンプルが必要であるという点について、大きな合意がある。本論文では、データ拡張を強力に活用することで、利用可能なラベル付きサンプルをより効率的に使用するためのネットワークと学習戦略を提案する。このアーキテクチャは、コンテキストを捉えるための縮小パスと、正確な位置特定を可能にする対称的な拡大パスで構成される。このようなネットワークは、非常に少ない画像からエンドツーエンドで学習でき、電子顕微鏡スタックにおける神経構造のセグメンテーションに関するISBIチャレンジにおいて、従来の最良手法(スライディングウィンドウ型畳み込みネットワーク)を上回ることを示す。透過光顕微鏡画像(位相差およびDIC)で学習させた同じネットワークを用いて、これらのカテゴリにおいてISBIセルトラッキングチャレンジ2015を大幅な差で制覇した。さらに、このネットワークは高速である。最新のGPUでは、512x512画像のセグメンテーションに1秒未満しかかからない。完全な実装(Caffeベース)と学習済みネットワークは、http://lmb.informatik.uni-freiburg.de/people/ronneber/u-netで入手可能である。

UNet2DConditionModel

class diffusers.UNet2DConditionModel

< >

( sample_size: int | tuple[int, int] | None = Nonein_channels: int = 4out_channels: int = 4center_input_sample: bool = Falseflip_sin_to_cos: bool = Truefreq_shift: int = 0down_block_types: tuple[str, ...] = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D')mid_block_type: str | None = 'UNetMidBlock2DCrossAttn'up_block_types: tuple[str, ...] = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D')only_cross_attention: bool | tuple[bool] = Falseblock_out_channels: tuple[int, ...] = (320, 640, 1280, 1280)layers_per_block: int | tuple[int] = 2downsample_padding: int = 1mid_block_scale_factor: float = 1dropout: float = 0.0act_fn: str = 'silu'norm_num_groups: int | None = 32norm_eps: float = 1e-05cross_attention_dim: int | tuple[int] = 1280transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1reverse_transformer_layers_per_block: tuple[tuple[int]] | None = Noneencoder_hid_dim: int | None = Noneencoder_hid_dim_type: str | None = Noneattention_head_dim: int | tuple[int] = 8num_attention_heads: int | tuple[int] | None = Nonedual_cross_attention: bool = Falseuse_linear_projection: bool = Falseclass_embed_type: str | None = Noneaddition_embed_type: str | None = Noneaddition_time_embed_dim: int | None = Nonenum_class_embeds: int | None = Noneupcast_attention: bool = Falseresnet_time_scale_shift: str = 'default'resnet_skip_time_act: bool = Falseresnet_out_scale_factor: float = 1.0time_embedding_type: str = 'positional'time_embedding_dim: int | None = Nonetime_embedding_act_fn: str | None = Nonetimestep_post_act: str | None = Nonetime_cond_proj_dim: int | None = Noneconv_in_kernel: int = 3conv_out_kernel: int = 3projection_class_embeddings_input_dim: int | None = Noneattention_type: str = 'default'class_embeddings_concat: bool = Falsemid_block_only_cross_attention: bool | None = Nonecross_attention_norm: str | None = Noneaddition_embed_type_num_heads: int = 64 )

パラメータ

  • sample_size (int または tuple[int, int]、省略可能、デフォルトは None) — 入力/出力サンプルの高さと幅。
  • in_channels (int、任意、デフォルトは 4) — 入力サンプルのチャネル数。
  • out_channels (int、任意、デフォルトは 4) — 出力のチャネル数。
  • center_input_sample (bool、省略可、デフォルトはFalse) — 入力サンプルを中央揃けにするかどうか。
  • flip_sin_to_cos (bool、任意、デフォルトは True) — 時間埋め込みにおいて sin を cos に反転させるかどうか。
  • freq_shift (int、任意、デフォルト値は 0) — 時間埋め込みに適用する周波数シフト。
  • down_block_types (tuple[str]、任意、デフォルトは("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — 使用するダウンサンプリングブロックのタプルです。
  • mid_block_type (str、任意、デフォルトは "UNetMidBlock2DCrossAttn") — UNet の中央部分のブロックタイプです。UNetMidBlock2DCrossAttn、UNetMidBlock2D、または UNetMidBlock2DSimpleCrossAttn のいずれかです。None の場合、中央ブロックのレイヤーはスキップされます。
  • up_block_types (tuple[str]、任意、デフォルトは("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) — 使用するアップサンプリングブロックのタプルです。
  • only_cross_attention(bool or tuple[bool], optional, default to False) — BasicTransformerBlock の基本的な Transformer ブロックに self-attention を含めるかどうかを指定します。
  • block_out_channels (tuple[int]、任意、デフォルトは(320, 640, 1280, 1280)) — 各ブロックの出力チャネル数を表すタプルです。
  • layers_per_block (int、任意、デフォルトは 2) — ブロックあたりのレイヤー数。
  • downsample_padding (int、任意、デフォルトは 1) — ダウンサンプリング用畳み込みで使用するパディング。
  • mid_block_scale_factor (float、任意、デフォルトは 1.0) — mid block に使用するスケール係数。
  • dropout (float、任意、デフォルト値は 0.0) — 使用する dropout の確率です。
  • act_fn (str、任意、デフォルトは "silu") — 使用する活性化関数。
  • norm_num_groups (int、任意、デフォルトは 32) — 正規化に使用するグループ数です。 None の場合、後処理で正規化層と活性化層がスキップされます。
  • norm_eps (float、任意、デフォルト値は 1e-5) — 正規化に使用する epsilon。
  • cross_attention_dim (int または tuple[int]、省略可能、デフォルト値は 1280) — クロスアテンション特徴量の次元です。
  • transformer_layers_per_block (int、tuple[int]、または tuple[tuple] 、任意、デフォルトは 1) — BasicTransformerBlock 型の Transformer ブロックの数。CrossAttnDownBlock2D、CrossAttnUpBlock2D、UNetMidBlock2DCrossAttn の場合にのみ関連します。
  • reverse_transformer_layers_per_block — (tuple[tuple]、任意、デフォルトは None): U-Net のアップサンプリングブロックにおける BasicTransformerBlock 型の Transformer ブロックの数。transformer_layers_per_block が tuple[tuple] 型の場合、および CrossAttnDownBlock2D、CrossAttnUpBlock2D、UNetMidBlock2DCrossAttn の場合にのみ関連します。
  • encoder_hid_dim (int、任意、デフォルトは None)— encoder_hid_dim_type が定義されている場合、encoder_hidden_states は encoder_hid_dim 次元から cross_attention_dim 次元へ射影されます。
  • encoder_hid_dim_type (str、任意、デフォルトは None) — 指定された場合、encoder_hidden_states およびその他の埋め込みが、encoder_hid_dim_type に従って、次元 cross_attention のテキスト埋め込みにダウンプロジェクトされます。
  • attention_head_dim (int、任意、デフォルトは 8)— アテンションヘッドの次元数。
  • num_attention_heads (int, 省略可) — アテンションヘッドの数です。定義されていない場合、デフォルトでattention_head_dimになります。
  • resnet_time_scale_shift (str、任意、デフォルトは"default") — ResNetブロック用のタイムスケールシフト設定(ResnetBlock2Dを参照)。defaultまたはscale_shiftから選択します。
  • class_embed_type (str、任意、デフォルトは None) — 最終的に time embeddings と加算される class embedding の種類を指定します。None、"timestep"、"identity"、"projection"、または "simple_projection" から選択してください。
  • addition_embed_type (str、省略可、デフォルトはNone) — 時間埋め込みに加算される任意の埋め込みを設定します。Noneまたは“text”から選択します。“text”を指定すると、TextTimeEmbeddingレイヤーが使用されます。
  • addition_time_embed_dim — (int、任意、デフォルトは None): タイムステップ埋め込みの次元数。
  • num_class_embeds (int、任意、デフォルトは None) — class_embed_type が None の場合、クラス条件付けを行う際に time_embed_dim へ射影される学習可能な埋め込み行列の入力次元。
  • time_embedding_type (str、任意、デフォルトは positional) — タイムステップに使用する位置埋め込みの種類。positional または fourier から選択します。
  • time_embedding_dim (int、任意、デフォルトはNone) — 投影された時間埋め込みの次元を指定するための任意の上書きです。
  • time_embedding_act_fn (str、任意、デフォルトは None) — UNet の残りの部分に渡す前に、時間埋め込みに一度だけ適用する任意の活性化関数。silu、mish、gelu、swish から選択できます。
  • timestep_post_act (str、任意、デフォルトは None) — タイムステップ埋め込みで使用する第2の活性化関数。silu、mish、gelu から選択します。
  • time_cond_proj_dim (int、省略可、デフォルトはNone) — タイムステップ埋め込みにおけるcond_projレイヤーの次元数です。
  • conv_in_kernel (int、任意、デフォルトは 3) — conv_in レイヤーのカーネルサイズ。
  • conv_out_kernel (int、任意、デフォルトは3) — conv_out層のカーネルサイズ。
  • projection_class_embeddings_input_dim (int, 任意) — class_embed_type="projection" の場合の class_labels 入力の次元です。class_embed_type="projection" の場合は必須です。
  • class_embeddings_concat (bool、省略可、デフォルトはFalse) — 時間埋め込みをクラス埋め込みと連結するかどうか。
  • mid_block_only_cross_attention (bool、任意、デフォルトは None) — UNetMidBlock2DSimpleCrossAttn を使用する場合に、mid block でクロスアテンションを使用するかどうかを指定します。 only_cross_attention が単一のブール値として指定され、mid_block_only_cross_attention が None の場合、 only_cross_attention の値が mid_block_only_cross_attention の値として使用されます。それ以外の場合はデフォルトで False になります。

ノイズ付きサンプル、条件付き状態、およびタイムステップを受け取り、サンプル形状の出力を返す条件付き2D UNetモデル。

このモデルは ModelMixin を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存など)については、スーパークラスのドキュメントを参照してください。

disable_freeu

< >

( )

FreeUメカニズムを無効にします。

enable_freeu

< >

( s1: floats2: floatb1: floatb2: float )

パラメータ

  • s1 (float) — ステージ1のスケーリング係数。スキップ特徴量の寄与を減衰するために使用します。これにより、強化されたノイズ除去プロセスにおける「過剰平滑化効果」を緩和します。
  • s2 (float) — ステージ 2 のスケーリング係数で、スキップ特徴量の寄与を減衰するために使用します。これにより、強化されたノイズ除去プロセスにおける「過剰平滑化効果」を軽減します。
  • b1 (float) — ステージ1のスケーリング係数。バックボーン特徴の寄与を強調するために使用します。
  • b2 (float) — バックボーン特徴の寄与を強調するためのステージ2のスケーリング係数。

https://huggingface.co/papers/2309.11497 の FreeU メカニズムを有効にします。

スケーリング係数の後ろの接尾辞は、それらが適用されるステージブロックを表しています。

Stable Diffusion v1、v2、Stable Diffusion XLなどの異なるパイプラインで良好に動作することが知られている値の組み合わせについては、公式リポジトリを参照してください。

forward

< >

( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensorclass_labels: typing.Optional[torch.Tensor] = Nonetimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneadded_cond_kwargs: dict[str, torch.Tensor] | None = Nonedown_block_additional_residuals: tuple[torch.Tensor] | None = Nonemid_block_additional_residual: typing.Optional[torch.Tensor] = Nonedown_intrablock_additional_residuals: tuple[torch.Tensor] | None = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNet2DConditionOutput or tuple

パラメータ

  • sample (torch.Tensor) — 形状が (batch, channel, height, width) のノイズ付き入力テンソルです。
  • timestep (torch.Tensor または float または int) — 入力のノイズ除去を行うステップ数。
  • encoder_hidden_states (torch.Tensor) — (batch, sequence_length, feature_dim) の形状を持つエンコーダーの隠れ状態です。
  • class_labels (torch.Tensor、任意、デフォルトはNone) — 条件付け用の任意のクラスラベルです。その埋め込みは、タイムステップの埋め込みと加算されます。
  • timestep_cond — (torch.Tensor、任意、デフォルトは None): timestep 用の条件埋め込みです。指定された場合、これらの埋め込みは self.time_embedding レイヤーを通過したサンプルと加算され、timestep 埋め込みが得られます。
  • attention_mask (torch.Tensor、任意、デフォルトは None) — encoder_hidden_states に適用される、形状が (batch, key_tokens) のアテンションマスクです。1 の場合はマスクが保持され、0 の場合は破棄されます。マスクはバイアスに変換され、「破棄」対象のトークンに対応するアテンションスコアに大きな負の値が加算されます。
  • cross_attention_kwargs (dict、省略可) — 指定された場合、diffusers.models.attention_processor で定義されている self.processor 配下の AttentionProcessor に渡される kwargs の辞書です。
  • added_cond_kwargs — (dict、省略可): 指定された場合、UNet ブロックに渡される埋め込みに追加される追加の埋め込みを含む kwargs 辞書。
  • down_block_additional_residuals — (tuple of torch.Tensor, optional): 指定された場合、ダウンブロックの残差に追加されるテンソルのタプルです。
  • mid_block_additional_residual — (torch.Tensor, 任意): 指定された場合、中央の unet ブロックの残差に追加されるテンソルです。
  • down_intrablock_additional_residuals (tuple of torch.Tensor, 任意) — UNet のダウンブロック内で追加される残差。例えば、T2I-Adapter のサイドモデルから得られるものなど
  • encoder_attention_mask (torch.Tensor) — encoder_hidden_states に適用される、形状が (batch, sequence_length) のクロスアテンションマスクです。 True の場合はマスクが保持され、False の場合は破棄されます。マスクはバイアスに変換され、 「破棄」対象のトークンに対応するアテンションスコアに大きな負の値が加算されます。
  • return_dict (bool、任意、デフォルトは True) — プレーンなタプルではなく UNet2DConditionOutput を返すかどうか。

戻り値

UNet2DConditionOutput または tuple

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

UNet2DConditionModelのforwardメソッドです。

fuse_qkv_projections

< >

( )

融合された QKV 投影を有効にします。自己注意モジュールでは、すべての投影行列(つまり、クエリ、キー、バリュー)が融合されます。相互注意モジュールでは、キーとバリューの投影行列が融合されます。

> このAPIは🧪実験的です。

set_attention_slice

< >

( slice_size: str | int | list[int] = 'auto' )

パラメータ

  • slice_size (str または int または list(int)、任意、デフォルトは "auto") — "auto" の場合、アテンションヘッドへの入力が半分になり、アテンションは2段階で計算されます。 "max" の場合、一度に1つのスライスのみを実行することで、最大限のメモリを節約します。数値が指定された場合、attention_head_dim // slice_size 個のスライスを使用します。この場合、attention_head_dim は slice_size の倍数である必要があります。

スライスされたアテンションの計算を有効にします。

このオプションが有効な場合、attention モジュールは入力テンソルをスライスに分割し、複数ステップで attention を計算します。これは、わずかな速度低下を代償にメモリを節約するために有用です。

set_default_attn_processor

< >

( )

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

unfuse_qkv_projections

< >

( )

有効化されている場合、融合された QKV 投影を無効にします。

> このAPIは🧪実験的です。

UNet2DConditionOutput

クラス diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput

< >

( sample: Tensor = None )

パラメータ

  • sample (torch.Tensor、形状 (batch_size, num_channels, height, width)) — encoder_hidden_states 入力を条件とする隠れ状態の出力です。モデルの最終層の出力です。

UNet2DConditionModelの出力です。

Update on GitHub