# FlowMatchEulerDiscreteScheduler

`FlowMatchEulerDiscreteScheduler`는 [Stable Diffusion 3](https://huggingface.co/papers/2403.03206)에서 소개된 flow-matching 샘플링을 기반으로 합니다.

## FlowMatchEulerDiscreteScheduler[[diffusers.FlowMatchEulerDiscreteScheduler]]

#### diffusers.FlowMatchEulerDiscreteScheduler[[diffusers.FlowMatchEulerDiscreteScheduler]]

```python
diffusers.FlowMatchEulerDiscreteScheduler(num_train_timesteps: int = 1000, shift: float = 1.0, use_dynamic_shifting: bool = False, base_shift: float | None = 0.5, max_shift: float | None = 1.15, base_image_seq_len: int = 256, max_image_seq_len: int = 4096, invert_sigmas: bool = False, shift_terminal: float = None, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, time_shift_type: typing.Literal['exponential', 'linear'] = 'exponential', stochastic_sampling: bool = False)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L48)

**매개변수:**

num_train_timesteps (`int`, 기본값 1000) : 모델을 학습하기 위한 diffusion step 수입니다.

shift (`float`, 기본값 1.0) : 타임스텝 스케줄의 시프트 값입니다.

use_dynamic_shifting (`bool`, 기본값 False) : 이미지 해상도에 따라 타임스텝 시프팅을 실시간으로 적용할지 여부.

base_shift (`float`, 기본값 0.5) : 이미지 생성을 안정화하는 값입니다. `base_shift`를 증가시키면 변이가 줄어들고 이미지가 원하는 출력과 더 일관되게 생성됩니다.

max_shift (`float`, 기본값 1.15) : 잠재 벡터에 허용되는 값 변경량. `max_shift`을 증가시키면 더 많은 변이가 촉진되며 이미지가 더 과장되거나 스타일화될 수 있습니다.

base_image_seq_len (`int`, 기본값 256) : 기본 이미지 시퀀스 길이입니다.

max_image_seq_len (`int`, 기본값 4096) : 최대 이미지 시퀀스 길이입니다.

invert_sigmas (`bool`, 기본값 False) : 시그마를 반전할지 여부.

shift_terminal (`float`, 기본값 None) : 시프트된 타임스텝 스케줄의 끝값입니다.

use_karras_sigmas (`bool`, 기본값 False) : 샘플링 중 노이즈 스케줄의 단계 크기에 Karras sigmas를 사용할지 여부.

use_exponential_sigmas (`bool`, 기본값 False) : 샘플링 중 노이즈 스케줄의 단계 크기에 지수 시그마를 사용할지 여부.

use_beta_sigmas (`bool`, 기본값 False) : 샘플링 중 노이즈 스케줄의 스텝 크기에 베타 시그마를 사용할지 여부.

time_shift_type (`str`, 기본값 "exponential") : 적용할 동적 해상도 의존 타임스텝 시프트의 유형입니다. "exponential" 또는 "linear" 중 하나여야 합니다.

stochastic_sampling (`bool`, 기본값 False) : 확률적 샘플링을 사용할지 여부.

Euler 스케줄러.

이 모델은 [SchedulerMixin](/docs/diffusers/main/ko/api/schedulers/overview#diffusers.SchedulerMixin)과 [ConfigMixin](/docs/diffusers/main/ko/api/configuration#diffusers.ConfigMixin)을 상속합니다. 로딩 및 저장과 같은 모든 스케줄러에 대해 라이브러리가 구현하는 일반적 메서드에 대해서는 상위 클래스 문서를 확인하세요.

#### index_for_timestep[[diffusers.FlowMatchEulerDiscreteScheduler.index_for_timestep]]

```python
index_for_timestep(timestep: typing.Union[float, torch.FloatTensor], schedule_timesteps: typing.Optional[torch.FloatTensor] = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L393)

**매개변수:**

timestep (`float` 또는 `torch.FloatTensor`) : 인덱스를 찾을 시간 단계(timestep).

schedule_timesteps (`torch.FloatTensor`, *선택 사항*) : 검증할 스케줄 타임스텝입니다. `None`인 경우, 스케줄러의 타임스텝이 사용됩니다.

**반환값:** `int`

timestep의 인덱스.

…

#### scale_noise[[diffusers.FlowMatchEulerDiscreteScheduler.scale_noise]]

```python
scale_noise(sample: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], noise: typing.Optional[torch.FloatTensor] = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L188)

**매개변수:**

sample (`torch.FloatTensor`) : 입력 샘플.

timestep (`torch.FloatTensor`) : 확산 체인에서의 현재 시간 단계(timestep).

noise (`torch.FloatTensor`) : 노이즈 텐서.

**반환값:** `torch.FloatTensor`

스케일된 입력 샘플.

Flow-matching의 forward process

#### set_begin_index[[diffusers.FlowMatchEulerDiscreteScheduler.set_begin_index]]

```python
set_begin_index(begin_index: int = 0)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L168)

