Diffusers documentation

DPMSolverMultistepScheduler

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

DPMSolverMultistepScheduler

DPMSolverMultistepScheduler는 Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li, Jun Zhu가 발표한 DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps 및 DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models에서 소개된 다단계 스케줄러입니다.

DPMSolver(개선된 버전인 DPMSolver++ 포함)는 수렴 차수를 보장하는 확산 ODE를 위한 빠르고 전용적인 고차 솔버입니다. 경험적으로, DPMSolver 샘플링은 단 20단계만으로도 고품질 샘플을 생성할 수 있으며, 10단계에서도 상당히 좋은 샘플을 생성할 수 있습니다.

팁

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

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

DPMSolver와 DPM-Solver++의 SDE 변형도 지원되지만, 1차 및 2차 솔버에만 적용됩니다. 이는 역방향 확산 SDE를 위한 빠른 SDE 솔버입니다. 2차 sde-dpmsolver++ 사용을 권장합니다.

DPMSolverMultistepScheduler

클래스 diffusers.DPMSolverMultistepScheduler

< >

( 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.0algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_lu_lambdas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )

매개변수

  • 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") — 모델의 스테핑을 위한 베타 시퀀스로 베타 범위를 매핑하는 베타 스케줄입니다.
  • trained_betas (np.ndarray, 선택 사항) — beta_start와 beta_end를 우회하여 베타 배열을 생성자에 직접 전달합니다.
  • solver_order (int, 기본값 2) — 1 또는 2 또는 3일 수 있는 DPMSolver의 order입니다. guided sampling에는 solver_order=2를, unconditional sampling에는 solver_order=3를 사용하는 것이 권장됩니다.
  • prediction_type ("epsilon", "sample", "v_prediction", 또는 "flow_prediction", 기본값은 "epsilon") — 스케줄러 함수의 예측 유형입니다. epsilon은 확산 과정의 노이즈를 예측하고, sample은 노이즈가 포함된 샘플을 직접 예측하며, v_prediction은 속도를 예측합니다(Imagen Video 논문 2.4절 참조). flow_prediction은 플로우를 예측합니다.
  • thresholding (bool, 기본값 False) — “동적 임계값 설정” 방법을 사용할지 여부입니다. Stable Diffusion과 같은 잠재 공간 확산 모델에는 적합하지 않습니다.
  • dynamic_thresholding_ratio (float, 기본값 0.995) — 동적 임계값 설정 방법의 비율입니다. thresholding=True일 때만 유효합니다.
  • sample_max_value (float, 기본값 1.0) — 동적 임계값 설정을 위한 임계값입니다. thresholding=True이고 algorithm_type="dpmsolver++"인 경우에만 유효합니다.
  • algorithm_type ("dpmsolver", "dpmsolver++", "sde-dpmsolver", 또는 "sde-dpmsolver++", 기본값은 "dpmsolver++") — 솔버의 알고리즘 유형입니다. dpmsolver 유형은 DPMSolver 논문에서 제시한 알고리즘을 구현하며, dpmsolver++ 유형은 DPMSolver++ 논문에서 제시한 알고리즘을 구현합니다. Stable Diffusion과 같은 가이드드 샘플링의 경우 dpmsolver++ 또는 sde-dpmsolver++를 solver_order=2와 함께 사용하는 것을 권장합니다.
  • solver_type ("midpoint" 또는 "heun", 기본값은 "midpoint") — 2차 솔버의 솔버 유형입니다. 솔버 유형은 샘플 품질에 약간 영향을 미치며, 특히 스텝 수가 적은 경우에 그렇습니다. midpoint 솔버 사용을 권장합니다.
  • lower_order_final (bool, 기본값 True) — 마지막 단계에서 저차수 솔버를 사용할지 여부입니다. 15 미만의 추론 단계에서만 유효합니다. 이는 15 미만의 단계, 특히 10 이하의 단계에서 DPMSolver의 샘플링을 안정화할 수 있습니다.
  • euler_at_final (bool, 기본값 False) — 마지막 단계에서 오일러 방법을 사용할지 여부입니다. 이는 수치적 안정성과 디테일의 풍부함 사이의 트레이드오프입니다. 추론 단계 수가 적은 경우 DPMSolver의 SDE 변형 샘플링을 안정화할 수 있지만, 때로는 흐려짐 현상을 유발할 수 있습니다.
  • 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_lu_lambdas (bool, 선택 사항, 기본값 False) — 샘플링 과정에서 노이즈 스케줄에 Lu의 DPM-Solver가 제안한 uniform-logSNR을 스텝 크기로 사용할지 여부입니다. True인 경우, 시그마와 타임 스텝은 lambda(t)의 시퀀스에 따라 결정됩니다.
  • use_flow_sigmas (bool, 선택 사항, 기본값 False) — 샘플링 과정에서 노이즈 스케줄의 스텝 크기에 flow sigmas를 사용할지 여부입니다.
  • flow_shift (float, 선택 사항, 기본값 1.0) — flow matching을 위한 timestep schedule의 shift 값입니다.
  • final_sigmas_type ("zero" 또는 "sigma_min", 선택 사항, 기본값은 "zero") — 샘플링 과정에서 노이즈 스케줄의 최종 sigma 값입니다. "sigma_min"인 경우, 최종 sigma는 학습 스케줄의 마지막 sigma와 동일합니다. "zero"인 경우, 최종 sigma는 0으로 설정됩니다.
  • lambda_min_clipped (float, 기본값 -inf) — 수치적 안정성을 위해 lambda(t)의 최소값에 적용되는 클리핑 임계값입니다. 이는 코사인(squaredcos_cap_v2) 노이즈 스케줄에서 매우 중요합니다.
  • variance_type ("learned" 또는 "learned_range", 선택 사항) — 분산을 예측하는 diffusion 모델의 경우 "learned" 또는 "learned_range"로 설정합니다. 이 값이 설정되면 모델의 출력에 예측된 가우시안 분산이 포함됩니다.
  • timestep_spacing ("linspace", "leading", 또는 "trailing", 기본값은 "linspace") — timestep을 스케일링하는 방법입니다. 자세한 내용은 공통 확산 노이즈 스케줄과 샘플 단계는 결함이 있다의 Table 2를 참고하세요.
  • steps_offset (int, 기본값 0) — 일부 모델 계열에서 요구하는 추론 단계에 추가되는 오프셋입니다.
  • rescale_betas_zero_snr (bool, 기본값 False) — 베타를 재조정하여 최종 SNR을 0으로 만들지 여부를 지정합니다. 이를 통해 중간 밝기의 샘플로 제한되는 대신 매우 밝고 어두운 샘플을 생성할 수 있습니다. --offset_noise와 느슨하게 관련이 있습니다.
  • use_dynamic_shifting (bool, 기본값 False) — timestep schedule에 dynamic shifting을 사용할지 여부입니다.
  • time_shift_type ("exponential", 기본값 "exponential") — 동적 시프트를 사용할 때 적용할 시간 시프트의 유형입니다.

