Diffusers documentation
DDIMScheduler
DDIMScheduler
Jiaming Song, Chenlin Meng ve Stefano Ermon tarafından Denoising Diffusion Implicit Models (DDIM).
Makalenin özeti şudur:
Gürültü azaltma difüzyon olasılıksal modelleri (DDPM), adversarial eğitim gerektirmeden yüksek kaliteli görüntü üretimi sağlamış olmakla birlikte, bir örnek oluşturmak için Markov zincirinin birçok adım boyunca simüle edilmesini gerektirir. Örnekleme hızını artırmak için, DDPM'lerle aynı eğitim prosedürüne sahip, daha verimli bir iteratif implisit olasılıksal model sınıfı olan gürültü azaltma difüzyon implisit modellerini (DDIM) sunuyoruz. DDPM'lerde üretici süreç, Markovian difüzyon sürecinin tersi olarak tanımlanır. Aynı eğitim hedefine yol açan, ancak ters sürecinden örnek almak çok daha hızlı olabilecek bir Markov olmayan difüzyon süreci sınıfı oluşturuyoruz. DDIM'lerin, DDPM'lere kıyasla duvar saati süresi açısından 10× ile 50× daha hızlı yüksek kaliteli örnekler üretebildiğini, hesaplama ile örnek kalitesi arasında ödünleşim yapmamıza olanak tanıdığını ve gizli uzayda doğrudan anlamlı görüntü interpolasyonu gerçekleştirebildiğini deneysel olarak gösteriyoruz.
Bu makalenin orijinal kod tabanı ermongroup/ddim adresinde bulunabilir ve yazarla tsong.me üzerinden iletişime geçebilirsiniz.
İpuçları
Common Diffusion Noise Schedules and Sample Steps are Flawed makalesi, Stable Diffusion için eğitim ve çıkarım ayarları arasındaki uyumsuzluğun, çıkarım sırasında suboptimal üretim sonuçlarına yol açtığını iddia etmektedir. Bunu düzeltmek için yazarlar şunu önermektedir:
🧪 Bu deneysel bir özelliktir!
- sıfır son sinyal-gürültü oranını (SNR) uygulamak için gürültü zamanlamasını yeniden ölçekleyin
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, rescale_betas_zero_snr=True)v_predictionile bir model eğitin (train_text_to_image.py veya train_text_to_image_lora.py betiklerine aşağıdaki argümanı ekleyin)
--prediction_type="v_prediction"- örnekleme birimini her zaman son zaman adımından başlatacak şekilde değiştirin
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")- aşırı pozlanmayı önlemek için classifier-free guidance'ı yeniden ölçekle
image = pipe(prompt, guidance_rescale=0.7).images[0]Örneğin:
from diffusers import DiffusionPipeline, DDIMScheduler
import torch
pipe = DiffusionPipeline.from_pretrained("ptx0/pseudo-journey-v2", dtype=torch.float16)
pipe.scheduler = DDIMScheduler.from_config(
pipe.scheduler.config, rescale_betas_zero_snr=True, timestep_spacing="trailing"
)
pipe.to("cuda") # or "mps", "xpu", "cpu"
prompt = "A lion in galaxies, spirals, nebulae, stars, smoke, iridescent, intricate detail, octane render, 8k"
image = pipe(prompt, guidance_rescale=0.7).images[0]
imageDDIMScheduler
sınıf diffusers.DDIMScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Noneclip_sample: bool = Trueset_alpha_to_one: bool = Truesteps_offset: int = 0prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995clip_sample_range: float = 1.0sample_max_value: float = 1.0timestep_spacing: typing.Literal['leading', 'trailing', 'linspace'] = 'leading'rescale_betas_zero_snr: bool = False )
Parametreler
- num_train_timesteps (
int, varsayılan 1000) — Modelin eğitileceği difüzyon adım sayısı. - beta_start (
float, varsayılan 0.0001) — Çıkarımın başlangıçbetadeğeri. - beta_end (
float, varsayılan 0.02) — Sonbetadeğeri. - beta_schedule (
Literal["linear", "scaled_linear", "squaredcos_cap_v2"], varsayılan"linear") — Beta zamanlaması, modelin adım atması için beta aralığını beta dizisine eşleyen bir haritadır."linear","scaled_linear"veya"squaredcos_cap_v2"değerlerinden biri olmalıdır. - trained_betas (
np.ndarray, optional) — Pass an array of betas directly to the constructor to bypassbeta_startandbeta_end. - clip_sample (
bool, varsayılanTrue) — Sayısal kararlılık için tahmin edilen örneği kırpın. - clip_sample_range (
float, varsayılan 1.0) — Örnek kırpma için maksimum büyüklük. Yalnızcaclip_sample=Trueolduğunda geçerlidir. - set_alpha_to_one (
bool, varsayılanTrue) — Her difüzyon adımı, o adımdaki ve bir önceki adımdaki alfa çarpım değerini kullanır. Son adım için bir önceki alfa yoktur. Bu seçenekTrueolduğunda bir önceki alfa çarpımı1olarak sabitlenir, aksi halde 0. adımdaki alfa değeri kullanılır. - steps_offset (
int, varsayılan 0) — Bazı model ailelerinin gerektirdiği gibi, çıkarım adımlarına eklenen bir ofset. - prediction_type (
Literal["epsilon", "sample", "v_prediction"], varsayılan"epsilon") — Zamanlayıcı işlevinin tahmin türü."epsilon"(difüzyon sürecinin gürültüsünü tahmin eder),"sample"(gürültülü örneği doğrudan tahmin eder) veya"v_prediction"(Imagen Video makalesinin 2.4 bölümüne bakın) değerlerinden biri olmalıdır. - thresholding (
bool, varsayılanFalse) — “Dinamik eşikleme” yönteminin kullanılıp kullanılmayacağı. Bu, Stable Diffusion gibi gizli uzay difüzyon modelleri için uygun değildir. - dynamic_thresholding_ratio (
float, varsayılan 0.995) — Dinik eşikleme yöntemi için oran. Yalnızcathresholding=Trueolduğunda geçerlidir. - sample_max_value (
float, varsayılan 1.0) — Dinik eşikleme için eşik değeri. Yalnızcathresholding=Trueolduğunda geçerlidir. - timestep_spacing (
Literal["leading", "trailing", "linspace"], varsayılan"leading") — Adımların ölçeklendirilme biçimi."leading","trailing"veya"linspace"değerlerinden biri olmalıdır. Daha fazla bilgi için Common Diffusion Noise Schedules and Sample Steps are Flawed makalesindeki Tablo 2'ye bakın. - rescale_betas_zero_snr (
bool, varsayılanFalse) — Betalara sıfır son SNR değerine sahip olacak şekilde yeniden ölçeklendirme uygulanıp uygulanmayacağı. Bu, modelin orta parlaklıktaki örneklerle sınırlı kalmak yerine çok parlak ve çok karanlık örnekler üretmesini sağlar.--offset_noiseile gevşek bir şekilde ilişkilidir.
DDIMScheduler, gürültü azaltma difüzyon olasılıksal modellerinde (DDPM) tanıtılan gürültü azaltma işlemini, Markov olmayan yönlendirme ile genişletir.
Bu model SchedulerMixin ve ConfigMixin sınıflarından devralır. Kütüphanenin tüm zamanlayıcılar için yükleme ve kaydetme gibi genel yöntemleri uyguladığı üst sınıf belgelendirmesini kontrol edin.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Her zaman adımındaki gürültü büyüklüğüne göre orijinal örneklerin gürültü ekleyin (bu, ileri difüzyon sürecidir).
get_velocity
< source >( sample: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Hız formülüne göre örnek ve gürültüden hız tahminini hesaplayın.
scale_model_input
< source >( sample: Tensortimestep: int = None ) → torch.Tensor
Gürültüden arındırma modelinin girdisinin mevcut zaman adımına bağlı olarak ölçeklenmesi gereken zamanlayıcılarla değiştirilebilirliği sağlar.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device] = None )
Parametreler
- num_inference_steps (
int) — Önceden eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı. - device (
str | torch.device, isteğe bağlı) — Adımlar için kullanılacak cihaz.
Yükseltilen
ValueError
ValueError—num_inference_steps,self.config.num_train_timesteps'ten büyükse.
Difüzyon zinciri için kullanılan ayrık zaman adımlarını ayarlar (çalıştırılmadan önce çıkarım yapılmalıdır).
adım
< source >( model_output: Tensortimestep: intsample: Tensoreta: float = 0.0use_clipped_model_output: bool = Falsegenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → DDIMSchedulerOutput or tuple
Parametreler
- model_output (
torch.Tensor) — Öğrenen difüzyon modelinden gelen doğrudan çıktı. - timestep (
int) — Difüzyon zincirindeki mevcut ayrık zaman adımı. - sample (
torch.Tensor) — Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği. - eta (
float, isteğe bağlı, varsayılan 0.0) — Difüzyon adımında eklenen gürültünün ağırlığı. 0 değeri DDIM'e (deterministik) ve 1 değeri DDPM'ye (tam olarak stokastik) karşılık gelir. - use_clipped_model_output (
bool, isteğe bağlı, varsayılanFalse) —Trueise, kırpılmış tahmini orijinal örnekten “düzeltilmiş”model_outputhesaplanır.self.config.clip_sampleTrueolduğunda tahmini orijinal örnek [-1, 1] aralığına kırpıldığı için bu işlem gereklidir. Kırpma işlemi gerçekleşmediyse, “düzeltilmiş”model_outputgirdi olarak sağlananla aynı olur veuse_clipped_model_outputherhangi bir etki göstermez. - generator (
torch.Generator, isteğe bağlı) — Tekrarlanabilir örneklemeler için rastgele sayı üreteci. - variance_noise (
torch.Tensor, isteğe bağlı) — Varyans için gürültüyü doğrudan sağlayarakgeneratorile gürültü üretmenin alternatifi.CycleDiffusiongibi yöntemler için faydalıdır. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — DDIMSchedulerOutput veyatupledöndürülüp döndürülmemeye karar verir.
Dönüş değeri
DDIMSchedulerOutput veya tuple
return_dict True ise DDIMSchedulerOutput döndürülür, aksi halde ilk öğesi örnek tensörü olan bir tuple döndürülür.
Önceki zaman adımındaki örneği SDE'yi tersine çevirerek tahmin edin. Bu işlev, öğrenilen model çıktılarını (en sık tahmin edilen gürültüyü) kullanarak difüzyon sürecini ilerletir.
DDIMSchedulerOutput
sınıf diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )
Parametreler
- prev_sample (görseller için
torch.Tensor, şekli(batch_size, num_channels, height, width)) — Önceki zaman adımının hesaplanan örneği(x_{t-1}).prev_sample, gürültü azaltma döngüsünde bir sonraki model girdisi olarak kullanılmalıdır. - pred_original_sample (görseller için
(batch_size, num_channels, height, width)biçimindetorch.Tensor) — Mevcut zaman adımındaki model çıktısına dayalı olarak tahmin edilen gürültüsü azaltılmış örnek(x_{0}).pred_original_sample, ilerlemeyi önizlemek veya yönlendirme için kullanılabilir.
Zamanlayıcının step işlevi çıktısı için çıktı sınıfı.