# HeunDiscreteScheduler

Trình lập lịch Heun (Thuật toán 1) được lấy từ bài báo [Elucidating the Design Space of Diffusion-Based Generative Models](https://huggingface.co/papers/2206.00364) của Karras và cộng sự. Trình lập lịch này được chuyển từ thư viện [k-diffusion](https://github.com/crowsonkb/k-diffusion) và do [Katherine Crowson](https://github.com/crowsonkb/) tạo ra.

## HeunDiscreteScheduler[[diffusers.HeunDiscreteScheduler]]

#### diffusers.HeunDiscreteScheduler[[diffusers.HeunDiscreteScheduler]]

```python
diffusers.HeunDiscreteScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.00085, beta_end: float = 0.012, beta_schedule: str = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, prediction_type: str = 'epsilon', use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, clip_sample: bool = False, clip_sample_range: float = 1.0, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace', steps_offset: int = 0)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_heun_discrete.py#L103)

**Tham số:**

num_train_timesteps (`int`, mặc định là 1000) : Số bước khuếch tán để huấn luyện mô hình.

beta_start (`float`, mặc định là 0.0001) : Giá trị `beta` ban đầu của suy luận.

beta_end (`float`, mặc định là 0.02) : Giá trị `beta` cuối cùng.

beta_schedule (`"linear"`, `"scaled_linear"`, `"squaredcos_cap_v2"`, hoặc `"exp"`, mặc định là `"linear"`) : Lịch beta, một ánh xạ từ một khoảng beta đến một chuỗi các beta để bước qua mô hình. Chọn từ `linear`, `scaled_linear`, `squaredcos_cap_v2`, hoặc `exp`.

trained_betas (`np.ndarray`, *tùy chọn*) : Truyền một mảng betas trực tiếp vào constructor để bỏ qua `beta_start` và `beta_end`.

prediction_type (`"epsilon"`, `"sample"`, or `"v_prediction"`, defaults to `"epsilon"`, *optional*) : Prediction type of the scheduler function; can be `epsilon` (predicts the noise of the diffusion process), `sample` (directly predicts the noisy sample`) or `v_prediction` (see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper).

clip_sample (`bool`, mặc định là `True`) : Cắt mẫu dự đoán để đảm bảo ổn định về mặt số học.

clip_sample_range (`float`, mặc định là 1.0) : Độ lớn tối đa cho việc cắt mẫu. Chỉ có hiệu lực khi `clip_sample=True`.

use_karras_sigmas (`bool`, *tùy chọn*, mặc định là `False`) : Có sử dụng Karras sigmas cho kích thước bước trong lịch trình nhiễu trong quá trình lấy mẫu hay không. Nếu `True`, các sigmas sẽ được xác định theo một chuỗi các mức nhiễu {σi}.

use_exponential_sigmas (`bool`, *tùy chọn*, mặc định là `False`) : Có sử dụng các sigma mũ cho kích thước bước trong lịch trình nhiễu trong quá trình lấy mẫu hay không.

