Buckets:
DEISMultistepScheduler
Diffusion Exponential Integrator Sampler (DEIS), Qinsheng Zhang ve Yongxin Chen tarafından Fast Sampling of Diffusion Models with Exponential Integrator makalesinde önerilmiştir. DEISMultistepScheduler, difüzyon sıradan diferansiyel denklemleri (ODE) için hızlı, yüksek mertebeden bir çözücüdür.
Bu uygulama, DEIS makalesindeki orijinal doğrusal t uzayı yerine log-rho uzayındaki polinom sığdırma formülünü değiştirir. Bu değişiklik, sayısal çözücüye başvurmak yerine üstel çok adımlı güncelleme için kapalı form katsayıları sağlar.
Makalenin özeti şudur:
Son birkaç yıl, üretken modelleme görevlerinde yüksek sadakatli örnekler üretmede Difüzyon modellerinin(DM) büyük başarısına tanık oldu. DM'nin önemli bir kısıtlaması, istenen doğruluğa ulaşmak için öğrenilen difüzyon sürecinin genellikle yüzlerce ile binlerce zaman ayrıklaştırma adımını gerektiren, meşhur yavaş örnek alma prosedürüdür. Amacımız, yüksek örnek kalitesini korurken çok daha az adımla DM'ler için hızlı bir örnek alma yöntemi geliştirmektir. Bu amaçla, DM'lerdeki örnek alma prosedürünü sistematik olarak analiz ediyoruz ve örnek kalitesini etkileyen ana faktörleri belirliyoruz; bunlar arasında ayrıklaştırma yöntemi en kritik olanıdır. Öğrenilen difüzyon sürecini dikkatlice inceleyerek Diffusion Exponential Integrator Sampler(DEIS) öneriyoruz. Bu yöntem, sıradan diferansiyel denklemleri (ODE) ayrıklaştırmak için tasarlanan Exponential Integrator'a dayanır ve öğrenilen difüzyon sürecinin yarı doğrusal yapısından yararlanarak ayrıklaştırma hatasını azaltır. Önerilen yöntem herhangi bir DM'ye uygulanabilir ve en fazla 10 adımda yüksek sadakatli örnekler üretebilir. Deneylerimizde, tek bir A6000 GPU üzerinde CIFAR10'dan 50k görsel üretmek yaklaşık 3 dakika sürmektedir. Ayrıca, önceden eğitilmiş DM'leri doğrudan kullanarak, skor fonksiyonu değerlendirmesi~(NFE) sayısı kısıtlı olduğunda, örneğin CIFAR10'da 10 NFE ile 4.17 FID, 3.37 FID ve yalnızca 15 NFE ile 9.74 IS, en iyi örnek alma performansını elde ediyoruz. Kod bu https URL adresinde mevcuttur.
İpuçları
solver_order'un 2 veya 3 olarak ayarlanması önerilir; solver_order=1 ise DDIMScheduler'a eşdeğerdir.
Imagen'den dinik eşikleme desteklenmektedir ve piksel uzayında difüzyon modelleri için dinamik eşikleme kullanmak üzere thresholding=True ayarlayabilirsiniz.
DEISMultistepScheduler[[diffusers.DEISMultistepScheduler]]
diffusers.DEISMultistepScheduler[[diffusers.DEISMultistepScheduler]]
diffusers.DEISMultistepScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, solver_order: int = 2, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, algorithm_type: typing.Literal['deis'] = 'deis', solver_type: typing.Literal['logrho'] = 'logrho', lower_order_final: bool = True, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, use_flow_sigmas: bool = False, flow_shift: float = 1.0, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace', steps_offset: int = 0, use_dynamic_shifting: bool = False, time_shift_type: typing.Literal['exponential'] = 'exponential')
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ıç beta değeri.
beta_end (float, varsayılan 0.02) : Son beta değeri.
beta_schedule ("linear", "scaled_linear" veya "squaredcos_cap_v2", varsayılan olarak "linear") : Beta zamanlaması, modelin adım atması için beta aralığından beta dizisine bir eşleme. linear, scaled_linear veya squaredcos_cap_v2 seçeneklerinden birini seçin.
trained_betas (np.ndarray veya list[float], isteğe bağlı) : beta_start ve beta_end değerlerini atlamak için beta dizisini doğrudan yapılandırıcıya iletin.
solver_order (int, varsayılan 2) : 1 veya 2 veya 3 olabilecek DEIS derecesi. Rehberli örneklemeler için solver_order=2, koşulsuz örneklemeler için solver_order=3 kullanılması önerilir.
prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon") : Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_prediction`.
thresholding (bool, varsayılan False) : "Dinik eşikleme" yönteminin kullanılıp kullanılmayacağını belirtir. Bu, Stable Diffusion gibi gizli uzay difüzyon modelleri için uygun değildir.
dynamic_thresholding_ratio (float, varsayılan 0.995) : Dinamik eşikleme yöntemi için oran. Yalnızca thresholding=True olduğunda geçerlidir.
sample_max_value (float, varsayılan 1.0) : Dinamik eşikleme için eşik değeri. Yalnızca thresholding=True olduğunda geçerlidir.
algorithm_type ("deis", varsayılan "deis") : Çözücü için algoritma türü.
solver_type ("logrho", varsayılan "logrho") : DEIS için çözücü türü.
lower_order_final (bool, varsayılan True) : Son adımlarda düşük dereceli çözücülerin kullanılıp kullanılmayacağı. Yalnızca 15'ten az çıkarım adımı için geçerlidir.
use_karras_sigmas (bool, isteğe bağlı, varsayılan False) : Örnekleme sürecinde gürültü zamanlamasındaki adım boyutları için Karras sigmalarının kullanılıp kullanılmayacağını belirtir. True ise, sigmalar {σi} gürültü seviyeleri dizisine göre belirlenir.
use_exponential_sigmas (bool, isteğe bağlı, varsayılan False) : Örnekleme sürecinde gürültü zamanlamasındaki adım boyutları için üstel sigmaların kullanılıp kullanılmayacağını belirtir.
use_beta_sigmas (bool, isteğe bağlı, varsayılan False) : Örnekleme sürecinde gürültü zamanlamasında adım boyutları için beta sigmaların kullanılıp kullanılmayacağını belirtir. Daha fazla bilgi için Beta Sampling is All You Need makalesine bakın.
use_flow_sigmas (bool, isteğe bağlı, varsayılan False) : Örnekleme sürecinde gürültü zamanlamasında adım boyutları için akış sigmalarının kullanılıp kullanılmayacağı.
flow_shift (float, isteğe bağlı, varsayılan 1.0) : Akış tabanlı modeller için akış kaydırma parametresi.
timestep_spacing ("linspace", "leading" veya "trailing", varsayılan olarak "linspace") : Zaman adımlarının ölçeklendirilme yöntemi. Daha fazla bilgi için Common Diffusion Noise Schedules and Sample Steps are Flawed makalesindeki Tablo 2'ye bakın.
steps_offset (int, varsayılan 0) : Bazı model ailelerinin gerektirdiği gibi, çıkarım adımlarına eklenen bir ofset.
use_dynamic_shifting (bool, varsayılan False) : Gürültü zamanlaması için dinamik kaydırma kullanılıp kullanılmayacağı.
time_shift_type ("exponential", varsayılan olarak "exponential") : Uygulanacak zaman kaydırma türü.
DEISMultistepScheduler, difüzyon sıradan diferansiyel denklemleri (ODE) için hızlı yüksek mertebeden bir çözücüdür.
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[[diffusers.DEISMultistepScheduler.add_noise]]
add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor)
Parametreler:
original_samples (torch.Tensor) : Gürültüsüz orijinal örnekler.
noise (torch.Tensor) : Örneklere eklenecek gürültü.
timesteps (torch.IntTensor) : Örneklerin gürültü eklenmesi için kullanılacak zaman adımları.
Dönüş: torch.Tensor
Gürültülü örnekler.
Belirtilen zaman adımlarındaki gürültü planına göre orijinal örneklerin gürültü ekleyin.
convert_model_output[[diffusers.DEISMultistepScheduler.convert_model_output]]
convert_model_output(model_output: Tensor, *args, sample: Tensor = None, **kwargs)
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.
Dönüş: torch.Tensor
Dönüştürülen model çıktısı.
Model çıktısını DEIS algoritmasının ihtiyaç duyduğu ilgili tipe dönüştürün.
deis_first_order_update[[diffusers.DEISMultistepScheduler.deis_first_order_update]]
deis_first_order_update(model_output: Tensor, *args, sample: Tensor = None, **kwargs)
Parametreler:
model_output (torch.Tensor) : Öğrenen difüzyon modelinden gelen doğrudan çıktı.
timestep (int) : Difüzyon zincirindeki mevcut ayrık zaman adımı.
prev_timestep (int) : Difüzyon zincirindeki bir önceki ayrık zaman adımı.
sample (torch.Tensor) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.
Dönüş: torch.Tensor
Önceki zaman adımındaki örnek tensör.
Birinci dereceden DEIS için bir adım (DDIM ile eşdeğer).
index_for_timestep[[diffusers.DEISMultistepScheduler.index_for_timestep]]
index_for_timestep(timestep: typing.Union[int, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)
Parametreler:
timestep (int veya torch.Tensor) : İndeksini bulmak istediğiniz zaman adımı.
schedule_timesteps (torch.Tensor, isteğe bağlı) : Aranacak zaman adımı zamanlaması. None ise self.timesteps kullanılır.
Dönüş: int
Zaman adımı planındaki zaman adımının indeksi.
Zamanlamadaki (schedule) belirli bir zaman adımının (timestep) indeksini bulun.
multistep_deis_second_order_update[[diffusers.DEISMultistepScheduler.multistep_deis_second_order_update]]
multistep_deis_second_order_update(model_output_list: list, *args, sample: Tensor = None, **kwargs)
Parametreler:
model_output_list (list[torch.Tensor]) : Öğrenen difüzyon modelinin mevcut ve sonraki zaman adımlarındaki doğrudan çıktıları.
sample (torch.Tensor) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.
Dönüş: torch.Tensor
Önceki zaman adımındaki örnek tensör.
İkinci mertebeden çok adımlı DEIS için bir adım.
multistep_deis_third_order_update[[diffusers.DEISMultistepScheduler.multistep_deis_third_order_update]]
multistep_deis_third_order_update(model_output_list: list, *args, sample: Tensor = None, **kwargs)
Parametreler:
model_output_list (list[torch.Tensor]) : Öğrenen difüzyon modelinin mevcut ve sonraki zaman adımlarındaki doğrudan çıktıları.
sample (torch.Tensor) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.
Dönüş: torch.Tensor
Önceki zaman adımındaki örnek tensör.
Üçüncü dereceden çok adımlı DEIS için bir adım.
scale_model_input[[diffusers.DEISMultistepScheduler.scale_model_input]]
scale_model_input(sample: Tensor, *args, **kwargs)
Parametreler:
sample (torch.Tensor) : Girdi örneği.
Dönüş: torch.Tensor
Ölçeklendirilmiş bir girdi örneği.
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_begin_index[[diffusers.DEISMultistepScheduler.set_begin_index]]
set_begin_index(begin_index: int = 0)
Parametreler:
begin_index (int, varsayılan 0) : Zamanlayıcının başlangıç indeksi.
Zamanlayıcının başlangıç indeksini ayarlar. Bu işlev, çıkarım (inference) öncesinde pipeline'dan çalıştırılmalıdır.
set_timesteps[[diffusers.DEISMultistepScheduler.set_timesteps]]
set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device] = None, mu: float | None = None)
Parametreler:
num_inference_steps (int) : Ön eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı.
device (str veya torch.device, opsiyonel) : Timestep'lerin taşınacağı cihaz. None ise timestep'ler taşınmaz.
mu (float, isteğe bağlı) : Dinamik kaydırma için mu parametresi. Yalnızca use_dynamic_shifting=True ve time_shift_type="exponential" olduğunda kullanılır.
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[[diffusers.DEISMultistepScheduler.step]]
step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: Tensor, return_dict: bool = True)
Parametreler:
model_output (torch.Tensor) : Öğrenen difüzyon modelinden gelen doğrudan çıktı.
timestep (int veya torch.Tensor) : 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.
return_dict (bool, varsayılan True) : SchedulerOutput mu yoksa tuple mu döndürüleceğini belirtir.
Dönüş: SchedulerOutput veya tuple
return_dict True ise SchedulerOutput döndürülür, aksi halde bir tuple döndürülür ve bu tuple'ın ilk öğesi örnek tensörüdür.
Önceki zaman adımından örneklemeyi SDE'yi tersine çevirerek tahmin edin. Bu fonksiyon, örneklemeyi çok adımlı DEIS ile ilerletir.
SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]
diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]
diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)
Parametreler:
prev_sample (torch.Tensor, görüntüler için (batch_size, num_channels, height, width) boyutunda) : Önceki zaman adımının hesaplanan (x_{t-1}) örneği. prev_sample, gürültü azaltma döngüsünde bir sonraki model girdisi olarak kullanılmalıdır.
Bir zamanlayıcının step işlevinin çıktısı için temel sınıf.
Xet Storage Details
- Size:
- 17 kB
- Xet hash:
- 08537bce1b7d0f09729b4bbe0a41bf1488f2a51f9067c924e1fa2e54ed0d2efa
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.