# PixArt-Σ

![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/pixart/header_collage_sigma.jpg)

[PixArt-Σ: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation](https://huggingface.co/papers/2403.04692), Junsong Chen, Jincheng Yu, Chongjian Ge, Lewei Yao, Enze Xie, Yue Wu, Zhongdao Wang, James Kwok, Ping Luo, Huchuan Lu ve Zhenguo Li tarafından kaleme alınmıştır.

Makalenin özeti şudur:

*Bu makalede, 4K çözünürlükte görüntüleri doğrudan üretebilen bir Diffusion Transformer modeli (DiT) olan PixArt-Σ'yi tanıtıyoruz. PixArt-Σ, öncülü PixArt-α'ya kıyasla önemli bir ilerleme temsil etmekte olup belirgin şekilde daha yüksek sadakate sahip görüntüler ve metin istemleriyle iyileştirilmiş hizalama sunmaktadır. PixArt-Σ'nin temel özelliklerinden biri eğitim verimliliğidir. PixArt-α'nın temel ön eğitiminin avantajını kullanarak, daha yüksek kaliteli verilerin dahil edilmesiyle ‘daha zayıf’ tabandan ‘daha güçlü’ bir modele evrilir; bu sürece “zayıftan güçlüye eğitim” adını veriyoruz. PixArt-Σ'deki ilerlemeler iki katlıdır: (1) Yüksek Kaliteli Eğitim Verisi: PixArt-Σ, daha hassas ve ayrıntılı görüntü açıklamalarıyla eşleştirilmiş üstün kalitede görüntü verisi içermektedir. (2) Verimli Token Sıkıştırması: DiT çerçevesi içinde hem anahtarları hem de değerleri sıkıştıran, verimliliği önemli ölçüde artıran ve ultra yüksek çözünürlüklü görüntü üretimini kolaylaştıran yeni bir dikkat modülü öneriyoruz. Bu iyileştirmeler sayesinde PixArt-Σ, SDXL (2,6B parametre) ve SD Cascade (5,1B parametre) gibi mevcut metinden görüntüye difüzyon modellerinden önemli ölçüde daha küçük bir model boyutuyla (0,6B parametre) üstün görüntü kalitesi ve kullanıcı istemine uyum yeteneklerine ulaşmaktadır. Ayrıca, PixArt-Σ'nin 4K görüntü üretme yeteneği, yüksek çözünürlüklü afiş ve duvar kağıtlarının oluşturulmasını destekleyerek film ve oyun gibi sektörlerde yüksek kaliteli görsel içeriğin üretimini verimli bir şekilde güçlendirmektedir.*

Orijinal kod tabanını [PixArt-alpha/PixArt-sigma](https://github.com/PixArt-alpha/PixArt-sigma) adresinde ve kullanılabilir tüm kontrol noktalarını [PixArt-alpha](https://huggingface.co/PixArt-alpha) adresinde bulabilirsiniz.

Bu boru hattı hakkında bazı notlar:

* Gürültü azaltma için bir Transformer omurgası (UNet yerine) kullanır. Bu nedenle mimarisi [DiT](https://hf.co/docs/transformers/model_doc/dit) ile benzerdir.
* T5'ten hesaplanan metin koşulları kullanılarak eğitildi. Bu özellik, boru hattının karmaşık ve ince detaylara sahip metin istemlerini takip etme konusunda daha iyi olmasını sağlar.
* Farklı en-boy oranlarında yüksek çözünürlüklü görüntüler üretmede başarılıdır. En iyi sonuçları almak için yazarlar, [burada](https://github.com/PixArt-alpha/PixArt-sigma/blob/master/diffusion/data/datasets/utils.py) bulunabilecek bazı boyut aralıklarını önermektedir.
* Bu sistem, yazımın hazırlandığı tarihte PixArt-α, Stable Diffusion XL, Playground V2.0 ve DALL-E 3 gibi son teknoloji metinden görüntüye üretim sistemleriyle yarışan bir kaliteye sahipken onlardan daha verimlidir.
* 2048px veya hatta 4K gibi süper yüksek çözünürlüklü görüntüler üretme yeteneğini gösterir.
* Bu, metinden görüntüye modellerin VAE'ler, veri setleri ve benzeri çeşitli iyileştirmelerle zayıf bir modelden daha güçlü bir modele dönüşebildiğini göstermektedir.

> [!TIP]
> Scheduler'lar [kılavuzunu](../../using-diffusers/schedulers) inceleyerek scheduler hızı ve kalitesi arasındaki ödünleşimi nasıl keşfedebileceğinizi öğrenin ve aynı bileşenleri birden fazla pipeline'a nasıl verimli bir şekilde yükleyebileceğinizi öğrenmek için [pipeline'lar arasında bileşenleri yeniden kullanma](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) bölümüne göz atın.

> [!TIP]
> [PixArtSigmaPipeline](/docs/diffusers/main/tr/api/pipelines/pixart_sigma#diffusers.PixArtSigmaPipeline) tarafından oluşturulan görüntüyü [SDXL refiner](./stable_diffusion/stable_diffusion_xl#base-to-refiner-model) modeline ileterek üretim kalitesini daha da artırabilirsiniz.

## 8 GB'dan az GPU VRAM ile çıkarım

[PixArtSigmaPipeline](/docs/diffusers/main/tr/api/pipelines/pixart_sigma#diffusers.PixArtSigmaPipeline)'yi metin kodlayıcıyı 8-bit hassasiyette yükleyerek 8 GB GPU VRAM'in altında çalıştırın. Tam kapsamlı bir örneğin üzerinden geçelim.

Öncelikle [bitsandbytes](https://github.com/TimDettmers/bitsandbytes) kütüphanesini yükleyin:

```bash
pip install -U bitsandbytes
```

Ardından metin kodlayıcıyı 8-bit olarak yükleyin:

```python
from transformers import T5EncoderModel
from diffusers import PixArtSigmaPipeline
import torch

text_encoder = T5EncoderModel.from_pretrained(
    "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS",
    subfolder="text_encoder",
    load_in_8bit=True,
    device_map="auto",
)
pipe = PixArtSigmaPipeline.from_pretrained(
    "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS",
    text_encoder=text_encoder,
    transformer=None,
    device_map="balanced"
)
```

Şimdi, bir istemci kodlamak için `pipe` kullanın:

```python
with torch.no_grad():
    prompt = "cute cat"
    prompt_embeds, prompt_attention_mask, negative_embeds, negative_prompt_attention_mask = pipe.encode_prompt(prompt)
```

Metin gömme değerleri hesaplandığından, `text_encoder` ve `pipe` nesnelerini bellekten kaldırın ve GPU VRAM'de yer açın:

```python
import gc

def flush():
    gc.collect()
    torch.cuda.empty_cache()

del text_encoder
del pipe
flush()
```

Ardından, prompt gömme değerlerini girdi olarak kullanarak latentleri hesaplayın:

```python
pipe = PixArtSigmaPipeline.from_pretrained(
    "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS",
    text_encoder=None,
    dtype=torch.float16,
).to("cuda")  # or "mps", "xpu", "cpu"

latents = pipe(
    negative_prompt=None,
    prompt_embeds=prompt_embeds,
    negative_prompt_embeds=negative_embeds,
    prompt_attention_mask=prompt_attention_mask,
    negative_prompt_attention_mask=negative_prompt_attention_mask,
    num_images_per_prompt=1,
    output_type="latent",
).images

del pipe.transformer
flush()
```

> [!TIP]
> `pipe` başlatılırken, yüklenmemesi için `text_encoder`'in `None` olarak ayarlandığına dikkat edin.

Latentler hesaplandıktan sonra, bunları gerçek bir görüntüye dönüştürmek için VAE'ye iletin:

```python
with torch.no_grad():
    image = pipe.vae.decode(latents / pipe.vae.config.scaling_factor, return_dict=False)[0]
image = pipe.image_processor.postprocess(image, output_type="pil")[0]
image.save("cat.png")
```

Kullanmadığınız bileşenleri silerek ve GPU VRAM'i boşaltarak, [PixArtSigmaPipeline](/docs/diffusers/main/tr/api/pipelines/pixart_sigma#diffusers.PixArtSigmaPipeline)'ı 8GB'ın altındaki GPU VRAM ile çalıştırabileceksiniz.

![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/pixart/8bits_cat.png)

Hafıza kullanımınızın bir raporunu istiyorsanız, bu [betiği](https://gist.github.com/sayakpaul/3ae0f847001d342af27018a96f467e4e) çalıştırın.

> [!WARNING]
> 8-bit olarak hesaplanan metin gömlemleri, azaltılmış hassasiyetin temsil uzayında neden olduğu bilgi kaybı nedeniyle üretilen görüntülerin kalitesini etkileyebilir. 8-bit ile ve 8-bit olmadan çıktıları karşılaştırmak önerilir.

`text_encoder` yüklenirken `load_in_8bit` parametresini `True` olarak ayarladınız. Bellek gereksinimlerinizi 7GB'ın altına düşürmek için `load_in_4bit` parametresini de belirleyebilirsiniz.

## PixArtSigmaPipeline[[diffusers.PixArtSigmaPipeline]]

#### diffusers.PixArtSigmaPipeline[[diffusers.PixArtSigmaPipeline]]

```python
diffusers.PixArtSigmaPipeline(tokenizer: T5Tokenizer, text_encoder: T5EncoderModel, vae: AutoencoderKL, transformer: PixArtTransformer2DModel, scheduler: KarrasDiffusionSchedulers)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py#L185)

**Parametreler:**

vae ([AutoencoderKL](/docs/diffusers/main/tr/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Görüntüleri gizil (latent) temsillere kodlamak ve bu temsillerden görüntülere çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.

text_encoder (`T5EncoderModel`) : Donmuş metin kodlayıcı. PixArt-Alpha, [T5](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5EncoderModel)'i, özellikle de [t5-v1_1-xxl](https://huggingface.co/PixArt-alpha/PixArt-alpha/tree/main/t5-v1_1-xxl) varyantını kullanır.

tokenizer (`T5Tokenizer`) : [T5Tokenizer](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5Tokenizer) sınıfının tokenizer'ı.

transformer ([PixArtTransformer2DModel](/docs/diffusers/main/tr/api/models/pixart_transformer2d#diffusers.PixArtTransformer2DModel)) : Kodlanmış görüntü latentlerini gürültüden arındırmak için metin koşullu bir `PixArtTransformer2DModel`. Yapılandırmada başlangıçta [`Transformer2DModel`](https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS/blob/main/transformer/config.json#L2) olarak yayınlandı, ancak bu uyumsuzluk göz ardı edilebilir.

scheduler ([SchedulerMixin](/docs/diffusers/main/tr/api/schedulers/overview#diffusers.SchedulerMixin)) : Kodlanmış görüntü latentlerini gürültüden arındırmak için `transformer` ile birlikte kullanılacak bir zamanlayıcı.

PixArt-Sigma kullanarak metinden görüntüye üretim için Pipeline.

Bu model [DiffusionPipeline](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline) sınıfından devralır. Kütüphanenin tüm pipeline'lar için uyguladığı genel yöntemler (indirme veya kaydetme, belirli bir cihazda çalıştırma vb.) için üst sınıf belgelendirmesine bakın.

#### __call__[[diffusers.PixArtSigmaPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, negative_prompt: str = '', num_inference_steps: int = 20, timesteps: list = None, sigmas: list = None, guidance_scale: float = 4.5, num_images_per_prompt: int | None = 1, height: int | None = None, width: int | None = None, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, clean_caption: bool = True, use_resolution_binning: bool = True, max_sequence_length: int = 300, **kwargs)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py#L631)

**Parametreler:**

prompt (`str` veya `list[str]`, *isteğe bağlı*) : Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmamışsa, bunun yerine `prompt_embeds` geçirilmelidir.

negative_prompt (`str` veya `list[str]`, *isteğe bağlı*) : Görsel üretimi yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerine `negative_prompt_embeds` parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani `guidance_scale` değeri `1`'den küçükse) yok sayılır.

num_inference_steps (`int`, *isteğe bağlı*, varsayılan 100) : Gürültü azaltma adım sayısı. Daha fazla gürültü azaltma adımı genellikle daha yavaş çıkarım pahasına daha yüksek kaliteli bir görüntüye yol açar.

timesteps (`list[int]`, *isteğe bağlı*) : `set_timesteps` metodunda `timesteps` argümanını destekleyen zamanlayıcılarla gürültü azaltma süreci için kullanılacak özel zaman adımları. Tanımlanmamışsa, `num_inference_steps` geçirildiğinde varsayılan davranış kullanılacaktır. Azalan sırada olmalıdır.

sigmas (`list[float]`, *isteğe bağlı*) : `set_timesteps` metodunda `sigmas` argümanını destekleyen zamanlayıcılarla gürültü azaltma süreci için kullanılacak özel sigmalar. Tanımlanmamışsa, `num_inference_steps` geçirildiğinde varsayılan davranış kullanılacaktır.

guidance_scale (`float`, *isteğe bağlı*, varsayılan 4.5) : [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598)'de tanımlandığı gibi yönlendirme ölçeği. `guidance_scale`, [Imagen Paper](https://huggingface.co/papers/2205.11487)'deki 2. denklemindeki `w` olarak tanımlanır. Yönlendirme ölçeği, `guidance_scale > 1` olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği, genellikle daha düşük görüntü kalitesi pahasına, `prompt` ile yakından ilişkili görüntülerin üretilmesini teşvik eder.

num_images_per_prompt (`int`, *isteğe bağlı*, varsayılan 1) : Her istem için üretilecek görsel sayısı.

height (`int`, *isteğe bağlı*, varsayılan: self.unet.config.sample_size) : Üretilen görüntünün piksel cinsinden yüksekliği.

width (`int`, *isteğe bağlı*, varsayılan: self.unet.config.sample_size) : Üretilen görüntünün piksel cinsinden genişliği.

eta (`float`, *isteğe bağlı*, varsayılan 0.0) : DDIM makalesindeki eta (η) parametresine karşılık gelir: https://huggingface.co/papers/2010.02502. Yalnızca [schedulers.DDIMScheduler](/docs/diffusers/main/tr/api/schedulers/ddim#diffusers.DDIMScheduler) için geçerlidir, diğerlerinde yok sayılır.

generator (`torch.Generator` veya `list[torch.Generator]`, *isteğe bağlı*) : Üretimi deterministik hale getirmek için bir veya [torch üreteci(leri)](https://pytorch.org/docs/stable/generated/torch.Generator.html) listesi.

latents (`torch.Tensor`, *isteğe bağlı*) : Görsel üretimi için girdi olarak kullanılacak, Gauss dağılımından örneklenen önceden oluşturulmuş gürültülü latentler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele `generator` kullanılarak örneklem yoluyla bir latent tensörü oluşturulur.

prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, *ör.* istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri `prompt` girdi argümanından oluşturulur.

prompt_attention_mask (`torch.Tensor`, *isteğe bağlı*) : Metin gömme (embedding) için önceden oluşturulmuş dikkat maskesi (attention mask).

negative_prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş negatif metin gömme değerleri. PixArt-Sigma için bu negatif istem "" olmalıdır. Sağlanmazsa, negative_prompt_embeds, `negative_prompt` girdi argümanından oluşturulur.

negative_prompt_attention_mask (`torch.Tensor`, *isteğe bağlı*) : Negatif metin gömme vektörleri için önceden oluşturulmuş dikkat maskesi.

output_type (`str`, *isteğe bağlı*, varsayılan `"pil"`) : Üretilen görüntünün çıktı biçimi. [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` veya `np.array` arasında seçim yapın.

return_dict (`bool`, *isteğe bağlı*, varsayılan `True`) : Düz bir tuple yerine `~pipelines.stable_diffusion.IFPipelineOutput` döndürülecek mi?

callback (`Callable`, *isteğe bağlı*) : Çıkarım sırasında her `callback_steps` adımda çağrılacak bir işlev. İşlev aşağıdaki argümanlarla çağrılacaktır: `callback(step: int, timestep: int, latents: torch.Tensor)`.

callback_steps (`int`, *opsiyonel*, varsayılan 1) : `callback` fonksiyonunun çağrılma sıklığı. Belirtilmezse, callback her adımda çağrılır.

clean_caption (`bool`, *isteğe bağlı*, varsayılan `True`) : Embedding oluşturulmadan önce başlığın temizlenip temizlenmeyeceğini belirtir. Bunun için `beautifulsoup4` ve `ftfy` paketlerinin yüklü olması gerekir. Bağımlılıklar yüklü değilse, embedding'ler ham istemden oluşturulur.

use_resolution_binning (`bool` varsayılan olarak `True`) : `True` olarak ayarlanırsa, istenen yükseklik ve genişlik önce `ASPECT_RATIO_1024_BIN` kullanılarak en yakın çözünürlüklere eşlenir. Oluşturulan latentler görüntülere çözümlendikten sonra, istenen çözünürlüğe yeniden boyutlandırılır. Kare olmayan görüntüler üretmek için faydalıdır.

max_sequence_length (`int` varsayılanı 300) : `prompt` ile kullanılacak maksimum dizi uzunluğu.

**Dönüş:** [ImagePipelineOutput](/docs/diffusers/main/tr/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) veya `tuple`

`return_dict` `True` ise [ImagePipelineOutput](/docs/diffusers/main/tr/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) döndürülür, aksi halde ilk öğesi üretilen görüntülerin listesini içeren bir `tuple` döndürülür

Üretim için pipeline çağrıldığında tetiklenen işlev.

Örnekler:
```py
>>> import torch
>>> from diffusers import PixArtSigmaPipeline

>>> # You can replace the checkpoint id with "PixArt-alpha/PixArt-Sigma-XL-2-512-MS" too.
>>> pipe = PixArtSigmaPipeline.from_pretrained(
...     "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS", torch_dtype=torch.float16
... )
>>> # Enable memory optimizations.
>>> # pipe.enable_model_cpu_offload()

>>> prompt = "A small cactus with a happy face in the Sahara desert."
>>> image = pipe(prompt).images[0]
```

#### encode_prompt[[diffusers.PixArtSigmaPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, negative_prompt: str = '', num_images_per_prompt: int = 1, device: typing.Optional[torch.device] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, clean_caption: bool = False, max_sequence_length: int = 300, **kwargs)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py#L247)

**Parametreler:**

prompt (`str` veya `list[str]`, *isteğe bağlı*) : kodlanacak istem

negative_prompt (`str` veya `list[str]`, *isteğe bağlı*) : Görsel üretimi yönlendirmemek için kullanılan istem. Tanımlanmadıysa bunun yerine `negative_prompt_embeds` parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani `guidance_scale` değeri `1`'den küçükse) yok sayılır. PixArt-Alpha için bu değer "" olmalıdır.

do_classifier_free_guidance (`bool`, *isteğe bağlı*, varsayılan `True`) : sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı

num_images_per_prompt (`int`, *isteğe bağlı*, varsayılan 1) : her istem için oluşturulacak görsel sayısı

device : (`torch.device`, *isteğe bağlı*): Sonuç olarak elde edilen gömme vektörlerinin yerleştirileceği torch cihazı

prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, *ör.* istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri `prompt` girdi argümanından oluşturulur.

negative_prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş negatif metin gömümlemeleri. PixArt-Alpha için, "" dizgisinin gömümlemeleri olmalıdır.

clean_caption (`bool`, varsayılan `False`) : `True` ise, fonksiyon kodlamadan önce sağlanan başlığı ön işler ve temizler.

max_sequence_length (`int`, varsayılan 300) : İstem için kullanılacak maksimum dizi uzunluğu.

İsteği metin kodlayıcı gizli durumlarına kodlar.

