Diffusers documentation
ControlNet
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 pipeline ishan24 tarafından katkı sağlanmıştır. ❤️ Orijinal kod tabanı NVlabs/Sana adresinde bulunabilir ve resmi ControlNet checkpoint'leri Efficient-Large-Model'in Hub profilinde yer almaktadır.
SanaControlNetPipeline
sınıf diffusers.SanaControlNetPipeline
< source >( tokenizer: GemmaTokenizertext_encoder: Gemma2PreTrainedModelvae: AutoencoderDCtransformer: SanaTransformer2DModelcontrolnet: SanaControlNetModelscheduler: DPMSolverMultistepScheduler )
Sana kullanarak metinden görüntüye üretim hattı.
__call__
< source >( prompt: str | list[str] = Nonenegative_prompt: str = ''num_inference_steps: int = 20timesteps: list = Nonesigmas: list = Noneguidance_scale: float = 4.5control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonecontrolnet_conditioning_scale: float | list[float] = 1.0num_images_per_prompt: int | None = 1height: int = 1024width: int = 1024eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueclean_caption: bool = Falseuse_resolution_binning: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 300complex_human_instruction: list = ["Given a user prompt, generate an 'Enhanced prompt' that provides detailed visual descriptions suitable for image generation. Evaluate the level of detail in the user prompt:", '- If the prompt is simple, focus on adding specifics about colors, shapes, sizes, textures, and spatial relationships to create vivid and concrete scenes.', '- If the prompt is already detailed, refine and enhance the existing details slightly without overcomplicating.', 'Here are examples of how to transform or refine prompts:', '- User Prompt: A cat sleeping -> Enhanced: A small, fluffy white cat curled up in a round shape, sleeping peacefully on a warm sunny windowsill, surrounded by pots of blooming red flowers.', '- User Prompt: A busy city street -> Enhanced: A bustling city street scene at dusk, featuring glowing street lamps, a diverse crowd of people in colorful clothing, and a double-decker bus passing by towering glass skyscrapers.', 'Please generate only the enhanced description for the prompt below and avoid including any additional commentary or evaluations:', 'User Prompt: '] ) → SanaPipelineOutput or tuple
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmadıysa bunun yerineprompt_embedsgeçirilmelidir. - 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. - 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. - timesteps (
list[int], isteğe bağlı) —timestepsargümanını destekleyen zamanlayıcılarla gürültü azaltma süreci için kullanılacak özel zaman adımları.set_timestepsyönteminde. Tanımlanmamışsa,num_inference_stepsgeçirildiğinde varsayılan davranış kullanılacaktır. Azalan sırada olmalıdır. - sigmas (
list[float], isteğe bağlı) —set_timestepsyöntemlerindesigmasargümanını destekleyen zamanlayıcılarla gürültü azaltma sürecinde kullanılacak özel sigmalar. Tanımlanmamışsa,num_inference_stepsgeçirildiğinde varsayılan davranış kullanılır. - guidance_scale (
float, isteğe bağlı, varsayılan 4.5) — Classifier-Free Diffusion Guidance'de tanımlandığı gibi yönlendirme ölçeği.guidance_scale, Imagen Paper'daki 2. denkleminw'si olarak tanımlanır. Yönlendirme ölçeği,guidance_scale > 1olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği,promptmetniyle yakından ilişkili görsellerin üretilmesini teşvik eder, genellikle daha düşük görsel kalitesi pahasına. - 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]]veyalist[list[PIL.Image.Image]]): Üretim sırasındaunet’e rehberlik sağlamak için ControlNet’e verilen giriş koşulu. Türtorch.Tensorolarak belirtilirse, ControlNet’e olduğu gibi iletilir.PIL.Image.Imagede bir görsel olarak kabul edilebilir. Çıktı görselinin boyutları varsayılan olarakimage’ın boyutlarıyla aynıdır. Yükseklik ve/veya genişlik değerleri geçirilirse,imagebuna göre yeniden boyutlandırılır.initiçinde birden fazla ControlNet belirtilmişse, görsellerin bir liste olarak geçirilmesi gerekir; böylece listenin her öğesi, tek bir ControlNet’e girdi olarak doğru şekilde toplu işleme (batch) alınabilir. - controlnet_conditioning_scale (
floatorlist[float], isteğe bağlı, varsayılan 1.0) — ControlNet çıktıları, orijinalunetiçindeki artıma eklenmeden öncecontrolnet_conditioning_scaleile çarpılır.initiçinde birden fazla ControlNet belirtildiyse, ilgili ölçekleri bir liste olarak ayarlayabilirsiniz. - num_images_per_prompt (
int, isteğe bağlı, varsayılan 1) — Her istem için oluşturulacak görsel sayısı. - height (
int, isteğe bağlı, varsayılan: self.unet.config.sample_size) — Oluşturulan görüntünün piksel cinsinden yüksekliği. - width (
int, isteğe bağlı, varsayılan: self.unet.config.sample_size) — Oluşturulan görüntünün piksel cinsinden genişliği. - eta (
float, isteğe bağlı, varsayılan 0.0) — DDIM makalesindeki eta (η) parametresine karşılık gelir: https://huggingface.co/papers/2010.02502. Yalnızca schedulers.DDIMScheduler için geçerlidir, diğerlerinde yok sayılır. - generator (
torch.Generatorveyalist[torch.Generator], isteğe bağlı) — Üretimi deterministik hale getirmek için bir veya torch üreteci listesi. - latents (
torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenmiş, gürültülü ve önceden oluşturulmuş latents; görüntü üretimi için girdi olarak kullanılabilir. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan 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 için kullanılabilir, ör. prompt ağırlıklandırma. Sağlanmazsa, metin gömme değerleripromptgirdi argümanından oluşturulur. - prompt_attention_mask (
torch.Tensor, isteğe bağlı) — Metin gömme (embedding) için önceden oluşturulmuş dikkat maskesi. - negative_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. PixArt-Sigma için bu negatif istem "" olmalıdır. Sağlanmazsa, negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - negative_prompt_attention_mask (
torch.Tensor, isteğe bağlı) — Negatif metin gömme verileri için önceden oluşturulmuş dikkat maskesi. - output_type (
str, isteğe bağlı, varsayılan"pil") — Görsel oluşturma çıktısının biçimi. Şunlardan birini seçin: PIL:PIL.Image.Imageveyanp.array. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Düz bir tuple yerine~pipelines.stable_diffusion.IFPipelineOutputdöndürülüp döndürülmemesi. - attention_kwargs —
Belirtilirse, diffusers.models.attention_processor içindeki
self.processoraltında tanımlananAttentionProcessor'a iletilen bir kwargs sözlüğü. - clean_caption (
bool, isteğe bağlı, varsayılanTrue) — Gömleştirmeler oluşturulmadan önce açıklamanın temizlenip temizlenmeyeceğini belirtir. Bunun içinbeautifulsoup4veftfypaketlerinin yüklü olması gerekir. Bağımlılıklar yüklü değilse, gömleştirmeler ham istemden oluşturulur. - use_resolution_binning (
bool, varsayılanTrue) —Trueolarak ayarlanırsa, istenen yükseklik ve genişlik önceASPECT_RATIO_1024_BINkullanılarak en yakın çözümlere eşlenir. Oluşturulan latentler görüntülere çözümlendikten sonra, istenen çözünürlüğe yeniden boyutlandırılır. Kare olmayan görüntüler üretmek için faydalıdır. - callback_on_step_end (
Callable, isteğe bağlı) — Çıkarım sırasında her gürültü azaltma adımının sonunda çağrılan bir işlev. İşlev 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_inputstarafından belirtilen tüm tensörlerin listesini içerir. - callback_on_step_end_tensor_inputs (
list, isteğe bağlı) —callback_on_step_endişlevi için girdi tensörlerinin listesi. Listede belirtilen tensörler,callback_kwargsargümanı olarak geçirilir. Yalnızca pipeline sınıfınızın._callback_tensor_inputsözniteliğinde listelenen değişkenleri dahil edebilirsiniz. - max_sequence_length (
int, varsayılan300) —promptile kullanılacak maksimum dizi uzunluğu. - complex_human_instruction (
list[str], isteğe bağlı) — Karmaşık insan dikkati için talimatlar: https://github.com/NVlabs/Sana/blob/main/configs/sana_app_config/Sana_1600M_app.yaml#L55.
Dönüş değeri
SanaPipelineOutput veya tuple
return_dict True ise SanaPipelineOutput döndürülür,
aksi halde ilk öğesi üretilen görüntülerin listesinden oluşan bir tuple döndürülür
Üretim için pipeline çağrıldığında tetiklenen işlev.
Örnekler:
>>> import torch
>>> from diffusers import SanaControlNetPipeline
>>> from diffusers.utils import load_image
>>> pipe = SanaControlNetPipeline.from_pretrained(
... "ishan24/Sana_600M_1024px_ControlNetPlus_diffusers",
... variant="fp16",
... torch_dtype={"default": torch.bfloat16, "controlnet": torch.float16, "transformer": torch.float16},
... device_map="balanced",
... )
>>> cond_image = load_image(
... "https://huggingface.co/ishan24/Sana_600M_1024px_ControlNet_diffusers/resolve/main/hed_example.png"
... )
>>> prompt = 'a cat with a neon sign that says "Sana"'
>>> image = pipe(
... prompt,
... control_image=cond_image,
... ).images[0]
>>> image.save("output.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_images_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = Falsemax_sequence_length: int = 300complex_human_instruction: list[str] | None = Nonelora_scale: float | None = None )
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — kodlanacak prompt - negative_prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem. Tanımlanmazsa, bunun yerinenegative_prompt_embedsdeğeri geçirilmelidir. Yönlendirme kullanılmadığında yok sayılır (yaniguidance_scale,1'den küçükse yok sayılır). PixArt-Alpha için bu değer "" olmalıdır. - do_classifier_free_guidance (
bool, isteğe bağlı, varsayılanTrue) — classifier free guidance kullanılacak mı - num_images_per_prompt (
int, isteğe bağlı, varsayılan 1) — her prompt için oluşturulacak görsel sayısı - device — (
torch.device, isteğe bağlı): Sonuç olarak elde edilen gömme vektörlerinin yerleştirileceği torch cihazı - prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. prompt ağırlıklandırma. Sağlanmazsa, metin gömme değerleripromptgirdi argümanından oluşturulur. - negative_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Sana için, "" dizisinin gömme değerleri olmalıdır. - clean_caption (
bool, varsayılanFalse) —Trueise, fonksiyon kodlamadan önce sağlanan başlığı ön işler ve temizler. - max_sequence_length (
int, varsayılan 300) — İstem için kullanılacak maksimum dizi uzunluğu. - complex_human_instruction (
list[str], varsayılancomplex_human_instruction) —complex_human_instructionboş değilse, işlev istem için karmaşık Human talimatını kullanır.
İsteği metin kodlayıcı gizli durumlarına kodlar.
SanaPipelineOutput
sınıf diffusers.pipelines.sana.pipeline_output.SanaPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Parametreler
Sana pipeline'ları için çıktı sınıfı.