Buckets:

mishig's picture
|
download
raw
14.3 kB
# EDMEulerScheduler
Công thức Karras của trình lập lịch Euler (Thuật toán 2) 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ự. Đây là một trình lập lịch nhanh, thường có thể tạo ra các kết quả tốt chỉ trong 20-30 bước. Trình lập lịch này dựa trên bản triển khai [k-diffusion](https://github.com/crowsonkb/k-diffusion/blob/481677d114f6ea445aa009cf5bd7a9cdee909e47/k_diffusion/sampling.py#L51) gốc của [Katherine Crowson](https://github.com/crowsonkb/).
## EDMEulerScheduler[[diffusers.EDMEulerScheduler]]
#### diffusers.EDMEulerScheduler[[diffusers.EDMEulerScheduler]]
```python
diffusers.EDMEulerScheduler(sigma_min: float = 0.002, sigma_max: float = 80.0, sigma_data: float = 0.5, sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras', num_train_timesteps: int = 1000, prediction_type: typing.Literal['epsilon', 'v_prediction'] = 'epsilon', rho: float = 7.0, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero')
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L49)
**Tham số:**
sigma_min (`float`, *optional*, mặc định là `0.002`) : Độ lớn nhiễu tối thiểu trong lịch sigma. Giá trị này được đặt là 0.002 trong bài báo EDM [1]; một khoảng hợp lý là [0, 10].
sigma_max (`float`, *optional*, mặc định là `80.0`) : Độ lớn nhiễu tối đa trong lịch sigma. Giá trị này được đặt là 80.0 trong bài báo EDM [1]; một khoảng hợp lý là [0.2, 80.0].
sigma_data (`float`, *tuỳ chọn*, mặc định là `0.5`) : Độ lệch chuẩn của phân phối dữ liệu. Giá trị này được đặt là 0.5 trong bài báo EDM [1].
sigma_schedule (`Literal["karras", "exponential"]`, *tùy chọn*, mặc định là `"karras"`) : Lịch sigma để tính toán `sigmas`. Mặc định, chúng tôi sử dụng lịch được giới thiệu trong bài báo EDM (https://huggingface.co/papers/2206.00364). Lịch `"exponential"` đã được tích hợp trong mô hình này: https://huggingface.co/stabilityai/cosxl.
num_train_timesteps (`int`, *tuỳ chọn*, mặc định là `1000`) : Số bước khuếch tán để huấn luyện mô hình.
prediction_type (`Literal["epsilon", "v_prediction"]`, *tùy chọn*, mặc định là `"epsilon"`) : Kiểu dự đoán của hàm scheduler. `"epsilon"` dự đoán nhiễu của quá trình khuếch tán, và `"v_prediction"` (xem mục 2.4 của bài báo [Imagen Video](https://huggingface.co/papers/2210.02303)).
rho (`float`, *tuỳ chọn*, mặc định là `7.0`) : Tham số rho được sử dụng để tính lịch sigma Karras, được đặt là 7.0 trong bài báo EDM [1].
final_sigmas_type (`Literal["zero", "sigma_min"]`, *tùy chọn*, mặc định là `"zero"`) : Giá trị `sigma` cuối cùng cho lịch trình nhiễu trong quá trình lấy mẫu. Nếu là `"sigma_min"`, sigma cuối cùng sẽ giống với sigma cuối cùng trong lịch trình huấn luyện. Nếu là `"zero"`, sigma cuối cùng được đặt thành 0.
Triển khai trình lập lịch Euler theo công thức EDM như được trình bày trong Karras et al. 2022 [1].
[1] Karras, Tero, et al. "Elucidating the Design Space of Diffusion-Based Generative Models." https://huggingface.co/papers/2206.00364
Mô hình này kế thừa từ [SchedulerMixin](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin) và [ConfigMixin](/docs/diffusers/main/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.EDMEulerScheduler.add_noise]]
```python
add_noise(original_samples: Tensor, noise: Tensor, timesteps: Tensor)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L536)
**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.EDMEulerScheduler.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/main/src/diffusers/schedulers/scheduling_edm_euler.py#L381)
**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.
#### precondition_inputs[[diffusers.EDMEulerScheduler.precondition_inputs]]
```python
precondition_inputs(sample: Tensor, sigma: typing.Union[float, torch.Tensor])
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L177)
**Tham số:**
sample (`torch.Tensor`) : Tensor mẫu đầu vào cần tiền xử lý.
sigma (`float` hoặc `torch.Tensor`) : Giá trị sigma (mức độ nhiễu) hiện tại.
**Trả về:** `torch.Tensor`
Mẫu đầu vào đã được điều chỉnh tỷ lệ.
Tiền xử lý mẫu đầu vào bằng cách mở rộng tỷ lệ của nó theo công thức EDM.
#### precondition_noise[[diffusers.EDMEulerScheduler.precondition_noise]]
```python
precondition_noise(sigma: typing.Union[float, torch.Tensor])
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L195)
**Tham số:**
sigma (`float` hoặc `torch.Tensor`) : Giá trị sigma (mức độ nhiễu) cần tiền xử lý.
**Trả về:** `torch.Tensor`
Giá trị nhiễu có điều kiện được tính bằng `0.25 * log(sigma)`.
Tiền điều chỉnh mức nhiễu bằng cách áp dụng phép biến đổi logarit.
#### precondition_outputs[[diffusers.EDMEulerScheduler.precondition_outputs]]
```python
precondition_outputs(sample: Tensor, model_output: Tensor, sigma: typing.Union[float, torch.Tensor])
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L214)
**Tham số:**
sample (`torch.Tensor`) : Tensor mẫu đầu vào.
model_output (`torch.Tensor`) : Đầu ra trực tiếp từ mô hình khuếch tán đã học.
sigma (`float` hoặc `torch.Tensor`) : Giá trị sigma (mức độ nhiễu) hiện tại.
**Trả về:** `torch.Tensor`
Mẫu khử nhiễu được tính toán bằng cách kết nối nối tắt và tỷ lệ đầu ra.
Tiền điều kiện hóa các đầu ra của mô hình theo công thức EDM.
#### scale_model_input[[diffusers.EDMEulerScheduler.scale_model_input]]
```python
scale_model_input(sample: Tensor, timestep: typing.Union[float, torch.Tensor])
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L249)
**Tham số:**
sample (`torch.Tensor`) : 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.
Thang đo đầu vào của mô hình khử nhiễu để khớp với thuật toán Euler. Đảm bảo khả năng hoán đổi với các trình lập lịch cần thang đo đầ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.EDMEulerScheduler.set_begin_index]]
```python
set_begin_index(begin_index: int = 0)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L167)
**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.EDMEulerScheduler.set_timesteps]]
```python
set_timesteps(num_inference_steps: int = None, device: typing.Union[str, torch.device] = None, sigmas: typing.Union[list[float], torch.Tensor, NoneType] = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L273)
**Tham số:**
num_inference_steps (`int`, *tuỳ chọn*) : 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` hoặc `torch.device`, *tuỳ chọn*) : 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.
sigmas (`torch.Tensor | list[float]`, *tùy chọn*) : Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng.
Đặ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.EDMEulerScheduler.step]]
```python
step(model_output: Tensor, timestep: typing.Union[float, torch.Tensor], sample: Tensor, 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, return_dict: bool = True, pred_original_sample: typing.Optional[torch.Tensor] = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L427)
**Tham số:**
model_output (`torch.Tensor`) : Đầu ra trực tiếp từ mô hình khuếch tán đã học.
timestep (`float` hoặc `torch.Tensor`) : 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.
s_churn (`float`, *tùy chọn*, mặc định là `0.0`) : Mức độ ngẫu nhiên được thêm vào ở mỗi bước. Giá trị cao hơn sẽ thêm nhiều nhiễu hơn.
s_tmin (`float`, *tuỳ chọn*, mặc định là `0.0`) : Ngưỡng sigma tối thiểu mà dưới mức đó sẽ không thêm nhiễu.
s_tmax (`float`, *tuỳ chọn*, mặc định là `float("inf")`) : Ngưỡng sigma tối đa, vượt quá ngưỡng này sẽ không thêm nhiễu.
s_noise (`float`, *tùy chọn*, mặc định là `1.0`) : Hệ số tỷ lệ cho nhiễu được thêm vào mẫu.
generator (`torch.Generator`, *tùy chọn*) : Bộ tạo số ngẫu nhiên để đảm bảo khả năng tái lập.
return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về [EDMEulerSchedulerOutput](/docs/diffusers/main/vi/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) hay tuple hay không.
pred_original_sample (`torch.Tensor`, *tùy chọn*) : Mẫu khử nhiễu dự đoán từ bước trước đó. Nếu được cung cấp, sẽ bỏ qua việc tính toán lại.
**Trả về:** [EDMEulerSchedulerOutput](/docs/diffusers/main/vi/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) hoặc `tuple`
Nếu `return_dict` là `True`, một [EDMEulerSchedulerOutput](/docs/diffusers/main/vi/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) sẽ được trả về, ngược lại một tuple sẽ được trả về trong đó phần tử đầu tiên là tensor mẫu trước đó và phần tử thứ hai là tensor mẫu gốc được dự đoán.
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).
## EDMEulerSchedulerOutput[[diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput]]
#### diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput[[diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput]]
```python
diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput(prev_sample: Tensor, pred_original_sample: typing.Optional[torch.Tensor] = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_euler.py#L32)
**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.
pred_original_sample (`torch.Tensor` có shape `(batch_size, num_channels, height, width)` đối với ảnh) : Mẫu khử nhiễu dự đoán `(x_{0})` dựa trên đầu ra của mô hình tại bước thời gian hiện tại. `pred_original_sample` có thể được dùng để xem trước tiến độ hoặc cho guidance.
Lớp đầu ra cho kết quả của hàm `step` của trình lập lịch.

Xet Storage Details

Size:
14.3 kB
·
Xet hash:
8a600b4473e28ee396d1303d4dc276ca1a70fd07e828ad4a6908f45d9430c3b3

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.