Buckets:
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, damıtılmış modeller için iyi çalışır.
- FlowMatch modelleri (Qwen-Image, Flux ve benzerleri) için FlowMatchEulerDiscreteScheduler veya FlowMatchHeunDiscreteScheduler kullanın.
- EulerDiscreteScheduler veya 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.
Zamanlayıcıların yüklenmesi
Qwen-Image ve Flux gibi flow-matching modelleri varsayılan olarak 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() 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.
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() kullanın. FlowMatch kontrol noktaları (Qwen-Image, Flux ve benzerleri) için, bilinçli olarak uyumlu bir alternatifle deney yapmıyorsanız FlowMatchEulerDiscreteScheduler kullanmaya devam edin.
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() ile yükleyebilir ve scheduler üzerinden from_pretrained() içine aktarabilirsiniz.
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.
linear (even steps) AYS (denser where it matters)
noise noise
^ ^
| * | *
| * | *
| * | **
| * | ***
| * | **
| * | *
| * | *
+-----------------> step +-----------------> step
Özel
timestepsyalnızca ilgili zamanlayıcınınset_timestepsmetodu bu argümanı kabul ediyorsa çalışır (pipeline'lar imzayıretrieve_timestepsüzerinden kontrol eder ve aksi haldeValueErrorfırlatır). Bunları iletmeden önce zamanlayıcının API sayfasını veyaset_timestepsimzası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) zamanlamasını kullanır.
Zaman çizelgesini içe aktarın ve hattın timesteps argümanına iletin.
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.
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.
trailingstratejisi 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.
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.
step: 0 1 2 3 4
sigma: σ0 > σ1 > σ2 > σ3 > σ4 ≈ 0
high noise ---> clean sample
Özel
sigmasdeğerleri, yalnızca ilgili zamanlayıcınınset_timestepsmetodu bu argümanı kabul ediyorsa çalışır (pipeline'lar imzayıretrieve_timestepsüzerinden kontrol eder ve aksi haldeValueErrorfırlatır). Bunları iletmeden önce zamanlayıcının API sayfasını veyaset_timestepsimzasını kontrol edin.
Özel sigmaları pipeline'da sigmas argümanına iletin. Aşağıdaki örnek, 10 adımlı AYS zamanlamasındaki sigmas değerlerini kullanır.
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, 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.
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.
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 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 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.