**매개변수:**

begin_index (`int`, 기본값 `0`) : 스케줄러의 시작 인덱스입니다.

… 스케줄러의 시작 인덱스를 설정합니다. 이 함수는 추론 전에 파이프라인에서 실행해야 합니다.

#### set_shift[[diffusers.FlowMatchEulerDiscreteScheduler.set_shift]]

```python
set_shift(shift: float)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L178)

**매개변수:**

shift (`float`) : 설정할 시프트 값.

Scheduler의 shift 값을 설정합니다.

#### set_timesteps[[diffusers.FlowMatchEulerDiscreteScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int | None = None, device: typing.Union[str, torch.device] = None, sigmas: list[float] | None = None, mu: float | None = None, timesteps: list[float] | None = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L283)

**매개변수:**

num_inference_steps (`int`, *선택 사항*) : 사전 학습된 모델로 샘플을 생성할 때 사용되는 확산 단계 수입니다.

device (`str` 또는 `torch.device`, *선택 사항*) : timesteps를 이동할 대상 device입니다. `None`인 경우 timesteps는 이동되지 않습니다.

sigmas (`list[float]`, *선택 사항*) : 각 diffusion step에 사용할 sigmas의 커스텀 값입니다. `None`인 경우 sigmas가 자동으로 계산됩니다.

mu (`float`, *선택 사항*) : 해상도 의존적 timestep shifting을 수행할 때 sigmas에 적용되는 시프트의 양을 결정합니다.

timesteps (`list[float]`, *선택 사항*) : 각 diffusion step에 사용할 timesteps의 사용자 지정 값입니다. `None`인 경우 timesteps가 자동으로 계산됩니다.

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

#### step[[diffusers.FlowMatchEulerDiscreteScheduler.step]]

```python
step(model_output: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], sample: FloatTensor, s_churn: float = 0.0, s_tmin: float = 0.0, s_tmax: float = inf, s_noise: float = 1.0, generator: typing.Optional[torch.Generator] = None, per_token_timesteps: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L432)

**매개변수:**

model_output (`torch.FloatTensor`) : 학습된 diffusion 모델의 직접 출력입니다.

timestep (`float`) : 확산 체인에서의 현재 이산 시간 단계.

sample (`torch.FloatTensor`) : 확산 과정에서 생성된 샘플의 현재 인스턴스.

s_churn (`float`) --

s_tmin (`float`) --

s_tmax (`float`) --

s_noise (`float`, 기본값 1.0) : 샘플에 추가되는 노이즈의 스케일링 계수.

generator (`torch.Generator`, *선택 사항*) : 난수 생성기입니다.

per_token_timesteps (`torch.Tensor`, *선택 사항*) : 샘플의 각 토큰에 대한 timesteps입니다.

return_dict (`bool`, 기본값 `True`) : `FlowMatchEulerDiscreteSchedulerOutput` 또는 tuple을 반환할지 여부.

**반환값:** `FlowMatchEulerDiscreteSchedulerOutput` 또는 `tuple`

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

이전 시간 단계의 샘플을 SDE를 역방향으로 적용하여 예측합니다. 이 함수는 학습된 모델의 출력(대부분 예측된 노이즈)으로부터 확산 과정을 전파합니다.

#### stretch_shift_to_terminal[[diffusers.FlowMatchEulerDiscreteScheduler.stretch_shift_to_terminal]]

```python
stretch_shift_to_terminal(t: Tensor)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L262)

**매개변수:**

t (`torch.Tensor`) : 늘리고 시프트할 타임스텝의 텐서.

**반환값:** `torch.Tensor`

최종 값이 `self.config.shift_terminal`과 같도록 조정된 timesteps의 텐서입니다.

`shift_terminal` 설정 값에서 종료되도록 타임스텝 스케줄을 늘리고 이동시킵니다.

참고: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

#### time_shift[[diffusers.FlowMatchEulerDiscreteScheduler.time_shift]]

```python
time_shift(mu: float, sigma: float, t: Tensor)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L241)

**매개변수:**

mu (`float`) : 시간 시프트를 위한 mu 매개변수.

sigma (`float`) : 시간 시프트를 위한 sigma 매개변수.

t (`torch.Tensor`) : 입력 timesteps.

**반환값:** `torch.Tensor`

시간이 이동된 타임스텝

sigmas에 시간 시프트를 적용합니다.

