Diffusers documentation

UNet2DConditionModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

UNet2DConditionModel

Model UNet awalnya diperkenalkan oleh Ronneberger dkk. untuk segmentasi citra biomedis, tetapi juga umum digunakan di 🤗 Diffusers karena menghasilkan citra dengan ukuran yang sama dengan input. Ini adalah salah satu komponen terpenting dalam sistem difusi karena memfasilitasi proses difusi itu sendiri. Terdapat beberapa varian model UNet di 🤗 Diffusers, tergantung pada jumlah dimensinya dan apakah model tersebut bersifat kondisional atau tidak. Ini adalah model UNet kondisional 2D.

Abstrak dari makalah tersebut adalah:

Ada konsensus besar bahwa pelatihan jaringan dalam yang sukses membutuhkan ribuan sampel pelatihan berlabel. Dalam makalah ini, kami menyajikan sebuah jaringan dan strategi pelatihan yang mengandalkan penggunaan kuat augmentasi data untuk menggunakan sampel berlabel yang tersedia secara lebih efisien. Arsitekturnya terdiri dari jalur kontraktif untuk menangkap konteks dan jalur ekspansi simetris yang memungkinkan lokalisasi yang presisi. Kami menunjukkan bahwa jaringan semacam ini dapat dilatih end-to-end dari sangat sedikit gambar dan melampaui metode terbaik sebelumnya (jaringan konvolusional sliding-window) pada tantangan ISBI untuk segmentasi struktur neuron dalam tumpukan mikroskop elektron. Menggunakan jaringan yang sama yang dilatih pada gambar mikroskopi cahaya transmisi (kontras fase dan DIC), kami memenangkan tantangan pelacakan sel ISBI 2015 dalam kategori-kategori tersebut dengan selisih yang besar. Selain itu, jaringan ini cepat. Segmentasi gambar 512x512 membutuhkan waktu kurang dari satu detik pada GPU terbaru. Implementasi lengkap (berbasis Caffe) dan jaringan yang telah dilatih tersedia di http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net.

UNet2DConditionModel

kelas 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 = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D')mid_block_type: str | None = 'UNetMidBlock2DCrossAttn'up_block_types: tuple = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D')only_cross_attention: bool | tuple[bool] = Falseblock_out_channels: tuple = (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 )

