Diffusers documentation

CMStochasticIterativeScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

CMStochasticIterativeScheduler

Consistency Models của Yang Song, Prafulla Dhariwal, Mark Chen và Ilya Sutskever đã giới thiệu một trình lập lịch đa bước và một bước (Algorithm 1) có khả năng tạo ra các mẫu tốt chỉ trong một hoặc một số lượng nhỏ các bước.

Tóm tắt từ bài báo là:

Các mô hình khuếch tán đã thúc đẩy đáng kể các lĩnh vực tạo hình ảnh, âm thanh và video, nhưng chúng phụ thuộc vào quá trình lấy mẫu lặp lại, dẫn đến tốc độ tạo chậm. Để khắc phục hạn chế này, chúng tôi đề xuất các mô hình nhất quán (consistency models), một họ mô hình mới tạo ra các mẫu chất lượng cao bằng cách ánh xạ trực tiếp từ nhiễu sang dữ liệu. Chúng hỗ trợ tạo mẫu một bước nhanh chóng theo thiết kế, đồng thời vẫn cho phép lấy mẫu nhiều bước để đánh đổi giữa chi phí tính toán và chất lượng mẫu. Chúng cũng hỗ trợ chỉnh sửa dữ liệu zero-shot, chẳng hạn như inpainting hình ảnh, tô màu và siêu phân giải, mà không cần huấn luyện rõ ràng trên các tác vụ này. Mô hình nhất quán có thể được huấn luyện bằng cách chưng cất (distill) các mô hình khuếch tán đã huấn luyện trước, hoặc như các mô hình tạo độc lập hoàn toàn. Thông qua các thí nghiệm rộng rãi, chúng tôi chứng minh rằng chúng vượt trội hơn các kỹ thuật chưng cất hiện có cho mô hình khuếch tán trong lấy mẫu một bước và ít bước, đạt được FID mới là 3.55 trên CIFAR-10 và 6.20 trên ImageNet 64x64 cho tạo mẫu một bước. Khi được huấn luyện độc lập, mô hình nhất quán trở thành một họ mô hình tạo mới có thể vượt trội hơn các mô hình tạo một bước, không đối kháng hiện có trên các benchmark tiêu chuẩn như CIFAR-10, ImageNet 64x64 và LSUN 256x256.

Mã nguồn gốc có thể được tìm thấy tại openai/consistency_models.

CMStochasticIterativeScheduler

lớp diffusers.CMStochasticIterativeScheduler

< >

( num_train_timesteps: int = 40sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5s_noise: float = 1.0rho: float = 7.0clip_denoised: bool = True )

Tham số

  • num_train_timesteps (int, mặc định là 40) — Số bước khuếch tán để huấn luyện mô hình.
  • sigma_min (float, mặc định là 0.002) — Độ lớn nhiễu tối thiểu trong lịch sigma. Mặc định là 0.002 từ bản triển khai gốc.
  • sigma_max (float, mặc định là 80.0) — Độ lớn nhiễu tối đa trong lịch sigma. Mặc định là 80.0 từ bản triển khai gốc.
  • sigma_data (float, mặc định là 0.5) — Độ lệch chuẩn của phân phối dữ liệu từ bài báo EDM paper. Mặc định là 0.5 từ bản triển khai gốc.
  • s_noise (float, mặc định là 1.0) — Lượng nhiễu bổ sung để bù đắp cho việc mất chi tiết trong quá trình lấy mẫu. Khoảng hợp lý là [1.000, 1.011]. Mặc định là 1.0 từ bản triển khai gốc.
  • rho (float, mặc định là 7.0) — Tham số để tính lịch sigma Karras từ bài báo của EDM. Mặc định là 7.0 từ cài đặt gốc.
  • clip_denoised (bool, mặc định là True) — Có nên cắt các đầu ra đã khử nhiễu về (-1, 1) hay không.
  • timesteps (list hoặc np.ndarray hoặc torch.Tensor, tùy chọn) — Lịch trình bước thời gian (timestep) rõ ràng, có thể được chỉ định tùy chọn. Các bước thời gian được kỳ vọng là theo thứ tự tăng dần.

Mẫu nhiều bước và mẫu một bước cho các mô hình nhất quá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

< >

( 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.

get_scalings

< >

( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]

Tham số

  • sigma (torch.Tensor) — Giá trị sigma hiện tại trong lịch trình nhiễu.

Trả về

tuple[torch.Tensor, torch.Tensor]

Một tuple chứa c_skip (thang đo cho mẫu đầu vào) và c_out (thang đo cho đầu ra của mô hình).

Tính các hệ số tỷ lệ cho đầu ra của mô hình nhất quán.

get_scalings_for_boundary_condition

< >

( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]

Tham số

  • sigma (torch.Tensor) — Sigma hiện tại trong lịch trình sigma Karras.

Trả về

tuple[torch.Tensor, torch.Tensor]

Một tuple hai phần tử trong đó c_skip (đóng vai trò trọng số cho mẫu hiện tại) là phần tử đầu tiên và c_out (đóng vai trò trọng số cho đầu ra của mô hình nhất quán) là phần tử thứ hai.

Lấy các hệ số tỷ lệ được sử dụng trong tham số hóa mô hình nhất quán (từ Phụ lục C của bài báo) để áp đặt điều kiện biên.

> epsilon trong các phương trình cho c_skip và c_out được đặt bằng sigma_min.

index_for_timestep

< >

( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int

Tham số

  • timestep (float hoặc torch.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ụng self.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.

scale_model_input

< >

( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor

Tham số

  • sample (torch.Tensor) — Mẫu đầu vào.
  • timestep (float hoặc torch.Tensor) — Bước thời gian hiện tại trong chuỗi khuếch tán.

Trả về

torch.Tensor

Một mẫu đầu vào đã được chuẩn hóa.

Thang đo đầu vào của mô hình nhất quán bằng (sigma**2 + sigma_data**2) ** 0.5.

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

< >

( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device] = 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 (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.
  • 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ếu None, 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ếu timesteps được truyền vào, num_inference_steps phải là None.

Đặt các bước thời gian (timesteps) được sử dụng cho chuỗi khuếch tán (cần chạy trước khi suy luận).

sigma_to_t

< >

( sigmas: float | numpy.ndarray ) → np.ndarray

Tham số

  • sigmas (float hoặc np.ndarray) — Một Karras sigma đơn hoặc một mảng các Karras sigmas.

Trả về

np.ndarray

Mảng bước thời gian đầu vào đã được điều chỉnh tỷ lệ.

Lấy các bước thời gian đã được điều chỉnh tỷ lệ từ các sigma Karras để làm đầu vào cho mô hình nhất quán.

bước

< >

( model_output: Tensortimestep: typing.Union[float, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → CMStochasticIterativeSchedulerOutput 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 (float hoặc torch.Tensor) — Bước thời gian 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, mặc định là True) — Có nên trả về một CMStochasticIterativeSchedulerOutput hay tuple hay không.

Trả về

CMStochasticIterativeSchedulerOutput hoặc tuple

If return_dict is True, CMStochasticIterativeSchedulerOutput 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).

CMStochasticIterativeSchedulerOutput

lớp diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput

< >

( 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 đầu ra cho hàm step của trình lập lịch.

Update on GitHub