Buckets:

mishig's picture
|
download
raw
94.7 kB

ControlNet

ControlNet, Lvmin Zhang, Anyi Rao ve Maneesh Agrawala tarafından Adding Conditional Control to Text-to-Image Diffusion Models makalesinde tanıtılmıştır.

Bir ControlNet modeli ile, Stable Diffusion üretimini koşullandırmak ve kontrol etmek için ek bir kontrol görseli sağlayabilirsiniz. Örneğin, bir derinlik haritası sağlarsanız, ControlNet modeli, derinlik haritasındaki uzamsal bilgileri koruyan bir görsel üretir. Bu, görsel üretim sürecini kontrol etmenin daha esnek ve doğru bir yoludur.

Makalenin özeti şudur:

ControlNet'i sunuyoruz; bu, büyük, önceden eğitilmiş metinden görüntüye difüzyon modellerine uzamsal koşullandırma kontrolleri eklemek için tasarlanmış bir sinir ağı mimarisidir. ControlNet, üretim için hazır büyük difüzyon modellerini kilitler ve milyarlarca görüntüyle önceden eğitilmiş derin ve sağlam kodlama katmanlarını, çeşitli bir koşullu kontrol seti öğrenmek için güçlü bir omurga olarak yeniden kullanır. Sinir mimarisi, parametreleri sıfırdan kademeli olarak büyüten ve finetuning'i (ince ayar) etkileyebilecek zararlı gürültünün olmasını engelleyen "sıfır konvolüsyonlar" (sıfır başlatılmış konvolüsyon katmanları) ile bağlanır. Stable Diffusion ile tekil veya birden fazla koşul kullanarak, istemlerle (prompt) veya istemsiz olarak kenarlar, derinlik, segmentasyon, insan pozu gibi çeşitli koşullandırma kontrollerini test ediyoruz. ControlNet'lerin eğitiminin küçük (<50k) ve büyük (>1m) veri setleriyle sağlam olduğunu gösteriyoruz. Kapsamlı sonuçlar, ControlNet'in görüntü difüzyon modellerini kontrol etmek için daha geniş uygulamaları kolaylaştırabileceğini göstermektedir.

Bu model takuma104 tarafından katkıda bulunulmuştur. ❤️

Orijinal kod tabanı lllyasviel/ControlNet adresinde bulunabilir ve resmi ControlNet denetim noktaları lllyasviel'in Hub profilinde yer almaktadır.

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.

StableDiffusionControlNetPipeline[[diffusers.StableDiffusionControlNetPipeline]]

diffusers.StableDiffusionControlNetPipeline[[diffusers.StableDiffusionControlNetPipeline]]

diffusers.StableDiffusionControlNetPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet.ControlNetModel | list[diffusers.models.controlnets.controlnet.ControlNetModel] | tuple[diffusers.models.controlnets.controlnet.ControlNetModel] | diffusers.models.controlnets.multicontrolnet.MultiControlNetModel, scheduler: KarrasDiffusionSchedulers, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, image_encoder: CLIPVisionModelWithProjection = None, requires_safety_checker: bool = True)

Kaynak

Parametreler:

vae (AutoencoderKL) : Görüntüleri latent temsillere kodlamak ve bu temsillerden görüntülere çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) modeli.

text_encoder (CLIPTextModel) : Donmuş metin kodlayıcı (clip-vit-large-patch14).

tokenizer (CLIPTokenizer) : Metni belirteçleştirmek için bir CLIPTokenizer.

unet (UNet2DConditionModel) : Kodlanmış görüntü latentlerini gürültüden arındırmak için kullanılan bir UNet2DConditionModel.

controlnet (ControlNetModel veya list[ControlNetModel]) : Gürültü azaltma sürecinde unet bileşenine ek koşullandırma sağlar. Birden fazla ControlNet'i bir liste olarak ayarlarsanız, her bir ControlNet'in çıktıları toplanarak tek bir birleşik ek koşullandırma oluşturulur.

scheduler (SchedulerMixin) : Kodlanmış görüntü latentlerini gürültüden arındırmak için unet ile birlikte kullanılacak bir zamanlayıcı. DDIMScheduler, LMSDiscreteScheduler veya PNDMScheduler olabilir.

safety_checker (StableDiffusionSafetyChecker) : Üretilen görsellerin saldırgan veya zararlı olarak değerlendirilip değerlendirilemeyeceğini tahmin eden sınıflandırma modülü. Bir modelin potansiyel zararları hakkında daha fazla ayrıntı için model kartına bakın.

feature_extractor (CLIPImageProcessor) : Üretilen görüntülerden özellik çıkarmak için kullanılan CLIPImageProcessor; safety_checker girdileri olarak kullanılır.

ControlNet yönlendirmesiyle Stable Diffusion kullanılarak metinden görüntüye üretim için Pipeline.

Bu model DiffusionPipeline sınıfından devralınmıştı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:

call[[diffusers.StableDiffusionControlNetPipeline.call]]

__call__(prompt: str | list[str] = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list = None, sigmas: list = None, guidance_scale: float = 7.5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, 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, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 1.0, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list = ['latents'], **kwargs)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmadıysa, prompt_embeds parametresini iletmeniz gerekir.

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray], : list[list[torch.Tensor]], list[list[np.ndarray]] veya list[list[PIL.Image.Image]]): Üretim için unet'e rehberlik sağlamak üzere sağlanacak ControlNet giriş koşulu. Tür torch.Tensor olarak belirtilirse, ControlNet'e olduğu gibi iletilir. PIL.Image.Image de bir görüntü olarak kabul edilebilir. Çıktı görüntüsünün boyutları varsayılan olarak image'in boyutlarıdır. Yükseklik ve/veya genişlik geçirilirse, image buna göre yeniden boyutlandırılır. init'te birden fazla ControlNet belirtilmişse, her bir ControlNet'e girdi olarak doğru şekilde toplu işlenebilmesi için görüntülerin bir liste olarak geçirilmesi gerekir. prompt bir liste olduğunda ve tek bir ControlNet için görüntü listesi geçirildiğinde, her biri prompt listesindeki her prompt ile eşleştirilir. Bu, her prompt ve her ControlNet için toplu işleme yapılabilecek görüntü listesi listelerinin geçirilebildiği birden fazla ControlNet durumu için de geçerlidir.

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

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

num_inference_steps (int, isteğe bağlı, varsayılan 50) : 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, opsiyonel, varsayılan 7.5) : Daha yüksek bir guidance scale değeri, modelin prompt ile yakından ilişkili görseller üretmesini teşvik eder; bunun bedeli ise daha düşük görsel kalitedir. Guidance scale, guidance_scale > 1 olduğunda etkinleşir.

negative_prompt (str veya list[str], isteğe bağlı) : Görsel üretimde nelerin dahil edilmeyeceğini yönlendirmek için istem veya istemler. Tanımlanmadıysa bunun yerine negative_prompt_embeds parametresini geçmeniz 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 üretilecek 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.Generator veya list[torch.Generator], isteğe bağlı) : Üretimi deterministik hale getirmek için bir torch.Generator.

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ü latensler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele generator kullanılarak örneklem yoluyla bir latens tensörü oluşturulur.

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

negative_prompt_embeds (torch.Tensor, isteğe bağlı) : Ön 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_prompt girdi argümanından üretilir.

