Diffusers documentation

UniPCMultistepScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

UniPCMultistepScheduler

UniPCMultistepScheduler은 diffusion 모델의 빠른 샘플링을 위해 설계된 training-free 프레임워크입니다. Wenliang Zhao, Lujia Bai, Yongming Rao, Jie Zhou, Jiwen Lu가 UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models에서 소개했습니다.

UniPC는 통합된 해석적 형태를 공유하고 임의의 차수를 지원하는 corrector(UniC)와 predictor(UniP)로 구성됩니다. UniPC는 설계상 모델에 종속적이지 않으며, 무조건/조건부 샘플링에서 픽셀 공간/잠재 공간 DPM을 지원합니다. 또한 노이즈 예측 모델과 데이터 예측 모델 모두에 적용할 수 있습니다. corrector UniC는 기존에 사용 가능한 어떤 solver 이후에도 적용하여 정확도의 차수를 높일 수 있습니다.

해당 논문의 초록은 다음과 같습니다:

확산 확률 모델(DPM)은 고해상도 이미지 합성에서 매우 유망한 능력을 입증했습니다. 그러나 DPM에서 샘플링하는 과정은 노이즈 제거 네트워크의 여러 번의 평가로 인해 시간이 많이 소요되며, DPM의 샘플링을 가속화하는 것이 점점 더 중요해지고 있습니다. 빠른 샘플러 설계에 대한 최근의 진전에도 불구하고, 적은 단계(예: <10)가 선호되는 많은 응용 분야에서 기존 방법들은 여전히 만족스러운 이미지를 생성하지 못합니다. 이 논문에서는 기존 DPM 샘플러 이후에 적용하여 추가적인 모델 평가 없이 정확도의 차수를 높일 수 있는 통합 보정기(UniC)를 개발하고, 부수적으로 임의의 차수를 지원하는 통합 예측기(UniP)를 유도합니다. UniP와 UniC를 결합하여, 임의의 차수에 대해 통합된 해석적 형태를 가지며 이전 방법들보다 샘플링 품질을 크게 향상시킬 수 있는 DPM의 빠른 샘플링을 위한 통합 예측기-보정기 프레임워크인 UniPC를 제안합니다. 특히 극도로 적은 단계에서 그 효과가 두드러집니다. 픽셀 공간과 잠재 공간 DPM을 사용한 무조건 샘플링과 조건부 샘플링을 포함한 광범위한 실험을 통해 우리의 방법을 평가했습니다. 우리의 UniPC는 단 10회의 함수 평가만으로 CIFAR10(무조건)에서 3.87 FID, ImageNet 256×256(조건부)에서 7.51 FID를 달성할 수 있습니다. 코드는 이 https URL에서 사용할 수 있습니다.

팁

가이드 샘플링의 경우 solver_order를 2로, 무조건 샘플링의 경우 solver_order=3으로 설정하는 것이 권장됩니다.

Imagen의 동적 임계값 설정(dynamic thresholding)을 지원하며, 픽셀 공간 확산 모델의 경우 predict_x0=True와 thresholding=True를 모두 설정하여 동적 임계값 설정을 사용할 수 있습니다. 이 임계값 설정 방법은 Stable Diffusion과 같은 잠재 공간(latent-space) 확산 모델에는 적합하지 않습니다.

UniPCMultistepScheduler

클래스 diffusers.UniPCMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonesolver_order: int = 2prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0predict_x0: bool = Truesolver_type: typing.Literal['bh1', 'bh2'] = 'bh2'lower_order_final: bool = Truedisable_corrector: list = []solver_p: SchedulerMixin = Noneuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential'sigma_min: float | None = Nonesigma_max: bool | None = Noneshift_terminal: bool | None = None )

