Buckets:
SparseControlNetModel
SparseControlNetModel は、AnimateDiff 向けの ControlNet の実装です。
ControlNetは、Lvmin Zhang、Anyi Rao、Maneesh Agrawalaによる論文Adding Conditional Control to Text-to-Image Diffusion Modelsで提案されました。
ControlNet の SparseCtrl バージョンは、Yuwei Guo、Ceyuan Yang、Anyi Rao、Maneesh Agrawala、Dahua Lin、Bo Dai によって、テキストから動画への拡散モデルにおける制御付き生成を実現するために、SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models で紹介されました。
論文の抄録は以下の通りです:
テキストから動画を生成する(T2V)技術、すなわち与えられたテキストプロンプトから動画を生成する技術は、近年大きく発展してきました。しかし、テキストプロンプトのみを頼りにすると、空間的な不確実性により、フレームの構図が曖昧になりがちです。そのため、研究コミュニティでは、フレームごとの深度やエッジのシーケンスといった高密度な構造シグナルを活用して制御性を高めるアプローチがとられていますが、これに伴い推論時の負荷が増大するという問題があります。本稿では、図1に示すように、1つまたは数個の入力のみで柔軟な構造制御を可能にする SparseCtrl を提案します。SparseCtrl は、事前学習済みの T2V モデルを変更せずに、これらのスパースなシグナルを処理するための追加の条件エンコーダを組み込んでいます。提案手法は、スケッチ、深度マップ、RGB 画像など、さまざまなモダリティに対応しており、動画生成におけるより実用的な制御を提供するとともに、ストーリーボード作成、深度レンダリング、キーフレームアニメーション、補間などの応用を促進します。広範な実験により、SparseCtrl はオリジナルおよびパーソナライズされた T2V 生成器の両方で汎化能力を示すことが確認されました。コードとモデルは this https URL で公開予定です。
SparseControlNetModel を読み込む例
import torch
from diffusers import SparseControlNetModel
# fp32 variant in float16
# 1. Scribble checkpoint
controlnet = SparseControlNetModel.from_pretrained("guoyww/animatediff-sparsectrl-scribble", dtype=torch.float16)
# 2. RGB checkpoint
controlnet = SparseControlNetModel.from_pretrained("guoyww/animatediff-sparsectrl-rgb", dtype=torch.float16)
# For loading fp16 variant, pass `variant="fp16"` as an additional parameter
SparseControlNetModel[[diffusers.SparseControlNetModel]]
diffusers.SparseControlNetModel[[diffusers.SparseControlNetModel]]
diffusers.SparseControlNetModel(in_channels: int = 4, conditioning_channels: int = 4, flip_sin_to_cos: bool = True, freq_shift: int = 0, down_block_types: tuple[str, ...] = ('CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'DownBlockMotion'), only_cross_attention: bool | tuple[bool] = False, block_out_channels: tuple[int, ...] = (320, 640, 1280, 1280), layers_per_block: int = 2, downsample_padding: int = 1, mid_block_scale_factor: float = 1, act_fn: str = 'silu', norm_num_groups: int | None = 32, norm_eps: float = 1e-05, cross_attention_dim: int = 768, transformer_layers_per_block: int | tuple[int, ...] = 1, transformer_layers_per_mid_block: int | tuple[int] | None = None, temporal_transformer_layers_per_block: int | tuple[int, ...] = 1, attention_head_dim: int | tuple[int, ...] = 8, num_attention_heads: int | tuple[int, ...] | None = None, use_linear_projection: bool = False, upcast_attention: bool = False, resnet_time_scale_shift: str = 'default', conditioning_embedding_out_channels: tuple[int, ...] | None = (16, 32, 96, 256), global_pool_conditions: bool = False, controlnet_conditioning_channel_order: str = 'rgb', motion_max_seq_length: int = 32, motion_num_attention_heads: int = 8, concat_conditioning_mask: bool = True, use_simplified_condition_embedding: bool = True)
パラメータ:
in_channels (int、デフォルトは 4) : 入力サンプルのチャネル数。
conditioning_channels (int、デフォルトは 4) : ControlNet の条件埋め込みモジュールにおける入力チャネル数。concat_condition_embedding が True の場合、ここで指定した値に 1 が加算されます。
flip_sin_to_cos (bool、デフォルトはTrue) : 時間埋め込みにおいて sin を cos に反転させるかどうか。
freq_shift (int、デフォルトは 0) : 時間埋め込みに適用する周波数シフト。
down_block_types (tuple[str]、デフォルトは ("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) : 使用するダウンサンプルブロックのタプルです。
only_cross_attention (bool | tuple[bool]、デフォルトはFalse) --
block_out_channels (tuple[int]、デフォルトは(320, 640, 1280, 1280)) : 各ブロックの出力チャネル数を表すタプル。
layers_per_block (int、デフォルトは 2) : ブロックあたりの層数。
downsample_padding (int、デフォルトは 1) : ダウンサンプリング用畳み込みで使用するパディング。
mid_block_scale_factor (float、デフォルトは 1) : mid block に使用するスケール係数。
act_fn (str、デフォルトは "silu") : 使用する活性化関数。
norm_num_groups (int、任意、デフォルトは 32) : 正規化に使用するグループ数。None の場合、後処理で正規化層と活性化層がスキップされます。
norm_eps (float、デフォルトは 1e-5) : 正規化に使用する epsilon。
cross_attention_dim (int、デフォルトは 1280) : クロスアテンション特徴量の次元数。
transformer_layers_per_block (int または tuple[int]、省略可能、デフォルト値は 1) : BasicTransformerBlock 型の Transformer ブロックの数。~models.unet_2d_blocks.CrossAttnDownBlock2D、~models.unet_2d_blocks.CrossAttnUpBlock2D、~models.unet_2d_blocks.UNetMidBlock2DCrossAttn の場合にのみ関連します。
transformer_layers_per_mid_block (int または tuple[int]、省略可能、デフォルトは 1) : 中央ブロックの各層で使用する Transformer 層の数。
attention_head_dim (int または tuple[int]、デフォルトは 8) : アテンションヘッドの次元数。
num_attention_heads (int または tuple[int]、省略可) : マルチヘッドアテンションで使用するヘッド数。
use_linear_projection (bool、デフォルトは False) --
upcast_attention (bool、デフォルトは False) --
resnet_time_scale_shift (str、デフォルトは "default") : ResNet ブロック用の時間スケールシフト設定(ResnetBlock2D を参照)。default または scale_shift から選択します。
conditioning_embedding_out_channels (tuple[int]、デフォルトは (16, 32, 96, 256)) : conditioning_embedding レイヤー内の各ブロックの出力チャネルのタプルです。
global_pool_conditions (bool、デフォルトはFalse) : TODO(Patrick) - 未使用のパラメータ
controlnet_conditioning_channel_order (str、デフォルトはrgb) --
motion_max_seq_length (int、デフォルトは32) : モーションモジュールで使用する最大シーケンス長。
motion_num_attention_heads (int または tuple[int]、デフォルトは 8) : モーションモジュールの各アテンション層で使用するヘッド数。
concat_conditioning_mask (bool、デフォルトはTrue) --
use_simplified_condition_embedding (bool、デフォルトはTrue) --
SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models に記載されている SparseControlNet モデル。
forward[[diffusers.SparseControlNetModel.forward]]
forward(sample: Tensor, timestep: typing.Union[torch.Tensor, float, int], encoder_hidden_states: Tensor, controlnet_cond: Tensor, conditioning_scale: float = 1.0, timestep_cond: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, cross_attention_kwargs: dict[str, typing.Any] | None = None, conditioning_mask: typing.Optional[torch.Tensor] = None, guess_mode: bool = False, return_dict: bool = True)
パラメータ:
sample (torch.Tensor) : ノイズ付きの入力テンソル。
timestep (torch.Tensor | float | int) : 入力をデノイズするためのタイムステップ数。
encoder_hidden_states (torch.Tensor) : エンコーダーの隠れ状態。
controlnet_cond (torch.Tensor) : 形状が (batch_size, sequence_length, hidden_size) の条件付き入力テンソル。
conditioning_scale (float、デフォルトは1.0) : ControlNet の出力に対するスケール係数。
timestep_cond (torch.Tensor、任意、デフォルトはNone) : タイムステップ用の追加の条件埋め込みです。指定された場合、これらの埋め込みはself.time_embedding層を介して渡されるtimestep_embeddingに足し合わされ、最終的なタイムステップ埋め込みが得られます。
attention_mask (torch.Tensor, 任意、デフォルトはNone) : 形状(batch, key_tokens)のattention maskがencoder_hidden_statesに適用されます。1の場合はマスクが保持され、0の場合は破棄されます。マスクはバイアスに変換され、「破棄」トークンに対応するattention scoreに大きな負の値が加算されます。
conditioning_mask (torch.Tensor、任意、デフォルトはNone) : controlnet_cond内のどのフレームが有効な条件付けフレームであるかを示す任意のマスク。
cross_attention_kwargs (dict[str]、任意、デフォルトはNone) : 指定された場合、AttnProcessorに渡される kwargs 辞書。
guess_mode (bool、デフォルトはFalse) : このモードでは、すべてのプロンプトを削除した場合でも、ControlNet エンコーダーは入力内容の認識に最大限努めます。guidance_scaleは3.0から5.0の範囲が推奨されます。
return_dict (bool、デフォルトはTrue) : プレーンなタプルではなく~models.controlnet.ControlNetOutputを返すかどうか。
戻り値: ~models.controlnet.ControlNetOutput または tuple
return_dict が True の場合、~models.controlnet.ControlNetOutput が返され、それ以外の場合は、最初の要素がサンプルテンソルであるタプルが返されます。
SparseControlNetModelのforwardメソッド。
from_unet[[diffusers.SparseControlNetModel.from_unet]]
from_unet(unet: UNet2DConditionModel, controlnet_conditioning_channel_order: str = 'rgb', conditioning_embedding_out_channels: tuple[int, ...] | None = (16, 32, 96, 256), load_weights_from_unet: bool = True, conditioning_channels: int = 3)
パラメータ:
unet (UNet2DConditionModel) : SparseControlNetModel にコピーする UNet モデルの重みです。適用可能なすべての設定オプションもコピーされます。
UNet2DConditionModelからSparseControlNetModelをインスタンス化します。
set_attention_slice[[diffusers.SparseControlNetModel.set_attention_slice]]
set_attention_slice(slice_size: str | int | list[int])
パラメータ:
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[[diffusers.SparseControlNetModel.set_default_attn_processor]]
set_default_attn_processor()
カスタムアテンションプロセッサを無効にし、デフォルトのアテンション実装を設定します。
SparseControlNetOutput[[diffusers.models.controlnets.SparseControlNetOutput]]
diffusers.models.controlnets.SparseControlNetOutput[[diffusers.models.controlnets.SparseControlNetOutput]]
diffusers.models.controlnets.SparseControlNetOutput(down_block_res_samples: tuple[torch.Tensor], mid_block_res_sample: Tensor)
パラメータ:
down_block_res_samples (tuple[torch.Tensor]) : 各ダウンサンプリングブロックにおける、異なる解像度のダウンサンプル活性化値のタプル。各テンソルは (batch_size, channel * resolution, height //resolution, width // resolution) の形状である必要があります。出力は、元の UNet のダウンサンプリング活性化値を条件付けするために使用できます。
mid_down_block_re_sample (torch.Tensor) : 中央ブロック(最も低いサンプル解像度)の活性化値です。各テンソルの形状は (batch_size, channel * lowest_resolution, height // lowest_resolution, width // lowest_resolution) である必要があります。出力は、元の UNet の中央ブロックの活性化値を条件付けするために使用できます。
SparseControlNetModelの出力です。
Xet Storage Details
- Size:
- 15.6 kB
- Xet hash:
- 5348c94cd36e3fc612daa8a66e5cd1773db264b0a4c4451871d97689dfbace87
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.