Diffusers documentation
EDMEulerScheduler
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 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 gốc của Katherine Crowson.
EDMEulerScheduler
lớp diffusers.EDMEulerScheduler
< source >( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'v_prediction'] = 'epsilon'rho: float = 7.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )
Tham số
- sigma_min (
float, tùy chọn, 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, tùy chọn, 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, tùy 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ánsigmas. 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, tùy 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") — Loại 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). - rho (
float, tùy 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ịsigmacuố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 và 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 trình lập lịch, chẳng hạn như tải và lưu.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
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
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Tham số
- timestep (
floathoặctorch.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ụngself.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
< source >( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
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
< source >( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
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
< source >( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
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
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
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
< source >( begin_index: int = 0 )
Đặ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
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Union[list[float], torch.Tensor, NoneType] = None )
Tham số
- num_inference_steps (
int, tùy chọn) — Số bước khuếch tán được sử dụng khi tạo mẫu bằng mô hình đã được huấn luyện trước. - device (
strhoặctorch.device, tùy 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 sigmas 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 khinum_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
< source >( model_output: Tensortimestep: typing.Union[float, torch.Tensor]sample: Tensors_churn: float = 0.0s_tmin: float = 0.0s_tmax: float = infs_noise: float = 1.0generator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = Truepred_original_sample: typing.Optional[torch.Tensor] = None ) → EDMEulerSchedulerOutput or tuple
Tham số
- model_output (
torch.Tensor) — Đầu ra trực tiếp từ mô hình khuếch tán đã học. - timestep (
floathoặctorch.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 thể hiện hiện tại của mẫu đượ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, tùy 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, tùy chọn, mặc định làfloat("inf")) — Ngưỡng sigma tối đa mà trên đó không có nhiễu nào được thêm vào. - 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 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 hoặc tuple
Nếu return_dict là True, một 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
lớp diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )
Tham số
- prev_sample (
torch.Tensorcó shape(batch_size, num_channels, height, width)đối với ảnh) — Mẫu đã tính(x_{t-1})của bước thời gian trước đó.prev_samplenên được sử 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.Tensorcó hình dạng(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_samplecó thể được sử dụng để xem trước tiến độ hoặc cho việc dẫn hướng.
Lớp đầu ra cho kết quả của hàm step của trình lập lịch.