Diffusers documentation
Tutarlılık Modelleri
Tutarlılık Modelleri
Consistency Models, Yang Song, Prafulla Dhariwal, Mark Chen ve Ilya Sutskever tarafından Consistency Models makalesinde önerilmiştir.
Makalenin özeti şudur:
Diffüzyon modelleri, görüntü, ses ve video üretimi alanlarında önemli ilerlemeler sağlamış olsa da, yavaş üretime neden olan iteratif bir örneklemleme sürecine bağımlıdırlar. Bu sınırlamayı aşmak için, gürültüyü doğrudan veriye eşleyerek yüksek kaliteli örnekler üreten yeni bir model ailesi olan tutarlılık modellerini öneriyoruz. Tasarım gereği hızlı tek adımlı üretimi desteklerken, hesaplama gücünü örnek kalitesiyle takas etmek için çok adımlı örneklemlemeye de izin verirler. Ayrıca, bu görevler üzerinde açık bir eğitim gerektirmeden, görüntü doldurma (inpainting), renklendirme ve süper çözünürlük gibi sıfır atışlı (zero-shot) veri düzenlemelerini de desteklerler. Tutarlılık modelleri, önceden eğitilmiş diffüzyon modellerinden damıtılarak (distillation) veya tamamen bağımsız üretken modeller olarak eğitilebilir. Kapsamlı deneyler yoluyla, tek ve az adımlı örneklemlemede mevcut diffüzyon modeli damıtma tekniklerinden daha iyi performans gösterdiklerini, tek adımlı üretimde CIFAR-10 üzerinde 3,55 ve ImageNet 64x64 üzerinde 6,20 ile yeni en iyi FID değerlerine ulaştıklarını gösteriyoruz. İzole olarak eğitildiğinde, tutarlılık modelleri; CIFAR-10, ImageNet 64x64 ve LSUN 256x256 gibi standart ölçütlerde mevcut tek adımlı, advers olmayan üretken modellerden daha iyi performans gösterebilen yeni bir üretken model ailesi haline gelir.
Orijinal kod tabanı openai/consistency_models adresinde bulunabilir ve ek kontrol noktaları openai adresinde mevcuttur.
Pipeline, dg845 ve ayushtues tarafından katkı sağlanmıştır. ❤️
İpuçları
Ek bir hızlanma için, torch.compile kullanarak birden fazla görüntüyü <1 saniyede üretin:
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
sınıf diffusers.ConsistencyModelPipeline
< source >( unet: UNet2DModelscheduler: CMStochasticIterativeScheduler )
Parametreler
- unet (UNet2DModel) —
Kodlanmış görüntü latentlerini gürültüden arındırmak için kullanılan bir
UNet2DModel. - scheduler (SchedulerMixin) —
Kodlanmış görüntü latentlerini gürültüden arındırmak için
unetile birlikte kullanılacak bir zamanlayıcı. Şu anda yalnızca CMStochasticIterativeScheduler ile uyumludur.
Koşulsuz veya sınıf-konumlu görüntü üretimi için pipeline.
Bu model DiffusionPipeline sınıfından devralır. Tüm pipeline'lar için uygulanan genel yöntemlerin (indirme, kaydetme, belirli bir cihazda çalıştırma vb.) belgelerini üst sınıfın dokümantasyonunda bulabilirsiniz.
__call__
< source >( 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
Parametreler
- batch_size (
int, isteğe bağlı, varsayılan 1) — Üretilecek görüntü sayısı. - class_labels (
torch.Tensorveyalist[int]veyaint, isteğe bağlı) — Sınıf koşullu tutarlılık modelleri için sınıf koşullandırma amacıyla isteğe bağlı sınıf etiketleri. Model sınıf koşullu değilse kullanılmaz. - num_inference_steps (
int, isteğe bağlı, varsayılan 1) — Gürültü azaltma adım sayısı. Daha fazla gürültü azaltma adımı genellikle daha yavaş çıkarım pahasına daha yüksek kaliteli bir görüntüye yol açar. - timesteps (
list[int], isteğe bağlı) — Gürültüden arındırma süreci için kullanılacak özel zaman adımları. Tanımlanmamışsa, eşit aralıklınum_inference_stepszaman adımı kullanılır. Azalan sırada olmalıdır. - generator (
torch.Generator, isteğe bağlı) — Üretimi deterministik hale getirmek için kullanılan birtorch.Generator. - latents (
torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenen, gürültülü ve önceden oluşturulmuş latents; görüntü üretimi için girdi olarak kullanılabilir. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgelegeneratorkullanılarak örneklemeye dayalı bir latents tensörü oluşturulur. - output_type (
str, isteğe bağlı, varsayılan"pil") — Oluşturulan görüntünün çıktı biçimi.PIL.Imageveyanp.arrayarasında seçim yapın. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Düz bir tuple yerine ImagePipelineOutput döndürülüp döndürülmemesi. - callback (
Callable, isteğe bağlı) — Çıkarım sırasında hercallback_stepsadımda çağrılan bir işlev. İşlev aşağıdaki argümanlarla çağrılır:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, isteğe bağlı, varsayılan 1) —callbackişlevinin çağrılma sıklığı. Belirtilmezse, callback her adımda çağrılır.
Dönüş değeri
ImagePipelineOutput veya tuple
return_dict True ise ImagePipelineOutput döndürülür, aksi halde ilk öğesi üretilen görüntülerin listesinden oluşan bir tuple döndürülür.
Örnekler:
>>> 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
sınıf diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Görüntü hatları için çıktı sınıfı.