Diffusers documentation
DiT
DiT
Scalable Diffusion Models with Transformers (DiT) ditulis oleh William Peebles dan Saining Xie.
Abstrak dari makalah tersebut adalah:
Kami mengeksplorasi kelas baru model difusi yang didasarkan pada arsitektur transformer. Kami melatih model difusi laten untuk gambar, dengan mengganti backbone U-Net yang umum digunakan dengan transformer yang beroperasi pada patch laten. Kami menganalisis skalabilitas Diffusion Transformers (DiTs) kami melalui lensa kompleksitas forward pass yang diukur dengan Gflops. Kami menemukan bahwa DiTs dengan Gflops yang lebih tinggi — melalui peningkatan kedalaman/lebar transformer atau peningkatan jumlah token input — secara konsisten memiliki FID yang lebih rendah. Selain memiliki sifat skalabilitas yang baik, model DiT-XL/2 terbesar kami melampaui semua model difusi sebelumnya pada benchmark ImageNet 512x512 dan 256x256 yang bersyarat kelas, mencapai FID state-of-the-art sebesar 2.27 pada yang terakhir.
Kodebase asli dapat ditemukan di facebookresearch/dit.
Pastikan untuk melihat panduan Schedulers untuk mempelajari cara mengeksplorasi tradeoff antara kecepatan dan kualitas scheduler, serta lihat bagian reuse components across pipelines untuk mempelajari cara memuat komponen yang sama secara efisien ke dalam beberapa pipeline.
DiTPipeline
kelas diffusers.DiTPipeline
< source >( transformer: DiTTransformer2DModelvae: AutoencoderKLscheduler: KarrasDiffusionSchedulersid2label: dict[int, str] | None = None )
Parameter
- transformer (DiTTransformer2DModel) —
Kelas
DiTTransformer2DModelyang dikondisikan untuk mendenois latens gambar yang telah dienkod. Awalnya dipublikasikan sebagaiTransformer2DModeldi config, tetapi ketidakcocokan ini dapat diabaikan. - vae (AutoencoderKL) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten.
- scheduler (DDIMScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens gambar yang telah dikodekan.
Pipeline untuk generasi gambar berdasarkan backbone Transformer alih-alih UNet.
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 >( class_labels: listguidance_scale: float = 4.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonenum_inference_steps: int = 50output_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple
Parameter
- class_labels (list[int]) — daftar label kelas ImageNet untuk gambar yang akan dibuat.
- guidance_scale (
float, opsional, default 4.0) — Nilai guidance scale yang lebih tinggi mendorong model untuk menghasilkan gambar yang sangat terkait denganpromptteks, dengan mengorbankan kualitas gambar yang lebih rendah. Guidance scale diaktifkan ketikaguidance_scale > 1. - generator (
torch.Generator, opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - num_inference_steps (
int, opsional, default 250) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - output_type (
str, opsional, defaultnya"pil") — Format output dari gambar yang dihasilkan. Pilih antara"pil"(PIL.Image),"np"(np.array) atau"pt"(torch.Tensor). - return_dict (
bool, opsional, defaultnyaTrue) — Apakah akan mengembalikan ImagePipelineOutput alih-alih tuple biasa.
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
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> from diffusers import DiTPipeline, DPMSolverMultistepScheduler
>>> import torch
>>> pipe = DiTPipeline.from_pretrained("facebook/DiT-XL-2-256", torch_dtype=torch.float16)
>>> pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
>>> pipe = pipe.to("cuda")
>>> # pick words from Imagenet class labels
>>> pipe.labels # to print all available words
>>> # pick words that exist in ImageNet
>>> words = ["white shark", "umbrella"]
>>> class_ids = pipe.get_label_ids(words)
>>> generator = torch.manual_seed(33)
>>> output = pipe(class_labels=class_ids, num_inference_steps=25, generator=generator)
>>> image = output.images[0] # label 'white shark'get_label_ids
< source >( label: str | list[str] ) → list of int
Petakan string label dari ImageNet ke id kelas yang sesuai.
ImagePipelineOutput
kelas diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Kelas output untuk pipeline gambar.