Diffusers documentation
EDMEulerScheduler
EDMEulerScheduler
Karras et al.의 Elucidating the Design Space of Diffusion-Based Generative Models 논문에서 제시한 Euler 스케줄러의 Karras 공식(Algorithm 2)입니다. 이는 20~30단계로 좋은 출력을 생성할 수 있는 빠른 스케줄러입니다. 해당 스케줄러는 Katherine Crowson의 원래 k-diffusion 구현을 기반으로 합니다.
EDMEulerScheduler
클래스 diffusers.EDMEulerScheduler
< 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', 'v_prediction'] = 'epsilon'rho: float = 7.0final_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 (
Literal["karras", "exponential"], 선택 사항, 기본값"karras") —sigmas를 계산하기 위한 Sigma 스케줄입니다. 기본적으로 EDM 논문(https://huggingface.co/papers/2206.00364)에서 소개된 스케줄을 사용합니다."exponential"스케줄은 이 모델에 적용되었습니다: https://huggingface.co/stabilityai/cosxl. - num_train_timesteps (
int, 선택 사항, 기본값1000) — 모델을 학습하기 위한 diffusion 단계 수입니다. - prediction_type (
Literal["epsilon", "v_prediction"], 선택 사항, 기본값"epsilon") — 스케줄러 함수의 예측 유형입니다."epsilon"은 확산 과정의 노이즈를 예측하고,"v_prediction"은 Imagen Video 논문 2.4절을 참조하세요. - rho (
float, 선택 사항, 기본값7.0) — EDM 논문 [1]에서 7.0으로 설정된 Karras sigma 스케줄 계산에 사용되는 rho 매개변수입니다. - final_sigmas_type (
Literal["zero", "sigma_min"], 선택 사항, 기본값"zero") — 샘플링 과정에서 노이즈 스케줄의 최종sigma값입니다."sigma_min"인 경우, 최종 sigma는 학습 스케줄의 마지막 sigma와 동일합니다."zero"인 경우, 최종 sigma는 0으로 설정됩니다.
Karras et al. 2022 [1]에서 제시한 EDM 공식의 Euler 스케줄러를 구현합니다.
[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에 따라 원래 샘플에 노이즈를 추가합니다.
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
매개변수
- timestep (
float또는torch.Tensor) — 스케줄에서 찾을 timestep 값입니다. - schedule_timesteps (
torch.Tensor, 선택 사항) — 검색할 timestep schedule입니다.None인 경우self.timesteps를 사용합니다.
반환값
int
The index of the timestep in the schedule. For the very first step, returns the second index if multiple matches exist to avoid skipping a sigma when starting mid-schedule (e.g., for image-to-image).
…
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] = Nonesigmas: typing.Union[list[float], torch.Tensor, NoneType] = None )
매개변수
- num_inference_steps (
int, 선택 사항) — 학습된 모델로 샘플을 생성할 때 사용되는 diffusion 단계 수입니다. - device (
str또는torch.device, 선택 사항) — timesteps를 이동할 대상 device입니다.None인 경우 timesteps는 이동되지 않습니다. - sigmas (
torch.Tensor | list[float], 선택 사항) — 노이즈 제거 과정에 사용할 커스텀 시그마입니다. 정의되지 않은 경우,num_inference_steps가 전달될 때의 기본 동작이 사용됩니다.
추론 실행 전에 실행할 diffusion chain에 사용할 이산 timesteps를 설정합니다.
단계
< source >( model_output: Tensortimestep: typing.Union[float, torch.Tensor]sample: Tensors_churn: float = 0.0s_tmin: float = 0.0s_tmax: float = infs_noise: float = 1.0generator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = Truepred_original_sample: typing.Optional[torch.Tensor] = None ) → EDMEulerSchedulerOutput or tuple
매개변수
- model_output (
torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다. - timestep (
float또는torch.Tensor) — 확산 체인(diffusion chain)의 현재 이산 시간 단계(discrete timestep)입니다. - sample (
torch.Tensor) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다. - s_churn (
float, 선택 사항, 기본값0.0) — 각 단계에서 추가할 확률적 노이즈의 양입니다. 값이 높을수록 더 많은 노이즈가 추가됩니다. - s_tmin (
float, 선택 사항, 기본값0.0) — 노이즈가 추가되지 않는 최소 시그마 임계값입니다. - s_tmax (
float, 선택 사항, 기본값float("inf")) — 노이즈가 추가되지 않는 최대 시그마 임계값입니다. - s_noise (
float, 선택 사항, 기본값1.0) — 샘플에 추가되는 노이즈의 스케일링 계수입니다. - generator (
torch.Generator, 선택 사항) — 재현성을 위한 난수 생성기입니다. - return_dict (
bool, 선택 사항, 기본값True) — EDMEulerSchedulerOutput 또는 tuple을 반환할지 여부. - pred_original_sample (
torch.Tensor, 선택 사항) — 이전 단계에서 예측된 디노이즈 샘플입니다. 제공되면 재계산을 건너뜁니다.
반환값
EDMEulerSchedulerOutput 또는 tuple
return_dict가 True인 경우 EDMEulerSchedulerOutput가 반환되고, 그렇지 않으면 첫 번째 요소가 이전 샘플 텐서, 두 번째 요소가 예측된 원래 샘플 텐서인 튜플이 반환됩니다.
이전 시간 단계의 샘플을 SDE를 역방향으로 적용하여 예측합니다. 이 함수는 학습된 모델의 출력(대부분 예측된 노이즈)으로부터 확산 과정을 전파합니다.
EDMEulerSchedulerOutput
클래스 diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )
매개변수
- prev_sample (이미지의 경우
torch.Tensor, shape(batch_size, num_channels, height, width)) — 이전 timestep의 계산된 샘플(x_{t-1}).prev_sample은 denoising 루프에서 다음 모델 입력으로 사용해야 합니다. - pred_original_sample (
torch.Tensor, 이미지인 경우 shape(batch_size, num_channels, height, width)) — 현재 timestep의 모델 출력에 기반한 예측된 디노이즈 샘플(x_{0}).pred_original_sample은 진행 상황 미리보기 또는 가이던스에 사용할 수 있습니다.
스케줄러의 step 함수 출력을 위한 출력 클래스입니다.