Diffusers documentation
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler là một biểu thức Karras của DPMSolverMultistepScheduler, một trình lập lịch đa bướ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.
DPMSolver (và phiên bản cải tiến DPMSolver++) là bộ giải bậc cao chuyên dụng, tốc độ cao cho các phương trình vi phân thường (ODE) của mô hình khuếch tán, với bảo đảm về bậc hội tụ. Về mặt thực nghiệm, việc lấy mẫu bằng DPMSolver chỉ với 20 bước có thể tạo ra các mẫu chất lượng cao, và nó vẫn có thể tạo ra các mẫu khá tốt ngay cả khi chỉ dùng 10 bước.
EDMDPMSolverMultistepScheduler
lớp diffusers.EDMDPMSolverMultistepScheduler
< 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', 'sample', 'v_prediction'] = 'epsilon'rho: float = 7.0solver_order: int = 2thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falsefinal_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 (
str, 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). Giá trị chấp nhận được khác là “exponential”. Lịch exponential đã được tích hợp trong mô hình này: https://huggingface.co/stabilityai/cosxl. - num_train_timesteps (
int, mặc định là 1000) — Số bước khuếch tán để huấn luyện mô hình. - prediction_type (
str, defaults toepsilon, optional) — Prediction type of the scheduler function; can beepsilon(predicts the noise of the diffusion process),sample(directly predicts the noisy sample) orv_prediction` (see section 2.4 of Imagen Video paper). - rho (
float, tùy chọn, mặc định là 7.0) — Tham số rho trong lịch sigma Karras. Giá trị này được đặt là 7.0 trong bài báo EDM [1]. - solver_order (
int, mặc định là 2) — Bậc của DPMSolver, có thể là1hoặc2hoặc3. Khuyến nghị sử dụngsolver_order=2cho việc lấy mẫu có hướng dẫn (guided sampling) vàsolver_order=3cho việc lấy mẫu không điều kiện (unconditional sampling). - 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ệ khithresholding=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ệ khithresholding=Truevà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++hoặcsde-dpmsolver++. Loạidpmsolver++triển khai các thuật toán trong bài báo DPMSolver++. Khuyến nghị sử dụngdpmsolver++hoặcsde-dpmsolver++vớisolver_order=2cho 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àmidpointhoặcheun. 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 solvermidpoint. - 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ờ. - final_sigmas_type (
str, 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 DPMSolverMultistepScheduler trong công thức EDM như được trình bày trong Karras et al. 2022 [1]. EDMDPMSolverMultistepScheduler là bộ giải bậc cao chuyên dụng, tốc độ cao cho các phương trình vi phân thường (ODE) của mô hình khuếch tán.
[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.
convert_model_output
< source >( model_output: Tensorsample: Tensor ) → torch.Tensor
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
< source >( model_output: Tensorsample: Tensornoise: typing.Optional[torch.Tensor] = None ) → 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) — 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 cần thêm vào các mẫu gốc.
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).
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Tìm chỉ số cho một bước thời gian (timestep) cụ thể trong lịch trình.
multistep_dpm_solver_second_order_update
< source >( model_output_list: typing.List[torch.Tensor]sample: Tensornoise: typing.Optional[torch.Tensor] = None ) → 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. - noise (
torch.Tensor, tùy chọn) — Tensor nhiễu cần thêm vào các mẫu gố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
< source >( model_output_list: listsample: Tensor ) → torch.Tensor
Một bước cho DPMSolver đa bước bậc ba.
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, NoneType] = None )
Đặ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[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = 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. - return_dict (
bool) — Có nên trả về SchedulerOutput haytuplehay 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
< source >( prev_sample: Tensor )
Lớp cơ sở cho kết quả của hàm step của một trình lập lịch.