Diffusers documentation

PixArt-Σ

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

PixArt-Σ

PixArt-Σ: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation, 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 adresinde ve kullanılabilir tüm kontrol noktalarını 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 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 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.

Scheduler'lar kılavuzunu 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 bölümüne göz atın.

PixArtSigmaPipeline tarafından oluşturulan görüntüyü SDXL refiner modeline ileterek üretim kalitesini daha da artırabilirsiniz.

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

PixArtSigmaPipeline’i, metin kodlayıcıyı 8-bit hassasiyette yükleyerek 8 GB’tan az GPU VRAM ile çalıştırın. Tam kapsamlı bir örneğin üzerinden birlikte geçelim.

Öncelikle bitsandbytes kütüphanesini yükleyin:

pip install -U bitsandbytes

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

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:

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:

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:

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()

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:

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’ı 8 GB’ın altındaki GPU VRAM ile çalıştırabileceksiniz.

Hafıza kullanımınızın bir raporunu istiyorsanız, bu betiği çalıştırın.

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

sınıf diffusers.PixArtSigmaPipeline

< >

( tokenizer: T5Tokenizertext_encoder: T5EncoderModelvae: AutoencoderKLtransformer: PixArtTransformer2DModelscheduler: KarrasDiffusionSchedulers )

Parametreler

  • vae (AutoencoderKL) — Görselleri latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.
  • text_encoder (T5EncoderModel) — Donmuş metin kodlayıcı. PixArt-Alpha T5'i, özellikle de t5-v1_1-xxl varyantını kullanır.
  • tokenizer (T5Tokenizer) — T5Tokenizer sınıfının tokenlaştırıcısı.
  • transformer (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 olarak yayınlandı ancak bu uyumsuzluk göz ardı edilebilir.
  • scheduler (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 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__

< >

( prompt: str | list[str] = Nonenegative_prompt: str = ''num_inference_steps: int = 20timesteps: list = Nonesigmas: list = Noneguidance_scale: float = 4.5num_images_per_prompt: int | None = 1height: int | None = Nonewidth: int | None = Noneeta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1clean_caption: bool = Trueuse_resolution_binning: bool = Truemax_sequence_length: int = 300**kwargs ) → ImagePipelineOutput or tuple

Parametreler

  • prompt (str veya list[str], isteğe bağlı) — Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmadıysa bunun yerine prompt_embeds geçirilmelidir.
  • negative_prompt (str veya list[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem veya istemler. Tanımlanmamışsa, 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ı) — timesteps argümanını destekleyen zamanlayıcılarla gürültü azaltma süreci için kullanılacak özel zaman adımları. set_timesteps yönteminde. 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 yöntemlerinde sigmas argümanını destekleyen zamanlayıcılarla gürültü azaltma sürecinde kullanılacak özel sigmalar. Tanımlanmamışsa, num_inference_steps geçirildiğinde varsayılan davranış kullanılır.
  • guidance_scale (float, isteğe bağlı, varsayılan 4.5) — Classifier-Free Diffusion Guidance'de tanımlandığı gibi yönlendirme ölçeği. guidance_scale, Imagen Paper'daki 2. denklemin w'si olarak tanımlanır. Yönlendirme ölçeği, guidance_scale > 1 olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği, prompt metniyle yakından ilişkili görsellerin üretilmesini teşvik eder, genellikle daha düşük görsel kalitesi pahasına.
  • num_images_per_prompt (int, isteğe bağlı, varsayılan 1) — Her istem için oluşturulacak görsel sayısı.
  • height (int, isteğe bağlı, varsayılan: self.unet.config.sample_size) — Oluşturulan görüntünün piksel cinsinden yüksekliği.
  • width (int, isteğe bağlı, varsayılan: self.unet.config.sample_size) — Oluşturulan 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 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 listesi.
  • latents (torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenmiş, gürültülü ve önceden oluşturulmuş latents; görüntü üretimi için girdi olarak kullanılabilir. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele generator kullanılarak örneklemeye dayalı bir latents tensörü oluşturulur.
  • prompt_embeds (torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. prompt ağırlıklandırma. 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.
  • 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 verileri için önceden oluşturulmuş dikkat maskesi.
  • output_type (str, isteğe bağlı, varsayılan "pil") — Görsel oluşturma çıktısının biçimi. Şunlardan birini seçin: PIL: PIL.Image.Image veya np.array.
  • return_dict (bool, isteğe bağlı, varsayılan True) — Düz bir tuple yerine ~pipelines.stable_diffusion.IFPipelineOutput döndürülüp döndürülmemesi.
  • 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, isteğe bağlı, varsayılan 1) — callback işlevinin çağrılma sıklığı. Belirtilmezse, callback her adımda çağrılır.
  • clean_caption (bool, isteğe bağlı, varsayılan True) — Gömleştirmeler oluşturulmadan önce açıklamanın temizlenip temizlenmeyeceğini belirtir. Bunun için beautifulsoup4 ve ftfy paketlerinin yüklü olması gerekir. Bağımlılıklar yüklü değilse, gömleştirmeler ham istemden oluşturulur.
  • use_resolution_binning (bool, varsayılan True) — True olarak ayarlanırsa, istenen yükseklik ve genişlik önce ASPECT_RATIO_1024_BIN kullanılarak en yakın çözümlere 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üş değeri

ImagePipelineOutput veya tuple

return_dict True ise ImagePipelineOutput döndürülür, aksi halde ilk öğesi üretilen görüntülerin listesinden oluşan bir tuple döndürülür

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

Örnekler:

>>> 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

< >

( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_images_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = Falsemax_sequence_length: int = 300**kwargs )

Parametreler

  • prompt (str veya list[str], isteğe bağlı) — kodlanacak prompt
  • negative_prompt (str veya list[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem. Tanımlanmazsa, bunun yerine negative_prompt_embeds değeri geçirilmelidir. Yönlendirme kullanılmadığında yok sayılır (yani guidance_scale, 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) — classifier free guidance kullanılacak mı
  • num_images_per_prompt (int, isteğe bağlı, varsayılan 1) — her prompt 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ı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. prompt ağırlıklandırma. 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ümleri. PixArt-Alpha için, "" dizgisinin gömümleri 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.

Update on GitHub