매개변수

  • num_train_timesteps (int, 기본값 1000) — 모델을 학습할 때 사용할 diffusion 단계 수입니다.
  • beta_start (float, 기본값 0.0001) — 추론의 시작 beta 값입니다.
  • beta_end (float, 기본값 0.02) — 최종 beta 값입니다.
  • beta_schedule ("linear", "scaled_linear", 또는 "squaredcos_cap_v2", 기본값은 "linear") — 모델의 스테핑을 위한 베타 범위에서 베타 시퀀스로의 매핑인 베타 스케줄입니다. linear, scaled_linear, 또는 squaredcos_cap_v2 중 하나를 선택합니다.
  • trained_betas (np.ndarray, 선택 사항) — beta_start와 beta_end를 우회하여 베타 배열을 생성자에 직접 전달합니다.
  • solver_order (int, 기본값 2) — 양수 정수인 UniPC 순서입니다. UniC로 인해 유효한 정확도 순서는 solver_order + 1입니다. 가이드된 샘플링에는 solver_order=2를, 무조건 샘플링에는 solver_order=3를 사용하는 것이 권장됩니다.
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon", optional) — 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, 기본값 False) — “동적 임계값 설정” 방법을 사용할지 여부입니다. Stable Diffusion과 같은 잠재 공간 확산 모델에는 적합하지 않습니다.
  • dynamic_thresholding_ratio (float, 기본값 0.995) — 동적 임계값 설정 방법의 비율입니다. thresholding=True일 때만 유효합니다.
  • sample_max_value (float, 기본값 1.0) — 동적 임계값 설정을 위한 임계값입니다. thresholding=True이고 predict_x0=True인 경우에만 유효합니다.
  • predict_x0 (bool, 기본값 True) — 예측된 x0에 업데이트 알고리즘을 사용할지 여부.
  • solver_type ("bh1" 또는 "bh2", 기본값은 "bh2") — UniPC의 Solver type입니다. steps < 10인 unconditional sampling에는 bh1 사용을 권장하며, 그 외에는 bh2를 사용하세요.
  • lower_order_final (bool, 기본값 True) — 마지막 단계에서 저차수 솔버를 사용할지 여부입니다. < 15 추론 단계에서만 유효합니다. 이는 < 15 단계, 특히 <= 10 단계에서 DPMSolver의 샘플링을 안정화할 수 있습니다.
  • disable_corrector (list, 기본값 []) — epsilon_theta(x_t, c)와 epsilon_theta(x_t^c, c) 사이의 불일치가 큰 guidance scale에서 수렴에 영향을 줄 수 있으므로, corrector를 비활성화할 단계를 결정합니다. 일반적으로 corrector는 처음 몇 단계 동안 비활성화됩니다.
  • solver_p (SchedulerMixin, 기본값 None) — 지정된 경우 알고리즘이 solver_p + UniC가 되는 다른 스케줄러.
  • use_karras_sigmas (bool, 선택 사항, 기본값 False) — 샘플링 과정에서 노이즈 스케줄의 단계 크기에 Karras sigmas를 사용할지 여부입니다. True인 경우, sigmas는 노이즈 레벨 {σi}의 시퀀스에 따라 결정됩니다.
  • use_exponential_sigmas (bool, 선택 사항, 기본값 False) — 샘플링 과정에서 노이즈 스케줄의 스텝 크기에 지수 시그마를 사용할지 여부입니다.
  • use_beta_sigmas (bool, optional, defaults to False) — Whether to use beta sigmas for step sizes in the noise schedule during the sampling process. Refer to Beta Sampling is All You Need for more information.
  • use_flow_sigmas (bool, 선택 사항, 기본값 False) — 샘플링 과정에서 노이즈 스케줄의 스텝 크기에 flow sigmas를 사용할지 여부입니다.
  • timestep_spacing ("linspace", "leading", 또는 "trailing", 기본값은 "linspace") — timestep을 스케일링하는 방법입니다. 자세한 내용은 공통 확산 노이즈 스케줄과 샘플 단계는 결함이 있다의 Table 2를 참고하세요.
  • steps_offset (int, 기본값 0) — 일부 모델 계열에서 요구하는 추론 단계에 추가되는 오프셋입니다.
  • final_sigmas_type ("zero" 또는 "sigma_min", 기본값은 "zero") — 샘플링 과정에서 노이즈 스케줄의 최종 sigma 값입니다. "sigma_min"인 경우, 최종 sigma는 학습 스케줄의 마지막 sigma와 동일합니다. zero인 경우, 최종 sigma는 0으로 설정됩니다.
  • rescale_betas_zero_snr (bool, 기본값 False) — 베타를 재조정하여 최종 SNR을 0으로 만들지 여부를 지정합니다. 이를 통해 중간 밝기의 샘플로 제한되는 대신 매우 밝고 어두운 샘플을 생성할 수 있습니다. --offset_noise와 느슨하게 관련이 있습니다.

UniPCMultistepScheduler는 diffusion 모델의 빠른 샘플링을 위해 설계된 학습 불필요 프레임워크입니다.

이 모델은 SchedulerMixin과 ConfigMixin을 상속합니다. 로딩 및 저장과 같은 모든 스케줄러에 대해 라이브러리가 구현하는 일반적 메서드에 대해서는 상위 클래스 문서를 확인하세요.

add_noise

< >

( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

매개변수

  • original_samples (torch.Tensor) — 노이즈가 없는 원래 샘플입니다.
  • noise (torch.Tensor) — 샘플에 추가할 노이즈입니다.
  • timesteps (torch.IntTensor) — 샘플에 노이즈를 추가할 타임스텝입니다.

반환값

torch.Tensor

노이즈가 포함된 샘플.

지정된 timesteps의 noise schedule에 따라 원래 샘플에 노이즈를 추가합니다.

convert_model_output

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

매개변수

  • model_output (torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다.
  • timestep (int) — 확산 체인(diffusion chain)의 현재 이산 시간 단계(discrete timestep)입니다.
  • sample (torch.Tensor) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다.

반환값

torch.Tensor

변환된 모델 출력

UniPC 알고리즘이 필요로 하는 해당 유형으로 모델 출력을 변환합니다.

index_for_timestep

< >

( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int

매개변수

  • timestep (int 또는 torch.Tensor) — 인덱스를 찾을 timestep입니다.
  • schedule_timesteps (torch.Tensor, 선택 사항) — 검색할 timestep schedule입니다. None인 경우 self.timesteps를 사용합니다.

반환값

int

schedule에서 timestep의 인덱스입니다.

schedule에서 주어진 timestep에 해당하는 인덱스를 찾습니다.

multistep_uni_c_bh_update

< >

( this_model_output: Tensor*argslast_sample: Tensor = Nonethis_sample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

매개변수

  • this_model_output (torch.Tensor) — x_t에서의 모델 출력입니다.
  • this_timestep (int) — 현재 timestep t.
  • last_sample (torch.Tensor) — 마지막 predictor x_{t-1} 이전의 생성된 샘플.
  • this_sample (torch.Tensor) — 마지막 예측기 x_{t} 이후 생성된 샘플.
  • order (int) — 해당 단계의 UniC-p의 p입니다. 유효한 정확도 차수는 order + 1이어야 합니다.

반환값

torch.Tensor

현재 타임스텝에서 보정된 샘플 텐서.

UniC(B(h) 버전)의 한 단계.

multistep_uni_p_bh_update

< >

( model_output: Tensor*argssample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

매개변수

  • model_output (torch.Tensor) — 현재 timestep에서 학습된 diffusion 모델의 직접 출력입니다.
  • prev_timestep (int) — 확산 체인에서 이전의 이산 시간 단계입니다.
  • sample (torch.Tensor) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다.
  • order (int) — 해당 timestep에서의 UniP 순서(UniPC-p의 p에 해당).

반환값

torch.Tensor

이전 시간 단계의 샘플 텐서.

UniP(B(h) 버전)의 한 단계입니다. 대신, 지정된 경우 self.solver_p가 사용됩니다.

scale_model_input

< >

( sample: Tensor*args**kwargs ) → torch.Tensor

매개변수

  • sample (torch.Tensor) — 입력 샘플입니다.

반환값

torch.Tensor

스케일된 입력 샘플.

현재 timestep에 따라 denoising 모델 입력을 scale해야 하는 scheduler와의 호환성을 보장합니다.

set_begin_index

< >

( begin_index: int = 0 )

매개변수

  • begin_index (int, 기본값 0) — 스케줄러의 시작 인덱스입니다.

… 스케줄러의 시작 인덱스를 설정합니다. 이 함수는 추론 전에 파이프라인에서 실행해야 합니다.

set_timesteps

< >

( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: list[float] | None = Nonemu: bool | None = None )

매개변수

  • num_inference_steps (int) — 학습된 모델로 샘플을 생성할 때 사용되는 diffusion 단계 수입니다.
  • device (str 또는 torch.device, 선택 사항) — timesteps를 이동할 대상 device입니다. None인 경우 timesteps는 이동되지 않습니다.
  • sigmas (List[float], 선택 사항) — 각 diffusion step에 사용할 sigmas의 사용자 지정 값입니다. None인 경우 sigmas는 자동으로 계산됩니다.
  • mu (float, 선택 사항) — exponential time shift type을 사용할 때 동적 시프트에 사용되는 선택적 mu 매개변수입니다.

추론 실행 전에 실행할 diffusion chain에 사용할 이산 timesteps를 설정합니다.

단계

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorreturn_dict: bool = True ) → SchedulerOutput or tuple

매개변수

  • model_output (torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다.
  • timestep (int 또는 torch.Tensor) — 확산 체인(diffusion chain)의 현재 이산 시간 단계(discrete timestep)입니다.
  • sample (torch.Tensor) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다.
  • return_dict (bool, 기본값 True) — tuple 대신 SchedulerOutput를 반환할지 여부.

반환값

SchedulerOutput 또는 tuple

return_dict가 True인 경우 SchedulerOutput이 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 튜플이 반환됩니다.

이전 시간 단계의 샘플을 SDE를 역방향으로 적용하여 예측합니다. 이 함수는 샘플을 멀티스텝 UniPC로 전파합니다.

stretch_shift_to_terminal

< >

( t: Tensor ) → torch.Tensor

매개변수

  • t (torch.Tensor) — 늘리고 시프트할 타임스텝의 텐서.

반환값

torch.Tensor

최종 값이 self.config.shift_terminal과 같도록 조정된 timesteps의 텐서입니다.

shift_terminal 구성 값에서 종료되도록 보장하기 위해 timestep 스케줄을 늘리고 이동합니다.

참고: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

time_shift

< >

( mu: floatsigma: floatt: Tensor ) → torch.Tensor

매개변수

  • mu (float) — 시간 시프트에 사용되는 mu 매개변수입니다.
  • sigma (float) — 시간 시프트에 사용되는 sigma 매개변수입니다.
  • t (torch.Tensor) — 입력 타임스텝입니다.

반환값

torch.Tensor

시간이 이동된 타임스텝

sigmas에 시간 시프트를 적용합니다.

SchedulerOutput

class diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

매개변수

  • prev_sample (이미지의 경우 torch.Tensor, shape (batch_size, num_channels, height, width)) — 이전 timestep의 계산된 샘플 (x_{t-1}). prev_sample은 denoising 루프에서 다음 모델 입력으로 사용해야 합니다.

스케줄러의 step 함수 출력을 위한 베이스 클래스.

Update on GitHub