Diffusers documentation
ControlNetUnionModel
ControlNetUnionModel
ControlNetUnionModel adalah implementasi ControlNet untuk Stable Diffusion XL.
Model ControlNet diperkenalkan dalam ControlNetPlus oleh xinsir6. Model ini mendukung beberapa input kondisioning tanpa meningkatkan komputasi.
Kami merancang arsitektur baru yang dapat mendukung lebih dari 10 jenis kontrol dalam pembuatan gambar dari teks bersyarat dan mampu menghasilkan gambar beresolusi tinggi yang secara visual setara dengan midjourney. Jaringan ini didasarkan pada arsitektur ControlNet asli; kami mengusulkan dua modul baru untuk: 1 Memperluas ControlNet asli agar mendukung kondisi gambar yang berbeda menggunakan parameter jaringan yang sama. 2 Mendukung input kondisi ganda tanpa meningkatkan offload komputasi, yang sangat penting bagi desainer yang ingin mengedit gambar secara detail; kondisi yang berbeda menggunakan encoder kondisi yang sama, tanpa menambah komputasi atau parameter ekstra.
Memuat
Secara default, ControlNetUnionModel harus dimuat dengan from_pretrained().
from diffusers import StableDiffusionXLControlNetUnionPipeline, ControlNetUnionModel
controlnet = ControlNetUnionModel.from_pretrained("xinsir/controlnet-union-sdxl-1.0")
pipe = StableDiffusionXLControlNetUnionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnet)ControlNetUnionModel
kelas diffusers.ControlNetUnionModel
< source >( in_channels: int = 4conditioning_channels: int = 3flip_sin_to_cos: bool = Truefreq_shift: int = 0down_block_types: tuple[str, ...] = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D')only_cross_attention: bool | tuple[bool] = Falseblock_out_channels: tuple[int, ...] = (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 = 1280transformer_layers_per_block: int | tuple[int, ...] = 1encoder_hid_dim: int | None = Noneencoder_hid_dim_type: str | None = Noneattention_head_dim: int | tuple[int, ...] = 8num_attention_heads: int | tuple[int, ...] | None = Noneuse_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'projection_class_embeddings_input_dim: int | None = Nonecontrolnet_conditioning_channel_order: str = 'rgb'conditioning_embedding_out_channels: tuple[int, ...] | None = (48, 96, 192, 384)global_pool_conditions: bool = Falseaddition_embed_type_num_heads: int = 64num_control_type: int = 6num_trans_channel: int = 320num_trans_head: int = 8num_trans_layer: int = 1num_proj_channel: int = 320 )
Parameter
- in_channels (
int, defaultnya 4) — Jumlah channel pada sampel input. - flip_sin_to_cos (
bool, defaultnyaTrue) — Apakah akan membalik sin menjadi cos pada time embedding. - freq_shift (
int, defaultnya 0) — Pergeseran frekuensi yang diterapkan ke penanaman waktu. - down_block_types (
tuple[str], defaultnya("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — Tuple dari blok downsample yang akan digunakan. - only_cross_attention (
bool | tuple[bool], defaultnyaFalse) — - block_out_channels (
tuple[int], defaultnya(320, 640, 1280, 1280)) — Tuple dari kanal output untuk setiap blok. - layers_per_block (
int, defaultnya 2) — Jumlah lapisan per blok. - downsample_padding (
int, defaultnya 1) — Padding yang digunakan untuk konvolusi downsampling. - mid_block_scale_factor (
float, defaultnya 1) — Faktor skala yang digunakan untuk blok tengah. - act_fn (
str, defaultnya “silu”) — Fungsi aktivasi yang akan digunakan. - norm_num_groups (
int, opsional, default 32) — Jumlah grup yang digunakan untuk normalisasi. Jika None, lapisan normalisasi dan aktivasi akan dilewati dalam pascapemrosesan. - norm_eps (
float, defaultnya 1e-5) — Epsilon yang digunakan untuk normalisasi. - cross_attention_dim (
int, defaultnya 1280) — Dimensi dari fitur cross attention. - transformer_layers_per_block (
intatautuple[int], opsional, default 1) — Jumlah blok transformer bertipeBasicTransformerBlock. Hanya relevan untuk~models.unet_2d_blocks.CrossAttnDownBlock2D,~models.unet_2d_blocks.CrossAttnUpBlock2D,~models.unet_2d_blocks.UNetMidBlock2DCrossAttn. - encoder_hid_dim (
int, opsional, default None) — Jikaencoder_hid_dim_typedidefinisikan,encoder_hidden_statesakan diproyeksikan dari dimensiencoder_hid_dimkecross_attention_dim. - encoder_hid_dim_type (
str, opsional, defaultNone) — Jika diberikan,encoder_hidden_statesdan kemungkinan embedding lainnya akan diproyeksikan ke bawah menjadi embedding teks dengan dimensicross_attentionsesuai denganencoder_hid_dim_type. - attention_head_dim (
int | tuple[int], defaultnya 8) — Dimensi dari kepala perhatian (attention heads). - use_linear_projection (
bool, defaultnyaFalse) — - class_embed_type (
str, opsional, defaultnyaNone) — Jenis class embedding yang akan digunakan, yang pada akhirnya dijumlahkan dengan time embeddings. Pilih dari None,"timestep","identity","projection", atau"simple_projection". - addition_embed_type (
str, opsional, defaultNone) — Mengonfigurasi embedding opsional yang akan dijumlahkan dengan time embeddings. Pilih dariNoneatau “text”. “text” akan menggunakan layerTextTimeEmbedding. - num_class_embeds (
int, opsional, default 0) — Dimensi input dari matriks embedding yang dapat dipelajari untuk diproyeksikan ketime_embed_dim, saat melakukan kondisioning kelas denganclass_embed_typeyang sama denganNone. - upcast_attention (
bool, defaultnyaFalse) — - resnet_time_scale_shift (
str, defaultnya"default") — Konfigurasi pergeseran skala waktu untuk blok ResNet (lihatResnetBlock2D). Pilih daridefaultatauscale_shift. - projection_class_embeddings_input_dim (
int, opsional, defaultnyaNone) — Dimensi dari inputclass_labelsketikaclass_embed_type="projection". Wajib diisi ketikaclass_embed_type="projection". - controlnet_conditioning_channel_order (
str, defaultnya"rgb") — Urutan channel dari gambar kondisional. Akan dikonversi menjadirgbjika nilainyabgr. - conditioning_embedding_out_channels (
tuple[int], opsional, defaultnya(48, 96, 192, 384)) — Tuple dari kanal output untuk setiap blok di lapisanconditioning_embedding. - global_pool_conditions (
bool, defaultnyaFalse) —
Model ControlNetUnion.
forward
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensorcontrolnet_cond: list[torch.Tensor]control_type: Tensorcontrol_type_idx: list[int]conditioning_scale: float | list[float] = 1.0class_labels: typing.Optional[torch.Tensor] = Nonetimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneadded_cond_kwargs: dict[str, torch.Tensor] | None = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Nonefrom_multi: bool = Falseguess_mode: bool = Falsereturn_dict: bool = True ) → ~models.controlnet.ControlNetOutput or tuple
Parameter
- sample (
torch.Tensor) — Tensor input berisik. - timestep (
torch.Tensor | float | int) — Jumlah timestep untuk mendenoise input. - encoder_hidden_states (
torch.Tensor) — State tersembunyi encoder. - controlnet_cond (
list[torch.Tensor]) — Tensor input kondisional. - control_type (
torch.Tensor) — Tensor dengan bentuk(batch, num_control_type)yang berisi nilai0atau1tergantung pada apakah tipe kontrol tersebut digunakan. - control_type_idx (
list[int]) — Indeks daricontrol_type. - conditioning_scale (
float, defaultnya1.0) — Faktor skala untuk output ControlNet. - class_labels (
torch.Tensor, opsional, defaultNone) — Label kelas opsional untuk kondisioning. Embedding-nya akan dijumlahkan dengan embedding timestep. - timestep_cond (
torch.Tensor, opsional, defaultNone) — Embedding kondisional tambahan untuk timestep. Jika diberikan, embedding akan dijumlahkan dengan timestep_embedding yang diteruskan melalui lapisanself.time_embeddinguntuk mendapatkan embedding timestep akhir. - attention_mask (
torch.Tensor, opsional, defaultNone) — Mask perhatian dengan bentuk(batch, key_tokens)diterapkan padaencoder_hidden_states. Jika1, mask dipertahankan, sedangkan jika0, mask dibuang. Mask akan dikonversi menjadi bias, yang menambahkan nilai negatif besar ke skor perhatian yang sesuai dengan token “buang”. - added_cond_kwargs (
dict) — Kondisi tambahan untuk UNet Stable Diffusion XL. - cross_attention_kwargs (
dict[str], opsional, defaultNone) — Kamus kwargs yang jika ditentukan akan diteruskan keAttnProcessor. - from_multi (
bool, defaultnyaFalse) — Gunakan penskalaan standar ketika dipanggil dariMultiControlNetUnionModel. - guess_mode (
bool, defaultnyaFalse) — Pada mode ini, encoder ControlNet akan berusaha semaksimal mungkin untuk mengenali konten input dari input meskipun Anda menghapus semua prompt.guidance_scaleantara 3.0 dan 5.0 direkomendasikan. - return_dict (
bool, defaultnyaTrue) — Apakah akan mengembalikan~models.controlnet.ControlNetOutputalih-alih tuple biasa.
Mengembalikan
~models.controlnet.ControlNetOutput atau tuple
Jika return_dict adalah True, sebuah ~models.controlnet.ControlNetOutput akan dikembalikan, selain itu sebuah tuple akan dikembalikan di mana elemen pertama adalah tensor sampel.
Metode forward dari ControlNetUnionModel.
from_unet
< source >( unet: UNet2DConditionModelcontrolnet_conditioning_channel_order: str = 'rgb'conditioning_embedding_out_channels: tuple[int, ...] | None = (16, 32, 96, 256)load_weights_from_unet: bool = True )
Parameter
- unet (
UNet2DConditionModel) — Bobot model UNet yang akan disalin ke ControlNetUnionModel. Semua opsi konfigurasi juga disalin jika berlaku.
Instansiasi ControlNetUnionModel dari UNet2DConditionModel.
set_attention_slice
< source >( slice_size: str | int | list[int] )
Parameter
- slice_size (
stratauintataulist(int), opsional, defaultnya"auto") — Jika"auto", input ke attention heads dibagi dua, sehingga attention dihitung dalam dua langkah. Jika"max", jumlah memori yang dihemat maksimal dengan hanya menjalankan satu slice pada satu waktu. Jika angka diberikan, digunakan sebanyak slice sebanyakattention_head_dim // slice_size. Dalam kasus ini,attention_head_dimharus merupakan kelipatan darislice_size.
Aktifkan perhitungan perhatian terpotong.
Ketika opsi ini diaktifkan, modul perhatian membagi tensor input menjadi beberapa potongan untuk menghitung perhatian dalam beberapa langkah. Hal ini berguna untuk menghemat sebagian memori dengan mengorbankan sedikit penurunan kecepatan.
Menonaktifkan prosesor perhatian kustom dan mengatur implementasi perhatian default.