ip_adapter_image : (PipelineImageInput, isteğe bağlı): IP Adapters ile çalışmak için isteğe bağlı görüntü girişi.

ip_adapter_image_embeds (list[torch.Tensor], isteğe bağlı) : IP-Adapter için önceden oluşturulmuş gömme vektörleri. IP-adapter sayısı ile aynı uzunlukta bir liste olmalıdır. Her öğe, (batch_size, num_images, emb_dim) biçiminde bir tensör olmalıdır. do_classifier_free_guidance True olarak ayarlandıysa negatif gömme vektörünü içermelidir. Sağlanmazsa, gömme vektörleri ip_adapter_image girdi argümanından hesaplanır.

output_type (str, isteğe bağlı, varsayılan "pil") : Üretilen görüntünün çıktı biçimi. PIL.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 StableDiffusionPipelineOutput döndürülüp döndürülmemesi.

cross_attention_kwargs (dict, isteğe bağlı) : Belirtilirse, self.processor içinde tanımlanan AttentionProcessor'ye aktarılan bir kwargs sözlüğü.

controlnet_conditioning_scale (float veya list[float], isteğe bağlı, varsayılan 1.0) : ControlNet çıktıları, orijinal unet içindeki artıma eklenmeden önce controlnet_conditioning_scale ile çarpılır. init içinde birden fazla ControlNet belirtildiyse, ilgili ölçekleri bir liste olarak ayarlayabilirsiniz.

guess_mode (bool, isteğe bağlı, varsayılan False) : Tüm istekleri kaldırsanız bile ControlNet kodlayıcı, girdi görüntüsünün içeriğini tanımaya çalışır. 3.0 ile 5.0 arasında bir guidance_scale değeri önerilir.

control_guidance_start (float veya list[float], isteğe bağlı, varsayılan 0.0) : ControlNet'in uygulamaya başladığı toplam adım yüzdesi.

control_guidance_end (float veya list[float], isteğe bağlı, varsayılan 1.0) : ControlNet'in uygulamayı durdurduğu toplam adım yüzdesi.

clip_skip (int, isteğe bağlı) : Prompt gömme hesaplamaları sırasında CLIP'ten atlanacak katman sayısı. 1 değeri, prompt gömme hesaplamaları için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.

callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsiyonel) : Çıkarım sırasında her gürültü azaltma adımının sonunda çağrılan, PipelineCallback veya MultiPipelineCallbacks alt sınıfı olan bir fonksiyon. Aşağıdaki argümanlarla çağrılır: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs, callback_on_step_end_tensor_inputs tarafından belirtildiği üzere tüm tensörlerin listesini içerecektir.

callback_on_step_end_tensor_inputs (list, isteğe bağlı) : callback_on_step_end işlevi için girdi tensörlerinin listesi. Listede belirtilen tensörler, callback_kwargs argümanı olarak geçirilir. Yalnızca pipeline sınıfınızın ._callback_tensor_inputs özniteliğinde listelenen değişkenleri dahil edebilirsiniz.

Dönüş: StableDiffusionPipelineOutput veya tuple

return_dict True ise StableDiffusionPipelineOutput döndürülür, aksi takdirde bir tuple döndürülür; bu yapının ilk öğesi üretilen görsellerin listesini, ikinci öğesi ise ilgili üretilen görselin "not-safe-for-work" (nsfw) içerip içermediğini gösteren bool değerlerinin listesini içerir.

Üretim için pipeline'ın çağrı fonksiyonu.

Örnekler:

>>> # !pip install opencv-python transformers accelerate
>>> from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
>>> from diffusers.utils import load_image
>>> import numpy as np
>>> import torch

>>> import cv2
>>> from PIL import Image

>>> # download an image
>>> image = load_image(
...     "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
... )
>>> image = np.array(image)

>>> # get canny image
>>> image = cv2.Canny(image, 100, 200)
>>> image = image[:, :, None]
>>> image = np.concatenate([image, image, image], axis=2)
>>> canny_image = Image.fromarray(image)

>>> # load control net and stable diffusion v1-5
>>> controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16)
>>> pipe = StableDiffusionControlNetPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16
... )

>>> # speed up diffusion process with faster scheduler and memory optimization
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
>>> # remove following line if xformers is not installed
>>> pipe.enable_xformers_memory_efficient_attention()

>>> pipe.enable_model_cpu_offload()

>>> # generate image
>>> generator = torch.manual_seed(0)
>>> image = pipe(
...     "futuristic-looking woman", num_inference_steps=20, generator=generator, image=canny_image
... ).images[0]

enable_attention_slicing[[diffusers.StableDiffusionControlNetPipeline.enable_attention_slicing]]

enable_attention_slicing(slice_size: str | int = 'auto')

Kaynak

Parametreler:

slice_size (str veya int, isteğe bağlı, varsayılan "auto") : "auto" olduğunda, dikkat başlarına giden girdiyi ikiye böler, 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ştirir. 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 böler. Birden fazla dikkat başlığı (attention head) varsa, hesaplama her başlık üzerinde sırayla yapılır. Bu, küçük bir hız kaybı karşılığında bellek tasarrufu sağlamak için faydalıdır.

> ⚠️ Zaten scaled_dot_product_attention (SDPA) kullanıyorsanız dikkat dilimlemeyi etkinleştirmeyin from PyTorch > 2.0 or xFormers. Bu dikkat hesaplamaları zaten çok bellek verimlidir, bu yüzden 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]

disable_attention_slicing[[diffusers.StableDiffusionControlNetPipeline.disable_attention_slicing]]

disable_attention_slicing()

Kaynak

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[[diffusers.StableDiffusionControlNetPipeline.enable_xformers_memory_efficient_attention]]

enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)

Kaynak

Parametreler:

attention_op (Callable, isteğe bağlı) : xFormers'in memory_efficient_attention() fonksiyonunda op argümanı olarak kullanılmak üzere varsayılan None operatö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 memory efficient attention hem de sliced attention etkinleştirildiğinde, memory efficient attention, > önceliğine sahiptir.

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

disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionControlNetPipeline.disable_xformers_memory_efficient_attention]]

disable_xformers_memory_efficient_attention()

Kaynak

xFormers için bellek verimli dikkati devre dışı bırakın.

load_textual_inversion[[diffusers.StableDiffusionControlNetPipeline.load_textual_inversion]]

load_textual_inversion(pretrained_model_name_or_path: str | list[str] | dict[str, torch.Tensor] | list[dict[str, torch.Tensor]], token: str | list[str] | None = None, tokenizer: 'PreTrainedTokenizer' | None = None, text_encoder: 'PreTrainedModel' | None = None, **kwargs)

Kaynak

Parametreler:

pretrained_model_name_or_path (str veya os.PathLike veya list[str or os.PathLike] veya Dict veya list[Dict]) : Aşağıdakilerden biri veya bunların bir listesi olabilir: - Hub'da barındırılan önceden eğitilmiş bir modelin model kimliği (örneğin sd-concepts-library/low-poly-hd-logos-icons) olan bir dize. - Metinsel tersine çevirme ağırlıklarını içeren bir dizin yolu (örneğin ./my_text_inversion_directory/). - Metinsel tersine çevirme ağırlıklarını içeren bir dosya yolu (örneğin ./my_text_inversions.pt). - Bir torch state dict.

