Diffusers documentation
UNet2DConditionModel
UNet2DConditionModel
UNet modeli, Ronneberger ve arkadaşları tarafından biyomedikal görüntü segmentasyonu için ilk olarak tanıtılmıştır ancak 🤗 Diffusers içinde de yaygın olarak kullanılır çünkü girdiyle aynı boyutta görüntüler üretir. Gerçek difüzyon sürecini kolaylaştırdığı için bir difüzyon sisteminin en önemli bileşenlerinden biridir. 🤗 Diffusers içinde, boyut sayısına ve koşullu bir model olup olmadığına bağlı olarak UNet modelinin çeşitli varyantları bulunur. Bu, 2D koşullu bir UNet modelidir.
Makalenin özeti şudur:
Derin ağların başarılı bir şekilde eğitilmesinin binlerce etiketli eğitim örneği gerektirdiği konusunda geniş bir uzlaşı vardır. Bu makalede, mevcut etiketli örneklerin daha verimli kullanılmasını sağlayan, veri artırımının güçlü kullanımına dayanan bir ağ ve eğitim stratejisi sunuyoruz. Mimari, bağlamı yakalamak için daralan bir yol ve hassas konumlandırmayı mümkün kılan simetrik bir genişleyen yoldan oluşmaktadır. Böyle bir ağın çok az sayıda görüntüden uçtan uca eğitilebildiğini ve sinirsel yapıların elektron mikroskobik yığınlarında segmentasyonu için ISBI yarışmasında önceki en iyi yöntemi (kayan pencere konvolüsyonel ağ) geride bıraktığını gösteriyoruz. Aynı ağ, iletilen ışık mikroskobu görüntüleri (faz kontrastı ve DIC) üzerinde eğitilerek, bu kategorilerde ISBI hücre takibi yarışması 2015'i büyük bir farkla kazandık. Üstelik ağ hızlıdır. 512x512 boyutundaki bir görüntünün segmentasyonu, güncel bir GPU'da bir saniyeden az sürmektedir. Tam uygulama (Caffe tabanlı) ve eğitilmiş ağlar http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net adresinde mevcuttur.
UNet2DConditionModel
sınıf diffusers.UNet2DConditionModel
< source >( 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 )
Parametreler
- sample_size (
intveyatuple[int, int], isteğe bağlı, varsayılanNone) — Girdi/çıktı örneğinin yüksekliği ve genişliği. - in_channels (
int, isteğe bağlı, varsayılan 4) — Girdi örneğindeki kanal sayısı. - out_channels (
int, isteğe bağlı, varsayılan 4) — Çıktıdaki kanal sayısı. - center_input_sample (
bool, isteğe bağlı, varsayılanFalse) — Girdi örneğinin ortalanıp ortalanmayacağını belirtir. - flip_sin_to_cos (
bool, isteğe bağlı, varsayılanTrue) — Zaman gömme işleminde sin'in cos'a çevrilip çevrilmeyeceğini belirtir. - freq_shift (
int, isteğe bağlı, varsayılan 0) — Zaman gömümüne uygulanacak frekans kaydırması. - down_block_types (
tuple[str], isteğe bağlı, varsayılan("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — Kullanılacak örnekleme azaltma bloklarının demeti. - mid_block_type (
str, isteğe bağlı, varsayılan"UNetMidBlock2DCrossAttn") — UNet'in orta kısmı için blok türü;UNetMidBlock2DCrossAttn,UNetMidBlock2DveyaUNetMidBlock2DSimpleCrossAttnolabilir.Noneise orta blok katmanı atlanır. - up_block_types (
tuple[str], isteğe bağlı, varsayılan("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) — Kullanılacak örnekleme bloklarının demeti. - only_cross_attention(
boolortuple[bool], opsiyonel, varsayılanFalse) — Temel transformer bloklarında self-attention'ın dahil edilip edilmeyeceğini belirtir, bkz.BasicTransformerBlock. - block_out_channels (
tuple[int], isteğe bağlı, varsayılan(320, 640, 1280, 1280)) — Her blok için çıktı kanalları demeti. - layers_per_block (
int, isteğe bağlı, varsayılan 2) — Blok başına katman sayısı. - downsample_padding (
int, isteğe bağlı, varsayılan 1) — Küçültme konvolüsyonu için kullanılacak dolgu. - mid_block_scale_factor (
float, isteğe bağlı, varsayılan 1.0) — Orta blok için kullanılacak ölçekleme faktörü. - dropout (
float, isteğe bağlı, varsayılan 0.0) — Kullanılacak dropout olasılığı. - act_fn (
str, isteğe bağlı, varsayılan"silu") — Kullanılacak aktivasyon fonksiyonu. - norm_num_groups (
int, isteğe bağlı, varsayılan 32) — Normalizasyon için kullanılacak grup sayısı.Noneise, son işlemede normalizasyon ve aktivasyon katmanları atlanır. - norm_eps (
float, isteğe bağlı, varsayılan 1e-5) — Normalizasyon için kullanılacak epsilon. - cross_attention_dim (
intveyatuple[int], isteğe bağlı, varsayılan 1280) — Çapraz dikkat (cross attention) özelliklerinin boyutu. - transformer_layers_per_block (
int,tuple[int]veyatuple[tuple], isteğe bağlı, varsayılan 1) —BasicTransformerBlocktüründeki transformer bloklarının sayısı. YalnızcaCrossAttnDownBlock2D,CrossAttnUpBlock2D,UNetMidBlock2DCrossAttniçin geçerlidir. - reverse_transformer_layers_per_block — (
tuple[tuple], isteğe bağlı, varsayılan olarak None): U-Net'in örnekleme artırma (upsampling) bloklarındakiBasicTransformerBlocktüründeki transformer bloklarının sayısı. Yalnızcatransformer_layers_per_blocktuple[tuple]türündeyse veCrossAttnDownBlock2D,CrossAttnUpBlock2D,UNetMidBlock2DCrossAttniçin geçerlidir. - encoder_hid_dim (
int, isteğe bağlı, varsayılanı None) —encoder_hid_dim_typetanımlıysa,encoder_hidden_states,encoder_hid_dimboyutundancross_attention_dimboyutuna yansıtılır. - encoder_hid_dim_type (
str, isteğe bağlı, varsayılanNone) — Verilirse,encoder_hidden_statesve potansiyel olarak diğer gömlemeler,encoder_hid_dim_type'e görecross_attentionboyutlu metin gömlemelerine indirgenir. - attention_head_dim (
int, isteğe bağlı, varsayılan 8) — Dikkat başlarının boyutu. - num_attention_heads (
int, isteğe bağlı) — Dikkat başlarının sayısı. Tanımlanmamışsa, varsayılan olarakattention_head_dimdeğerini alır. - resnet_time_scale_shift (
str, isteğe bağlı, varsayılan"default") — ResNet blokları için zaman ölçekli kaydırma yapılandırması (bkz.ResnetBlock2D).defaultveyascale_shiftseçeneklerinden birini seçin. - class_embed_type (
str, isteğe bağlı, varsayılanNone) — Zaman gömme değerleriyle nihai olarak toplanacak sınıf gömme türü.None,"timestep","identity","projection"veya"simple_projection"seçeneklerinden birini seçin. - addition_embed_type (
str, isteğe bağlı, varsayılanNone) — Zaman gömme vektörleriyle toplanacak isteğe bağlı bir gömme vektörü yapılandırır.Noneveya “text” seçeneklerinden birini seçin. “text”,TextTimeEmbeddingkatmanını kullanır. - addition_time_embed_dim — (
int, isteğe bağlı, varsayılanNone): Zaman adımları gömme boyutu. - num_class_embeds (
int, isteğe bağlı, varsayılanNone) —class_embed_typeNoneolduğunda sınıf koşullandırması yapılırkentime_embed_dim'e yansıtılacak öğrenilebilir gömme matrisinin giriş boyutu. - time_embedding_type (
str, isteğe bağlı, varsayılanpositional) — Adımlar için kullanılacak konum gömme türü.positionalveyafourierseçeneklerinden birini seçin. - time_embedding_dim (
int, isteğe bağlı, varsayılanNone) — Projelendirilmiş zaman gömme boyutu için isteğe bağlı bir geçersiz kılma. - time_embedding_act_fn (
str, isteğe bağlı, varsayılanNone) — UNet'in geri kalanına aktarılmadan önce zaman gömme (embedding) değerlerine yalnızca bir kez uygulanacak isteğe bağlı aktivasyon fonksiyonu.silu,mish,geluveswishseçeneklerinden birini seçin. - timestep_post_act (
str, isteğe bağlı, varsayılanNone) — Zaman adımı gömme (embedding) için kullanılacak ikinci aktivasyon fonksiyonu.silu,mishvegeluarasından seçim yapın. - time_cond_proj_dim (
int, isteğe bağlı, varsayılanNone) — Zaman adımı gömme (embedding) içindekicond_projkatmanının boyutu. - conv_in_kernel (
int, isteğe bağlı, varsayılan3) —conv_inkatmanının çekirdek boyutu. - conv_out_kernel (
int, isteğe bağlı, varsayılan3) —conv_outkatmanının çekirdek boyutu. - projection_class_embeddings_input_dim (
int, isteğe bağlı) —class_embed_type="projection"olduğundaclass_labelsgirdisinin boyutu.class_embed_type="projection"olduğunda zorunludur. - class_embeddings_concat (
bool, isteğe bağlı, varsayılanFalse) — Zaman gömme vektörlerinin sınıf gömme vektörleriyle birleştirilip birleştirilmeyeceğini belirtir. - mid_block_only_cross_attention (
bool, isteğe bağlı, varsayılanNone) —UNetMidBlock2DSimpleCrossAttnkullanılırken orta blok için cross attention kullanılacak mı?only_cross_attentiontek bir boolean olarak verilir vemid_block_only_cross_attentionNoneise,only_cross_attentiondeğerimid_block_only_cross_attentioniçin değer olarak kullanılır. Aksi halde varsayılanFalseolur.
Gürültülü bir örnek, koşullu durum ve bir zaman adımı alır ve örnek biçimli bir çıktı döndüren koşullu 2D UNet modeli.
Bu model ModelMixin sınıfından devralır. Tüm modeller için uygulanan genel yöntemleri (indirme veya kaydetme gibi) görmek için üst sınıfın belgelendirmesine bakın.
FreeU mekanizmasını devre dışı bırakır.
enable_freeu
< source >( s1: floats2: floatb1: floatb2: float )
Parametreler
- s1 (
float) — 1. aşama için, atlanan özelliklerin katkılarını azaltmak üzere kullanılan ölçekleme faktörü. Bu, geliştirilmiş gürültü azaltma sürecindeki “aşırı yumuşatma etkisini” (oversmoothing effect) hafifletmek için yapılır. - s2 (
float) — 2. aşama için, atlanan özelliklerin katkılarını azaltmak üzere kullanılan ölçekleme faktörü. Bu, geliştirilmiş gürültü azaltma sürecindeki “aşırı yumuşatma etkisini” (oversmoothing effect) hafifletmek için yapılır. - b1 (
float) — Omurga özelliklerinin katkılarını artırmak için 1. aşamanın ölçekleme çarpanı. - b2 (
float) — Omurga özelliklerinin katkılarını artırmak için 2. aşamanın ölçekleme çarpanı.
https://huggingface.co/papers/2309.11497 adresindeki FreeU mekanizmasını etkinleştirir.
Ölçekleme katsayılarının sonundaki ekler, bu katsayıların uygulandığı aşama bloklarını temsil eder.
Stable Diffusion v1, v2 ve Stable Diffusion XL gibi farklı pipeline'lar için iyi çalıştığı bilinen değer kombinasyonları için resmi depoya bakın.
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 = 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
Parametreler
- sample (
torch.Tensor) — Aşağıdaki şekle sahip gürültülü giriş tensörü(batch, channel, height, width). - timestep (
torch.Tensorveyafloatveyaint) — Bir girdinin gürültüsünü gidermek için kullanılacak zaman adımı sayısı. - encoder_hidden_states (
torch.Tensor) —(batch, sequence_length, feature_dim)biçimindeki kodlayıcı gizli durumları. - class_labels (
torch.Tensor, isteğe bağlı, varsayılanNone) — Koşullandırma için isteğe bağlı sınıf etiketleri. Gömümleri, zaman adımları gömümleriyle toplanır. - timestep_cond — (
torch.Tensor, isteğe bağlı, varsayılanNone): Zaman adımı için koşullu gömme (embedding) değerleri. Sağlanırsa, gömme değerleri,self.time_embeddingkatmanından geçirilen örneklerle toplanarak zaman adımı gömme değerleri elde edilir. - attention_mask (
torch.Tensor, isteğe bağlı, varsayılanNone) —(batch, key_tokens)biçiminde bir dikkat maskesi,encoder_hidden_statesüzerine uygulanır. Değer1ise maske korunur, aksi halde0ise atılır. Maske, “at” tokenlarına karşılık gelen dikkat puanlarına büyük negatif değerler ekleyen bir önyargıya dönüştürülür. - cross_attention_kwargs (
dict, isteğe bağlı) — Belirtilirse, diffusers.models.attention_processor içindekiself.processoraltında tanımlananAttentionProcessor'a iletilen bir kwargs sözlüğü. - added_cond_kwargs — (
dict, isteğe bağlı): Belirtilirse, UNet bloklarına iletilen gömme (embedding) değerlerine eklenen ek gömme değerlerini içeren bir kwargs sözlüğü. - down_block_additional_residuals — (
tupleoftorch.Tensor, isteğe bağlı): Belirtilirse, aşağı yönlü unet bloklarının artıklarına eklenen tensörlerin bir demeti. - mid_block_additional_residual — (
torch.Tensor, isteğe bağlı): Belirtilirse, orta unet bloğunun artığına eklenen bir tensör. - down_intrablock_additional_residuals (
tupleoftorch.Tensor, isteğe bağlı) — UNet aşağı blokları içinde eklenecek ek artıklar, örneğin T2I-Adapter yan model(ler)inden - encoder_attention_mask (
torch.Tensor) —encoder_hidden_states’e(batch, sequence_length)biçiminde bir çapraz dikkat maskesi uygulanır.Trueise maske korunur, aksi haldeFalseise atılır. Maske, “at” token’larına karşılık gelen dikkat puanlarına büyük negatif değerler ekleyen bir önyargıya dönüştürülür. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Düz bir tuple yerine UNet2DConditionOutput döndürülüp döndürülmemesi.
Dönüş değeri
UNet2DConditionOutput veya tuple
return_dict True ise, UNet2DConditionOutput döndürülür,
aksi halde ilk öğesi örnek tensörü olan bir tuple döndürülür.
UNet2DConditionModel ileri yöntemi.
Füzyonlu QKV projeksiyonlarını etkinleştirir. Kendi dikkat (self-attention) modülleri için tüm projeksiyon matrisleri (yani sorgu, anahtar, değer) füzyonlanır. Çapraz dikkat (cross-attention) modülleri için anahtar ve değer projeksiyon matrisleri füzyonlanır.
> Bu API 🧪 deneyseldir.
set_attention_slice
< source >( slice_size: str | int | list[int] = 'auto' )
Parametreler
- slice_size (
strveyaintveyalist(int), isteğe bağlı, varsayılan"auto") —"auto"olduğunda, dikkat başlarına giden girdi ikiye bölünür ve dikkat iki adımda hesaplanır."max"ise, bir seferde yalnızca bir dilim çalıştırılarak maksimum miktarda bellek tasarrufu sağlanır. Bir sayı verilirse,attention_head_dim // slice_sizekadar dilim kullanılır. Bu durumdaattention_head_dimdeğeri,slice_sizedeğerinin katı olmalıdır.
Dilimlenmiş dikkat (attention) hesaplamasını etkinleştirin.
Bu seçenek etkinleştirildiğinde, dikkat modülü dikkat hesabını birkaç adımda gerçekleştirmek için girdi tensörünü dilimlere ayırır. Bu, hızda küçük bir düşüş karşılığında bellek tasarrufu sağlamak için faydalıdır.
Özel dikkat işleyicilerini devre dışı bırakır ve varsayılan dikkat uygulamasını ayarlar.
Etkinleştirilmişse birleşik QKV projeksiyonunu devre dışı bırakır.
> Bu API 🧪 deneyseldir.
UNet2DConditionOutput
sınıf diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput
< source >( sample: Tensor = None )
UNet2DConditionModel'nin çıktısı.