Diffusers documentation
DPMSolverSinglestepScheduler
DPMSolverSinglestepScheduler
DPMSolverSinglestepScheduler là một trình lập lịch một 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.
Bản triển khai gốc có thể được tìm thấy tại LuChengTHU/dpm-solver.
Mẹo
Khuyến nghị đặt solver_order thành 2 cho guide sampling, và solver_order=3 cho unconditional sampling.
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.
DPMSolverSinglestepScheduler
lớp diffusers.DPMSolverSinglestepScheduler
< source >( 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++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Noneuse_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ịbetaban đầu của suy luận. - beta_end (
float, mặc định là0.02) — Giá trịbetacuố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ặcsquaredcos_cap_v2. - trained_betas (
np.ndarrayhoặclist[float], tùy chọn) — Truyền trực tiếp một mảng betas vào constructor để bỏ quabeta_startvàbeta_end. - 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 vàsolver_order=3cho việc lấy mẫu không điều kiện. - prediction_type (
"epsilon","sample","v_prediction", or"flow_prediction", defaults to"epsilon") — Prediction type of the scheduler function; can beepsilon(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ệ 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 (
"dpmsolver","dpmsolver++", hoặc"sde-dpmsolver++", mặc định là"dpmsolver++") — Loại thuật toán cho bộ giải; có thể làdpmsolver,dpmsolver++, hoặcsde-dpmsolver++. Loạidpmsolvertriển khai các thuật toán trong bài báo DPMSolver, và 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 (
"midpoint"hoặc"heun", 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àFalse) — 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. - 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ếuTrue, 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). - final_sigmas_type (
"zero"hoặc"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. - lambda_min_clipped (
float, mặc định là-inf) — Ngưỡng cắt cho giá trị tối thiểu củalambda(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 (
"learned"hoặc"learned_range", 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. - 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.
DPMSolverSinglestepScheduler 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.
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: IntTensor ) → torch.Tensor
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: Tensor*argssample: typing.Optional[torch.Tensor] = None**kwargs ) → 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: 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. - 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. - 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 khialgorithm_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 bậc nhất (tương đương với DDIM).
get_order_list
< source >( num_inference_steps: int ) → list[int]
Tính toán bậc của bộ giải ở mỗi bước thời gian.
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.
scale_model_input
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
Đả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
< 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] = Nonemu: float | None = Nonetimesteps: list[int] | None = 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. - mu (
float, tùy chọn) — Số mũ cho phép dịch chuyển thời gian động. Yêu cầuuse_dynamic_shiftingvàtime_shift_typelà"exponential"; khi được truyền vào,flow_shiftsẽ được đặt thànhexp(mu). - timesteps (
list[int], tùy chọn) — Các timesteps tùy chỉnh được sử dụng để hỗ trợ khoảng cách tùy ý giữa các timesteps. NếuNone, thì chiến lược khoảng cách timestep mặc định là khoảng cách đều giữa các timesteps sẽ được sử dụng. Nếutimestepsđược truyền vào,num_inference_stepsphải là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).
singlestep_dpm_solver_second_order_update
< source >( 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 đó. - timestep (
int) — Bước thời gian rời rạc hiện tại và cuối cùng 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. - 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 khialgorithm_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 bậc hai đơn bước tính toán nghiệm tại thời điểm prev_timestep từ thời điểm timestep_list[-2].
singlestep_dpm_solver_third_order_update
< source >( 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 đó. - timestep (
int) — Bước thời gian rời rạc hiện tại và cuối cùng 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. - 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 khialgorithm_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 đơn bước bậc ba, tính toán nghiệm tại thời điểm prev_timestep từ thời điểm timestep_list[-3].
singlestep_dpm_solver_update
< source >( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Noneorder: int = 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 đó. - timestep (
int) — Bước thời gian rời rạc hiện tại và cuối cùng 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. - order (
int) — Bậc của bộ giải tại bước này. - 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 khialgorithm_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 singlestep.
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 (
inthoặ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. - generator (
torch.Generator, tùy chọn) — Bộ tạo số ngẫu nhiên cho việc lấy mẫu ngẫu nhiên. - return_dict (
bool, mặc định làTrue) — 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 DPMSolver singlestep.
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.