token (str veya list[str], isteğe bağlı) : Metinsel ters çevirme ağırlıkları için kullanılacak jetonu geçersiz kılar. pretrained_model_name_or_path bir liste ise, token da eşit uzunlukta bir liste olmalıdır.

text_encoder (CLIPTextModel, isteğe bağlı) : Donmuş metin kodlayıcı (clip-vit-large-patch14). Belirtilmezse, fonksiyon self.tokenizer değerini alır.

tokenizer (CLIPTokenizer, isteğe bağlı) : Metni tokenleştirmek için bir CLIPTokenizer. Belirtilmezse, fonksiyon self.tokenizer değerini alır.

weight_name (str, isteğe bağlı) : Özel bir ağırlık dosyasının adı. Bu, aşağıdaki durumlarda kullanılmalıdır: - Kaydedilen metinsel ters çevirme dosyası 🤗 Diffusers biçimindeyse ancak text_inv.bin gibi belirli bir ağırlık adı altında kaydedildiyse. - Kaydedilen metinsel ters çevirme dosyası Automatic1111 biçimindeyse.

cache_dir (str | os.PathLike, isteğe bağlı) : Standart önbellek kullanılmıyorsa, indirilen önceden eğitilmiş model yapılandırmasının önbelleğe alındığı dizinin yolu.

force_download (bool, isteğe bağlı, varsayılan False) : Model ağırlıklarının ve yapılandırma dosyalarının (yeniden) indirilmesinin zorlanıp zorlanmayacağını belirler; önbellekteki sürümler varsa bunların üzerine yazar.

proxies (dict[str, str], isteğe bağlı) : Protokol veya uç nokta bazında kullanılacak vekil sunucuların sözlüğü, örneğin {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Vekiller her istekte kullanılır.

local_files_only (bool, isteğe bağlı, varsayılan False) : Sadece yerel model ağırlıklarının ve yapılandırma dosyalarının yüklenip yüklenmeyeceğini belirtir. True olarak ayarlanırsa, model Hub'dan indirilmez.

hf_token (str veya bool, isteğe bağlı) : Uzaktaki dosyalar için HTTP bearer yetkilendirmesi olarak kullanılacak jeton. True ise, diffusers-cli login ile oluşturulan jeton (~/.huggingface içinde saklanır) kullanılır.

revision (str, isteğe bağlı, varsayılan "main") : Kullanılacak belirli model sürümü. Bir dal adı, etiket adı, commit kimliği veya Git tarafından izin verilen herhangi bir tanımlayıcı olabilir.

subfolder (str, isteğe bağlı, varsayılan "") : Hub'da veya yerel olarak daha büyük bir model deposu içindeki bir model dosyasının alt klasör konumu.

mirror (str, isteğe bağlı) : Çin'de bir model indiriyorsanız erişilebilirlik sorunlarını çözmek için ayna kaynağı. Kaynağın güncelliğini veya güvenliğini garanti etmiyoruz; daha fazla bilgi için ayna sitesine başvurmalısınız.

StableDiffusionPipeline metin kodlayıcısına Textual Inversion gömme değerlerini yükleyin (hem 🤗 Diffusers hem de Automatic1111 biçimleri desteklenir).

Örnek:

🤗 Diffusers biçiminde bir Textual Inversion gömme vektörü yüklemek için:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("sd-concepts-library/cat-toy")

prompt = "A <cat-toy> backpack"

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")

Automatic1111 biçiminde bir Textual Inversion gömme vektörünü yüklemek için, vektörü önce indirin (örneğin civitAI üzerinden) ve ardından vektörü yükleyin

yerel olarak:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")

prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")

encode_prompt[[diffusers.StableDiffusionControlNetPipeline.encode_prompt]]

encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)

Kaynak

Parametreler:

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

device : (torch.device): torch cihazı

num_images_per_prompt (int) : her istem için oluşturulacak görsel sayısı

do_classifier_free_guidance (bool) : sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı

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.

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ı) : Ön 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_prompt girdi 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 bir LoRA ölçeği.

clip_skip (int, isteğe bağlı) : Prompt gömme hesaplamaları sırasında CLIP'ten atlanacak katman sayısı. 1 değeri, prompt gömme hesaplamaları için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.

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

get_guidance_scale_embedding[[diffusers.StableDiffusionControlNetPipeline.get_guidance_scale_embedding]]

get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)

Kaynak

Parametreler:

w (torch.Tensor) : Belirtilen bir yönlendirme ölçeğiyle gömme vektörleri üretir; bu vektörler daha sonra zaman adımları gömmelerini zenginleştirmek için kullanılır.

embedding_dim (int, isteğe bağlı, varsayılan 512) : Üretilecek gömme boyutu.

dtype (torch.dtype, isteğe bağlı, varsayılan torch.float32) : Üretilen gömme (embedding) verilerinin veri türü.

Dönüş: torch.Tensor

(len(w), embedding_dim) biçiminde gömme vektörleri.

https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298 adresine bakın

StableDiffusionControlNetImg2ImgPipeline[[diffusers.StableDiffusionControlNetImg2ImgPipeline]]

diffusers.StableDiffusionControlNetImg2ImgPipeline[[diffusers.StableDiffusionControlNetImg2ImgPipeline]]

diffusers.StableDiffusionControlNetImg2ImgPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet.ControlNetModel | list[diffusers.models.controlnets.controlnet.ControlNetModel] | tuple[diffusers.models.controlnets.controlnet.ControlNetModel] | diffusers.models.controlnets.multicontrolnet.MultiControlNetModel, scheduler: KarrasDiffusionSchedulers, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, image_encoder: CLIPVisionModelWithProjection = None, requires_safety_checker: bool = True)

Kaynak

Parametreler:

vae (AutoencoderKL) : Görüntüleri latent temsillere kodlamak ve bu temsillerden görüntülere çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) modeli.

text_encoder (CLIPTextModel) : Donmuş metin kodlayıcı (clip-vit-large-patch14).

tokenizer (CLIPTokenizer) : Metni belirteçleştirmek için bir CLIPTokenizer.

unet (UNet2DConditionModel) : Kodlanmış görüntü latentlerini gürültüden arındırmak için kullanılan bir UNet2DConditionModel.

controlnet (ControlNetModel veya list[ControlNetModel]) : Gürültü azaltma sürecinde unet bileşenine ek koşullandırma sağlar. Birden fazla ControlNet'i bir liste olarak ayarlarsanız, her bir ControlNet'in çıktıları toplanarak tek bir birleşik ek koşullandırma oluşturulur.

scheduler (SchedulerMixin) : Kodlanmış görüntü latentlerini gürültüden arındırmak için unet ile birlikte kullanılacak bir zamanlayıcı. DDIMScheduler, LMSDiscreteScheduler veya PNDMScheduler olabilir.

safety_checker (StableDiffusionSafetyChecker) : Üretilen görsellerin saldırgan veya zararlı olarak değerlendirilip değerlendirilemeyeceğini tahmin eden sınıflandırma modülü. Bir modelin potansiyel zararları hakkında daha fazla ayrıntı için model kartına bakın.

feature_extractor (CLIPImageProcessor) : Üretilen görüntülerden özellik çıkarmak için kullanılan CLIPImageProcessor; safety_checker girdileri olarak kullanılır.

