Diffusers documentation

DEISMultistepScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DEISMultistepScheduler

Diffusion Exponential Integrator Sampler (DEIS) được đề xuất trong Fast Sampling of Diffusion Models with Exponential Integrator bởi Qinsheng Zhang và Yongxin Chen. DEISMultistepScheduler là một bộ giải nhanh bậc cao cho các phương trình vi phân thường (ODE) của mô hình khuếch tán.

Cài đặt này thay đổi công thức khớp đa thức trong không gian log-rho thay vì không gian t tuyến tính ban đầu trong bài báo DEIS. Sự thay đổi này cho phép có các hệ số dạng đóng cho phép cập nhật đa bước mũ thay vì phải dựa vào bộ giải số.

Tóm tắt từ bài báo là:

Vài năm qua đã chứng kiến thành công lớn của các mô hình Diffusion~(DMs) trong việc tạo ra các mẫu có độ trung thực cao trong các tác vụ mô hình hóa sinh. Một hạn chế chính của DM là quy trình lấy mẫu chậm chạp, thường đòi hỏi hàng trăm đến hàng nghìn bước rời rạc hóa thời gian của quá trình diffusion đã học để đạt được độ chính xác mong muốn. Mục tiêu của chúng tôi là phát triển một phương pháp lấy mẫu nhanh cho DMs với số bước ít hơn nhiều trong khi vẫn giữ được chất lượng mẫu cao. Để đạt được điều này, chúng tôi phân tích có hệ thống quy trình lấy mẫu trong DMs và xác định các yếu tố chính ảnh hưởng đến chất lượng mẫu, trong đó phương pháp rời rạc hóa là quan trọng nhất. Bằng cách xem xét kỹ lưỡng quá trình diffusion đã học, chúng tôi đề xuất Diffusion Exponential Integrator Sampler~(DEIS). Phương pháp này dựa trên Exponential Integrator được thiết kế để rời rạc hóa các phương trình vi phân thường (ODEs) và tận dụng cấu trúc bán tuyến tính của quá trình diffusion đã học để giảm sai số rời rạc hóa. Phương pháp đề xuất có thể áp dụng cho bất kỳ DMs nào và có thể tạo ra các mẫu có độ trung thực cao chỉ với 10 bước. Trong các thí nghiệm của chúng tôi, mất khoảng 3 phút trên một GPU A6000 để tạo 50k hình ảnh từ CIFAR10. Hơn nữa, bằng cách sử dụng trực tiếp các DMs đã huấn luyện trước, chúng tôi đạt được hiệu suất lấy mẫu tiên tiến khi số lần đánh giá hàm score~(NFE) bị giới hạn, ví dụ: FID 4.17 với 10 NFEs, FID 3.37, và IS 9.74 với chỉ 15 NFEs trên CIFAR10. Mã nguồn có sẵn tại this https URL.

Mẹo

Khuyến nghị đặt solver_order thành 2 hoặc 3, trong khi solver_order=1 tương đương với DDIMScheduler.

Ngưỡng động từ Imagen được hỗ trợ, và đối với các mô hình khuếch tán trong không gian pixel, bạn có thể đặt thresholding=True để sử dụng ngưỡng động.

DEISMultistepScheduler

lớp diffusers.DEISMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonesolver_order: int = 2prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['deis'] = 'deis'solver_type: typing.Literal['logrho'] = 'logrho'lower_order_final: bool = Trueuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0use_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )

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", hoặc "squaredcos_cap_v2", mặc định là "linear") — Lịch trình beta, một ánh xạ từ một khoảng beta sang một chuỗi các beta để bước qua mô hình. Chọn từ linear, scaled_linear, hoặc squaredcos_cap_v2.
  • trained_betas (np.ndarray hoặc list[float], tùy chọn) — Truyền trực tiếp một mảng betas vào constructor để bỏ qua beta_start và beta_end.
  • solver_order (int, mặc định là 2) — Bậc DEIS có thể là 1 hoặc 2 hoặc 3. Khuyến nghị sử dụng solver_order=2 cho việc lấy mẫu có hướng dẫn (guided sampling) và solver_order=3 cho việc lấy mẫu không điều kiện (unconditional sampling).
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon") — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_prediction`.
  • thresholding (bool, mặc định là False) — Có sử dụng phương pháp “dynamic thresholding” hay không. Phương pháp này không phù hợp với các mô hình khuếch tán trong không gian ẩn (latent-space) như Stable Diffusion.
  • dynamic_thresholding_ratio (float, mặc định là 0.995) — Tỷ số cho phương pháp ngưỡng động. Chỉ hợp lệ khi thresholding=True.
  • sample_max_value (float, mặc định là 1.0) — Giá trị ngưỡng cho việc đặt ngưỡng động. Chỉ hợp lệ khi thresholding=True.
  • algorithm_type ("deis", mặc định là "deis") — Loại thuật toán cho bộ giải.
  • solver_type ("logrho", mặc định là "logrho") — Loại solver cho DEIS.
  • lower_order_final (bool, mặc định là True) — Có sử dụng bộ giải bậc thấp hơn trong các bước cuối cùng hay không. Chỉ hợp lệ khi số bước suy luận < 15.
  • 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 đượ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 exponential 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.
  • use_beta_sigmas (bool, tùy 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 để biết thêm thông tin.
  • use_flow_sigmas (bool, tùy chọn, mặc định là False) — Có sử dụng flow 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.
  • flow_shift (float, tùy chọn, mặc định là 1.0) — Tham số dịch chuyển dòng (flow shift) cho các mô hình dựa trên dòng (flow-based).
  • timestep_spacing ("linspace", "leading", hoặc "trailing", mặc định là "linspace") — Cách các timestep nên được scale. Xem Bảng 2 của Common Diffusion Noise Schedules and Sample Steps are Flawed để 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ố nhóm mô hình.
  • use_dynamic_shifting (bool, mặc định là False) — Có sử dụng dynamic shifting cho noise schedule hay không.
  • time_shift_type ("exponential", mặc định là "exponential") — Loại dịch chuyển thời gian cần áp dụng.

DEISMultistepScheduler là bộ giải bậc cao nhanh cho các phương trình vi phân thường (ODE) của mô hình khuếch tán.

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: IntTensor ) → torch.Tensor

