Diffusers documentation
CMStochasticIterativeScheduler
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
< source >( 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 (
listhoặcnp.ndarrayhoặctorch.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
< 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.
get_scalings
< source >( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]
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
< source >( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]
Tham số
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.
>
epsilontrong các phương trình choc_skipvàc_outđược đặt bằngsigma_min.
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.
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
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
< 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] = 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. - 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 (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
< source >( sigmas: float | numpy.ndarray ) → np.ndarray
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
< source >( 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 (
floathoặctorch.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 haytuplehay 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
< source >( prev_sample: Tensor )
Lớp đầu ra cho hàm step của trình lập lịch.