ControlNet yönlendirmesiyle Stable Diffusion kullanılarak görüntüden görüntüye üretim için Pipeline.

Bu model DiffusionPipeline sınıfından devralınmıştı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:

call[[diffusers.StableDiffusionControlNetImg2ImgPipeline.call]]

__call__(prompt: str | list[str] = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, strength: float = 0.8, num_inference_steps: int = 50, guidance_scale: float = 7.5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, 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, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 0.8, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list = ['latents'], **kwargs)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmadıysa, prompt_embeds parametresini iletmeniz gerekir.

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray], : list[list[torch.Tensor]], list[list[np.ndarray]] veya list[list[PIL.Image.Image]]): Görsel oluşturma sürecinin başlangıç noktası olarak kullanılacak başlangıç görseli. Ayrıca image olarak görsel latentleri de kabul edebilir ve latentler doğrudan geçirilirse yeniden kodlanmaz.

control_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray], : list[list[torch.Tensor]], list[list[np.ndarray]] veya list[list[PIL.Image.Image]]): Üretim sırasında unet'e rehberlik sağlamak için sağlanacak ControlNet giriş koşulu. Tür torch.Tensor olarak belirtilirse, ControlNet'e olduğu gibi iletilir. PIL.Image.Image de bir görüntü olarak kabul edilebilir. Çıktı görüntüsünün boyutları varsayılan olarak image'ın boyutlarına eşittir. Yükseklik ve/veya genişlik geçirilirse, image buna göre yeniden boyutlandırılır. init içinde birden fazla ControlNet belirtilmişse, her bir ControlNet'e girdi olarak doğru şekilde toplu işlenebilmesi için görüntülerin bir liste olarak geçirilmesi gerekir.

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

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

strength (float, opsiyonel, varsayılan 0.8) : Referans image'in dönüştürülme derecesini belirtir. 0 ile 1 arasında olmalıdır. image bir başlangıç noktası olarak kullanılır ve strength değeri arttıkça daha fazla gürültü eklenir. Gürültü azaltma adımlarının sayısı, başlangıçta eklenen gürültü miktarına bağlıdır. strength 1 olduğunda eklenen gürültü maksimumdur ve gürültü azaltma süreci, num_inference_steps içinde belirtilen tam tekrar sayısı kadar çalışır. 1 değeri, image'ı fiilen yok sayar.

num_inference_steps (int, isteğe bağlı, varsayılan 50) : 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, opsiyonel, varsayılan 7.5) : Daha yüksek bir guidance scale değeri, modelin prompt ile yakından ilişkili görseller üretmesini teşvik eder; bunun bedeli ise daha düşük görsel kalitedir. Guidance scale, guidance_scale > 1 olduğunda etkinleşir.

negative_prompt (str veya list[str], isteğe bağlı) : Görsel üretimde nelerin dahil edilmeyeceğini yönlendirmek için istem veya istemler. Tanımlanmadıysa bunun yerine negative_prompt_embeds parametresini geçmeniz 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 üretilecek 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.Generator veya list[torch.Generator], isteğe bağlı) : Üretimi deterministik hale getirmek için bir torch.Generator.

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ü latensler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele generator kullanılarak örneklem yoluyla bir latens tensörü oluşturulur.

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

negative_prompt_embeds (torch.Tensor, isteğe bağlı) : Ön 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_prompt girdi argümanından üretilir.

ip_adapter_image : (PipelineImageInput, isteğe bağlı): IP Adapters ile çalışmak için isteğe bağlı görüntü girişi.

ip_adapter_image_embeds (list[torch.Tensor], isteğe bağlı) : IP-Adapter için önceden oluşturulmuş gömme vektörleri. IP-adapter sayısı ile aynı uzunlukta bir liste olmalıdır. Her öğe, (batch_size, num_images, emb_dim) biçiminde bir tensör olmalıdır. do_classifier_free_guidance True olarak ayarlandıysa negatif gömme vektörünü içermelidir. Sağlanmazsa, gömme vektörleri ip_adapter_image girdi argümanından hesaplanır.

output_type (str, isteğe bağlı, varsayılan "pil") : Üretilen görüntünün çıktı biçimi. PIL.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 StableDiffusionPipelineOutput döndürülüp döndürülmemesi.

cross_attention_kwargs (dict, isteğe bağlı) : Belirtilirse, self.processor içinde tanımlanan AttentionProcessor'ye aktarılan bir kwargs sözlüğü.

controlnet_conditioning_scale (float veya list[float], isteğe bağlı, varsayılan 1.0) : ControlNet çıktıları, orijinal unet içindeki artıma eklenmeden önce controlnet_conditioning_scale ile çarpılır. init içinde birden fazla ControlNet belirtildiyse, ilgili ölçekleri bir liste olarak ayarlayabilirsiniz.

guess_mode (bool, isteğe bağlı, varsayılan False) : Tüm istekleri kaldırsanız bile ControlNet kodlayıcı, girdi görüntüsünün içeriğini tanımaya çalışır. 3.0 ile 5.0 arasında bir guidance_scale değeri önerilir.

control_guidance_start (float veya list[float], isteğe bağlı, varsayılan 0.0) : ControlNet'in uygulamaya başladığı toplam adım yüzdesi.

control_guidance_end (float veya list[float], isteğe bağlı, varsayılan 1.0) : ControlNet'in uygulamayı durdurduğu toplam adım yüzdesi.

clip_skip (int, isteğe bağlı) : Prompt gömme hesaplamaları sırasında CLIP'ten atlanacak katman sayısı. 1 değeri, prompt gömme hesaplamaları için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.

callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsiyonel) : Çıkarım sırasında her gürültü azaltma adımının sonunda çağrılan, PipelineCallback veya MultiPipelineCallbacks alt sınıfı olan bir fonksiyon. Aşağıdaki argümanlarla çağrılır: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs, callback_on_step_end_tensor_inputs tarafından belirtildiği üzere tüm tensörlerin listesini içerecektir.

callback_on_step_end_tensor_inputs (list, isteğe bağlı) : callback_on_step_end işlevi için girdi tensörlerinin listesi. Listede belirtilen tensörler, callback_kwargs argümanı olarak geçirilir. Yalnızca pipeline sınıfınızın ._callback_tensor_inputs özniteliğinde listelenen değişkenleri dahil edebilirsiniz.

Dönüş: StableDiffusionPipelineOutput veya tuple

return_dict True ise StableDiffusionPipelineOutput döndürülür, aksi takdirde bir tuple döndürülür; bu yapının ilk öğesi üretilen görsellerin listesini, ikinci öğesi ise ilgili üretilen görselin "not-safe-for-work" (nsfw) içerip içermediğini gösteren bool değerlerinin listesini içerir.

Üretim için pipeline'ın çağrı fonksiyonu.

Örnekler:

>>> # !pip install opencv-python transformers accelerate
>>> from diffusers import StableDiffusionControlNetImg2ImgPipeline, ControlNetModel, UniPCMultistepScheduler
>>> from diffusers.utils import load_image
>>> import numpy as np
>>> import torch

>>> import cv2
>>> from PIL import Image

>>> # download an image
>>> image = load_image(
...     "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
... )
>>> np_image = np.array(image)

