Diffusers documentation
CMStochasticIterativeScheduler
CMStochasticIterativeScheduler
Yang Song, Prafulla Dhariwal, Mark Chen, Ilya Sutskever의 Consistency Models는 1단계 또는 소수의 단계로 고품질 샘플을 생성할 수 있는 multistep 및 onestep 스케줄러(Algorithm 1)를 소개했습니다.
해당 논문의 초록은 다음과 같습니다:
Diffusion models은 이미지, 오디오 및 비디오 생성 분야에서 상당한 발전을 이루었지만, 느린 생성을 초래하는 반복적 샘플링 프로세스에 의존합니다. 이러한 한계를 극복하기 위해, 노이즈를 데이터로 직접 매핑하여 고품질 샘플을 생성하는 새로운 모델 계열인 consistency models를 제안합니다. 이들은 설계상 빠른 1단계 생성을 지원하면서도, 계산 비용을 샘플 품질과 교환할 수 있도록 다단계 샘플링을 허용합니다. 또한, 이러한 작업에 대한 명시적인 학습 없이도 이미지 inpainting, 컬러라이제이션, 초해상도와 같은 zero-shot 데이터 편집을 지원합니다. Consistency models는 사전 학습된 diffusion models를 증류하여 학습하거나, 완전히 독립적인 생성 모델로 학습할 수 있습니다. 광범위한 실험을 통해, 1단계 및 소수 단계 샘플링에서 기존 diffusion models 증류 기법보다 우수한 성능을 보이며, 1단계 생성에서 CIFAR-10의 FID 3.55와 ImageNet 64x64의 FID 6.20이라는 새로운 state-of-the-art를 달성함을 입증했습니다. 독립적으로 학습된 경우, consistency models는 CIFAR-10, ImageNet 64x64 및 LSUN 256x256과 같은 표준 벤치마크에서 기존 1단계, 비적대적 생성 모델보다 우수한 성능을 발휘할 수 있는 새로운 생성 모델 계열이 됩니다.
원본 코드베이스는 openai/consistency_models에서 찾을 수 있습니다.
CMStochasticIterativeScheduler
class diffusers.CMStochasticIterativeScheduler
< source >( num_train_timesteps: int = 40sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5s_noise: float = 1.0rho: float = 7.0clip_denoised: bool = True )
매개변수
- num_train_timesteps (
int, 기본값 40) — 모델을 학습할 때 사용할 diffusion 단계 수입니다. - sigma_min (
float, 기본값 0.002) — sigma 스케줄의 최소 노이즈 크기입니다. 원래 구현에서와 같이 기본값은 0.002입니다. - sigma_max (
float, 기본값 80.0) — sigma 스케줄의 최대 노이즈 크기입니다. 원래 구현에서와 같이 기본값은 80.0입니다. - sigma_data (
float, 기본값 0.5) — EDM 논문의 데이터 분포 표준편차입니다. 원래 구현에서와 같이 기본값은 0.5입니다. - s_noise (
float, 기본값 1.0) — 샘플링 중 세부 정보 손실을 상쇄하기 위해 추가할 노이즈의 양입니다. 적절한 범위는 [1.000, 1.011]입니다. 원래 구현에서와 같이 기본값은 1.0입니다. - rho (
float, 기본값 7.0) — EDM 논문에서 Karras sigma 스케줄을 계산하는 데 사용되는 매개변수입니다. 원래 구현에서와 같이 기본값은 7.0입니다. - clip_denoised (
bool, 기본값True) — denoised 출력을(-1, 1)범위로 클리핑할지 여부. - timesteps (
list또는np.ndarray또는torch.Tensor, 선택 사항) — 선택적으로 지정할 수 있는 명시적인 timestep 스케줄입니다. timesteps는 증가하는 순서로 제공되어야 합니다.
일관성 모델의 다단계 및 단일 단계 샘플링.
이 모델은 SchedulerMixin과 ConfigMixin을 상속합니다. 로딩 및 저장과 같은 모든 스케줄러에 대해 라이브러리가 구현하는 일반적 메서드에 대해서는 상위 클래스 문서를 확인하세요.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
지정된 timesteps의 noise schedule에 따라 원래 샘플에 노이즈를 추가합니다.
get_scalings
< source >( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]
consistency model 출력을 위한 스케일링 계수를 계산합니다.
get_scalings_for_boundary_condition
< source >( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]
논문 부록 C의 consistency model parameterization에서 경계 조건을 강제하기 위해 사용되는 scalings를 가져옵니다.
>
c_skip와c_out의 공식에서epsilon은sigma_min으로 설정됩니다.
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).
…
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
일관성 모델 입력을 (sigma**2 + sigma_data**2) ** 0.5로 스케일링합니다.
set_begin_index
< source >( begin_index: int = 0 )
… 스케줄러의 시작 인덱스를 설정합니다. 이 함수는 추론 전에 파이프라인에서 실행해야 합니다.
set_timesteps
< source >( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device] = Nonetimesteps: list[int] | None = None )
매개변수
- num_inference_steps (
int, 선택 사항) — 학습된 모델로 샘플을 생성할 때 사용되는 diffusion 단계 수입니다. - device (
str또는torch.device, 선택 사항) — timesteps를 이동할 대상 device입니다.None인 경우 timesteps는 이동되지 않습니다. - timesteps (
list[int], 선택 사항) — timesteps 사이의 간격을 자유롭게 지정하기 위해 사용하는 사용자 정의 timesteps입니다.None인 경우, timesteps 사이에 동일한 간격을 두는 기본 전략이 사용됩니다.timesteps가 전달되면num_inference_steps는None이어야 합니다.
추론 실행 전에 실행할 diffusion chain에 사용할 timesteps를 설정합니다.
sigma_to_t
< source >( sigmas: float | numpy.ndarray ) → np.ndarray
일관성 모델 입력을 위한 Karras sigmas에서 스케일된 timesteps를 가져옵니다.
단계
< source >( model_output: Tensortimestep: typing.Union[float, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → CMStochasticIterativeSchedulerOutput or tuple
매개변수
- model_output (
torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다. - timestep (
float또는torch.Tensor) — 확산 체인에서의 현재 timestep입니다. - sample (
torch.Tensor) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다. - generator (
torch.Generator, 선택 사항) — 난수 생성기입니다. - return_dict (
bool, 기본값True) — CMStochasticIterativeSchedulerOutput 또는tuple를 반환할지 여부.
반환값
CMStochasticIterativeSchedulerOutput 또는 tuple
return_dict가 True인 경우
CMStochasticIterativeSchedulerOutput이 반환되고,
그렇지 않으면 첫 번째 요소가 샘플 텐서인 튜플이 반환됩니다.
이전 시간 단계의 샘플을 SDE를 역방향으로 적용하여 예측합니다. 이 함수는 학습된 모델의 출력(대부분 예측된 노이즈)으로부터 확산 과정을 전파합니다.
CMStochasticIterativeSchedulerOutput
class diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput
< source >( prev_sample: Tensor )
스케줄러의 step 함수에 대한 출력 클래스입니다.