Diffusers documentation
Model Konsistensi
Model Konsistensi
Consistency Models diusulkan dalam Consistency Models oleh Yang Song, Prafulla Dhariwal, Mark Chen, dan Ilya Sutskever.
Abstrak dari makalah tersebut adalah:
Model difusi telah mendorong kemajuan signifikan di bidang generasi gambar, audio, dan video, tetapi mereka bergantung pada proses sampling iteratif yang menyebabkan generasi lambat. Untuk mengatasi keterbatasan ini, kami mengusulkan model konsistensi, sebuah keluarga model baru yang menghasilkan sampel berkualitas tinggi dengan memetakan noise langsung ke data. Mereka mendukung generasi satu langkah yang cepat secara desain, sambil tetap memungkinkan sampling multi-langkah untuk menukar komputasi dengan kualitas sampel. Mereka juga mendukung pengeditan data zero-shot, seperti inpainting gambar, pewarnaan, dan super-resolusi, tanpa memerlukan pelatihan eksplisit pada tugas-tugas tersebut. Model konsistensi dapat dilatih baik dengan mendistilasi model difusi yang sudah terlatih, maupun sebagai model generatif mandiri sepenuhnya. Melalui eksperimen yang luas, kami menunjukkan bahwa mereka melampaui teknik distilasi yang ada untuk model difusi dalam sampling satu langkah dan beberapa langkah, mencapai FID state-of-the-art baru sebesar 3,55 pada CIFAR-10 dan 6,20 pada ImageNet 64x64 untuk generasi satu langkah. Ketika dilatih secara terpisah, model konsistensi menjadi keluarga model generatif baru yang dapat melampaui model generatif satu langkah, non-adversarial yang ada pada benchmark standar seperti CIFAR-10, ImageNet 64x64, dan LSUN 256x256.
Kodebase asli dapat ditemukan di openai/consistency_models, dan checkpoint tambahan tersedia di openai.
Pipeline ini disumbangkan oleh dg845 dan ayushtues. ❤️
Tips
Untuk percepatan tambahan, gunakan torch.compile untuk menghasilkan beberapa gambar dalam <1 detik:
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
kelas diffusers.ConsistencyModelPipeline
< source >( unet: UNet2DModelscheduler: CMStochasticIterativeScheduler )
Parameter
- unet (UNet2DModel) —
UNet2DModeluntuk menghilangkan noise pada latens gambar yang telah dienkod. - scheduler (SchedulerMixin) —
Scheduler yang digunakan bersama
unetuntuk menghilangkan noise pada latens gambar yang telah dienkod. Saat ini hanya kompatibel dengan CMStochasticIterativeScheduler.
Pipeline untuk generasi gambar tanpa syarat atau bersyarat kelas.
Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
__call__
< source >( batch_size: int = 1class_labels: typing.Union[torch.Tensor, list[int], int, NoneType] = Nonenum_inference_steps: int = 1timesteps: list[int] = 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
Parameter
- batch_size (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan. - class_labels (
torch.Tensorataulist[int]atauint, opsional) — Label kelas opsional untuk mengondisikan model konsistensi yang bergantung pada kelas. Tidak digunakan jika model tidak bergantung pada kelas. - num_inference_steps (
int, opsional, default 1) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - timesteps (
list[int], opsional) — Timesteps kustom untuk digunakan dalam proses denoising. Jika tidak didefinisikan,num_inference_stepstimesteps dengan jarak yang sama akan digunakan. Harus dalam urutan menurun. - generator (
torch.Generator, opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya dan diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. Dapat digunakan untuk menyesuaikan generasi yang sama dengan prompt yang berbeda. Jika tidak disediakan, tensor latents akan dibuat dengan pengambilan sampel menggunakangeneratoracak yang diberikan. - output_type (
str, opsional, default"pil") — Format output dari gambar yang dihasilkan. Pilih antaraPIL.Imageataunp.array. - return_dict (
bool, opsional, defaultnyaTrue) — Apakah akan mengembalikan ImagePipelineOutput alih-alih tuple biasa. - callback (
Callable, opsional) — Fungsi yang dipanggil setiapcallback_stepslangkah selama inferensi. Fungsi ini dipanggil dengan argumen berikut:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, opsional, default 1) — Frekuensi pemanggilan fungsicallback. Jika tidak ditentukan, callback dipanggil pada setiap langkah.
Mengembalikan
ImagePipelineOutput atau tuple
Jika return_dict adalah True, ImagePipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah daftar dengan gambar yang dihasilkan.
Contoh:
>>> 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
kelas diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Kelas output untuk pipeline gambar.