Buckets:

mishig's picture
|
download
raw
12 kB
# Zamanlayıcılar
Bir zamanlayıcı, gürültü azaltma döngüsüne her adımda ne kadar gürültünün kaldırılacağını söyler. Farklı zamanlayıcılar hız ile kalite arasında bir denge kurar.
Bu kılavuz, bir zamanlayıcıyı (scheduler) nasıl yükleyeceğinizi ve zaman adımı (timestep) zamanlamasını, aralıklarını ve sigmalarını nasıl özelleştireceğinizi gösterir.
## Zamanlayıcı seçimi
Checkpoint varsayılanından başlayın. Farklı bir hız veya kalite ödüşlemesi gerekiyorsa yalnızca o zaman değiştirin.
- DPM++ 2M SDE Karras, birçok latent difüzyon kontrol noktası için güçlü ve çok amaçlı bir seçenektir.
- [TCDScheduler](/docs/diffusers/main/tr/api/schedulers/tcd#diffusers.TCDScheduler), damıtılmış modeller için iyi çalışır.
- FlowMatch modelleri (Qwen-Image, Flux ve benzerleri) için [FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/tr/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) veya [FlowMatchHeunDiscreteScheduler](/docs/diffusers/main/tr/api/schedulers/flow_match_heun_discrete#diffusers.FlowMatchHeunDiscreteScheduler) kullanın.
- [EulerDiscreteScheduler](/docs/diffusers/main/tr/api/schedulers/euler#diffusers.EulerDiscreteScheduler) veya [EulerAncestralDiscreteScheduler](/docs/diffusers/main/tr/api/schedulers/euler_ancestral#diffusers.EulerAncestralDiscreteScheduler), anime tarzı görseller için genellikle iyi sonuç verir.
- Kontrol noktası destekliyorsa, az adımlı üretim için LCM UNet veya LoRA ile [LCMScheduler](/docs/diffusers/main/tr/api/schedulers/lcm#diffusers.LCMScheduler).
## Zamanlayıcıların yüklenmesi
> [!TIP]
> Qwen-Image ve Flux gibi flow-matching modelleri varsayılan olarak [FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/tr/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) ile birlikte gelir. Bilinçli olarak deneysel bir çalışma yapmıyorsanız bu scheduler'ı kullanmaya devam edin. Yalnızca değiştirilecek scheduler'ın checkpoint ile uyumlu olduğu durumlarda [from_config()](/docs/diffusers/main/tr/api/configuration#diffusers.ConfigMixin.from_config) ile değiştirin.
Schedulers yalnızca yapılandırma içerir ve ağırlık tensörleri taşımaz. Yüklenen yapılandırmayı incelemek için bir pipeline üzerinde `.scheduler` özniteliğine erişin.
```py
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.scheduler
```
Yüklenmiş bir pipeline'da zamanlayıcıları değiştirmek için, `num_train_timesteps` ve ilgili alanların hizalı kalmasını sağlamak üzere mevcut zamanlayıcı yapılandırmasıyla [from_config()](/docs/diffusers/main/tr/api/configuration#diffusers.ConfigMixin.from_config) kullanın. FlowMatch kontrol noktaları (Qwen-Image, Flux ve benzerleri) için, bilinçli olarak uyumlu bir alternatifle deney yapmıyorsanız [FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/tr/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) kullanmaya devam edin.
```py
from diffusers import DPMSolverMultistepScheduler
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)
```
Ayrıca bir zamanlayıcı yapılandırmasını Hub'dan [from_pretrained()](/docs/diffusers/main/tr/api/schedulers/overview#diffusers.SchedulerMixin.from_pretrained) ile yükleyebilir ve `scheduler` üzerinden [from_pretrained()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) içine aktarabilirsiniz.
```py
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
dpm = DPMSolverMultistepScheduler.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler"
)
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
scheduler=dpm,
dtype=torch.float16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
pipeline.scheduler
```
## Zaman adımı zaman çizelgeleri
Timestep veya gürültü zamanlaması, gürültünün gürültüden arındırma süreci boyunca nasıl dağıtılacağını belirler. Zamanlama doğrusal olabilir ya da başlangıca ya da sona daha yoğunlaşmış olabilir. Zamanlayıcının varsayılan yapılandırmasından üretilen, önceden hesaplanmış bir gürültü seviyeleri dizisidir ancak diğer zamanlamaların kullanılacak şekilde özelleştirilebilir.
```text
linear (even steps) AYS (denser where it matters)
noise noise
^ ^
| * | *
| * | *
| * | **
| * | ***
| * | **
| * | *
| * | *
+-----------------> step +-----------------> step
```
> [!TIP]
> Özel `timesteps` yalnızca ilgili zamanlayıcının `set_timesteps` metodu bu argümanı kabul ediyorsa çalışır (pipeline'lar imzayı `retrieve_timesteps` üzerinden kontrol eder ve aksi halde `ValueError` fırlatır). Bunları iletmeden önce zamanlayıcının API sayfasını veya `set_timesteps` imzasını kontrol edin.
Aşağıdaki örnek, 10 adımda yüksek kaliteli bir görüntü üretebilen ve bu sayede üretimi önemli ölçüde hızlandırıp hesaplama süresini azaltan [Align Your Steps (AYS)](https://research.nvidia.com/labs/toronto-ai/AlignYourSteps/) zamanlamasını kullanır.
Zaman çizelgesini içe aktarın ve hattın `timesteps` argümanına iletin.
```py
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.schedulers import AysSchedules
sampling_schedule = AysSchedules["StableDiffusionXLTimesteps"]
print(sampling_schedule)
# [999, 845, 730, 587, 443, 310, 193, 116, 53, 13]
pipeline = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
pipeline.scheduler.config, algorithm_type="sde-dpmsolver++"
)
prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
prompt=prompt,
negative_prompt="",
timesteps=sampling_schedule,
).images[0]
```
AYS zaman adımı zamanlaması 10 adım
Doğrusal aralıklı zaman adımı zamanlaması 10 adım
Doğrusal aralıklı zaman adımı zamanlaması 25 adım
Eski kontrol noktalarında v-prediction/zero-SNR yeniden ölçekleme için bkz. [Legacy checkpoints](./legacy_checkpoints#rescaling-schedules).
## Zaman adımı aralığı
Timestep spacing, zamanlama planından örnek alınacak belirli *t* adımlarına atıfta bulunur. Diffusers aşağıda gösterilen üç spacing türü sağlar.
| boşluk stratejisi | aralık hesaplama | örnek zaman adımları |
|---|---|---|
| `leading` | eşit aralıklı adımlar | `[900, 800, 700, ..., 100, 0]` |
| `linspace` | ilk ve son adımları dahil edin ve kalan ara adımları eşit olarak bölün | `[1000, 888.89, 777.78, ..., 111.11, 0]` |
| `trailing` | son adımı dahil edin ve kalan ara adımları sondan başlayarak eşit olarak bölün | `[999, 899, 799, 699, 599, 499, 399, 299, 199, 99]` |
Aralama stratejisini zamanlayıcıdaki `timestep_spacing` argümanına iletin.
> [!TIP]
> `trailing` stratejisi genellikle daha az adımda daha fazla detaya sahip, daha yüksek kaliteli görseller üretir, ancak daha standart adım değerleri için kalite farkı o kadar belirgin değildir.
```py
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
pipeline = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
pipeline.scheduler.config, timestep_spacing="trailing"
)
prompt = "A cinematic shot of a cute little black cat sitting on a pumpkin at night"
image = pipeline(
prompt=prompt,
negative_prompt="",
num_inference_steps=5,
).images[0]
image
```
5 adım sonrası son boşluk
5 adım sonrası önde boşluk
## Sigmalar
Sigmas, zaman çizelgesi tarafından tanımlandığı üzere bir örneğin belirli bir adımda ne kadar gürültülü olduğunun bir ölçüsüdür. Özel `sigmas` kullanıldığında, `timesteps` varsayılan zamanlayıcı yapılandırması yerine bu değerlerden hesaplanır.
```text
step: 0 1 2 3 4
sigma: σ0 > σ1 > σ2 > σ3 > σ4 ≈ 0
high noise ---> clean sample
```
> [!TIP]
> Özel `sigmas` değerleri, yalnızca ilgili zamanlayıcının `set_timesteps` metodu bu argümanı kabul ediyorsa çalışır (pipeline'lar imzayı `retrieve_timesteps` üzerinden kontrol eder ve aksi halde `ValueError` fırlatır). Bunları iletmeden önce zamanlayıcının API sayfasını veya `set_timesteps` imzasını kontrol edin.
Özel sigmaları pipeline'da `sigmas` argümanına iletin. Aşağıdaki örnek, 10 adımlı AYS zamanlamasındaki [sigmas](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py) değerlerini kullanır.
```py
import torch
from diffusers import DiffusionPipeline, EulerDiscreteScheduler
from diffusers.schedulers import AysSchedules
pipeline = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
dtype=torch.float16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)
sigmas = AysSchedules["StableDiffusionXLSigmas"]
prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
prompt=prompt,
negative_prompt="",
sigmas=sigmas,
).images[0]
```
### Karras sigmaları
[Karras sigmas](https://huggingface.co/papers/2206.00364), yapısal yeniden inşanın kritik olduğu dizinin ortasında sigmaları daha yoğun bir şekilde kümeleyerek ve gürültü değişimlerinin daha az etkili olduğu başlangıç ve sonda daha az sigma kullanarak, daha verimli örneklemeye yönelik gürültü zamanlamasını yeniden örnekler. Bu, üretilen bir görüntüdeki detay seviyesini artırabilir.
```text
default σ: * * * * * * * * even-ish
Karras σ: * * * * * * * denser mid, sparser ends
|---structure---|
```
Bunu etkinleştirmek için zamanlayıcıda `use_karras_sigmas=True` değerini ayarlayın.
```py
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
pipeline = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
pipeline.scheduler.config,
algorithm_type="sde-dpmsolver++",
use_karras_sigmas=True,
)
prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
prompt=prompt,
negative_prompt="",
num_inference_steps=20,
).images[0]
```
Karras sigmaları etkin
Karras sigmaları devre dışı
Karras sigmalarını destekleyen zamanlayıcıların listesi için zamanlayıcı API [genel bakışına](../api/schedulers/overview) bakın. Yalnızca Karras sigmalarıyla eğitilmiş modeller için kullanılmalıdır.
## Sonraki adımlar
- Gürültü zamanlamasını sıfır SNR'yi uygulamak için yeniden ölçekleme hakkında daha fazla ayrıntı için [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) makalesini okuyun.

Xet Storage Details

Size:
12 kB
·
Xet hash:
a26852c0b178e3b7cccb39feb7b5ddaacb656e6f5973bfb1f0e400f3d2a42fa4

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