Diffusers documentation

FlowMapEulerDiscreteScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

FlowMapEulerDiscreteScheduler

FlowMapEulerDiscreteScheduler 는 flow-map-distilled diffusion 모델을 위한 Euler 스타일의 샘플러입니다. Flow-map 모델은 일관성 모델의 고정된 zt→zr\mathbf{z}_t \to \mathbf{z}_r 매핑이 아닌, 임의의 간격 전이를 학습합니다. zt→z0\mathbf{z}_t \to \mathbf{z}_0 스텝의 양쪽 끝점은 모두 호출자가 제공하며, 이를 통해 임의의 스텝 샘플링이 가능합니다. 단일 distilled checkpoint를 재학습 없이 1, 2, 4, 8, 16… NFE에서 평가할 수 있습니다.

이 스케줄러는 AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation에서 소개되었으며 AnyFlowPipeline 및 AnyFlowFARPipeline 통합과 함께 제공되지만, AnyFlow에 한정되지 않습니다. flow-map-distilled 체크포인트라면 모두 사용할 수 있습니다.

FlowMapEulerDiscreteScheduler

클래스 diffusers.FlowMapEulerDiscreteScheduler

< >

( num_train_timesteps: int = 1000shift: float = 1.0 )

매개변수

  • num_train_timesteps (int, 기본값 1000) — 기저 flow-map 모델을 학습하는 데 사용되는 diffusion 단계 수입니다.
  • shift (float, 기본값 1.0) — 추론 스케줄에 적용되는 곱셈 시간 단계 시프트입니다. shift=1.0은 항등 변환이며, 1.0보다 큰 값은 스케줄을 후속 단계에서 더 많은 노이즈 제거 방향으로 이동시킵니다(예: shift=5는 Wan2.1 기본값과 일치합니다).

flow-map-distilled diffusion 모델용 Euler 스타일 샘플러.

Flow-map 모델은 임의의 간격 전이를 학습합니다 zt→zrz_t \to z_r consistency 모델의 고정된 zt→z0z_t \to z_0 매핑 대신, 단일 증류된 체크포인트를 재학습 없이 1, 2, 4, 8, … NFE에서 평가할 수 있습니다. step 메서드는 샘플을 timestep 에서 r_timestep 으로 예측된 속도를 따라 진행시킵니다.

Yuchao Gu, Guian Fang 외 다수가 AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation에서 소개했습니다.

