# UNetMotionModel

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

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

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

## UNetMotionModel[[diffusers.UNetMotionModel]]

#### diffusers.UNetMotionModel[[diffusers.UNetMotionModel]]

```python
diffusers.UNetMotionModel(sample_size: int | None = None, in_channels: int = 4, out_channels: int = 4, down_block_types: tuple = ('CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'DownBlockMotion'), up_block_types: tuple = ('UpBlockMotion', 'CrossAttnUpBlockMotion', 'CrossAttnUpBlockMotion', 'CrossAttnUpBlockMotion'), block_out_channels: tuple = (320, 640, 1280, 1280), layers_per_block: int | tuple[int] = 2, downsample_padding: int = 1, mid_block_scale_factor: float = 1, act_fn: str = 'silu', norm_num_groups: int = 32, norm_eps: float = 1e-05, cross_attention_dim: int = 1280, transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1, reverse_transformer_layers_per_block: int | tuple[int] | tuple[tuple] | None = None, temporal_transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1, reverse_temporal_transformer_layers_per_block: int | tuple[int] | tuple[tuple] | None = None, transformer_layers_per_mid_block: int | tuple[int] | None = None, temporal_transformer_layers_per_mid_block: int | tuple[int] | None = 1, use_linear_projection: bool = False, num_attention_heads: int | tuple[int, ...] = 8, motion_max_seq_length: int = 32, motion_num_attention_heads: int | tuple[int, ...] = 8, reverse_motion_num_attention_heads: int | tuple[int, ...] | tuple[tuple[int, ...], ...] | None = None, use_motion_mid_block: bool = True, mid_block_layers: int = 1, encoder_hid_dim: int | None = None, encoder_hid_dim_type: str | None = None, addition_embed_type: str | None = None, addition_time_embed_dim: int | None = None, projection_class_embeddings_input_dim: int | None = None, time_cond_proj_dim: int | None = None)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1201)

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

このモデルは [ModelMixin](/docs/diffusers/main/ja/api/models/overview#diffusers.ModelMixin) を継承しています。すべてのモデルに実装されている汎用的なメソッド（ダウンロードや保存など）については、スーパークラスのドキュメントを参照してください。

#### disable_freeu[[diffusers.UNetMotionModel.disable_freeu]]

```python
disable_freeu()
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1842)

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

#### enable_forward_chunking[[diffusers.UNetMotionModel.enable_forward_chunking]]

```python
enable_forward_chunking(chunk_size: int | None = None, dim: int = 0)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1760)

**パラメータ:**

chunk_size (`int`, *optional*) : フィードフォワード層のチャンクサイズ。指定しない場合、`dim`次元の各テンソルに対してフィードフォワード層を個別に実行します。

dim (`int`、*optional*、デフォルトは`0`) : フィードフォワード計算をチャンク分割する次元です。dim=0（バッチ）またはdim=1（シーケンス長）のいずれかを選択します。

[フィードフォワードチャンク分割](https://huggingface.co/blog/reformer#2-chunked-feed-forward-layers)を使用するようにアテンションプロセッサを設定します。

#### enable_freeu[[diffusers.UNetMotionModel.enable_freeu]]

```python
enable_freeu(s1: float, s2: float, b1: float, b2: float)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1817)

**パラメータ:**

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 などの異なるパイプラインで良好に動作することが知られている値の組み合わせについては、[公式リポジトリ](https://github.com/ChenyangSi/FreeU)を参照してください。

#### forward[[diffusers.UNetMotionModel.forward]]

```python
forward(sample: Tensor, timestep: typing.Union[torch.Tensor, float, int], encoder_hidden_states: Tensor, timestep_cond: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, cross_attention_kwargs: dict[str, typing.Any] | None = None, added_cond_kwargs: dict[str, torch.Tensor] | None = None, down_block_additional_residuals: tuple[torch.Tensor] | None = None, mid_block_additional_residual: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1882)

**パラメータ:**

sample (`torch.Tensor`) : 以下の形状 `(batch, num_frames, channel, height, width` を持つノイズ付き入力テンソル。

timestep (`torch.Tensor` または `float` または `int`) : 入力からノイズを除去するためのタイムステップ数。

encoder_hidden_states (`torch.Tensor`) : 形状が `(batch, sequence_length, feature_dim)` のエンコーダーの隠れ状態。

timestep_cond : (`torch.Tensor`、*任意*、デフォルトは`None`): タイムステップ用の条件埋め込み。指定された場合、これらの埋め込みは`self.time_embedding`層を通過したサンプルに足し合わされ、タイムステップ埋め込みが得られます。

attention_mask (`torch.Tensor`, *任意*、デフォルトは`None`) : 形状`(batch, key_tokens)`のattention maskが`encoder_hidden_states`に適用されます。`1`の場合はマスクが保持され、`0`の場合は破棄されます。マスクはバイアスに変換され、「破棄」トークンに対応するattention scoreに大きな負の値が加算されます。

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

added_cond_kwargs (`dict`, *任意*) : モデルを条件付けするために使用される、追加の埋め込み（テキスト埋め込みや時間埋め込みなど）の辞書。

down_block_additional_residuals : (`tuple` of `torch.Tensor`, *任意*): 指定された場合、ダウンブロックの残差に追加されるテンソルのタプル。

mid_block_additional_residual : (`torch.Tensor`, *任意*): 指定された場合、中央の unet ブロックの残差に追加されるテンソル。

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

**戻り値:** `UNetMotionOutput` または `tuple`

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

[UNetMotionModel](/docs/diffusers/main/ja/api/models/unet-motion#diffusers.UNetMotionModel) の forward メソッド。

#### freeze_unet2d_params[[diffusers.UNetMotionModel.freeze_unet2d_params]]

```python
freeze_unet2d_params()
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1691)

UNet2DConditionModel の重みだけを凍結し、モーションモジュールは凍結せずにファインチューニングできるようにします。

#### fuse_qkv_projections[[diffusers.UNetMotionModel.fuse_qkv_projections]]

```python
fuse_qkv_projections()
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1851)

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

> [!WARNING] > このAPIは🧪実験的です。

#### set_default_attn_processor[[diffusers.UNetMotionModel.set_default_attn_processor]]

```python
set_default_attn_processor()
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1801)

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

#### unfuse_qkv_projections[[diffusers.UNetMotionModel.unfuse_qkv_projections]]

```python
unfuse_qkv_projections()
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_motion_model.py#L1873)

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

> [!WARNING] > このAPIは🧪実験的です。

## UNet3DConditionOutput[[diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput]]

#### diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput[[diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput]]

```python
diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput(sample: Tensor)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_3d_condition.py#L50)

**パラメータ:**

sample (`torch.Tensor`、shape `(batch_size, num_channels, num_frames, height, width)`) : `encoder_hidden_states` 入力で条件付けられた隠れ状態の出力。モデルの最終層の出力です。

[UNet3DConditionModel](/docs/diffusers/main/ja/api/models/unet3d-cond#diffusers.UNet3DConditionModel)の出力です。