DPMSolverMultistepScheduler은 확산 ODE를 위한 빠른 전용 고차 솔버입니다.

이 모델은 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: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

매개변수

  • model_output (torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다.
  • sample (torch.Tensor, 선택 사항) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다.

반환값

torch.Tensor

변환된 모델 출력

DPMSolver/DPMSolver++ 알고리즘이 요구하는 해당 유형으로 모델 출력을 변환합니다. DPM-Solver는 노이즈 예측 모델의 적분을 이산화하도록 설계되었으며, DPM-Solver++는 데이터 예측 모델의 적분을 이산화하도록 설계되었습니다.

> 알고리즘과 모델 유형은 분리되어 있습니다. 노이즈 > 예측 모델과 데이터 예측 모델 모두에 DPMSolver 또는 DPMSolver++를 사용할 수 있습니다.

dpm_solver_first_order_update

< >

( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

매개변수

  • model_output (torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다.
  • sample (torch.Tensor, 선택 사항) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다.
  • noise (torch.Tensor, 선택 사항) — 노이즈 텐서입니다.

반환값

torch.Tensor

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

1차 DPMSolver의 한 단계(DDIM과 동일).

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_dpm_solver_second_order_update

< >

( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

매개변수

  • model_output_list (list[torch.Tensor]) — 현재 및 이후 timestep에서 학습된 diffusion 모델의 직접 출력입니다.
  • sample (torch.Tensor, 선택 사항) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다.
  • noise (torch.Tensor, 선택 사항) — 확률적 (sde-*) 솔버 변형에서 사용되는 무작위 노이즈입니다. algorithm_type가 이 중 하나로 설정된 경우에만 필수이며, 그 외에는 사용되지 않습니다.

반환값

torch.Tensor

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

2차 다단계 DPMSolver의 한 단계.

multistep_dpm_solver_third_order_update

< >

( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

매개변수

  • model_output_list (list[torch.Tensor]) — 현재 및 이후 timestep에서 학습된 diffusion 모델의 직접 출력입니다.
  • sample (torch.Tensor, 선택 사항) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다.
  • noise (torch.Tensor, 선택 사항) — 노이즈 텐서입니다.

반환값

torch.Tensor

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

3차 다단계 DPMSolver의 한 단계.

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 = Nonedevice: typing.Union[str, torch.device] = Nonemu: float | None = Nonetimesteps: list[int] | None = None )

매개변수

  • num_inference_steps (int, 선택 사항) — 학습된 모델로 샘플을 생성할 때 사용되는 diffusion 단계 수입니다.
  • device (str 또는 torch.device, 선택 사항) — timesteps를 이동할 대상 device입니다. None인 경우 timesteps는 이동되지 않습니다.
  • mu (float, 선택 사항) — 동적 시간 시프트의 지수입니다. use_dynamic_shifting이 필요하며 time_shift_type이 "exponential"여야 합니다. 값이 전달되면 flow_shift가 exp(mu)로 설정됩니다.
  • timesteps (list[int], 선택 사항) — 임의의 timesteps 스케줄을 지원하기 위해 사용되는 사용자 지정 timesteps입니다. None인 경우, timestep_spacing 속성에 기반하여 timesteps가 생성됩니다. timesteps가 전달되면 num_inference_steps와 sigmas는 None이어야 하며, timestep_spacing 속성은 무시됩니다.

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

단계

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple

매개변수

  • model_output (torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다.
  • timestep (int 또는 torch.Tensor) — 확산 체인(diffusion chain)의 현재 이산 시간 단계(discrete timestep)입니다.
  • sample (torch.Tensor) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다.
  • generator (torch.Generator, 선택 사항) — 난수 생성기입니다.
  • variance_noise (torch.Tensor, 선택 사항) — generator를 사용하여 노이즈를 생성하는 대신, variance 자체에 대한 노이즈를 직접 제공하는 대안입니다. LEdits++와 같은 방법에 유용합니다.
  • return_dict (bool, 기본값 True) — tuple 대신 SchedulerOutput를 반환할지 여부.

반환값

SchedulerOutput 또는 tuple

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

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

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