Buckets:

hf-doc-build/doc / diffusers /main /tr /api /models /unet2d-cond.md
mishig's picture
|
download
raw
20.4 kB
# UNet2DConditionModel
[UNet](https://huggingface.co/papers/1505.04597) modeli, Ronneberger ve arkadaşları tarafından biyomedikal görüntü segmentasyonu için ilk olarak tanıtılmıştır ancak 🤗 Diffusers'ta da 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'ta, boyut sayısına ve koşullu bir model olup olmadığına bağlı olarak UNet modelinin çeşitli varyantları vardır. 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ındaki 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[[diffusers.UNet2DConditionModel]]
#### diffusers.UNet2DConditionModel[[diffusers.UNet2DConditionModel]]
```python
diffusers.UNet2DConditionModel(sample_size: int | tuple[int, int] | None = None, in_channels: int = 4, out_channels: int = 4, center_input_sample: bool = False, flip_sin_to_cos: bool = True, freq_shift: int = 0, down_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] = False, 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, dropout: float = 0.0, act_fn: str = 'silu', norm_num_groups: int | None = 32, norm_eps: float = 1e-05, cross_attention_dim: int | tuple[int] = 1280, transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1, reverse_transformer_layers_per_block: tuple[tuple[int]] | None = None, encoder_hid_dim: int | None = None, encoder_hid_dim_type: str | None = None, attention_head_dim: int | tuple[int] = 8, num_attention_heads: int | tuple[int] | None = None, dual_cross_attention: bool = False, use_linear_projection: bool = False, class_embed_type: str | None = None, addition_embed_type: str | None = None, addition_time_embed_dim: int | None = None, num_class_embeds: int | None = None, upcast_attention: bool = False, resnet_time_scale_shift: str = 'default', resnet_skip_time_act: bool = False, resnet_out_scale_factor: float = 1.0, time_embedding_type: str = 'positional', time_embedding_dim: int | None = None, time_embedding_act_fn: str | None = None, timestep_post_act: str | None = None, time_cond_proj_dim: int | None = None, conv_in_kernel: int = 3, conv_out_kernel: int = 3, projection_class_embeddings_input_dim: int | None = None, attention_type: str = 'default', class_embeddings_concat: bool = False, mid_block_only_cross_attention: bool | None = None, cross_attention_norm: str | None = None, addition_embed_type_num_heads: int = 64)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L76)
**Parametreler:**
sample_size (`int` veya `tuple[int, int]`, *isteğe bağlı*, varsayılan `None`) : 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ılan `False`) : Girdi örneğinin ortalanıp ortalanmayacağını belirtir.
flip_sin_to_cos (`bool`, *isteğe bağlı*, varsayılan `True`) : Zaman gömümünde 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 kayması.
down_block_types (`tuple[str]`, *opsiyonel*, varsayılan `("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")`) : Kullanılacak indirgeme 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`, `UNetMidBlock2D` veya `UNetMidBlock2DSimpleCrossAttn` olabilir. `None` ise orta blok katmanı atlanır.
up_block_types (`tuple[str]`, *opsiyonel*, varsayılan `("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")`) : Kullanılacak örnekleme bloklarının demeti.
only_cross_attention(`bool` or `tuple[bool]`, *isteğe bağlı*, varsayılan `False`) : Temel transformer bloklarında self-attention'ın dahil edilip edilmeyeceğini belirtir, bkz. `BasicTransformerBlock`.
block_out_channels (`tuple[int]`, *opsiyonel*, 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`, *opsiyonel*, 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ı. `None` ise, işleme sonrası aşamasında normalizasyon ve aktivasyon katmanları atlanır.
norm_eps (`float`, *opsiyonel*, varsayılan 1e-5) : Normalizasyon için kullanılacak epsilon.
cross_attention_dim (`int` veya `tuple[int]`, *isteğe bağlı*, varsayılan 1280) : Çapraz dikkat özelliklerinin boyutu.
transformer_layers_per_block (`int`, `tuple[int]` veya `tuple[tuple]` , *isteğe bağlı*, varsayılan 1) : `BasicTransformerBlock` türündeki transformer bloklarının sayısı. Yalnızca `CrossAttnDownBlock2D`, `CrossAttnUpBlock2D`, `UNetMidBlock2DCrossAttn` için geçerlidir.
reverse_transformer_layers_per_block : (`tuple[tuple]`, *isteğe bağlı*, varsayılan olarak None): U-Net'in örneklem artırma bloklarındaki `BasicTransformerBlock` türündeki dönüştürücü blokların sayısı. Yalnızca `transformer_layers_per_block` `tuple[tuple]` türündeyse ve `CrossAttnDownBlock2D`, `CrossAttnUpBlock2D`, `UNetMidBlock2DCrossAttn` için geçerlidir.
encoder_hid_dim (`int`, *isteğe bağlı*, varsayılanı None) : `encoder_hid_dim_type` tanımlıysa, `encoder_hidden_states` `encoder_hid_dim` boyutundan `cross_attention_dim` boyutuna yansıtılır.
encoder_hid_dim_type (`str`, *isteğe bağlı*, varsayılan `None`) : Verilirse, `encoder_hidden_states` ve potansiyel olarak diğer gömlemeler, `encoder_hid_dim_type`'e göre `cross_attention` boyutlu 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 olarak `attention_head_dim` değerini alır.
resnet_time_scale_shift (`str`, *isteğe bağlı*, varsayılan `"default"`) : ResNet blokları için zaman ölçeği kaydırma yapılandırması (bkz. `ResnetBlock2D`). `default` veya `scale_shift` seçeneklerinden birini seçin.
class_embed_type (`str`, *isteğe bağlı*, varsayılan `None`) : Sonunda zaman gömme değerleriyle toplanan 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ılan `None`) : Zaman gömme değerleriyle toplanacak isteğe bağlı bir gömme yapılandırır. `None` veya "text" seçeneklerinden birini seçin. "text", `TextTimeEmbedding` katmanını kullanır.
addition_time_embed_dim : (`int`, *isteğe bağlı*, varsayılan `None`): Zaman adımları gömme boyutu.
num_class_embeds (`int`, *isteğe bağlı*, varsayılan `None`) : `class_embed_type` `None` olduğunda sınıf koşullandırması yapılırken `time_embed_dim`'e yansıtılacak öğrenilebilir gömme matrisinin giriş boyutu.
time_embedding_type (`str`, *isteğe bağlı*, varsayılan `positional`) : Zaman adımları için kullanılacak konum gömme türü. `positional` veya `fourier` seçeneklerinden birini seçin.
time_embedding_dim (`int`, *isteğe bağlı*, varsayılan `None`) : 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ılan `None`) : UNet'in geri kalanına aktarılmadan önce zaman gömme (time embeddings) üzerinde yalnızca bir kez kullanılacak isteğe bağlı aktivasyon fonksiyonu. `silu`, `mish`, `gelu` ve `swish` arasından seçim yapın.
timestep_post_act (`str`, *isteğe bağlı*, varsayılan `None`) : timestep gömme (embedding) içinde kullanılacak ikinci aktivasyon fonksiyonu. `silu`, `mish` ve `gelu` arasından seçim yapın.
time_cond_proj_dim (`int`, *isteğe bağlı*, varsayılan `None`) : timestep gömme içindeki `cond_proj` katmanının boyutu.
conv_in_kernel (`int`, *isteğe bağlı*, varsayılan `3`) : `conv_in` katmanının çekirdek boyutu.
conv_out_kernel (`int`, *isteğe bağlı*, varsayılan `3`) : `conv_out` katmanının çekirdek boyutu.
projection_class_embeddings_input_dim (`int`, *isteğe bağlı*) : `class_embed_type="projection"` olduğunda `class_labels` girdisinin boyutu. `class_embed_type="projection"` olduğunda zorunludur.
class_embeddings_concat (`bool`, *isteğe bağlı*, varsayılan `False`) : 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ılan `None`) : `UNetMidBlock2DSimpleCrossAttn` kullanılırken orta blokta çapraz dikkat (cross attention) kullanılacak mı? `only_cross_attention` tek bir bool olarak verilir ve `mid_block_only_cross_attention` `None` ise, `only_cross_attention` değeri `mid_block_only_cross_attention` değeri olarak kullanılır. Aksi halde varsayılan `False` olur.
Gürültülü bir örnek, koşullu durum ve bir zaman adımı alır ve örnek biçiminde bir çıktı döndüren koşullu 2D UNet modeli.
Bu model [ModelMixin](/docs/diffusers/main/tr/api/models/overview#diffusers.ModelMixin) sınıfından devralır. Tüm modeller için uygulanan genel yöntemlerini (indirme veya kaydetme gibi) görmek için üst sınıfın belgelendirmesine bakın.
#### disable_freeu[[diffusers.UNet2DConditionModel.disable_freeu]]
```python
disable_freeu()
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L814)
FreeU mekanizmasını devre dışı bırakır.
#### enable_freeu[[diffusers.UNet2DConditionModel.enable_freeu]]
```python
enable_freeu(s1: float, s2: float, b1: float, b2: float)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L790)
**Parametreler:**
s1 (`float`) : 1. aşama için, atlanan özelliklerin katkılarını sönümlemek amacıyla kullanılan ölçekleme faktörü. Bu, geliştirilmiş gürültü azaltma sürecindeki "aşırı yumuşatma etkisini" azaltmak 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" hafifletmek için yapılır.
b1 (`float`) : Omurga özelliklerinin katkılarını artırmak için 1. aşama ölçekleme çarpanı.
b2 (`float`) : Omurga özelliklerinin katkılarını artırmak için 2. aşama ö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](https://github.com/ChenyangSi/FreeU) bakın.
#### forward[[diffusers.UNet2DConditionModel.forward]]
```python
forward(sample: Tensor, timestep: typing.Union[torch.Tensor, float, int], encoder_hidden_states: Tensor, class_labels: typing.Optional[torch.Tensor] = None, 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, down_intrablock_additional_residuals: tuple[torch.Tensor] | None = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L978)
**Parametreler:**
sample (`torch.Tensor`) : Şekli `(batch, channel, height, width)` olan gürültülü giriş tensörü.
timestep (`torch.Tensor` veya `float` veya `int`) : 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ılan `None`) : 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ılan `None`): Zaman adımı için koşullu gömme. Sağlanırsa, gömme, `self.time_embedding` katmanından geçirilen örneklerle toplanarak zaman adımı gömmeleri elde edilir.
attention_mask (`torch.Tensor`, *isteğe bağlı*, varsayılan `None`) : `(batch, key_tokens)` biçimindeki bir dikkat maskesi, `encoder_hidden_states` üzerine uygulanır. Değer `1` ise maske korunur, aksi halde `0` ise 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.
cross_attention_kwargs (`dict`, *isteğe bağlı*) : Belirtilirse, [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) içinde `self.processor` altında tanımlanan `AttentionProcessor`'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 : (`tuple` of `torch.Tensor`, *isteğe bağlı*): Belirtilirse, down unet bloklarının artıklarına eklenen tensörlerden oluşan bir tuple.
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 (`tuple` of `torch.Tensor`, *opsiyonel*) : UNet aşağı blokları içinde eklenecek ek kalıntılar, örneğin T2I-Adapter yan model(leri)nden
encoder_attention_mask (`torch.Tensor`) : `encoder_hidden_states` üzerine `(batch, sequence_length)` biçiminde bir çapraz dikkat maskesi uygulanır. `True` ise maske korunur, aksi halde `False` ise 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ılan `True`) : Düz bir tuple yerine [UNet2DConditionOutput](/docs/diffusers/main/tr/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) döndürülecek mi?
**Dönüş:** [UNet2DConditionOutput](/docs/diffusers/main/tr/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) veya `tuple`
`return_dict` True ise [UNet2DConditionOutput](/docs/diffusers/main/tr/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) döndürülür, aksi halde ilk öğesi örnek tensörü olan bir `tuple` döndürülür.
[UNet2DConditionModel](/docs/diffusers/main/tr/api/models/unet2d-cond#diffusers.UNet2DConditionModel) ileri yöntemi.
#### fuse_qkv_projections[[diffusers.UNet2DConditionModel.fuse_qkv_projections]]
```python
fuse_qkv_projections()
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L822)
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.
> [!WARNING] > Bu API 🧪 deneyseldir.
#### set_attention_slice[[diffusers.UNet2DConditionModel.set_attention_slice]]
```python
set_attention_slice(slice_size: str | int | list[int] = 'auto')
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L725)
**Parametreler:**
slice_size (`str` veya `int` veya `list(int)`, *isteğe bağlı*, varsayılan `"auto"`) : `"auto"` olduğunda, dikkat başlarına giden girdi yarıya indirilir, böylece dikkat iki adımda hesaplanır. `"max"` ise, her seferinde yalnızca bir dilim çalıştırılarak maksimum miktarda bellek tasarrufu sağlanır. Bir sayı sağlanırsa, `attention_head_dim // slice_size` kadar dilim kullanılır. Bu durumda `attention_head_dim`, `slice_size`'ın katı olmalıdır.
Dilimlenmiş dikkat (attention) hesaplamasını etkinleştirin.
Bu seçenek etkinleştirildiğinde, dikkat modülü dikkat hesaplaması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.
#### set_default_attn_processor[[diffusers.UNet2DConditionModel.set_default_attn_processor]]
```python
set_default_attn_processor()
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L710)
Özel dikkat işleyicilerini devre dışı bırakır ve varsayılan dikkat uygulamasını ayarlar.
#### unfuse_qkv_projections[[diffusers.UNet2DConditionModel.unfuse_qkv_projections]]
```python
unfuse_qkv_projections()
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L843)
Etkinleştirilmişse birleşik QKV projeksiyonunu devre dışı bırakır.
> [!WARNING] > Bu API 🧪 deneyseldir.
## UNet2DConditionOutput[[diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput]]
#### diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput[[diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput]]
```python
diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput(sample: Tensor = None)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L64)
**Parametreler:**
sample (`torch.Tensor`, şekli `(batch_size, num_channels, height, width)`) : `encoder_hidden_states` girdisine koşullu gizli durum çıktısı. Modelin son katmanının çıktısı.
[UNet2DConditionModel](/docs/diffusers/main/tr/api/models/unet2d-cond#diffusers.UNet2DConditionModel)'nin çıktısı.

Xet Storage Details

Size:
20.4 kB
·
Xet hash:
4fa919f157df17dd374a6f5f4a3f901733f8690b18ea89017fe86e9bda92ad84

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.