Buckets:

mishig's picture
|
download
raw
17 kB

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')

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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)

Kaynak

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.