Diffusers documentation
Stable unCLIP
Stable unCLIP
Stable unCLIP checkpoint'ları, CLIP gömme vektörlerine göre koşullanmak üzere Stable Diffusion 2.1 checkpoint'larından ince ayarlanmıştır. Stable unCLIP hâlâ metin gömme vektörlerine göre koşullanır. Bu iki ayrı koşullandırmaya sahip olması sayesinde stable unCLIP, metin yönlendirmeli görsel çeşitlendirme için kullanılabilir. Bir unCLIP önceliyle birleştirildiğinde, tam metinden görsel üretimi için de kullanılabilir.
Makalenin özeti şudur:
CLIP gibi kontrastif modellerin, hem semantiği hem de stili yakalayan, görüntülerin sağlam temsillerini öğrendiği gösterilmiştir. Bu temsilleri görüntü üretimi için kullanmak amacıyla iki aşamalı bir model öneriyoruz: bir metin açıklaması verildiğinde bir CLIP görüntü gömümünü üreten bir öncül (prior) ve görüntü gömümüne koşullu olarak bir görüntü üreten bir çözücü (decoder). Görüntü temsillerinin açıkça üretilmesinin, fotogerçekçilikte ve açıklama benzerliğinde minimal kayıpla görüntü çeşitliliğini artırdığını gösteriyoruz. Görüntü temsillerine koşullu çözücülerimiz, görüntü temsilinde bulunmayan, önemsiz detayları değiştirirken hem semantiği hem de stili koruyan bir görüntünün varyasyonlarını da üretebilir. Ayrıca, CLIP'in ortak gömüm uzayı, sıfır atış (zero-shot) bir şekilde dil yönlendirmeli görüntü manipülasyonlarını mümkün kılar. Çözücü için difüzyon modelleri kullanıyor ve öncül için hem otoregresif hem de difüzyon modelleriyle deney yapıyoruz; sonuncuların hesaplama açısından daha verimli olduğunu ve daha yüksek kaliteli örnekler ürettiğini buluyoruz.
İpuçları
Stable unCLIP, çıkarım sırasında noise_level girdisini alır ve bu değer, görsel gömümlerine eklenecek gürültü miktarını belirler. Daha yüksek bir noise_level, gürültüsü giderilmiş nihai görsellerdeki çeşitliliği artırır. Varsayılan olarak, görsel gömümlerine ek gürültü eklenmez (noise_level = 0).
Metinden Görüntüye Üretim
Stable unCLIP, KakaoBrain’ın açık kaynak DALL-E 2 kopyası Karlo öncül modeliyle birleştirilerek metinden görüntüye üretim için kullanılabilir:
import torch
from diffusers import UnCLIPScheduler, DDPMScheduler, StableUnCLIPPipeline
from diffusers.models import PriorTransformer
from transformers import CLIPTokenizer, CLIPTextModelWithProjection
prior_model_id = "kakaobrain/karlo-v1-alpha"
data_type = torch.float16
prior = PriorTransformer.from_pretrained(prior_model_id, subfolder="prior", dtype=data_type)
prior_text_model_id = "openai/clip-vit-large-patch14"
prior_tokenizer = CLIPTokenizer.from_pretrained(prior_text_model_id)
prior_text_model = CLIPTextModelWithProjection.from_pretrained(prior_text_model_id, dtype=data_type)
prior_scheduler = UnCLIPScheduler.from_pretrained(prior_model_id, subfolder="prior_scheduler")
prior_scheduler = DDPMScheduler.from_config(prior_scheduler.config)
stable_unclip_model_id = "stabilityai/stable-diffusion-2-1-unclip-small"
pipe = StableUnCLIPPipeline.from_pretrained(
stable_unclip_model_id,
dtype=data_type,
variant="fp16",
prior_tokenizer=prior_tokenizer,
prior_text_encoder=prior_text_model,
prior=prior,
prior_scheduler=prior_scheduler,
)
pipe = pipe.to("cuda") # or "mps", "xpu", "cpu"
wave_prompt = "dramatic wave, the Oceans roar, Strong wave spiral across the oceans as the waves unfurl into roaring crests; perfect wave form; perfect wave shape; dramatic wave shape; wave shape unbelievable; wave; wave shape spectacular"
image = pipe(prompt=wave_prompt).images[0]
imageMetinden görüntüye üretimde, Karlo modelinin önceliyle aynı olan CLIP ViT-L/14 gömme üzerinde eğitildiği için
stabilityai/stable-diffusion-2-1-unclip-smallkullanıyoruz. stabilityai/stable-diffusion-2-1-unclip OpenCLIP ViT-H üzerinde eğitildiğinden kullanımını önermiyoruz.
Metin yönlendirmeli Görselden-Görsele Varyasyon
from diffusers import StableUnCLIPImg2ImgPipeline
from diffusers.utils import load_image
import torch
pipe = StableUnCLIPImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-1-unclip", dtype=torch.float16, variation="fp16"
)
pipe = pipe.to("cuda") # or "mps", "xpu", "cpu"
url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/tarsila_do_amaral.png"
init_image = load_image(url)
images = pipe(init_image).images
images[0].save("variation_image.png")İsteğe bağlı olarak, pipe'e aşağıdaki gibi bir prompt da iletebilirsiniz:
prompt = "A fantasy landscape, trending on artstation"
image = pipe(init_image, prompt=prompt).images[0]
imageScheduler'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.
StableUnCLIPPipeline
sınıf diffusers.StableUnCLIPPipeline
< source >( prior_tokenizer: CLIPTokenizerprior_text_encoder: CLIPTextModelWithProjectionprior: PriorTransformerprior_scheduler: KarrasDiffusionSchedulersimage_normalizer: StableUnCLIPImageNormalizerimage_noising_scheduler: KarrasDiffusionSchedulerstokenizer: CLIPTokenizertext_encoder: CLIPTextModelunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersvae: AutoencoderKL )
Parametreler
- prior_tokenizer (
CLIPTokenizer) — ACLIPTokenizer. - prior_text_encoder (
CLIPTextModelWithProjection) — DonmuşCLIPTextModelWithProjectionmetin kodlayıcısı. - prior (PriorTransformer) — Metin gömümünden görüntü gömümünü yaklaşık olarak elde etmek için kullanılan standart unCLIP önceli.
- prior_scheduler (
KarrasDiffusionSchedulers) — Önceki gürültü kaldırma sürecinde kullanılan zamanlayıcı. - image_normalizer (
StableUnCLIPImageNormalizer) — Gürültü uygulanmadan önce tahmin edilen gömme vektörlerini normalize etmek ve gürültü uygulandıktan sonra gömme vektörlerini normalleştirmeyi geri almak için kullanılır. - image_noising_scheduler (
KarrasDiffusionSchedulers) — Tahmin edilen görsel gömme değerlerine gürültü eklemek için gürültü zamanlaması. Eklenmesi gereken gürültü miktarınoise_leveltarafından belirlenir. - tokenizer (
CLIPTokenizer) — ACLIPTokenizer. - text_encoder (
CLIPTextModel) — DonmuşCLIPTextModelmetin kodlayıcısı. - unet (UNet2DConditionModel) — Kodlanmış görüntü latentlerini gürültüden arındırmak için kullanılan bir UNet2DConditionModel.
- scheduler (
KarrasDiffusionSchedulers) — Kodlanmış görüntü latentlerini gürültüden arındırmak içinunetile birlikte kullanılacak bir zamanlayıcı. - vae (AutoencoderKL) — Görselleri latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.
Stable unCLIP kullanarak metinden görüntüye üretim için pipeline.
Bu model DiffusionPipeline sınıfından devralır. Tüm pipeline'lar için uygulanan genel yöntemlerin (indirme, kaydetme, belirli bir cihazda çalıştırma vb.) belgelerini üst sınıfın dokümantasyonunda bulabilirsiniz.
Pipeline ayrıca aşağıdaki yükleme yöntemlerini devralır:
- Metinsel tersine çevirme gömme yüklemek için load_textual_inversion()
- LoRA ağırlıklarını yüklemek için load_lora_weights()
- LoRA ağırlıklarını kaydetmek için save_lora_weights()
__call__
< source >( prompt: str | list[str] | None = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 20guidance_scale: float = 10.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Optional[torch.Generator] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: 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 = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 0prior_num_inference_steps: int = 25prior_guidance_scale: float = 4.0prior_latents: typing.Optional[torch.Tensor] = Noneclip_skip: int | None = None ) → ImagePipelineOutput or tuple
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmadıysaprompt_embedsparametresini iletmeniz gerekir. - height (
int, isteğe bağlı, varsayılanself.unet.config.sample_size * self.vae_scale_factor) — Oluşturulan görüntünün piksel cinsinden yüksekliği. - width (
int, isteğe bağlı, varsayılanself.unet.config.sample_size * self.vae_scale_factor) — Oluşturulan görüntünün piksel cinsinden genişliği. - num_inference_steps (
int, isteğe bağlı, varsayılan 20) — 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. - guidance_scale (
float, isteğe bağlı, varsayılan 10.0) — Daha yüksek bir guidance scale değeri, modelin metinlepromptile yakından ilişkili görseller üretmesini teşvik eder, ancak bunun bedeli daha düşük görsel kalitedir. Guidance scale,guidance_scale > 1olduğunda etkinleştirilir. - negative_prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimde nelerin dahil edilmeyeceğini yönlendirmek için kullanılan istem veya istemler. Tanımlanmadıysa, bunun yerinenegative_prompt_embedsparametresini iletmeniz gerekir. Yönlendirme kullanılmadığında (guidance_scale < 1) yok sayılır. - num_images_per_prompt (
int, isteğe bağlı, varsayılan 1) — Her istem için oluşturulacak görsel sayısı. - eta (
float, isteğe bağlı, varsayılan 0.0) — DDIM makalesindeki eta (η) parametresine karşılık gelir. Yalnızca DDIMScheduler için geçerlidir ve diğer zamanlayıcılarda yok sayılır. - generator (
torch.Generatorveyalist[torch.Generator], isteğe bağlı) — Üretimi deterministik hale getirmek için kullanılan birtorch.Generator. - latents (
torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenen, 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 rastgelegeneratorkullanı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 (istifade ağırlıklandırma) için kullanılabilir. Sağlanmazsa, metin gömme değerleripromptgirdi argümanından üretilir. - negative_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini (istek ağırlıklandırması) kolayca ayarlamak için kullanılabilir. Sağlanmazsa,negative_prompt_embeds,negative_promptgirdi argümanından üretilir. - output_type (
str, isteğe bağlı, varsayılan"pil") — Oluşturulan görüntünün çıktı biçimi.PIL.Imageveyanp.arrayarasında seçim yapın. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Düz bir tuple yerine ImagePipelineOutput döndürülüp döndürülmemesi. - callback (
Callable, isteğe bağlı) — Çıkarım sırasında hercallback_stepsadımda çağrılan bir işlev. İşlev aşağıdaki argümanlarla çağrılır:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, isteğe bağlı, varsayılan 1) —callbackişlevinin çağrılma sıklığı. Belirtilmezse, callback her adımda çağrılır. - cross_attention_kwargs (
dict, isteğe bağlı) — Belirtilirse,self.processoriçinde tanımlananAttentionProcessor'ye iletilen bir kwargs sözlüğü. - noise_level (
int, isteğe bağlı, varsayılan0) — Görsel gömme verilerine eklenecek gürültü miktarı. Daha yüksek birnoise_level, nihai gürültüsüz görsellerdeki varyansı artırır. Daha fazla ayrıntı için StableUnCLIPPipeline.noise_image_embeddings() bölümüne bakın. - prior_num_inference_steps (
int, isteğe bağlı, varsayılan 25) — Öncül gürültü azaltma sürecindeki 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. - prior_guidance_scale (
float, isteğe bağlı, varsayılan 4.0) — Daha yüksek bir guidance scale değeri, modelinpromptile yakından ilişkili görseller üretmesini teşvik eder; bunun bedeli ise daha düşük görsel kalitedir. Guidance scale,guidance_scale > 1olduğunda etkinleşir. - prior_latents (
torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenen, önceden oluşturulmuş gürültülü latensler; önceki gürültü azaltma sürecinde gömme üretimi için girdi olarak kullanılır. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgelegeneratorkullanılarak örneklemeye dayalı bir latens tensörü oluşturulur. - clip_skip (
int, isteğe bağlı) — İstem gömmelemelerini hesaplanırken CLIP'ten atlanacak katman sayısı. 1 değeri, istem gömmelemelerini hesaplamak için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.
Dönüş değeri
ImagePipelineOutput veya tuple
return_dict True ise ~ pipeline_utils.ImagePipelineOutput, aksi halde bir tuple. Bir tuple döndürüldüğünde, ilk öğe üretilen görüntülerin listesidir.
Üretim için pipeline'ın çağrı fonksiyonu.
Örnekler:
>>> import torch
>>> from diffusers import StableUnCLIPPipeline
>>> pipe = StableUnCLIPPipeline.from_pretrained(
... "fusing/stable-unclip-2-1-l", torch_dtype=torch.float16
... ) # TODO update model path
>>> pipe = pipe.to("cuda")
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> images = pipe(prompt).images
>>> images[0].save("astronaut_horse.png")enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Parametreler
- slice_size (
strveyaint, 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, her seferinde 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ştirir. Bu seçenek etkinleştirildiğinde, dikkat modülü, dikkati birden fazla adımda hesaplamak için girdi tensörünü dilimlere böler. Birden fazla dikkat başlığı (attention head) varsa, hesaplama her başlık üzerinde sıralı olarak gerçekleştirilir. Bu, küçük bir hız kaybı karşılığında bellek tasarrufu sağlamak için kullanışlıdır.
> ⚠️ PyTorch > 2.0 veya xFormers ile zaten
scaled_dot_product_attention(SDPA) kullanıyorsanız dikkat dilimlemeyi (attention slicing) etkinleştirmeyin. Bu dikkat hesaplamaları zaten çok bellek verimlidir, bu nedenle bu işlevi etkinleştirmenize gerek yoktur. SDPA veya xFormers ile dikkat dilimlemeyi etkinleştirirseniz ciddi yavaşlamalara yol açabilir!
Örnekler:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]Dilimlenmiş dikkat hesaplamasını devre dışı bırakır. enable_attention_slicing daha önce çağrıldıysa, dikkat tek adımda hesaplanır.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Parametreler
- attention_op (
Callable, isteğe bağlı) —memory_efficient_attention()fonksiyonununopargümanı olarak kullanılacak varsayılanNoneoperatörünü geçersiz kılar.
xFormers ile bellek verimli dikkati etkinleştirin. Bu seçenek etkinleştirildiğinde, GPU bellek kullanımının daha düşük olduğunu ve çıkarım sırasında olası bir hızlanmayı gözlemlemelisiniz. Eğitim sırasında hızlanma garanti edilmemektedir.
> ⚠️ Hem bellek verimli dikkat hem de dilimlenmiş dikkat etkinleştirildiğinde, bellek verimli dikkat > önceliklidir.
Örnekler:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)xFormers için bellek verimli dikkati devre dışı bırakın.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — kodlanacak prompt - device — (
torch.device): torch cihazı - num_images_per_prompt (
int) — her prompt için oluşturulacak görsel sayısı - do_classifier_free_guidance (
bool) — classifier free guidance kullanılacak mı - negative_prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem veya istemler. Tanımlanmamışsa, bunun yerinenegative_prompt_embedsparametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yaniguidance_scaledeğeri1'den küçükse) yok sayılır. - 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ğerleripromptgirdi argümanından oluşturulur. - negative_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - lora_scale (
float, isteğe bağlı) — LoRA katmanları yüklendiyse, metin kodlayıcısının tüm LoRA katmanlarına uygulanacak LoRA ölçeği. - clip_skip (
int, isteğe bağlı) — İstem gömmelemelerini hesaplanırken CLIP'ten atlanacak katman sayısı. 1 değeri, istem gömmelemelerini hesaplamak için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.
İsteği metin kodlayıcı gizli durumlarına kodlar.
noise_image_embeddings
< source >( image_embeds: Tensornoise_level: intnoise: typing.Optional[torch.Tensor] = Nonegenerator: typing.Optional[torch.Generator] = None )
Görsel gömmelelerine gürültü ekleyin. Gürültü miktarı noise_level girdisiyle kontrol edilir. Daha yüksek bir noise_level, son gürültüsüz görsellerdeki varyansı artırır.
Gürültü iki şekilde uygulanır:
- Bir gürültü zamanlaması, gömme doğrudan uygulanır.
- Çıktıya sinüzoidal zaman gömme vektörü eklenir.
Her iki durumda da gürültü miktarı aynı noise_level tarafından kontrol edilir.
Gömceler, gürültü uygulanmadan önce normalize edilir ve gürültü uygulandıktan sonra normalizasyonu kaldırılır.
StableUnCLIPImg2ImgPipeline
sınıf diffusers.StableUnCLIPImg2ImgPipeline
< source >( feature_extractor: CLIPImageProcessorPilimage_encoder: CLIPVisionModelWithProjectionimage_normalizer: StableUnCLIPImageNormalizerimage_noising_scheduler: KarrasDiffusionSchedulerstokenizer: CLIPTokenizertext_encoder: CLIPTextModelunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersvae: AutoencoderKL )
Parametreler
- feature_extractor (
CLIPImageProcessor) — Kodlanmadan önce görüntü ön işleme için özellik çıkarıcı. - image_encoder (
CLIPVisionModelWithProjection) — Görselleri kodlamak için CLIP görme modeli. - image_normalizer (
StableUnCLIPImageNormalizer) — Gürültü uygulanmadan önce tahmin edilen gömme vektörlerini normalize etmek ve gürültü uygulandıktan sonra gömme vektörlerini normalleştirmeyi geri almak için kullanılır. - image_noising_scheduler (
KarrasDiffusionSchedulers) — Tahmin edilen görsel gömme değerlerine gürültü eklemek için gürültü zamanlaması. Eklenmesi gereken gürültü miktarınoise_leveltarafından belirlenir. - tokenizer (
~transformers.CLIPTokenizer) — A [~transformers.CLIPTokenizer)]. - text_encoder (CLIPTextModel) — Donmuş CLIPTextModel metin kodlayıcısı.
- unet (UNet2DConditionModel) — Kodlanmış görüntü latentlerini gürültüden arındırmak için kullanılan bir UNet2DConditionModel.
- scheduler (
KarrasDiffusionSchedulers) — Kodlanmış görüntü latentlerini gürültüden arındırmak içinunetile birlikte kullanılacak bir zamanlayıcı. - vae (AutoencoderKL) — Görselleri latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.
Stable unCLIP kullanarak metin yönlendirmeli görüntüden görüntüye üretim için pipeline.
Bu model DiffusionPipeline sınıfından devralır. Tüm pipeline'lar için uygulanan genel yöntemlerin (indirme, kaydetme, belirli bir cihazda çalıştırma vb.) belgelerini üst sınıfın dokümantasyonunda bulabilirsiniz.
Pipeline ayrıca aşağıdaki yükleme yöntemlerini devralır:
- Metinsel tersine çevirme gömme yüklemek için load_textual_inversion()
- LoRA ağırlıklarını yüklemek için load_lora_weights()
- LoRA ağırlıklarını kaydetmek için save_lora_weights()
__call__
< source >( image: typing.Union[torch.Tensor, PIL.Image.Image] = Noneprompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 20guidance_scale: float = 10negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Optional[torch.Generator] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: 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 = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 0image_embeds: typing.Optional[torch.Tensor] = Noneclip_skip: int | None = None ) → ImagePipelineOutput or tuple
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmamışsa,prompt_embedskullanılır veya prompt""olarak başlatılır. - image (
torch.TensorveyaPIL.Image.Image) —Imageveya bir görüntü partisini temsil eden tensör. Görüntü,unet'ün koşullandığı CLIP gömümüne kodlanır. Görüntü, standart Stable Diffusion metin yönlendirmeli görüntü varyasyon sürecinde olduğu gibivaeile kodlanıp gürültü azaltma sürecinde latentler olarak kullanılmaz; değildir. - height (
int, isteğe bağlı, varsayılanself.unet.config.sample_size * self.vae_scale_factor) — Oluşturulan görüntünün piksel cinsinden yüksekliği. - width (
int, isteğe bağlı, varsayılanself.unet.config.sample_size * self.vae_scale_factor) — Oluşturulan görüntünün piksel cinsinden genişliği. - num_inference_steps (
int, isteğe bağlı, varsayılan 20) — 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. - guidance_scale (
float, isteğe bağlı, varsayılan 10.0) — Daha yüksek bir guidance scale değeri, modelin metinlepromptile yakından ilişkili görseller üretmesini teşvik eder, ancak bunun bedeli daha düşük görsel kalitedir. Guidance scale,guidance_scale > 1olduğunda etkinleştirilir. - negative_prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimde nelerin dahil edilmeyeceğini yönlendirmek için kullanılan istem veya istemler. Tanımlanmadıysa, bunun yerinenegative_prompt_embedsparametresini iletmeniz gerekir. Yönlendirme kullanılmadığında (guidance_scale < 1) yok sayılır. - num_images_per_prompt (
int, isteğe bağlı, varsayılan 1) — Her istem için oluşturulacak görsel sayısı. - eta (
float, isteğe bağlı, varsayılan 0.0) — DDIM makalesindeki eta (η) parametresine karşılık gelir. Yalnızca DDIMScheduler için geçerlidir ve diğer zamanlayıcılarda yok sayılır. - generator (
torch.Generatorveyalist[torch.Generator], isteğe bağlı) — Üretimi deterministik hale getirmek için kullanılan birtorch.Generator. - latents (
torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenen, 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 rastgelegeneratorkullanı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 (istifade ağırlıklandırma) için kullanılabilir. Sağlanmazsa, metin gömme değerleripromptgirdi argümanından üretilir. - negative_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini (istek ağırlıklandırması) kolayca ayarlamak için kullanılabilir. Sağlanmazsa,negative_prompt_embeds,negative_promptgirdi argümanından üretilir. - output_type (
str, isteğe bağlı, varsayılan"pil") — Oluşturulan görüntünün çıktı biçimi.PIL.Imageveyanp.arrayarasında seçim yapın. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Düz bir tuple yerine ImagePipelineOutput döndürülüp döndürülmemesi. - callback (
Callable, isteğe bağlı) — Çıkarım sırasında hercallback_stepsadımda çağrılan bir işlev. İşlev aşağıdaki argümanlarla çağrılır:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, isteğe bağlı, varsayılan 1) —callbackişlevinin çağrılma sıklığı. Belirtilmezse, callback her adımda çağrılır. - cross_attention_kwargs (
dict, isteğe bağlı) — Belirtilirse,self.processoriçinde tanımlananAttentionProcessor'ye iletilen bir kwargs sözlüğü. - noise_level (
int, isteğe bağlı, varsayılan0) — Görsel gömme verilerine eklenecek gürültü miktarı. Daha yüksek birnoise_level, nihai gürültüsüz görsellerdeki varyansı artırır. Daha fazla ayrıntı için StableUnCLIPPipeline.noise_image_embeddings() bölümüne bakın. - image_embeds (
torch.Tensor, isteğe bağlı) —unetiçin koşul olarak kullanılacak önceden oluşturulmuş CLIP gömme değerleri. Bu latentler gürültü azaltma sürecinde kullanılmaz. Önceden oluşturulmuş latentler sağlamak istiyorsanız, bunları__call__içinelatentsolarak iletin. - clip_skip (
int, isteğe bağlı) — İstem gömmelemelerini hesaplanırken CLIP'ten atlanacak katman sayısı. 1 değeri, istem gömmelemelerini hesaplamak için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.
Dönüş değeri
ImagePipelineOutput veya tuple
return_dict True ise ~ pipeline_utils.ImagePipelineOutput, aksi halde bir tuple. Bir tuple döndürüldüğünde, ilk öğe üretilen görüntülerin listesidir.
Üretim için pipeline'ın çağrı fonksiyonu.
Örnekler:
>>> import requests
>>> import torch
>>> from PIL import Image
>>> from io import BytesIO
>>> from diffusers import StableUnCLIPImg2ImgPipeline
>>> pipe = StableUnCLIPImg2ImgPipeline.from_pretrained(
... "stabilityai/stable-diffusion-2-1-unclip-small", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
>>> response = requests.get(url)
>>> init_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> init_image = init_image.resize((768, 512))
>>> prompt = "A fantasy landscape, trending on artstation"
>>> images = pipe(init_image, prompt).images
>>> images[0].save("fantasy_landscape.png")enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Parametreler
- slice_size (
strveyaint, 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, her seferinde 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ştirir. Bu seçenek etkinleştirildiğinde, dikkat modülü, dikkati birden fazla adımda hesaplamak için girdi tensörünü dilimlere böler. Birden fazla dikkat başlığı (attention head) varsa, hesaplama her başlık üzerinde sıralı olarak gerçekleştirilir. Bu, küçük bir hız kaybı karşılığında bellek tasarrufu sağlamak için kullanışlıdır.
> ⚠️ PyTorch > 2.0 veya xFormers ile zaten
scaled_dot_product_attention(SDPA) kullanıyorsanız dikkat dilimlemeyi (attention slicing) etkinleştirmeyin. Bu dikkat hesaplamaları zaten çok bellek verimlidir, bu nedenle bu işlevi etkinleştirmenize gerek yoktur. SDPA veya xFormers ile dikkat dilimlemeyi etkinleştirirseniz ciddi yavaşlamalara yol açabilir!
Örnekler:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]Dilimlenmiş dikkat hesaplamasını devre dışı bırakır. enable_attention_slicing daha önce çağrıldıysa, dikkat tek adımda hesaplanır.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Parametreler
- attention_op (
Callable, isteğe bağlı) —memory_efficient_attention()fonksiyonununopargümanı olarak kullanılacak varsayılanNoneoperatörünü geçersiz kılar.
xFormers ile bellek verimli dikkati etkinleştirin. Bu seçenek etkinleştirildiğinde, GPU bellek kullanımının daha düşük olduğunu ve çıkarım sırasında olası bir hızlanmayı gözlemlemelisiniz. Eğitim sırasında hızlanma garanti edilmemektedir.
> ⚠️ Hem bellek verimli dikkat hem de dilimlenmiş dikkat etkinleştirildiğinde, bellek verimli dikkat > önceliklidir.
Örnekler:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)xFormers için bellek verimli dikkati devre dışı bırakın.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — kodlanacak prompt - device — (
torch.device): torch cihazı - num_images_per_prompt (
int) — her prompt için oluşturulacak görsel sayısı - do_classifier_free_guidance (
bool) — classifier free guidance kullanılacak mı - negative_prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem veya istemler. Tanımlanmamışsa, bunun yerinenegative_prompt_embedsparametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yaniguidance_scaledeğeri1'den küçükse) yok sayılır. - 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ğerleripromptgirdi argümanından oluşturulur. - negative_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - lora_scale (
float, isteğe bağlı) — LoRA katmanları yüklendiyse, metin kodlayıcısının tüm LoRA katmanlarına uygulanacak LoRA ölçeği. - clip_skip (
int, isteğe bağlı) — İstem gömmelemelerini hesaplanırken CLIP'ten atlanacak katman sayısı. 1 değeri, istem gömmelemelerini hesaplamak için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.
İsteği metin kodlayıcı gizli durumlarına kodlar.
noise_image_embeddings
< source >( image_embeds: Tensornoise_level: intnoise: typing.Optional[torch.Tensor] = Nonegenerator: typing.Optional[torch.Generator] = None )
Görsel gömmelelerine gürültü ekleyin. Gürültü miktarı noise_level girdisiyle kontrol edilir. Daha yüksek bir noise_level, son gürültüsüz görsellerdeki varyansı artırır.
Gürültü iki şekilde uygulanır:
- Bir gürültü zamanlaması, gömme doğrudan uygulanır.
- Çıktıya sinüzoidal zaman gömme vektörü eklenir.
Her iki durumda da gürültü miktarı aynı noise_level tarafından kontrol edilir.
Gömceler, gürültü uygulanmadan önce normalize edilir ve gürültü uygulandıktan sonra normalizasyonu kaldırılır.
ImagePipelineOutput
sınıf diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Görüntü hatları için çıktı sınıfı.