Diffusers documentation
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler는 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에 등장하는 멀티스텝 스케줄러인 DPMSolverMultistepScheduler의 Karras formulation입니다.
DPMSolver(개선된 버전인 DPMSolver++ 포함)는 수렴 차수를 보장하는 확산 ODE를 위한 빠르고 전용적인 고차 솔버입니다. 경험적으로, DPMSolver 샘플링은 단 20단계만으로도 고품질 샘플을 생성할 수 있으며, 10단계에서도 상당히 좋은 샘플을 생성할 수 있습니다.
EDMDPMSolverMultistepScheduler
클래스 diffusers.EDMDPMSolverMultistepScheduler
< source >( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'rho: float = 7.0solver_order: int = 2thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falsefinal_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )
매개변수
- sigma_min (
float, 선택 사항, 기본값 0.002) — sigma 스케줄에서 최소 노이즈 크기입니다. EDM 논문 [1]에서는 0.002로 설정했으며, 적절한 범위는 [0, 10]입니다. - sigma_max (
float, 선택 사항, 기본값 80.0) — sigma 스케줄의 최대 노이즈 크기입니다. EDM 논문 [1]에서는 80.0으로 설정했으며, 적절한 범위는 [0.2, 80.0]입니다. - sigma_data (
float, 선택 사항, 기본값 0.5) — 데이터 분포의 표준 편차입니다. EDM 논문 [1]에서는 이 값을 0.5로 설정합니다. - sigma_schedule (
str, 선택 사항, 기본값karras) —sigmas를 계산할 시그마 스케줄입니다. 기본적으로 EDM 논문(https://huggingface.co/papers/2206.00364)에서 소개된 스케줄을 사용합니다. 다른 허용되는 값은 “exponential”입니다. 지수 스케줄은 이 모델에 적용되었습니다: https://huggingface.co/stabilityai/cosxl. - num_train_timesteps (
int, 기본값 1000) — 모델을 학습할 때 사용할 diffusion 단계 수입니다. - prediction_type (
str, defaults toepsilon, optional) — Prediction type of the scheduler function; can beepsilon(predicts the noise of the diffusion process),sample(directly predicts the noisy sample) orv_prediction` (see section 2.4 of Imagen Video paper). - rho (
float, 선택 사항, 기본값 7.0) — Karras sigma 스케줄의 rho 매개변수입니다. EDM 논문 [1]에서 7.0으로 설정되었습니다. - solver_order (
int, 기본값 2) —1또는2또는3일 수 있는 DPMSolver의 order입니다. guided sampling에는solver_order=2를, unconditional sampling에는solver_order=3를 사용하는 것이 권장됩니다. - 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 (
str, 기본값dpmsolver++) — 솔버의 알고리즘 유형으로,dpmsolver++또는sde-dpmsolver++를 사용할 수 있습니다.dpmsolver++유형은 DPMSolver++ 논문에서 제시된 알고리즘을 구현합니다. Stable Diffusion과 같은 가이드드 샘플링의 경우solver_order=2와 함께dpmsolver++또는sde-dpmsolver++사용을 권장합니다. - solver_type (
str, 기본값midpoint) — 2차 솔버의 Solver type입니다.midpoint또는heun를 사용할 수 있습니다. Solver type은 샘플 품질에 약간 영향을 미치며, 특히 스텝 수가 적은 경우에 그렇습니다.midpoint솔버 사용을 권장합니다. - lower_order_final (
bool, 기본값True) — 마지막 단계에서 저차수 솔버를 사용할지 여부입니다. 15 미만의 추론 단계에서만 유효합니다. 이는 15 미만의 단계, 특히 10 이하의 단계에서 DPMSolver의 샘플링을 안정화할 수 있습니다. - euler_at_final (
bool, 기본값False) — 마지막 단계에서 오일러 방법을 사용할지 여부입니다. 이는 수치적 안정성과 디테일의 풍부함 사이의 트레이드오프입니다. 추론 단계 수가 적은 경우 DPMSolver의 SDE 변형 샘플링을 안정화할 수 있지만, 때로는 흐려짐 현상을 유발할 수 있습니다. - final_sigmas_type (
str, 기본값"zero") — 샘플링 과정에서 노이즈 스케줄의 최종sigma값입니다."sigma_min"인 경우, 최종 sigma는 학습 스케줄의 마지막 sigma와 동일합니다.zero인 경우, 최종 sigma는 0으로 설정됩니다.
Karras et al. 2022 [1]에서 제시한 EDM 공식에 따라 DPMSolverMultistepScheduler를 구현합니다. EDMDPMSolverMultistepScheduler는 확산 ODE를 위한 빠르고 전용적인 고차 솔버입니다.
[1] Karras, Tero, et al. “Elucidating the Design Space of Diffusion-Based Generative Models.” https://huggingface.co/papers/2206.00364
이 모델은 SchedulerMixin과 ConfigMixin을 상속합니다. 로딩 및 저장과 같은 모든 스케줄러에 대해 라이브러리가 구현하는 일반적 메서드에 대해서는 상위 클래스 문서를 확인하세요.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
지정된 timesteps의 noise schedule에 따라 원래 샘플에 노이즈를 추가합니다.
convert_model_output
< source >( model_output: Tensorsample: Tensor ) → torch.Tensor
DPMSolver/DPMSolver++ 알고리즘이 요구하는 해당 유형으로 모델 출력을 변환합니다. DPM-Solver는 노이즈 예측 모델의 적분을 이산화하도록 설계되었으며, DPM-Solver++는 데이터 예측 모델의 적분을 이산화하도록 설계되었습니다.
> 알고리즘과 모델 유형은 분리되어 있습니다. 노이즈 > 예측 모델과 데이터 예측 모델 모두에 DPMSolver 또는 DPMSolver++를 사용할 수 있습니다.
dpm_solver_first_order_update
< source >( model_output: Tensorsample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor
1차 DPMSolver의 한 단계(DDIM과 동일).
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
schedule에서 주어진 timestep에 해당하는 인덱스를 찾습니다.
multistep_dpm_solver_second_order_update
< source >( model_output_list: typing.List[torch.Tensor]sample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor
2차 다단계 DPMSolver의 한 단계.
multistep_dpm_solver_third_order_update
< source >( model_output_list: listsample: Tensor ) → torch.Tensor
3차 다단계 DPMSolver의 한 단계.
precondition_inputs
< source >( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
EDM 공식에 따라 입력 샘플을 스케일링하여 전처리합니다.
precondition_noise
< source >( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
로그 변환을 적용하여 노이즈 레벨을 사전 처리합니다.
precondition_outputs
< source >( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
EDM 공식에 따라 모델 출력을 사전 조건화합니다.
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
Euler 알고리즘에 맞게 denoising model 입력을 스케일링합니다. 현재 timestep에 따라 denoising model 입력을 스케일링해야 하는 스케줄러와의 호환성을 보장합니다.
set_begin_index
< source >( begin_index: int = 0 )
… 스케줄러의 시작 인덱스를 설정합니다. 이 함수는 추론 전에 파이프라인에서 실행해야 합니다.
set_timesteps
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device, NoneType] = None )
추론 실행 전에 실행할 diffusion chain에 사용할 이산 timesteps를 설정합니다.
단계
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple
매개변수
- model_output (
torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다. - timestep (
int) — 확산 체인(diffusion chain)의 현재 이산 시간 단계(discrete timestep)입니다. - sample (
torch.Tensor) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다. - generator (
torch.Generator, 선택 사항) — 난수 생성기입니다. - return_dict (
bool) —tuple대신 SchedulerOutput를 반환할지 여부.
반환값
SchedulerOutput 또는 tuple
return_dict가 True인 경우 SchedulerOutput이 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 튜플이 반환됩니다.
이전 시간 단계의 샘플을 SDE를 역방향으로 적용하여 예측합니다. 이 함수는 샘플을 멀티스텝 DPMSolver로 전파합니다.
SchedulerOutput
class diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
스케줄러의 step 함수 출력을 위한 베이스 클래스.