Parameter

  • sample_size (int atau tuple[int, int], opsional, defaultnya None) — Tinggi dan lebar sampel input/output.
  • in_channels (int, opsional, default 4) — Jumlah channel pada sampel input.
  • out_channels (int, opsional, default 4) — Jumlah channel pada output.
  • center_input_sample (bool, opsional, default False) — Apakah sampel input akan dipusatkan.
  • flip_sin_to_cos (bool, opsional, default True) — Apakah akan membalik sin menjadi cos pada time embedding.
  • freq_shift (int, opsional, default 0) — Pergeseran frekuensi yang diterapkan pada time embedding.
  • down_block_types (tuple[str], opsional, defaultnya ("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — Tuple dari blok downsample yang akan digunakan.
  • mid_block_type (str, opsional, default "UNetMidBlock2DCrossAttn") — Jenis blok untuk bagian tengah UNet, dapat berupa salah satu dari UNetMidBlock2DCrossAttn, UNetMidBlock2D, atau UNetMidBlock2DSimpleCrossAttn. Jika None, lapisan blok tengah dilewati.
  • up_block_types (tuple[str], opsional, defaultnya ("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) — Tuple dari blok upsample yang akan digunakan.
  • only_cross_attention(bool atau tuple[bool], opsional, default ke False) — Apakah akan menyertakan self-attention dalam blok transformer dasar, lihat BasicTransformerBlock.
  • block_out_channels (tuple[int], opsional, defaultnya (320, 640, 1280, 1280)) — Tuple dari kanal output untuk setiap blok.
  • layers_per_block (int, opsional, default 2) — Jumlah lapisan per blok.
  • downsample_padding (int, opsional, default 1) — Padding yang digunakan untuk konvolusi downsampling.
  • mid_block_scale_factor (float, opsional, default 1.0) — Faktor skala yang digunakan untuk blok tengah.
  • dropout (float, opsional, default 0.0) — Probabilitas dropout yang digunakan.
  • act_fn (str, opsional, 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 dilewati dalam pascapemrosesan.
  • norm_eps (float, opsional, default 1e-5) — Epsilon yang digunakan untuk normalisasi.
  • cross_attention_dim (int atau tuple[int], opsional, default 1280) — Dimensi dari fitur cross attention.
  • transformer_layers_per_block (int, tuple[int], atau tuple[tuple] , opsional, default 1) — Jumlah blok transformer bertipe BasicTransformerBlock. Hanya relevan untuk CrossAttnDownBlock2D, CrossAttnUpBlock2D, UNetMidBlock2DCrossAttn.
  • reverse_transformer_layers_per_block — (tuple[tuple], opsional, default None): Jumlah blok transformer bertipe BasicTransformerBlock di dalam blok upsampling dari U-Net. Hanya relevan jika transformer_layers_per_block bertipe tuple[tuple] dan untuk CrossAttnDownBlock2D, CrossAttnUpBlock2D, UNetMidBlock2DCrossAttn.
  • encoder_hid_dim (int, opsional, default None) — Jika encoder_hid_dim_type didefinisikan, encoder_hidden_states akan diproyeksikan dari dimensi encoder_hid_dim ke cross_attention_dim.
  • encoder_hid_dim_type (str, opsional, default None) — Jika diberikan, encoder_hidden_states dan kemungkinan embedding lainnya akan diproyeksikan ke bawah menjadi embedding teks dengan dimensi cross_attention sesuai dengan encoder_hid_dim_type.
  • attention_head_dim (int, opsional, default 8) — Dimensi dari kepala perhatian (attention heads).
  • num_attention_heads (int, opsional) — Jumlah kepala perhatian. Jika tidak didefinisikan, defaultnya adalah attention_head_dim
  • resnet_time_scale_shift (str, opsional, default "default") — Konfigurasi pergeseran skala waktu untuk blok ResNet (lihat ResnetBlock2D). Pilih dari default atau scale_shift.
  • class_embed_type (str, opsional, default None) — Jenis class embedding yang digunakan, yang pada akhirnya dijumlahkan dengan time embeddings. Pilih dari None, "timestep", "identity", "projection", atau "simple_projection".
  • addition_embed_type (str, opsional, default None) — Mengonfigurasi embedding opsional yang akan dijumlahkan dengan time embeddings. Pilih dari None atau “text”. “text” akan menggunakan layer TextTimeEmbedding.
  • addition_time_embed_dim — (int, opsional, defaultnya None): Dimensi untuk embedding timestep.
  • num_class_embeds (int, opsional, default None) — Dimensi input dari matriks embedding yang dapat dipelajari untuk diproyeksikan ke time_embed_dim, saat melakukan kondisioning kelas dengan class_embed_type yang sama dengan None.
  • time_embedding_type (str, opsional, defaultnya positional) — Jenis position embedding yang digunakan untuk timesteps. Pilih dari positional atau fourier.
  • time_embedding_dim (int, opsional, defaultnya None) — Penggantian opsional untuk dimensi dari time embedding yang diproyeksikan.
  • time_embedding_act_fn (str, opsional, defaultnya None) — Fungsi aktivasi opsional yang hanya digunakan sekali pada time embeddings sebelum diteruskan ke bagian lain dari UNet. Pilih dari silu, mish, gelu, dan swish.
  • timestep_post_act (str, opsional, default None) — Fungsi aktivasi kedua yang digunakan dalam penanaman timestep. Pilih dari silu, mish dan gelu.
  • time_cond_proj_dim (int, opsional, defaultnya None) — Dimensi dari lapisan cond_proj dalam embedding timestep.
  • conv_in_kernel (int, opsional, default 3) — Ukuran kernel dari layer conv_in.
  • conv_out_kernel (int, opsional, default 3) — Ukuran kernel dari layer conv_out.
  • projection_class_embeddings_input_dim (int, opsional) — Dimensi dari input class_labels ketika class_embed_type="projection". Wajib diisi ketika class_embed_type="projection".
  • class_embeddings_concat (bool, opsional, default False) — Apakah akan menggabungkan time embeddings dengan class embeddings.
  • mid_block_only_cross_attention (bool, opsional, defaultnya None) — Apakah akan menggunakan cross attention dengan mid block saat menggunakan UNetMidBlock2DSimpleCrossAttn. Jika only_cross_attention diberikan sebagai satu boolean dan mid_block_only_cross_attention adalah None, nilai only_cross_attention digunakan sebagai nilai untuk mid_block_only_cross_attention. Defaultnya False jika tidak.

Model 2D UNet bersyarat yang menerima sampel berisik, keadaan kondisional, dan langkah waktu, lalu mengembalikan keluaran berbentuk sampel.

Model ini mewarisi dari ModelMixin. Periksa dokumentasi kelas induk untuk metode generiknya yang diimplementasikan untuk semua model (seperti mengunduh atau menyimpan).

disable_freeu

< >

( )

Menonaktifkan mekanisme FreeU.

enable_freeu

< >

( s1: floats2: floatb1: floatb2: float )

Parameter

  • s1 (float) — Faktor penskalaan untuk tahap 1 untuk meredam kontribusi fitur skip. Hal ini dilakukan untuk memitigasi “efek oversmoothing” dalam proses denoising yang ditingkatkan.
  • s2 (float) — Faktor penskalaan untuk tahap 2 untuk meredam kontribusi fitur skip. Hal ini dilakukan untuk memitigasi “efek oversmoothing” dalam proses denoising yang ditingkatkan.
  • b1 (float) — Faktor penskalaan untuk tahap 1 untuk memperkuat kontribusi fitur backbone.
  • b2 (float) — Faktor penskalaan untuk tahap 2 untuk memperkuat kontribusi fitur backbone.

Mengaktifkan mekanisme FreeU dari https://huggingface.co/papers/2309.11497.

Sufiks setelah faktor penskalaan mewakili blok tahap tempat faktor tersebut diterapkan.

Silakan merujuk ke respositori resmi untuk kombinasi nilai yang diketahui bekerja dengan baik untuk berbagai pipeline seperti Stable Diffusion v1, v2, dan 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

Parameter

  • sample (torch.Tensor) — Tensor input berisik dengan bentuk berikut (batch, channel, height, width).
  • timestep (torch.Tensor atau float atau int) — Jumlah timestep untuk mendenoise input.
  • encoder_hidden_states (torch.Tensor) — Hidden states encoder dengan bentuk (batch, sequence_length, feature_dim).
  • class_labels (torch.Tensor, opsional, default None) — Label kelas opsional untuk kondisioning. Embedding-nya akan dijumlahkan dengan embedding timestep.
  • timestep_cond — (torch.Tensor, opsional, default None): Embedding kondisional untuk timestep. Jika diberikan, embedding akan dijumlahkan dengan sampel yang melewati lapisan self.time_embedding untuk mendapatkan embedding timestep.
  • attention_mask (torch.Tensor, opsional, default None) — Mask perhatian dengan bentuk (batch, key_tokens) diterapkan pada encoder_hidden_states. Jika 1, mask dipertahankan, sedangkan jika 0, mask dibuang. Mask akan dikonversi menjadi bias, yang menambahkan nilai negatif besar ke skor perhatian yang sesuai dengan token “buang”.
  • cross_attention_kwargs (dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.
  • added_cond_kwargs — (dict, opsional): Kamus kwargs yang berisi embedding tambahan yang, jika ditentukan, akan ditambahkan ke embedding yang diteruskan ke blok UNet.
  • down_block_additional_residuals — (tuple dari torch.Tensor, opsional): Tuple dari tensor yang, jika ditentukan, akan ditambahkan ke residual dari blok down unet.
  • mid_block_additional_residual — (torch.Tensor, opsional): Tensor yang jika ditentukan akan ditambahkan ke residual dari blok unet tengah.
  • down_intrablock_additional_residuals (tuple dari torch.Tensor, opsional) — residual tambahan yang akan ditambahkan di dalam blok down UNet, misalnya dari model sisi T2I-Adapter
  • encoder_attention_mask (torch.Tensor) — Mask cross-attention dengan bentuk (batch, sequence_length) diterapkan pada encoder_hidden_states. Jika True, mask dipertahankan, sedangkan jika False, mask dibuang. Mask akan dikonversi menjadi bias, yang menambahkan nilai negatif besar ke skor attention yang sesuai dengan token “discard”.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan UNet2DConditionOutput alih-alih tuple biasa.

Mengembalikan

UNet2DConditionOutput atau tuple

Jika return_dict bernilai True, sebuah UNet2DConditionOutput akan dikembalikan, sebaliknya sebuah tuple akan dikembalikan di mana elemen pertama adalah tensor sampel.

Metode forward dari UNet2DConditionModel.

fuse_qkv_projections

< >

( )

Mengaktifkan proyeksi QKV yang digabungkan. Untuk modul self-attention, semua matriks proyeksi (yaitu, query, key, value) digabungkan. Untuk modul cross-attention, matriks proyeksi key dan value digabungkan.

> API ini 🧪 bersifat eksperimental.

set_attention_slice

< >

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

Parameter

  • slice_size (str atau int atau list(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 sebanyak attention_head_dim // slice_size. Dalam kasus ini, attention_head_dim harus merupakan kelipatan dari slice_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.

set_default_attn_processor

< >

( )

Menonaktifkan prosesor perhatian kustom dan mengatur implementasi perhatian default.

unfuse_qkv_projections

< >

( )

Menonaktifkan proyeksi QKV yang digabungkan jika diaktifkan.

> API ini 🧪 bersifat eksperimental.

UNet2DConditionOutput

kelas diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput

< >

( sample: Tensor = None )

Parameter

  • sample (torch.Tensor dengan bentuk (batch_size, num_channels, height, width)) — Output hidden states yang dikondisikan pada input encoder_hidden_states. Output dari lapisan terakhir model.

Output dari UNet2DConditionModel.

Update on GitHub