Buckets:
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[[diffusers.DEISMultistepScheduler]]
diffusers.DEISMultistepScheduler[[diffusers.DEISMultistepScheduler]]
diffusers.DEISMultistepScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, solver_order: int = 2, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, algorithm_type: typing.Literal['deis'] = 'deis', solver_type: typing.Literal['logrho'] = 'logrho', lower_order_final: bool = True, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, use_flow_sigmas: bool = False, flow_shift: float = 1.0, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace', steps_offset: int = 0, use_dynamic_shifting: bool = False, time_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 beta, một ánh xạ từ một khoảng beta đến 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 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 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 và solver_order=3 cho 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 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 như Stable Diffusion.
dynamic_thresholding_ratio (float, mặc định là 0.995) : Tỷ lệ 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") : Kiểu solver cho DEIS.
lower_order_final (bool, mặc định là True) : Có sử dụng các bộ giải bậc thấp 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 sẽ đượ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 các sigma mũ 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, tuỳ 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, tuỳ chọn, mặc định là 1.0) : Tham số flow shift cho các mô hình dựa trên flow.
timestep_spacing ("linspace", "leading", hoặc "trailing", mặc định là "linspace") : Cách các bước thời gian (timesteps) nên được điều chỉnh. 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.
use_dynamic_shifting (bool, mặc định là False) : Có sử dụng dịch chuyển động (dynamic shifting) cho lịch trình nhiễu (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 scheduler, chẳng hạn như tải và lưu.
add_noise[[diffusers.DEISMultistepScheduler.add_noise]]
add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor)
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[[diffusers.DEISMultistepScheduler.convert_model_output]]
convert_model_output(model_output: Tensor, *args, sample: Tensor = None, **kwargs)
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 sao mẫu hiện tại đượ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[[diffusers.DEISMultistepScheduler.deis_first_order_update]]
deis_first_order_update(model_output: Tensor, *args, sample: Tensor = None, **kwargs)
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 sao mẫu hiện tại đượ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[[diffusers.DEISMultistepScheduler.index_for_timestep]]
index_for_timestep(timestep: typing.Union[int, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)
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[[diffusers.DEISMultistepScheduler.multistep_deis_second_order_update]]
multistep_deis_second_order_update(model_output_list: list[torch.Tensor], *args, sample: Tensor = None, **kwargs)
Tham số:
model_output_list (list[torch.Tensor]) : Đầ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 sao mẫu hiện tại đượ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[[diffusers.DEISMultistepScheduler.multistep_deis_third_order_update]]
multistep_deis_third_order_update(model_output_list: list[torch.Tensor], *args, sample: Tensor = None, **kwargs)
Tham số:
model_output_list (list[torch.Tensor]) : Đầ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 sao mẫu hiện tại đượ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[[diffusers.DEISMultistepScheduler.scale_model_input]]
scale_model_input(sample: Tensor, *args, **kwargs)
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[[diffusers.DEISMultistepScheduler.set_begin_index]]
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[[diffusers.DEISMultistepScheduler.set_timesteps]]
set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device] = None, mu: 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ột mô hình đã được huấn luyện trước.
device (str hoặc torch.device, tuỳ 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, optional) : 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[[diffusers.DEISMultistepScheduler.step]]
step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: Tensor, return_dict: bool = True)
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 sao mẫu hiện tại đượ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ề một 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[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]
diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]
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 (x_{t-1}) đã tính của bước thời gian trước đó. prev_sample nên được 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.
Xet Storage Details
- Size:
- 18.2 kB
- Xet hash:
- 870b6ddcaa76ddb7b019358951aa89c4b01c5c2a323f169ab5e6c1d001e226e2
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.