Diffusers documentation

EDMEulerScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

< >

( 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á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, 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ị 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 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

< >

( 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

< >

( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int

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

< >

( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

Tham số

  • sample (torch.Tensor) — Tensor mẫu đầu vào để tiền điều kiện.
  • 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

< >

( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

Tham số

  • sigma (float hoặc torch.Tensor) — Giá trị sigma (mức độ nhiễu) cần tiền điều kiện.

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

< >

( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

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

< >

( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor

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

< >

( begin_index: int = 0 )

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

< >

( 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 (str hoặc torch.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 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

< >

( 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 (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 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

< >

( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )

Tham số

  • prev_sample (torch.Tensor có 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_sample nê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.Tensor có 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_sample có 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.

Update on GitHub