>>> # get canny image
>>> np_image = cv2.Canny(np_image, 100, 200)
>>> np_image = np_image[:, :, None]
>>> np_image = np.concatenate([np_image, np_image, np_image], axis=2)
>>> canny_image = Image.fromarray(np_image)

>>> # load control net and stable diffusion v1-5
>>> controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16)
>>> pipe = StableDiffusionControlNetImg2ImgPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16
... )

>>> # speed up diffusion process with faster scheduler and memory optimization
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
>>> pipe.enable_model_cpu_offload()

>>> # generate image
>>> generator = torch.manual_seed(0)
>>> image = pipe(
...     "futuristic-looking woman",
...     num_inference_steps=20,
...     generator=generator,
...     image=image,
...     control_image=canny_image,
... ).images[0]

enable_attention_slicing[[diffusers.StableDiffusionControlNetImg2ImgPipeline.enable_attention_slicing]]

enable_attention_slicing(slice_size: str | int = 'auto')

Kaynak

Parametreler:

slice_size (str veya int, isteğe bağlı, varsayılan "auto") : "auto" olduğunda, dikkat başlarına giden girdiyi ikiye böler, 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ştirir. 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 böler. Birden fazla dikkat başlığı (attention head) varsa, hesaplama her başlık üzerinde sırayla yapılır. Bu, küçük bir hız kaybı karşılığında bellek tasarrufu sağlamak için faydalıdır.

> ⚠️ Zaten scaled_dot_product_attention (SDPA) kullanıyorsanız dikkat dilimlemeyi etkinleştirmeyin from PyTorch > 2.0 or xFormers. Bu dikkat hesaplamaları zaten çok bellek verimlidir, bu yüzden 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]

disable_attention_slicing[[diffusers.StableDiffusionControlNetImg2ImgPipeline.disable_attention_slicing]]

disable_attention_slicing()

Kaynak

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[[diffusers.StableDiffusionControlNetImg2ImgPipeline.enable_xformers_memory_efficient_attention]]

enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)

Kaynak

Parametreler:

attention_op (Callable, isteğe bağlı) : xFormers'in memory_efficient_attention() fonksiyonunda op argümanı olarak kullanılmak üzere varsayılan None operatö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 memory efficient attention hem de sliced attention etkinleştirildiğinde, memory efficient attention, > önceliğine sahiptir.

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

disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionControlNetImg2ImgPipeline.disable_xformers_memory_efficient_attention]]

disable_xformers_memory_efficient_attention()

Kaynak

xFormers için bellek verimli dikkati devre dışı bırakın.

load_textual_inversion[[diffusers.StableDiffusionControlNetImg2ImgPipeline.load_textual_inversion]]

load_textual_inversion(pretrained_model_name_or_path: str | list[str] | dict[str, torch.Tensor] | list[dict[str, torch.Tensor]], token: str | list[str] | None = None, tokenizer: 'PreTrainedTokenizer' | None = None, text_encoder: 'PreTrainedModel' | None = None, **kwargs)

Kaynak

Parametreler:

pretrained_model_name_or_path (str veya os.PathLike veya list[str or os.PathLike] veya Dict veya list[Dict]) : Aşağıdakilerden biri veya bunların bir listesi olabilir: - Hub'da barındırılan önceden eğitilmiş bir modelin model kimliği (örneğin sd-concepts-library/low-poly-hd-logos-icons) olan bir dize. - Metinsel tersine çevirme ağırlıklarını içeren bir dizin yolu (örneğin ./my_text_inversion_directory/). - Metinsel tersine çevirme ağırlıklarını içeren bir dosya yolu (örneğin ./my_text_inversions.pt). - Bir torch state dict.

token (str veya list[str], isteğe bağlı) : Metinsel ters çevirme ağırlıkları için kullanılacak jetonu geçersiz kılar. pretrained_model_name_or_path bir liste ise, token da eşit uzunlukta bir liste olmalıdır.

text_encoder (CLIPTextModel, isteğe bağlı) : Donmuş metin kodlayıcı (clip-vit-large-patch14). Belirtilmezse, fonksiyon self.tokenizer değerini alır.

tokenizer (CLIPTokenizer, isteğe bağlı) : Metni tokenleştirmek için bir CLIPTokenizer. Belirtilmezse, fonksiyon self.tokenizer değerini alır.

weight_name (str, isteğe bağlı) : Özel bir ağırlık dosyasının adı. Bu, aşağıdaki durumlarda kullanılmalıdır: - Kaydedilen metinsel ters çevirme dosyası 🤗 Diffusers biçimindeyse ancak text_inv.bin gibi belirli bir ağırlık adı altında kaydedildiyse. - Kaydedilen metinsel ters çevirme dosyası Automatic1111 biçimindeyse.

cache_dir (str | os.PathLike, isteğe bağlı) : Standart önbellek kullanılmıyorsa, indirilen önceden eğitilmiş model yapılandırmasının önbelleğe alındığı dizinin yolu.

force_download (bool, isteğe bağlı, varsayılan False) : Model ağırlıklarının ve yapılandırma dosyalarının (yeniden) indirilmesinin zorlanıp zorlanmayacağını belirler; önbellekteki sürümler varsa bunların üzerine yazar.

proxies (dict[str, str], isteğe bağlı) : Protokol veya uç nokta bazında kullanılacak vekil sunucuların sözlüğü, örneğin {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Vekiller her istekte kullanılır.

local_files_only (bool, isteğe bağlı, varsayılan False) : Sadece yerel model ağırlıklarının ve yapılandırma dosyalarının yüklenip yüklenmeyeceğini belirtir. True olarak ayarlanırsa, model Hub'dan indirilmez.

hf_token (str veya bool, isteğe bağlı) : Uzaktaki dosyalar için HTTP bearer yetkilendirmesi olarak kullanılacak jeton. True ise, diffusers-cli login ile oluşturulan jeton (~/.huggingface içinde saklanır) kullanılır.

revision (str, isteğe bağlı, varsayılan "main") : Kullanılacak belirli model sürümü. Bir dal adı, etiket adı, commit kimliği veya Git tarafından izin verilen herhangi bir tanımlayıcı olabilir.

subfolder (str, isteğe bağlı, varsayılan "") : Hub'da veya yerel olarak daha büyük bir model deposu içindeki bir model dosyasının alt klasör konumu.

mirror (str, isteğe bağlı) : Çin'de bir model indiriyorsanız erişilebilirlik sorunlarını çözmek için ayna kaynağı. Kaynağın güncelliğini veya güvenliğini garanti etmiyoruz; daha fazla bilgi için ayna sitesine başvurmalısınız.

StableDiffusionPipeline metin kodlayıcısına Textual Inversion gömme değerlerini yükleyin (hem 🤗 Diffusers hem de Automatic1111 biçimleri desteklenir).

Örnek:

🤗 Diffusers biçiminde bir Textual Inversion gömme vektörü yüklemek için:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("sd-concepts-library/cat-toy")

prompt = "A <cat-toy> backpack"

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")

Automatic1111 biçiminde bir Textual Inversion gömme vektörünü yüklemek için, vektörü önce indirin (örneğin civitAI üzerinden) ve ardından vektörü yükleyin

yerel olarak:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")

prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")

encode_prompt[[diffusers.StableDiffusionControlNetImg2ImgPipeline.encode_prompt]]

encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)

