# Metinden görüntüye

Difüzyon modellerini düşündüğünüzde aklınıza gelen ilk şeylerden biri genellikle metinden görüntüye üretimdir. Metinden görüntüye üretim, bir metin açıklamasından (örneğin, "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k") bir görüntü üretir ve bu açıklamaya *prompt* denir.

Çok yüksek bir seviyeden bakıldığında, bir difüzyon modeli bir istem (prompt) ve rastgele bir başlangıç gürültüsü alır ve bir görüntü oluşturmak için gürültüyü iteratif olarak giderir. *Gürültü giderme* süreci istem tarafından yönlendirilir ve gürültü giderme süreci önceden belirlenmiş bir zaman adımı sayısından sonra sona erdiğinde, görüntü temsili bir görüntüye çözümlenir.

> [!TIP]
> Latent difüzyon modelinin nasıl çalıştığını öğrenmek için [Stable Diffusion nasıl çalışır?](https://huggingface.co/blog/stable_diffusion#how-does-stable-diffusion-work) blog yazısını okuyun.

🤗 Diffusers'ta bir istemden (prompt) görüntü oluşturmak için iki adım izleyebilirsiniz:

1. Bir kontrol noktasını, kontrol noktasına dayanarak kullanılacak uygun pipeline sınıfını otomatik olarak algılayan [AutoPipelineForText2Image](/docs/diffusers/main/tr/api/pipelines/auto_pipeline#diffusers.AutoPipelineForText2Image) sınıfına yükleyin:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
	"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16"
).to("cuda")  # or "mps", "xpu", "cpu"
```

2. Bir görüntü oluşturmak için bir istemciyi (prompt) pipeline'a iletin:

```py
image = pipeline(
	"stained glass of darth vader, backlight, centered composition, masterpiece, photorealistic, 8k"
).images[0]
image
```

	

## Popüler modeller

En yaygın metinden görüntüye modeller [Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5), [Stable Diffusion XL (SDXL)](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) ve [Kandinsky 2.2](https://huggingface.co/kandinsky-community/kandinsky-2-2-decoder)'dir. Görüntü üretiminde daha doğrudan kontrol sağlamak için metinden görüntüye modellerle birlikte kullanılabilen ControlNet modelleri veya adaptörleri de mevcuttur. Her modelin mimarisi ve eğitim süreci nedeniyle sonuçları biraz farklıdır, ancak hangi modeli seçerseniz seçin kullanımları daha az ya da daha çok aynıdır. Her model için aynı istem (prompt) kullanalım ve sonuçlarını karşılaştıralım.

### Stable Diffusion v1.5

[Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5), [Stable Diffusion v1-4](https://huggingface.co/CompVis/stable-diffusion-v1-4) üzerinden başlatılan ve LAION-Aesthetics V2 veri setindeki 512x512 görüntüler üzerinde 595K adım boyunca ince ayarlanmış bir latent difüzyon modelidir. Bu modeli şu şekilde kullanabilirsiniz:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
	"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16"
).to("cuda")  # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(31)
image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", generator=generator).images[0]
image
```

### Stable Diffusion XL

SDXL, önceki Stable Diffusion modellerinin çok daha büyük bir versiyonudur ve bir görseli daha da detaylandıran iki aşamalı bir model süreci içerir. Ayrıca, odak noktası merkezde olan yüksek kaliteli görseller üretmek için bazı ek *micro-conditioning* bileşenleri de barındırır. Kullanımı hakkında daha fazla bilgi edinmek için daha kapsamlı [SDXL](../api/pipelines/stable_diffusion/stable_diffusion_xl) kılavuzuna göz atın. Genel olarak, SDXL'i şu şekilde kullanabilirsiniz:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16"
).to("cuda")  # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(31)
image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", generator=generator).images[0]
image
```

### Kandinsky 2.2

Kandinsky modeli, difüzyon modelinde metin ve görsellerin daha iyi hizalanması için kullanılan gömme (embedding)leri oluşturmak üzere bir görsel öncül (image prior) modelini de kullandığı için Stable Diffusion modellerinden biraz farklıdır.

Kandinsky 2.2'yi kullanmanın en kolay yolu şudur:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
	"kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(31)
image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", generator=generator).images[0]
image
```

### ControlNet

ControlNet modelleri, [Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) gibi metinden görüntüye modellerin üzerine ince ayarlanmış yardımcı modeller veya adaptörlerdir. ControlNet modellerini metinden görüntüye modellerle birlikte kullanmak, bir görüntünün nasıl oluşturulacağı üzerinde daha açık bir kontrol için çeşitli seçenekler sunar. ControlNet ile modele ek bir koşullandırma giriş görüntüsü eklersiniz. Örneğin, bir insan duruşu görüntüsünü (genellikle bir iskelete bağlanan birden fazla anahtar nokta olarak temsil edilir) koşullandırma girişi olarak sağlarsanız, model bu görüntünün duruşunu takip eden bir görüntü oluşturur. Diğer koşullandırma girişleri ve bunların nasıl kullanılacağı hakkında daha fazla bilgi edinmek için daha ayrıntılı [ControlNet](controlnet) kılavuzuna göz atın.

