Diffusers documentation
Trình lập lịch đa bước cho Mô hình nhất quán tiềm ẩn
Trình lập lịch đa bước cho Mô hình nhất quán tiềm ẩn
Tổng quan
Trình điều phối đa bước và đơn bước (Thuật toán 3) được giới thiệu cùng với các mô hình nhất quán tiềm ẩn trong bài báo Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference của Simian Luo, Yiqin Tan, Longbo Huang, Jian Li và Hang Zhao. Trình điều phối này nên có khả năng tạo ra các mẫu tốt từ LatentConsistencyModelPipeline trong 1-8 bước.
LCMScheduler
lớp diffusers.LCMScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.00085beta_end: float = 0.012beta_schedule: str = 'scaled_linear'trained_betas: numpy.ndarray | list[float] | None = Noneoriginal_inference_steps: int = 50clip_sample: bool = Falseclip_sample_range: float = 1.0set_alpha_to_one: bool = Truesteps_offset: int = 0prediction_type: str = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0timestep_spacing: str = 'leading'timestep_scaling: float = 10.0rescale_betas_zero_snr: bool = False )
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.00085) — Giá trịbetaban đầu của suy luận. - beta_end (
float, mặc định là0.012) — Giá trịbetacuối cùng. - beta_schedule (
str, mặc định là"scaled_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. - original_inference_steps (
int, mặc định là50) — Số bước suy luận mặc định được sử dụng để tạo lịch trình bước thời gian (timestep) phân bố tuyến tính, từ đó chúng ta sẽ lấynum_inference_stepsbước thời gian phân bố đều để tạo thành lịch trình bước thời gian cuối cùng. - clip_sample (
bool, mặc định làFalse) — Cắt mẫu dự đoán để đảm bảo ổn định về mặt số học. - clip_sample_range (
float, mặc định là1.0) — Độ lớn tối đa cho việc cắt mẫu. Chỉ hợp lệ khiclip_sample=True. - set_alpha_to_one (
bool, mặc định làTrue) — Mỗi bước khuếch tán sử dụng giá trị tích của alpha tại bước đó và tại bước trước đó. Đối với bước cuối cùng, không có alpha trước đó. Khi tùy chọn này làTrue, tích alpha trước đó được cố định thành1, ngược lại nó sử dụng giá trị alpha tại bước 0. - 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. - prediction_type (
str, defaults to"epsilon") — 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). - 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=True. - timestep_spacing (
str, mặc định là"leading") — Cách các bước thời gian (timesteps) nên được quy đổi. Xem Bảng 2 trong Common Diffusion Noise Schedules and Sample Steps are Flawed để biết thêm thông tin. - timestep_scaling (
float, mặc định là10.0) — Hệ số nhân với các bước thời gian (timesteps) khi tính toán các điều kiện biên của mô hình nhất quán (consistency model)c_skipvàc_out. Việc tăng giá trị này sẽ làm giảm sai số xấp xỉ (mặc dù sai số xấp xỉ ở mức mặc định10.0đã khá nhỏ). - rescale_betas_zero_snr (
bool, mặc định làFalse) — Có nên điều chỉnh lại betas để có SNR cuối bằng zero hay không. Điều này cho phép mô hình tạo ra các mẫu rất sáng và rất tối thay vì giới hạn ở các mẫu có độ sáng trung bình. Liên quan lỏng lẻo đến--offset_noise.
LCMScheduler mở rộng quy trình khử nhiễu được giới thiệu trong các mô hình xác suất khuếch tán khử nhiễu (DDPMs) bằng cách sử dụng dẫn hướng phi Markov.
Mô hình này kế thừa từ SchedulerMixin và ConfigMixin. ~ConfigMixin chịu trách nhiệm lưu trữ tất cả các thuộc tính cấu hình được truyền vào hàm __init__ của scheduler, chẳng hạn như num_train_timesteps. Chúng có thể được truy cập thông qua scheduler.config.num_train_timesteps. SchedulerMixin cung cấp chức năng tải và lưu trữ chung thông qua các hàm SchedulerMixin.save_pretrained() và from_pretrained().
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Thêm nhiễu vào các mẫu gốc theo mức độ nhiễu tại mỗi bước thời gian (đây là quá trình khuếch tán thuận).
get_scalings_for_boundary_condition_discrete
< source >( timestep: int ) → tuple[float, float]
Tính toán các hệ số điều kiện biên (c_skip và c_out) cho bước thời gian rời rạc đã cho, như được sử dụng trong Mô hình Nhất quán Ẩn (Latent Consistency Model).
get_velocity
< source >( sample: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Tính dự đoán vận tốc từ mẫu và nhiễu theo công thức vận tốc.
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Tham số
- timestep (
floathoặctorch.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ụngself.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.
previous_timestep
< source >( timestep ) → int or torch.Tensor
Tính bước thời gian trước đó trong chuỗi khuếch tán.
scale_model_input
< source >( sample: Tensortimestep: int | None = None ) → 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 | None = Nonedevice: typing.Union[str, torch.device, NoneType] = Noneoriginal_inference_steps: int | None = Nonetimesteps: list[int] | None = Nonestrength: float = 1.0 ) → 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. Nếu được sử dụng,timestepsphải làNone. - 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. - original_inference_steps (
int, tùy chọn) — Số bước suy luận ban đầu, sẽ được dùng để tạo lịch trình timestep phân bố tuyến tính (khác với cài đặtdiffuserstiêu chuẩn). Sau đó, chúng ta sẽ lấynum_inference_stepstimestep từ lịch trình này, phân bố đều theo chỉ số, và dùng đó làm lịch trình timestep cuối cùng. Nếu không được đặt, giá trị này sẽ mặc định là thuộc tínhoriginal_inference_steps. - timesteps (
list[int], tùy chọn) — Các bước thời gian tùy chỉnh được sử dụng để hỗ trợ khoảng cách tùy ý giữa các bước thời gian. NếuNone, thì chiến lược khoảng cách bước thời gian mặc định là khoảng cách đều giữa các bước thời gian trên lịch trình bước thời gian huấn luyện/chưng cất sẽ được sử dụng. Nếutimestepsđược truyền vào,num_inference_stepsphải làNone. - strength (
float, mặc định là1.0) — Hệ số cường độ được sử dụng để tạo lịch trình bước thời gian một phần (ví dụ: cho image-to-image). Giá trị1.0sử dụng lịch trình đầy đủ.
Trả về
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: intsample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → LCMSchedulerOutput 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 để lấy mẫu có thể tái lập. - return_dict (
bool, mặc định làTrue) — Có nên trả vềLCMSchedulerOutputhaytuplehay không.
Trả về
LCMSchedulerOutput hoặc tuple
If return_dict is True, LCMSchedulerOutput 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 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).