Kaynak

Parametreler:

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

device : (torch.device): torch cihazı

num_images_per_prompt (int) : her istem için oluşturulacak görsel sayısı

do_classifier_free_guidance (bool) : sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı

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.

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ı) : Ön 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_prompt girdi 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 bir LoRA ölçeği.

clip_skip (int, isteğe bağlı) : Prompt gömme hesaplamaları sırasında CLIP'ten atlanacak katman sayısı. 1 değeri, prompt gömme hesaplamaları için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.

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

StableDiffusionControlNetInpaintPipeline[[diffusers.StableDiffusionControlNetInpaintPipeline]]

diffusers.StableDiffusionControlNetInpaintPipeline[[diffusers.StableDiffusionControlNetInpaintPipeline]]

diffusers.StableDiffusionControlNetInpaintPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet.ControlNetModel | list[diffusers.models.controlnets.controlnet.ControlNetModel] | tuple[diffusers.models.controlnets.controlnet.ControlNetModel] | diffusers.models.controlnets.multicontrolnet.MultiControlNetModel, scheduler: KarrasDiffusionSchedulers, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, image_encoder: CLIPVisionModelWithProjection = None, requires_safety_checker: bool = True)

Kaynak

Parametreler:

vae (AutoencoderKL) : Görüntüleri latent temsillere kodlamak ve bu temsillerden görüntülere çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) modeli.

text_encoder (CLIPTextModel) : Donmuş metin kodlayıcı (clip-vit-large-patch14).

tokenizer (CLIPTokenizer) : Metni belirteçleştirmek için bir CLIPTokenizer.

unet (UNet2DConditionModel) : Kodlanmış görüntü latentlerini gürültüden arındırmak için kullanılan bir UNet2DConditionModel.

controlnet (ControlNetModel veya list[ControlNetModel]) : Gürültü azaltma sürecinde unet bileşenine ek koşullandırma sağlar. Birden fazla ControlNet'i bir liste olarak ayarlarsanız, her bir ControlNet'in çıktıları toplanarak tek bir birleşik ek koşullandırma oluşturulur.

scheduler (SchedulerMixin) : Kodlanmış görüntü latentlerini gürültüden arındırmak için unet ile birlikte kullanılacak bir zamanlayıcı. DDIMScheduler, LMSDiscreteScheduler veya PNDMScheduler olabilir.

safety_checker (StableDiffusionSafetyChecker) : Üretilen görsellerin saldırgan veya zararlı olarak değerlendirilip değerlendirilemeyeceğini tahmin eden sınıflandırma modülü. Bir modelin potansiyel zararları hakkında daha fazla ayrıntı için model kartına bakın.

feature_extractor (CLIPImageProcessor) : Üretilen görüntülerden özellik çıkarmak için kullanılan CLIPImageProcessor; safety_checker girdileri olarak kullanılır.

ControlNet yönlendirmesiyle Stable Diffusion kullanarak görüntü inpainting için pipeline.

Bu model DiffusionPipeline sınıfından devralınmıştı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:

> Bu pipeline, inpainting için özel olarak ince ayarlanmış checkpoint'lerle kullanılabilir > (stable-diffusion-v1-5/stable-diffusion-inpainting) ve varsayılan metinden görüntüye Stable Diffusion denetim noktaları > (stable-diffusion-v1-5/stable-diffusion-v1-5). ControlNet'ler için ince ayar yapılmışsa, varsayılan metinden görüntüye Stable Diffusion kontrol noktaları tercih edilebilir on > bunlar gibi, örneğin lllyasviel/control_v11p_sd15_inpaint.

call[[diffusers.StableDiffusionControlNetInpaintPipeline.call]]

__call__(prompt: str | list[str] = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, mask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, padding_mask_crop: int | None = None, strength: float = 1.0, num_inference_steps: int = 50, guidance_scale: float = 7.5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, 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, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 0.5, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list = ['latents'], **kwargs)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmadıysa, prompt_embeds parametresini iletmeniz gerekir.

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], : list[PIL.Image.Image] veya list[np.ndarray]): Başlangıç noktası olarak kullanılacak bir görüntü partisyonunu temsil eden Image, NumPy dizisi veya tensör. Hem NumPy dizisi hem de PyTorch tensörü için beklenen değer aralığı [0, 1] arasındadır. Tensör veya tensör listesi olması durumunda beklenen şekil (B, C, H, W) veya (C, H, W) olmalıdır. NumPy dizisi veya dizi listesi olması durumunda beklenen şekil (B, H, W, C) veya (H, W, C) olmalıdır. Ayrıca görüntü latentlerini image olarak kabul edebilir, ancak latentler doğrudan geçirildiğinde tekrar kodlanmaz.

mask_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], : list[PIL.Image.Image], veya list[np.ndarray]): image için maske uygulanacak görüntü partisyonunu temsil eden Image, NumPy dizisi veya tensör. Maske içindeki beyaz pikseller yeniden boyanırken siyah pikseller korunur. mask_image bir PIL görüntüsü ise, kullanılmadan önce tek kanala (parlaklık) dönüştürülür. NumPy dizisi veya PyTorch tensörü ise 3 yerine tek renk kanalı (L) içermelidir; bu nedenle PyTorch tensörü için beklenen şekil (B, 1, H, W), (B, H, W), (1, H, W) veya (H, W) olur. NumPy dizisi için ise (B, H, W, 1), (B, H, W), (H, W, 1) veya (H, W) olur.

control_image (torch.Tensor, PIL.Image.Image, list[torch.Tensor], list[PIL.Image.Image], : list[list[torch.Tensor]] veya list[list[PIL.Image.Image]]): Üretim sırasında unet'e rehberlik sağlamak için sağlanması gereken ControlNet giriş koşulu. Tür torch.Tensor olarak belirtilirse, ControlNet'e olduğu gibi iletilir. PIL.Image.Image de bir görüntü olarak kabul edilebilir. Çıktı görüntüsünün boyutları varsayılan olarak image'ın boyutlarıyla aynıdır. Yükseklik ve/veya genişlik geçirilirse, image buna göre yeniden boyutlandırılır. init içinde birden fazla ControlNet belirtilmişse, görüntüler bir liste olarak geçirilmelidir; böylece listenin her öğesi, tek bir ControlNet'e girdi olarak doğru şekilde toplu işlenebilir (batched).

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

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

padding_mask_crop (int, isteğe bağlı, varsayılan None) : Görüntü ve maskelemeye uygulanacak kırpmanın kenar boşluğu boyutu. None ise, görüntü ve mask_image'a kırpma uygulanmaz. padding_mask_crop None değilse, önce görüntü ile aynı en-boy oranına sahip ve tüm maskelenmiş alanı içeren dikdörtgen bir bölge bulunur, ardından bu alan padding_mask_crop değerine göre genişletilir. Ardından görüntü ve mask_image, inpainting için orijinal görüntü boyutuna yeniden boyutlandırılmadan önce genişletilen alana göre kırpılır. Bu, maskelenmiş alanın küçükken görüntünün büyük olması ve inpainting için alakasız bilgiler (örneğin arka plan) içermesi durumunda faydalıdır.