Bu örnekte, ControlNet'i bir insan poz tahmini görseliyle koşullandıralım. İnsan poz tahminleri üzerinde ön eğitilmiş ControlNet modelini yükleyin:

```py
from diffusers import ControlNetModel, AutoPipelineForText2Image
from diffusers.utils import load_image
import torch

controlnet = ControlNetModel.from_pretrained(
	"lllyasviel/control_v11p_sd15_openpose", dtype=torch.float16, variant="fp16"
).to("cuda")  # or "mps", "xpu", "cpu"
pose_image = load_image("https://huggingface.co/lllyasviel/control_v11p_sd15_openpose/resolve/main/images/control.png")
```

`controlnet` nesnesini [AutoPipelineForText2Image](/docs/diffusers/main/tr/api/pipelines/auto_pipeline#diffusers.AutoPipelineForText2Image) sınıfına iletin ve istem ile poz tahmini görselini sağlayın:

```py
pipeline = AutoPipelineForText2Image.from_pretrained(
	"stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, dtype=torch.float16, variant="fp16"
).to("cuda")  # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(31)
image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", image=pose_image, generator=generator).images[0]
image
```

  
    
    Stable Diffusion v1.5
  
  
    
    Stable Diffusion XL
  
  
    
    Kandinsky 2.2
  
  
    
    ControlNet (pozlama koşullandırması)
  

## Hattın parametrelerini yapılandır

Pipeline'da, bir görüntünün nasıl oluşturulacağını etkileyen yapılandırılabilir bir dizi parametre vardır. Görüntünün çıktı boyutunu değiştirebilir, görüntü kalitesini iyileştirmek için negatif bir istem (prompt) belirleyebilir ve daha fazlasını yapabilirsiniz. Bu bölüm, bu parametrelerin nasıl kullanılacağına daha derinlemesine girer.

### Yükseklik ve genişlik

`height` ve `width` parametreleri, oluşturulan görüntünün yüksekliğini ve genişliğini (piksel cinsinden) kontrol eder. Varsayılan olarak Stable Diffusion v1.5 modeli 512x512 görüntüler üretir ancak bunu 8'in herhangi bir katına değiştirebilirsiniz. Örneğin, dikdörtgen bir görüntü oluşturmak için:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
	"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16"
).to("cuda")  # or "mps", "xpu", "cpu"
image = pipeline(
	"Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", height=768, width=512
).images[0]
image
```

	

> [!WARNING]
> Diğer modellerin varsayılan görüntü boyutları, eğitim veri setindeki görüntü boyutlarına göre farklılık gösterebilir. Örneğin, SDXL'in varsayılan görüntü boyutu 1024x1024'tür ve daha düşük `height` ile `width` değerleri kullanmak daha düşük kaliteli görüntülere yol açabilir. Önce modelin API referansını kontrol etmenizi öneririz!

### Yönlendirme ölçeği

`guidance_scale` parametresi, istemin (prompt) görüntü üretimini ne ölçüde etkilediğini belirler. Daha düşük bir değer, modele istemle daha gevşek ilişkili görüntüler üretme konusunda "yaratıcılık" sağlar. Daha yüksek `guidance_scale` değerleri, modeli isteme daha sıkı uymaya yönlendirir ve bu değer çok yüksekse, üretilen görüntüde bazı artefaktlar gözlemleyebilirsiniz.

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
	"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"
image = pipeline(
	"Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", guidance_scale=3.5
).images[0]
image
```

  
    
    guidance_scale = 2.5
  
  
    
    guidance_scale = 7.5
  
  
    
    guidance_scale = 10.5
  

### Negatif istem

Tıpkı bir istemin (prompt) üretimi yönlendirmesi gibi, bir *negatif istem* (negative prompt) de modelin üretmesini istemediğiniz unsurlardan onu uzak tutar. Bu, "düşük çözünürlük" veya "kötü detaylar" gibi düşük kaliteli görsel özellikleri ortadan kaldırarak genel görsel kalitesini artırmak için yaygın olarak kullanılır. Negatif bir istem, bir görselin içeriğini ve stilini kaldırmak veya değiştirmek için de kullanılabilir.

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
	"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"
image = pipeline(
	prompt="Astronaut in a jungle, cold color palette, muted colors, detailed, 8k",
	negative_prompt="ugly, deformed, disfigured, poor details, bad anatomy",
).images[0]
image
```

  
    
    negative_prompt = "çirkin, deforme, sakat, kötü detaylar, kötü anatomi"
  
  
    
    negative_prompt = "astronaut"
  

### Generator

[`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html#generator) nesnesi, manuel bir tohum belirleyerek bir iş akışında tekrarlanabilirlik sağlar. `Generator` kullanarak görüntü toplulukları oluşturabilir ve [Belirleyici üretimle görüntü kalitesini iyileştirme](reusing_seeds) kılavuzunda ayrıntılı olarak anlatıldığı gibi, bir tohumdan üretilen bir görüntüyü iteratif olarak iyileştirebilirsiniz.