이 스케줄러는 SchedulerMixin과 ConfigMixin을 상속합니다. 모든 스케줄러에 대해 구현된 일반적 메서드(로드, 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.

apply_shift

< >

( sigmas: Tensor )

sigma 텐서에 구성된 시프트 변환을 적용합니다.

index_for_timestep

< >

( timestep: typing.Union[float, torch.FloatTensor] )

현재 스케줄에서 timestep의 인덱스를 반환하며, 스케줄에 없으면 None을 반환합니다.

self.timesteps를 기준으로 작은 fp 허용 오차 내에서 조회가 수행됩니다. 선형 timesteps = sigmas * num_train_timesteps 관계를 가정하지 않고 대응하는 sigma를 복원하는 데 사용됩니다. 이를 통해 커스텀 스케줄(예: 비선형 시프트, 수동으로 설정된 timesteps)도 올바르게 해석됩니다.

scale_model_input

< >

( sample: Tensor*args**kwargs )

No-op identity scaling. 다른 Diffusers 스케줄러와의 API 호환성을 위해 제공됩니다.

scale_noise

< >

( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )

timestep의 정규화된 값에 따라 sample을 noise 방향으로 선형 보간합니다.

set_begin_index

< >

( begin_index: int = 0 )

스케줄러의 시작 인덱스를 설정합니다. 중간 스케줄에서 시작하는 파이프라인(예: image-to-image)은 set_timesteps와 첫 번째 step 사이에 이를 호출하여 롤아웃을 고정합니다.

set_timesteps

< >

( num_inference_steps: typing.Optional[int] = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = None )

매개변수

  • num_inference_steps (int, 선택 사항) — 추론 단계 수. None인 경우 sigmas 또는 timesteps를 전달해야 합니다.
  • device (str 또는 torch.device, 선택 사항) — self.sigmas / self.timesteps의 대상 디바이스.
  • sigmas (List[float], 선택 사항) — 길이가 num_inference_steps인 사용자 지정 sigma 스케줄입니다. 마지막 0 sigma는 자동으로 추가됩니다. 설정된 shift가 이 위에 적용됩니다.
  • timesteps (List[float], 선택 사항) — self.timesteps와 동일한 단위(즉, num_train_timesteps로 스케일된 값)를 가진, 길이가 num_inference_steps인 사용자 지정 timestep 스케줄입니다. 내부적으로 sigmas로 변환됩니다. sigmas와 timesteps가 모두 전달되면, 두 값의 길이가 일치해야 합니다.

추론 timestep 스케줄을 구성합니다.

self.sigmas를 내부적으로 추적하며, 길이는 num_inference_steps + 1입니다(기본적으로 1.0에서 0.0까지의 linspace에 구성된 shift가 적용됨). self.timesteps는 num_train_timesteps으로 스케일링된 첫 번째 num_inference_steps개의 sigmas를 노출합니다. 즉, 추론 단계마다 하나의 timestep을 가지며 FlowMatchEulerDiscreteScheduler와 일치합니다. 마지막 sigma(0)는 마지막 단계의 암시적인 r-endpoint이며, sigmas / timesteps가 사용자에 의해 제공될 경우 자동으로 추가됩니다.

단계

< >

( model_output: FloatTensortimestep: typing.Union[float, torch.FloatTensor]sample: FloatTensorr_timestep: typing.Union[float, torch.FloatTensor, NoneType] = Nonereturn_dict: bool = True ) → [FlowMapEulerDiscreteSchedulerOutput] or tuple

매개변수

  • model_output (torch.Tensor) — flow-map 모델의 직접 출력(예측된 평균 속도).
  • timestep (float 또는 torch.Tensor) — self.timesteps와 동일한 단위인 소스 timestep t.
  • sample (torch.Tensor) — 현재 샘플 ztz_t.
  • r_timestep (float 또는 torch.Tensor, optional) — 목표 timestep r. None인 경우 기본값은 스케줄의 다음 timestep입니다. any-step sampling을 위해 명시적인 값을 전달하세요. r_timestep == timestep이면 아무 동작도 수행하지 않습니다.
  • return_dict (bool, 기본값 True) — [FlowMapEulerDiscreteSchedulerOutput] (기본값) 또는 일반 튜플을 반환할지 여부.

반환값

[FlowMapEulerDiscreteSchedulerOutput] 또는 tuple

return_dict=True인 경우, prev_sample가 zrz_r인 [FlowMapEulerDiscreteSchedulerOutput]을 반환합니다. 그렇지 않으면 1-튜플 (prev_sample,)을 반환합니다.

모델이 예측한 속도를 사용하여 timestep에서 r_timestep까지 sample을 진행합니다.

표준 Euler 스케줄러와 달리, 구간의 양 끝점은 호출자가 지정할 수 있어 임의의 단계 샘플링이 가능합니다. 단일 모델 호출로 t에서 선택한 임의의 목표 r(원샷 생성을 위한 r=0 포함)까지 한 단계 이동할 수 있습니다. r_timestep이 생략되면 스케줄의 다음 타임스텝이 기본값으로 사용되며(FlowMatchEulerDiscreteScheduler의 의미론과 일치합니다).

내부적으로 소스 및 대상 시그마는 입력 타임스텝을 num_train_timesteps로 나누는 대신 index_for_timestep을 통해 self.sigmas를 인덱싱하여 복원되므로, 타임스텝/시그마 관계가 비선형인 모든 스케줄(예: 사용자 정의 시프트)이 정확히 유지됩니다. 스케줄 밖의 r_timestep에 대해서는 스케줄러가 r_timestep / num_train_timesteps로 폴백하여 스케줄 외부의 any-step 샘플링이 계속 지원됩니다.

Update on GitHub