Tham số

  • original_samples (torch.Tensor) — Các mẫu gốc không có nhiễu.
  • noise (torch.Tensor) — Nhiễu cần thêm vào các mẫu.
  • timesteps (torch.IntTensor) — Các bước thời gian (timesteps) tại đó sẽ thêm nhiễu vào các mẫu.

Trả về

torch.Tensor

Các mẫu nhiễu.

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.

convert_model_output

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

Tham số

  • model_output (torch.Tensor) — Đầu ra trực tiếp từ mô hình khuếch tán đã học.
  • timestep (int) — 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.

Trả về

torch.Tensor

Đầu ra của mô hình đã được chuyển đổi.

Chuyển đổi đầu ra của mô hình sang kiểu tương ứng mà thuật toán DEIS cần.

deis_first_order_update

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

Tham số

  • model_output (torch.Tensor) — Đầu ra trực tiếp từ mô hình khuếch tán đã học.
  • timestep (int) — Bước thời gian rời rạc hiện tại trong chuỗi khuếch tán.
  • prev_timestep (int) — Bước thời gian rời rạc trước đó 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.

Trả về

torch.Tensor

Tensor mẫu tại bước thời gian trước đó.

Một bước cho DEIS bậc nhất (tương đương với DDIM).

index_for_timestep

< >

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

Tham số

  • timestep (int hoặc torch.Tensor) — Bước thời gian để tìm chỉ số.
  • 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.

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

multistep_deis_second_order_update

< >

( model_output_list: list[torch.Tensor]*argssample: Tensor = None**kwargs ) → torch.Tensor

Tham số

  • model_output_list (list[torch.Tensor]) — Các đầu ra trực tiếp từ mô hình khuếch tán đã học tại các bước thời gian hiện tại và sau đó.
  • 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.

Trả về

torch.Tensor

Tensor mẫu tại bước thời gian trước đó.

Một bước cho DEIS đa bước bậc hai.

multistep_deis_third_order_update

< >

( model_output_list: list[torch.Tensor]*argssample: Tensor = None**kwargs ) → torch.Tensor

Tham số

  • model_output_list (list[torch.Tensor]) — Các đầu ra trực tiếp từ mô hình khuếch tán đã học tại các bước thời gian hiện tại và sau đó.
  • 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.

Trả về

torch.Tensor

Tensor mẫu tại bước thời gian trước đó.

Một bước cho DEIS đa bước bậc ba.

scale_model_input

< >

( sample: Tensor*args**kwargs ) → torch.Tensor

Tham số

  • sample (torch.Tensor) — Mẫu đầu vào.

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

< >

( 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: intdevice: typing.Union[str, torch.device] = Nonemu: float | None = None )

Tham số

  • num_inference_steps (int) — 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.
  • mu (float, tuỳ chọn) — Tham số mu cho việc dịch chuyển động. Chỉ được sử dụng khi use_dynamic_shifting=True và time_shift_type="exponential".

Đặ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[int, torch.Tensor]sample: Tensorreturn_dict: bool = True ) → SchedulerOutput 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 (int 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.
  • return_dict (bool, mặc định là True) — Có nên trả về SchedulerOutput hay tuple hay không.

Trả về

SchedulerOutput hoặc tuple

If return_dict is True, SchedulerOutput 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 mẫu bằng DEIS đa bước.

SchedulerOutput

lớp diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

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.

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

Update on GitHub