Bir tohum ve aşağıda gösterildiği gibi bir `Generator` ayarlayabilirsiniz. Bir `Generator` ile oluşturulan bir görüntü, her seferinde rastgele yeni bir görüntü oluşturmak yerine aynı sonucu döndürmelidir.

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
	"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"
generator = torch.Generator(device="cuda").manual_seed(30)
image = pipeline(
	"Astronaut in a jungle, cold color palette, muted colors, detailed, 8k",
	generator=generator,
).images[0]
image
```

## Görsel üretimini kontrol et

Bir görüntünün nasıl oluşturulacağı üzerinde, bir hattın (pipeline) parametrelerini yapılandırmak dışında daha fazla kontrol sağlamak için prompt ağırlıklandırması ve ControlNet modelleri gibi çeşitli yollar vardır.

### İstem ağırlıklandırma

Prompt ağırlıklandırma, bir prompttaki kavramların önemini artırarak veya azaltarak bir görüntüdeki belirli özellikleri vurgulamak veya minimize etmek için kullanılan bir tekniktir. Ağırlıklı prompt gömmelemelerini oluşturmanıza yardımcı olmak için [Compel](https://github.com/damian0815/compel) kütüphanesini kullanmanızı öneririz.

> [!TIP]
> [Prompt ağırlıklandırma](weighted_prompts) kılavuzunda prompt gömme (embedding) oluşturma yöntemini öğrenin. Bu örnek, pipeline içinde prompt gömmelerini nasıl kullanacağınız üzerine odaklanmaktadır.

Embedding'leri oluşturduktan sonra bunları pipeline'daki `prompt_embeds` (negatif prompt kullanıyorsanız `negative_prompt_embeds`) parametresine iletebilirsiniz.

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
	"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"
image = pipeline(
	prompt_embeds=prompt_embeds, # generated from Compel
	negative_prompt_embeds=negative_prompt_embeds, # generated from Compel
).images[0]
```

### ControlNet

[ControlNet](#controlnet) bölümünde gördüğünüz gibi bu modeller, ek bir koşullandırma görüntüsü girdisi ekleyerek görüntü üretmenin daha esnek ve doğru bir yolunu sunar. Her ControlNet modeli, ona benzeyen yeni görüntüler üretmek için belirli bir tür koşullandırma görüntüsü üzerinde ön eğitilir. Örneğin, derinlik haritaları üzerinde ön eğitilmiş bir ControlNet modeli alırsanız, modele bir derinlik haritası koşullandırma girdisi olarak verebilir ve model, içindeki uzamsal bilgileri koruyan bir görüntü üretebilir. Bu, derinlik bilgisini bir istemde belirtmekten daha hızlı ve kolaydır. Hatta [Multi-ControlNet](controlnet#multi-controlnet) ile birden fazla koşullandırma girdisini birleştirebilirsiniz!

Kullanabileceğiniz birçok türde koşullandırma girişi vardır ve 🤗 Diffusers, Stable Diffusion ve SDXL modelleri için ControlNet'i destekler. Bu modelleri nasıl kullanabileceğinizi öğrenmek için daha kapsamlı [ControlNet](controlnet) kılavuzuna göz atın.

## Optimize et

Diffusion modelleri büyüktür ve bir görüntünün gürültüsünü iteratif olarak giderme süreci hesaplama açısından pahalı ve yoğun bir işlemdir. Ancak bu, onları kullanmak için güçlü - ya da hatta çok sayıda - GPU'ya erişiminiz gerektiği anlamına gelmez. Diffusion modellerini tüketici ve ücretsiz katman kaynaklarında çalıştırmak için birçok optimizasyon tekniği mevcuttur. Örneğin, GPU belleğini tasarruflu kullanmak ve hızı artırmak için model ağırlıklarını yarım hassasiyette (half-precision) yükleyebilir veya daha fazla bellek tasarrufu sağlamak için tüm modeli GPU'ya aktarabilirsiniz.

PyTorch 2.0, PyTorch 2.0 kullanıyorsanız otomatik olarak etkinleştirilen ve [*scaled dot product attention*](../optimization/fp16#scaled-dot-product-attention) adlı daha bellek verimli bir dikkat mekanizmasını da destekler. Kodunuzu daha da hızlandırmak için bunu [`torch.compile`](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) ile birleştirebilirsiniz:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16").to("cuda")  # or "mps", "xpu", "cpu"
pipeline.unet = torch.compile(pipeline.unet, mode="reduce-overhead", fullgraph=True)
```

Kodunuzu bellek tasarrufu sağlamak ve çıkarımı hızlandırmak için nasıl optimize edeceğinize dair daha fazla ipucu için [Accelerate inference](../optimization/fp16) ve [Reduce memory usage](../optimization/memory) kılavuzlarını okuyun.

