Diffusers documentation

DPMSolverMultistepInverse

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

DPMSolverMultistepInverse

DPMSolverMultistepInverse là trình lập lịch đảo ngược từ DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps và DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models của Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li và Jun Zhu.

Việc triển khai chủ yếu dựa trên định nghĩa đảo ngược DDIM của Null-text Inversion for Editing Real Images using Guided Diffusion Models và triển khai notebook của đảo ngược latent DiffEdit từ Xiang-cd/DiffEdit-stable-diffusion.

Mẹo

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 cả algorithm_type="dpmsolver++" và thresholding=True để sử dụng ngưỡng động. Phương pháp ngưỡng này không phù hợp với các mô hình khuếch tán trong không gian ẩn như Stable Diffusion.

DPMSolverMultistepInverseScheduler

lớp diffusers.DPMSolverMultistepInverseScheduler

< >

( 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['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0 )

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 (str, 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, 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.
  • solver_order (int, mặc định là 2) — Bậc của DPMSolver, 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 (str, 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 paper).
  • 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 và algorithm_type="dpmsolver++".
  • algorithm_type (str, mặc định là dpmsolver++) — Loại thuật toán cho bộ giải; có thể là dpmsolver, dpmsolver++, sde-dpmsolver hoặc sde-dpmsolver++. Loại dpmsolver triển khai các thuật toán trong bài báo DPMSolver, và loại dpmsolver++ triển khai các thuật toán trong bài báo DPMSolver++. Khuyến nghị sử dụng dpmsolver++ hoặc sde-dpmsolver++ với solver_order=2 cho việc lấy mẫu có hướng dẫn như trong Stable Diffusion.
  • solver_type (str, mặc định là midpoint) — Loại solver cho solver bậc hai; có thể là midpoint hoặc heun. Loại solver ảnh hưởng nhẹ đến chất lượng mẫu, đặc biệt khi số bước nhỏ. Khuyến nghị sử dụng solver midpoint.
  • lower_order_final (bool, mặc định là True) — Có sử dụng bộ giải bậc thấp hơn ở các bước cuối cùng hay không. Chỉ hợp lệ cho < 15 bước suy luận. Điều này có thể ổn định việc lấy mẫu của DPMSolver cho các bước < 15, đặc biệt là cho các bước <= 10.
  • euler_at_final (bool, mặc định là False) — Có sử dụng phương pháp Euler ở bước cuối cùng hay không. Đây là sự đánh đổi giữa độ ổn định số học và độ phong phú của chi tiết. Điều này có thể ổn định việc lấy mẫu của biến thể SDE của DPMSolver khi số bước suy luận nhỏ, nhưng đôi khi có thể dẫn đến hiện tượng mờ.
  • 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) — Hệ số dịch chuyển luồng. Chỉ hợp lệ khi use_flow_sigmas=True.
  • lambda_min_clipped (float, mặc định là -inf) — Ngưỡng cắt cho giá trị tối thiểu của lambda(t) để đảm bảo ổn định số. Điều này rất quan trọng đối với lịch nhiễu cosine (squaredcos_cap_v2).
  • variance_type (str, tùy chọn) — Đặt thành “learned” hoặc “learned_range” cho các mô hình khuếch tán dự đoán phương sai. Nếu được đặt, đầu ra của mô hình sẽ chứa phương sai Gaussian được dự đoán.
  • timestep_spacing (str, mặc định là "linspace") — Cách các bước thời gian (timesteps) nên được mở rộng. Xem Bảng 2 trong 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ố họ mô hình.

DPMSolverMultistepInverseScheduler là trình lập lịch ngược của DPMSolverMultistepScheduler.

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 để thêm nhiễu vào.
  • noise (torch.Tensor) — Tensor nhiễu.
  • timesteps (torch.IntTensor) — Các bước thời gian (timesteps) tại đó sẽ thêm nhiễu.

Trả về

torch.Tensor

Các mẫu nhiễu.

Thêm nhiễu vào original_samples sạch bằng cách sử dụng hàm tương đương của scheduler.

convert_model_output

< >

( model_output: Tensor*argssample: typing.Optional[torch.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.
  • sample (torch.Tensor, tùy chọn) — 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 dữ liệu tương ứng mà thuật toán DPMSolver/DPMSolver++ cần. DPM-Solver được thiết kế để rời rạc hóa một tích phân của mô hình dự đoán nhiễu, và DPM-Solver++ được thiết kế để rời rạc hóa một tích phân của mô hình dự đoán dữ liệu.

> Thuật toán và loại model được tách rời. Bạn có thể sử dụng DPMSolver hoặc DPMSolver++ cho cả model dự đoán nhiễu > và model dự đoán dữ liệu.

dpm_solver_first_order_update

< >

( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.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.
  • sample (torch.Tensor, tùy chọn) — 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.
  • noise (torch.Tensor, tùy chọn) — Tensor nhiễu.

Trả về

torch.Tensor

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

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

multistep_dpm_solver_second_order_update

< >

( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.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, tùy chọn) — 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.
  • noise (torch.Tensor, tuỳ chọn) — Nhiễu ngẫu nhiên được sử dụng bởi các biến thể bộ giải ngẫu nhiên (sde-*). Bắt buộc khi algorithm_type được đặt thành một trong các biến thể đó, và không được sử dụng trong các trường hợp khác.

Trả về

torch.Tensor

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

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

multistep_dpm_solver_third_order_update

< >

( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.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, tùy chọn) — 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.
  • noise (torch.Tensor, tùy chọn) — Tensor nhiễu.

Trả về

torch.Tensor

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

Một bước cho DPMSolver đ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_timesteps

< >

( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device, NoneType] = 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.

Đặ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: Tensorgenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_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) — 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.
  • generator (torch.Generator, tùy chọn) — Bộ tạo số ngẫu nhiên.
  • variance_noise (torch.Tensor) — Cách thay thế cho việc tạo nhiễu bằng generator bằng cách cung cấp trực tiếp nhiễu cho phương sai bản thân. Hữu ích cho các phương pháp như CycleDiffusion.
  • return_dict (bool) — 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 multistep DPMSolver.

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