strength (float, opsiyonel, varsayılan 1.0) : Referans image'in ne ölçüde dönüştürüleceğini belirtir. 0 ile 1 arasında olmalıdır. image bir başlangıç noktası olarak kullanılır ve strength değeri arttıkça daha fazla gürültü eklenir. Gürültü azaltma adımlarının sayısı, başlangıçta eklenen gürültü miktarına bağlıdır. strength 1 olduğunda eklenen gürültü maksimumdur ve gürültü azaltma süreci, num_inference_steps içinde belirtilen tam tekrar sayısı kadar çalışır. 1 değeri, image'ı fiilen yok sayar.

num_inference_steps (int, isteğe bağlı, varsayılan 50) : 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, opsiyonel, varsayılan 7.5) : Daha yüksek bir guidance scale değeri, modelin prompt ile yakından ilişkili görseller üretmesini teşvik eder; bunun bedeli ise daha düşük görsel kalitedir. Guidance scale, guidance_scale > 1 olduğunda etkinleşir.

negative_prompt (str veya list[str], isteğe bağlı) : Görsel üretimde nelerin dahil edilmeyeceğini yönlendirmek için istem veya istemler. Tanımlanmadıysa bunun yerine negative_prompt_embeds parametresini geçmeniz 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 üretilecek 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.Generator veya list[torch.Generator], isteğe bağlı) : Üretimi deterministik hale getirmek için bir torch.Generator.

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ü latensler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele generator kullanılarak örneklem yoluyla bir latens tensörü oluşturulur.

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

negative_prompt_embeds (torch.Tensor, isteğe bağlı) : Ön 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_prompt girdi argümanından üretilir.

ip_adapter_image : (PipelineImageInput, isteğe bağlı): IP Adapters ile çalışmak için isteğe bağlı görüntü girişi.

ip_adapter_image_embeds (list[torch.Tensor], isteğe bağlı) : IP-Adapter için önceden oluşturulmuş gömme vektörleri. IP-adapter sayısı ile aynı uzunlukta bir liste olmalıdır. Her öğe, (batch_size, num_images, emb_dim) biçiminde bir tensör olmalıdır. do_classifier_free_guidance True olarak ayarlandıysa negatif gömme vektörünü içermelidir. Sağlanmazsa, gömme vektörleri ip_adapter_image girdi argümanından hesaplanır.

output_type (str, isteğe bağlı, varsayılan "pil") : Üretilen görüntünün çıktı biçimi. PIL.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 StableDiffusionPipelineOutput döndürülüp döndürülmemesi.

cross_attention_kwargs (dict, isteğe bağlı) : Belirtilirse, self.processor içinde tanımlanan AttentionProcessor'ye aktarılan bir kwargs sözlüğü.

controlnet_conditioning_scale (float veya list[float], isteğe bağlı, varsayılan 0.5) : ControlNet çıktıları, orijinal unet içindeki artıma eklenmeden önce controlnet_conditioning_scale ile çarpılır. init içinde birden fazla ControlNet belirtildiyse, ilgili ölçekleri bir liste olarak ayarlayabilirsiniz.

guess_mode (bool, isteğe bağlı, varsayılan False) : Tüm istekleri kaldırsanız bile ControlNet kodlayıcı, girdi görüntüsünün içeriğini tanımaya çalışır. 3.0 ile 5.0 arasında bir guidance_scale değeri önerilir.

control_guidance_start (float veya list[float], isteğe bağlı, varsayılan 0.0) : ControlNet'in uygulamaya başladığı toplam adım yüzdesi.

control_guidance_end (float veya list[float], isteğe bağlı, varsayılan 1.0) : ControlNet'in uygulamayı durdurduğu toplam adım yüzdesi.

clip_skip (int, isteğe bağlı) : Prompt gömme hesaplamaları sırasında CLIP'ten atlanacak katman sayısı. 1 değeri, prompt gömme hesaplamaları için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.

callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsiyonel) : Çıkarım sırasında her gürültü azaltma adımının sonunda çağrılan, PipelineCallback veya MultiPipelineCallbacks alt sınıfı olan bir fonksiyon. Aşağıdaki argümanlarla çağrılır: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs, callback_on_step_end_tensor_inputs tarafından belirtildiği üzere tüm tensörlerin listesini içerecektir.

callback_on_step_end_tensor_inputs (list, isteğe bağlı) : callback_on_step_end işlevi için girdi tensörlerinin listesi. Listede belirtilen tensörler, callback_kwargs argümanı olarak geçirilir. Yalnızca pipeline sınıfınızın ._callback_tensor_inputs özniteliğinde listelenen değişkenleri dahil edebilirsiniz.

Dönüş: StableDiffusionPipelineOutput veya tuple

return_dict True ise StableDiffusionPipelineOutput döndürülür, aksi takdirde bir tuple döndürülür; bu yapının ilk öğesi üretilen görsellerin listesini, ikinci öğesi ise ilgili üretilen görselin "not-safe-for-work" (nsfw) içerip içermediğini gösteren bool değerlerinin listesini içerir.

Üretim için pipeline'ın çağrı fonksiyonu.

Örnekler:

>>> # !pip install transformers accelerate
>>> from diffusers import StableDiffusionControlNetInpaintPipeline, ControlNetModel, DDIMScheduler
>>> from diffusers.utils import load_image
>>> import numpy as np
>>> import torch

>>> init_image = load_image(
...     "https://huggingface.co/datasets/diffusers/test-arrays/resolve/main/stable_diffusion_inpaint/boy.png"
... )
>>> init_image = init_image.resize((512, 512))

>>> generator = torch.Generator(device="cpu").manual_seed(1)

>>> mask_image = load_image(
...     "https://huggingface.co/datasets/diffusers/test-arrays/resolve/main/stable_diffusion_inpaint/boy_mask.png"
... )
>>> mask_image = mask_image.resize((512, 512))

>>> def make_canny_condition(image):
...     image = np.array(image)
...     image = cv2.Canny(image, 100, 200)
...     image = image[:, :, None]
...     image = np.concatenate([image, image, image], axis=2)
...     image = Image.fromarray(image)
...     return image

>>> control_image = make_canny_condition(init_image)

>>> controlnet = ControlNetModel.from_pretrained(
...     "lllyasviel/control_v11p_sd15_inpaint", torch_dtype=torch.float16
... )
>>> pipe = StableDiffusionControlNetInpaintPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16
... )

>>> pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)
>>> pipe.enable_model_cpu_offload()

>>> # generate image
>>> image = pipe(
...     "a handsome man with ray-ban sunglasses",
...     num_inference_steps=20,
...     generator=generator,
...     eta=1.0,
...     image=init_image,
...     mask_image=mask_image,
...     control_image=control_image,
... ).images[0]

enable_attention_slicing[[diffusers.StableDiffusionControlNetInpaintPipeline.enable_attention_slicing]]

enable_attention_slicing(slice_size: str | int = 'auto')

Kaynak

Parametreler:

slice_size (str veya int, isteğe bağlı, varsayılan "auto") : "auto" olduğunda, dikkat başlarına giden girdiyi ikiye böler, 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ştirir. 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 böler. Birden fazla dikkat başlığı (attention head) varsa, hesaplama her başlık üzerinde sırayla yapılır. Bu, küçük bir hız kaybı karşılığında bellek tasarrufu sağlamak için faydalıdır.

