Diffusers documentation

Mô hình nhất quán

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Mô hình nhất quán

Consistency Models được đề xuất trong Consistency Models bởi Yang Song, Prafulla Dhariwal, Mark Chen và Ilya Sutskever.

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, và các checkpoint bổ sung có sẵn tại openai.

Pipeline này được đóng góp bởi dg845 và ayushtues. ❤️

Mẹo

Để tăng tốc độ thêm, hãy sử dụng torch.compile để tạo nhiều hình ảnh trong <1 giây:

  import torch
  from diffusers import ConsistencyModelPipeline

  device = "cuda"  # or "mps", "xpu", "cpu"
  # Load the cd_bedroom256_lpips checkpoint.
  model_id_or_path = "openai/diffusers-cd_bedroom256_lpips"
  pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, dtype=torch.float16)
  pipe.to(device)

+ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)

  # Multistep sampling
  # Timesteps can be explicitly specified; the particular timesteps below are from the original GitHub repo:
  # https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L83
  for _ in range(10):
      image = pipe(timesteps=[17, 0]).images[0]
      image.show()

ConsistencyModelPipeline

lớp diffusers.ConsistencyModelPipeline

< >

( unet: UNet2DModelscheduler: CMStochasticIterativeScheduler )

Tham số

  • unet (UNet2DModel) — Một UNet2DModel để khử nhiễu các latents của ảnh đã được mã hóa.
  • scheduler (SchedulerMixin) — Một scheduler được sử dụng kết hợp với unet để khử nhiễu các latents của ảnh đã mã hóa. Hiện tại chỉ tương thích với CMStochasticIterativeScheduler.

Pipeline cho việc tạo ảnh không điều kiện hoặc có điều kiện theo lớp.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

__call__

< >

( batch_size: int = 1class_labels: typing.Union[torch.Tensor, list[int], int, NoneType] = Nonenum_inference_steps: int = 1timesteps: list = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1 ) → ImagePipelineOutput or tuple

Tham số

  • batch_size (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo.
  • class_labels (torch.Tensor hoặc list[int] hoặc int, tùy chọn) — Nhãn lớp tùy chọn để điều kiện cho các mô hình nhất quán có điều kiện theo lớp. Không được sử dụng nếu mô hình không có điều kiện theo lớp.
  • num_inference_steps (int, tùy chọn, mặc định là 1) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
  • timesteps (list[int], tùy chọn) — Các bước thời gian tùy chỉnh để sử dụng cho quá trình khử nhiễu. Nếu không được định nghĩa, các bước thời gian num_inference_steps cách đều sẽ được sử dụng. Phải được sắp xếp theo thứ tự giảm dần.
  • generator (torch.Generator, tùy chọn) — Một torch.Generator để làm cho quá trình sinh ra kết quả xác định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
  • output_type (str, tùy chọn, mặc định là "pil") — Định dạng đầu ra của hình ảnh được tạo ra. Chọn giữa PIL.Image hoặc np.array.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một ImagePipelineOutput thay vì một tuple thông thường hay không.
  • callback (Callable, tùy chọn) — Một hàm được gọi mỗi callback_steps bước trong quá trình suy luận. Hàm này được gọi với các đối số sau: callback(step: int, timestep: int, latents: torch.Tensor).
  • callback_steps (int, tùy chọn, mặc định là 1) — Tần suất gọi hàm callback. Nếu không được chỉ định, callback sẽ được gọi ở mỗi bước.

Trả về

ImagePipelineOutput hoặc tuple

Nếu return_dict là True, ImagePipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh đã được tạo.

Ví dụ:

>>> import torch

>>> from diffusers import ConsistencyModelPipeline

>>> device = "cuda"
>>> # Load the cd_imagenet64_l2 checkpoint.
>>> model_id_or_path = "openai/diffusers-cd_imagenet64_l2"
>>> pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
>>> pipe.to(device)

>>> # Onestep Sampling
>>> image = pipe(num_inference_steps=1).images[0]
>>> image.save("cd_imagenet64_l2_onestep_sample.png")

>>> # Onestep sampling, class-conditional image generation
>>> # ImageNet-64 class label 145 corresponds to king penguins
>>> image = pipe(num_inference_steps=1, class_labels=145).images[0]
>>> image.save("cd_imagenet64_l2_onestep_sample_penguin.png")

>>> # Multistep sampling, class-conditional image generation
>>> # Timesteps can be explicitly specified; the particular timesteps below are from the original GitHub repo:
>>> # https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L77
>>> image = pipe(num_inference_steps=None, timesteps=[22, 0], class_labels=145).images[0]
>>> image.save("cd_imagenet64_l2_multistep_sample_penguin.png")

ImagePipelineOutput

lớp diffusers.ImagePipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarray )

Tham số

  • images (List[PIL.Image.Image] hoặc np.ndarray) — Danh sách các hình ảnh PIL đã khử nhiễu có độ dài batch_size hoặc mảng NumPy có hình dạng (batch_size, height, width, num_channels).

Lớp đầu ra cho các pipeline hình ảnh.

Update on GitHub