Diffusers documentation
UNet3DConditionModel
UNet3DConditionModel
UNetモデルは、Ronneberger らによって生体医用画像のセグメンテーションのために最初に提案されましたが、入力と同じサイズの画像を出力するため、🤗 Diffusers でも広く使用されています。実際の拡散プロセスを担うため、拡散システムにおいて最も重要なコンポーネントの一つです。🤗 Diffusers には、次元数や条件付きモデルかどうかによっていくつかの UNet モデルのバリアントが存在します。これは 3D UNet の条件付きモデルです。
論文の抄録は以下の通りです:
深層ネットワークの成功した学習には、数千枚のラベル付き訓練サンプルが必要であるという点について、大きな合意がある。本論文では、データ拡張を強力に活用することで、利用可能なラベル付きサンプルをより効率的に使用するためのネットワークと学習戦略を提案する。このアーキテクチャは、コンテキストを捉えるための縮小パスと、正確な位置特定を可能にする対称的な拡大パスで構成される。このようなネットワークは、非常に少ない画像からエンドツーエンドで学習でき、電子顕微鏡スタックにおける神経構造のセグメンテーションに関するISBIチャレンジにおいて、従来の最良手法(スライディングウィンドウ型畳み込みネットワーク)を上回ることを示す。透過光顕微鏡画像(位相差およびDIC)で学習させた同じネットワークを用いて、これらのカテゴリにおいてISBIセルトラッキングチャレンジ2015を大幅な差で制覇した。さらに、このネットワークは高速である。最新のGPUでは、512x512画像のセグメンテーションに1秒未満しかかからない。完全な実装(Caffeベース)と学習済みネットワークは、http://lmb.informatik.uni-freiburg.de/people/ronneber/u-netで入手可能である。
UNet3DConditionModel
class diffusers.UNet3DConditionModel
< source >( sample_size: int | None = Nonein_channels: int = 4out_channels: int = 4down_block_types: tuple = ('CrossAttnDownBlock3D', 'CrossAttnDownBlock3D', 'CrossAttnDownBlock3D', 'DownBlock3D')up_block_types: tuple = ('UpBlock3D', 'CrossAttnUpBlock3D', 'CrossAttnUpBlock3D', 'CrossAttnUpBlock3D')block_out_channels: tuple = (320, 640, 1280, 1280)layers_per_block: int = 2downsample_padding: int = 1mid_block_scale_factor: float = 1act_fn: str = 'silu'norm_num_groups: int | None = 32norm_eps: float = 1e-05cross_attention_dim: int = 1024attention_head_dim: int | tuple[int] = 64num_attention_heads: int | tuple[int] | None = Nonetime_cond_proj_dim: int | None = None )
パラメータ
- sample_size (
intまたはtuple[int, int]、省略可能、デフォルトはNone) — 入力/出力サンプルの高さと幅。 - in_channels (
int、省略可、デフォルトは 4) — 入力サンプルのチャネル数。 - out_channels (
int、省略可能、デフォルトは 4) — 出力のチャネル数。 - down_block_types (
tuple[str]、任意、デフォルトは("CrossAttnDownBlock3D", "CrossAttnDownBlock3D", "CrossAttnDownBlock3D", "DownBlock3D")) — 使用するダウンサンプリングブロックのタプルです。 - up_block_types (
tuple[str]、任意、デフォルトは("UpBlock3D", "CrossAttnUpBlock3D", "CrossAttnUpBlock3D", "CrossAttnUpBlock3D")) — 使用するアップサンプルブロックのタプルです。 - 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 に使用するスケール係数。 - act_fn (
str、任意、デフォルトは"silu") — 使用する活性化関数。 - norm_num_groups (
int、任意、デフォルトは 32) — 正規化に使用するグループ数です。Noneの場合、後処理で正規化層と活性化層がスキップされます。 - norm_eps (
float、任意、デフォルト値は 1e-5) — 正規化に使用する epsilon。 - cross_attention_dim (
int、任意、デフォルトは 1024)— クロスアテンション特徴量の次元数。 - attention_head_dim (
int、任意、デフォルトは 64)— アテンションヘッドの次元数。 - num_attention_heads (
int, 任意) — アテンションヘッドの数。 - time_cond_proj_dim (
int、省略可、デフォルトはNone) — タイムステップ埋め込みにおけるcond_projレイヤーの次元数です。
ノイズ付きサンプル、条件付き状態、およびタイムステップを受け取り、サンプル形状の出力を返す条件付き3D UNetモデル。
このモデルは ModelMixin を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存など)については、スーパークラスのドキュメントを参照してください。
FreeUメカニズムを無効にします。
enable_forward_chunking
< source >( chunk_size: int | None = Nonedim: int = 0 )
フィードフォワードチャンク分割を使用するアテンションプロセッサを設定します。
enable_freeu
< source >( s1s2b1b2 )
https://huggingface.co/papers/2309.11497 の FreeU メカニズムを有効にします。
スケーリング係数の後ろの接尾辞は、それらが適用されるステージブロックを表しています。
Stable Diffusion v1、v2、Stable Diffusion XLなどの異なるパイプラインで良好に動作することが知られている値の組み合わせについては、公式リポジトリを参照してください。
forward
< source >( 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 = Nonedown_block_additional_residuals: tuple[torch.Tensor] | None = Nonemid_block_additional_residual: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNet3DConditionOutput or tuple
パラメータ
- sample (
torch.Tensor) — 以下の形状(batch, num_channels, num_frames, 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 の辞書です。 - down_block_additional_residuals — (
tupleoftorch.Tensor, optional): 指定された場合、ダウンブロックの残差に追加されるテンソルのタプルです。 - mid_block_additional_residual — (
torch.Tensor, 任意): 指定された場合、中央の unet ブロックの残差に追加されるテンソルです。 - return_dict (
bool、任意、デフォルトはTrue) — tuple ではなく UNet3DConditionOutput を返すかどうかを指定します。 - cross_attention_kwargs (
dict、省略可) — 指定された場合、AttnProcessorに渡される kwargs 辞書です。
戻り値
UNet3DConditionOutput または tuple
return_dict が True の場合、UNet3DConditionOutput が返され、それ以外の場合は、最初の要素がサンプルテンソルである tuple が返されます。
UNet3DConditionModelのforwardメソッドです。
融合された QKV 投影を有効にします。自己注意モジュールでは、すべての投影行列(つまり、クエリ、キー、バリュー)が融合されます。相互注意モジュールでは、キーとバリューの投影行列が融合されます。
> このAPIは🧪実験的です。
set_attention_slice
< source >( slice_size: str | int | list[int] )
スライスされたアテンションの計算を有効にします。
このオプションが有効な場合、attention モジュールは入力テンソルをスライスに分割し、複数ステップで attention を計算します。これは、わずかな速度低下を代償にメモリを節約するために有用です。
カスタムアテンションプロセッサを無効にし、デフォルトのアテンション実装を設定します。
UNet3DConditionOutput
class diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput
< source >( sample: Tensor )
UNet3DConditionModelの出力です。