> ⚠️ Zaten scaled_dot_product_attention (SDPA) kullanıyorsanız dikkat dilimlemeyi etkinleştirmeyin from PyTorch > 2.0 or xFormers. Bu dikkat hesaplamaları zaten çok bellek verimlidir, bu yüzden 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]

disable_attention_slicing[[diffusers.StableDiffusionControlNetInpaintPipeline.disable_attention_slicing]]

disable_attention_slicing()

Kaynak

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[[diffusers.StableDiffusionControlNetInpaintPipeline.enable_xformers_memory_efficient_attention]]

enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)

Kaynak

Parametreler:

attention_op (Callable, isteğe bağlı) : xFormers'in memory_efficient_attention() fonksiyonunda op argümanı olarak kullanılmak üzere varsayılan None operatö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 memory efficient attention hem de sliced attention etkinleştirildiğinde, memory efficient attention, > önceliğine sahiptir.

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

disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionControlNetInpaintPipeline.disable_xformers_memory_efficient_attention]]

disable_xformers_memory_efficient_attention()

Kaynak

xFormers için bellek verimli dikkati devre dışı bırakın.

load_textual_inversion[[diffusers.StableDiffusionControlNetInpaintPipeline.load_textual_inversion]]

load_textual_inversion(pretrained_model_name_or_path: str | list[str] | dict[str, torch.Tensor] | list[dict[str, torch.Tensor]], token: str | list[str] | None = None, tokenizer: 'PreTrainedTokenizer' | None = None, text_encoder: 'PreTrainedModel' | None = None, **kwargs)

Kaynak

Parametreler:

pretrained_model_name_or_path (str veya os.PathLike veya list[str or os.PathLike] veya Dict veya list[Dict]) : Aşağıdakilerden biri veya bunların bir listesi olabilir: - Hub'da barındırılan önceden eğitilmiş bir modelin model kimliği (örneğin sd-concepts-library/low-poly-hd-logos-icons) olan bir dize. - Metinsel tersine çevirme ağırlıklarını içeren bir dizin yolu (örneğin ./my_text_inversion_directory/). - Metinsel tersine çevirme ağırlıklarını içeren bir dosya yolu (örneğin ./my_text_inversions.pt). - Bir torch state dict.

token (str veya list[str], isteğe bağlı) : Metinsel ters çevirme ağırlıkları için kullanılacak jetonu geçersiz kılar. pretrained_model_name_or_path bir liste ise, token da eşit uzunlukta bir liste olmalıdır.

text_encoder (CLIPTextModel, isteğe bağlı) : Donmuş metin kodlayıcı (clip-vit-large-patch14). Belirtilmezse, fonksiyon self.tokenizer değerini alır.

tokenizer (CLIPTokenizer, isteğe bağlı) : Metni tokenleştirmek için bir CLIPTokenizer. Belirtilmezse, fonksiyon self.tokenizer değerini alır.

weight_name (str, isteğe bağlı) : Özel bir ağırlık dosyasının adı. Bu, aşağıdaki durumlarda kullanılmalıdır: - Kaydedilen metinsel ters çevirme dosyası 🤗 Diffusers biçimindeyse ancak text_inv.bin gibi belirli bir ağırlık adı altında kaydedildiyse. - Kaydedilen metinsel ters çevirme dosyası Automatic1111 biçimindeyse.

cache_dir (str | os.PathLike, isteğe bağlı) : Standart önbellek kullanılmıyorsa, indirilen önceden eğitilmiş model yapılandırmasının önbelleğe alındığı dizinin yolu.

force_download (bool, isteğe bağlı, varsayılan False) : Model ağırlıklarının ve yapılandırma dosyalarının (yeniden) indirilmesinin zorlanıp zorlanmayacağını belirler; önbellekteki sürümler varsa bunların üzerine yazar.

proxies (dict[str, str], isteğe bağlı) : Protokol veya uç nokta bazında kullanılacak vekil sunucuların sözlüğü, örneğin {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Vekiller her istekte kullanılır.

local_files_only (bool, isteğe bağlı, varsayılan False) : Sadece yerel model ağırlıklarının ve yapılandırma dosyalarının yüklenip yüklenmeyeceğini belirtir. True olarak ayarlanırsa, model Hub'dan indirilmez.

hf_token (str veya bool, isteğe bağlı) : Uzaktaki dosyalar için HTTP bearer yetkilendirmesi olarak kullanılacak jeton. True ise, diffusers-cli login ile oluşturulan jeton (~/.huggingface içinde saklanır) kullanılır.

revision (str, isteğe bağlı, varsayılan "main") : Kullanılacak belirli model sürümü. Bir dal adı, etiket adı, commit kimliği veya Git tarafından izin verilen herhangi bir tanımlayıcı olabilir.

subfolder (str, isteğe bağlı, varsayılan "") : Hub'da veya yerel olarak daha büyük bir model deposu içindeki bir model dosyasının alt klasör konumu.

mirror (str, isteğe bağlı) : Çin'de bir model indiriyorsanız erişilebilirlik sorunlarını çözmek için ayna kaynağı. Kaynağın güncelliğini veya güvenliğini garanti etmiyoruz; daha fazla bilgi için ayna sitesine başvurmalısınız.

StableDiffusionPipeline metin kodlayıcısına Textual Inversion gömme değerlerini yükleyin (hem 🤗 Diffusers hem de Automatic1111 biçimleri desteklenir).

Örnek:

🤗 Diffusers biçiminde bir Textual Inversion gömme vektörü yüklemek için:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("sd-concepts-library/cat-toy")

prompt = "A <cat-toy> backpack"

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")

Automatic1111 biçiminde bir Textual Inversion gömme vektörünü yüklemek için, vektörü önce indirin (örneğin civitAI üzerinden) ve ardından vektörü yükleyin

yerel olarak:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")

prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")

encode_prompt[[diffusers.StableDiffusionControlNetInpaintPipeline.encode_prompt]]

encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)

Kaynak

Parametreler:

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

device : (torch.device): torch cihazı

num_images_per_prompt (int) : her istem için oluşturulacak görsel sayısı

do_classifier_free_guidance (bool) : sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı

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.

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ı) : Ön 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_prompt girdi 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 bir LoRA ölçeği.

clip_skip (int, isteğe bağlı) : Prompt gömme hesaplamaları sırasında CLIP'ten atlanacak katman sayısı. 1 değeri, prompt gömme hesaplamaları için son öncesi katmanın çıktısının kullanılacağı anlamına gelir.

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

StableDiffusionPipelineOutput[[diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]]

diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput[[diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]]

diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray, nsfw_content_detected: list[bool] | None)

Kaynak

Parametreler:

images (list[PIL.Image.Image] veya np.ndarray) : batch_size uzunluğunda gürültüsü azaltılmış PIL görüntülerinin listesi veya (batch_size, height, width, num_channels) biçiminde NumPy dizisi.

nsfw_content_detected (list[bool]) : Üretilen ilgili görüntünün "iş yerinde uygun olmayan" (nsfw) içerik içerip içermediğini gösteren liste veya güvenlik kontrolü yapılamadıysa None.

Stable Diffusion hatları için çıktı sınıfı.

Xet Storage Details

Size:
94.7 kB
·
Xet hash:
ea1394a1b8b98134cfc82cca406b32e17992e0a7772fcbd9e18527b93ae352fa

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