use_beta_sigmas (`bool`, *tuỳ chọn*, mặc định là `False`) : Có sử dụng beta sigmas cho kích thước bước trong lịch trình nhiễu trong quá trình lấy mẫu hay không. Xem [Beta Sampling is All You Need](https://huggingface.co/papers/2407.12173) để biết thêm thông tin.

timestep_spacing (`"linspace"`, `"leading"`, hoặc `"trailing"`, mặc định là `"linspace"`) : Cách các bước thời gian (timesteps) nên được điều chỉnh. Xem Bảng 2 trong [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) để biết thêm thông tin.

steps_offset (`int`, mặc định là 0) : Một giá trị bù được cộng vào các bước suy luận, theo yêu cầu của một số họ mô hình.

Trình lập lịch với các bước Heun cho các lịch beta rời rạc.

Mô hình này kế thừa từ [SchedulerMixin](/docs/diffusers/v0.43.0/vi/api/schedulers/overview#diffusers.SchedulerMixin) và [ConfigMixin](/docs/diffusers/v0.43.0/vi/api/configuration#diffusers.ConfigMixin). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các scheduler, chẳng hạn như tải và lưu.

#### add_noise[[diffusers.HeunDiscreteScheduler.add_noise]]

```python
add_noise(original_samples: Tensor, noise: Tensor, timesteps: Tensor)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_heun_discrete.py#L662)

**Tham số:**

original_samples (`torch.Tensor`) : Các mẫu gốc mà nhiễu sẽ được thêm vào.

noise (`torch.Tensor`) : Tensor nhiễu cần thêm vào các mẫu gốc.

timesteps (`torch.Tensor`) : Các bước thời gian (timesteps) để thêm nhiễu, xác định mức nhiễu từ lịch trình (schedule).

**Trả về:** `torch.Tensor`

Các mẫu nhiễu với nhiễu được thêm vào, được điều chỉnh theo lịch trình bước thời gian.

Thêm nhiễu vào các mẫu gốc theo lịch trình nhiễu tại các bước thời gian được chỉ định.

#### index_for_timestep[[diffusers.HeunDiscreteScheduler.index_for_timestep]]

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

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_heun_discrete.py#L198)

**Tham số:**

timestep (`float` hoặc `torch.Tensor`) : Giá trị bước thời gian cần tìm trong lịch trình.

schedule_timesteps (`torch.Tensor`, *tùy chọn*) : Lịch trình bước thời gian để tìm kiếm. Nếu là `None`, sẽ sử dụng `self.timesteps`.

**Trả về:** `int`

Chỉ số của bước thời gian trong lịch trình. Đối với bước đầu tiên, trả về chỉ số thứ hai nếu có nhiều kết quả khớp để tránh bỏ qua một sigma khi bắt đầu giữa lịch trình (ví dụ: cho image-to-image).

Tìm chỉ số của một bước thời gian (timestep) cho trước trong lịch trình bước thời gian.

#### scale_model_input[[diffusers.HeunDiscreteScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, timestep: typing.Union[float, torch.Tensor])
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_heun_discrete.py#L261)

**Tham số:**

sample (`torch.Tensor`) : Mẫu đầu vào.

timestep (`float` hoặc `torch.Tensor`) : Bước thời gian hiện tại trong chuỗi khuếch tán.

**Trả về:** `torch.Tensor`

Một mẫu đầu vào đã được chuẩn hóa.

Đảm bảo khả năng hoán đổi với các trình lập lịch cần mở rộng đầu vào của mô hình khử nhiễu tùy thuộc vào bước thời gian hiện tại.

#### set_begin_index[[diffusers.HeunDiscreteScheduler.set_begin_index]]

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

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_heun_discrete.py#L251)

**Tham số:**

begin_index (`int`, mặc định là `0`) : Chỉ số bắt đầu cho trình lập lịch.

Đặt chỉ số bắt đầu cho trình lập lịch. Hàm này nên được chạy từ pipeline trước khi suy luận.

#### set_timesteps[[diffusers.HeunDiscreteScheduler.set_timesteps]]

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

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_heun_discrete.py#L287)

**Tham số:**

num_inference_steps (`int`, *tùy chọn*, mặc định là `None`) : Số bước khuếch tán được sử dụng khi tạo mẫu bằng một mô hình đã được huấn luyện trước.

device (`str`, `torch.device`, *tuỳ chọn*, mặc định là `None`) : Thiết bị mà các bước thời gian (timesteps) sẽ được chuyển đến. Nếu là `None`, các bước thời gian sẽ không được chuyển.

num_train_timesteps (`int`, *tuỳ chọn*, mặc định là `None`) : Số bước khuếch tán được sử dụng khi huấn luyện mô hình. Nếu là `None`, thuộc tính `num_train_timesteps` mặc định sẽ được sử dụng.

timesteps (`list[int]`, *optional*) : Các bước thời gian tùy chỉnh được sử dụng để hỗ trợ khoảng cách tùy ý giữa các bước thời gian. Nếu là `None`, các bước thời gian sẽ được tạo dựa trên thuộc tính `timestep_spacing`. Nếu `timesteps` được truyền vào, `num_inference_steps` phải là `None`, và thuộc tính `timestep_spacing` sẽ bị bỏ qua.

Đặt các bước thời gian rời rạc được sử dụng cho chuỗi khuếch tán (cần chạy trước khi suy luận).

#### bước[[diffusers.HeunDiscreteScheduler.step]]

```python
step(model_output: typing.Union[torch.Tensor, numpy.ndarray], timestep: typing.Union[float, torch.Tensor], sample: typing.Union[torch.Tensor, numpy.ndarray], return_dict: bool = True)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_heun_discrete.py#L558)

**Tham số:**

model_output (`torch.Tensor`) : Đầu ra trực tiếp từ mô hình khuếch tán đã học.

timestep (`float`) : Bước thời gian rời rạc hiện tại trong chuỗi khuếch tán.

sample (`torch.Tensor`) : Một bản sao mẫu hiện tại được tạo ra bởi quá trình khuếch tán.

return_dict (`bool`) : Có nên trả về `HeunDiscreteSchedulerOutput` hay tuple hay không.

**Trả về:** `HeunDiscreteSchedulerOutput` hoặc `tuple`

If return_dict is `True`, `HeunDiscreteSchedulerOutput` is returned, otherwise a tuple is returned where the first element is the sample tensor.

Dự đoán mẫu từ bước thời gian trước đó bằng cách đảo ngược SDE. Hàm này lan truyền quá trình khuếch tán từ các đầu ra của mô hình đã học (thường nhất là nhiễu được dự đoán).

## SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

#### diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

```python
diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_utils.py#L66)

**Tham số:**

prev_sample (`torch.Tensor` có shape `(batch_size, num_channels, height, width)` đối với ảnh) : Mẫu `(x_{t-1})` đã tính của bước thời gian trước đó. `prev_sample` nên được dùng làm đầu vào mô hình tiếp theo trong vòng lặp khử nhiễu.

Lớp cơ sở cho kết quả của hàm `step` của một trình lập lịch.

