Diffusers documentation

PRX

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

PRX

PRX menghasilkan gambar berkualitas tinggi dari teks menggunakan arsitektur MMDIT yang disederhanakan, di mana token teks tidak diperbarui melalui blok transformer. Model ini menerapkan flow matching dengan penjadwalan diskrit untuk sampling yang efisien dan menggunakan model T5Gemma-2B-2B-UL2 dari Google untuk pengkodean teks multibahasa. Transformer dengan sekitar 1,3 miliar parameter ini memberikan inferensi cepat tanpa mengorbankan kualitas. Anda dapat memilih antara Flux VAE (kompresi 8x, 16 kanal laten) untuk keseimbangan kualitas dan kecepatan, atau DC-AE (kompresi 32x, 32 kanal laten) untuk kompresi laten dan pemrosesan yang lebih cepat.

Model yang tersedia

PRX menawarkan beberapa varian dengan konfigurasi VAE yang berbeda, masing-masing dioptimalkan untuk resolusi tertentu. Model dasar unggul dengan prompt yang detail, menangkap komposisi kompleks dan detail halus. Model yang telah dihaluskan (fine-tuned) dan dilatih pada Alchemist dataset meningkatkan kualitas estetika, terutama dengan prompt yang lebih sederhana.

ModelResolusiDisediakanDistilDeskripsiPrompt yang disarankanParameter yang disarankandtype yang direkomendasikan
Photoroom/prx-256-t2i256TidakTidakModel dasar yang telah dilatih sebelumnya pada 256 dengan Flux VAEBerfungsi paling baik dengan prompt detail dalam bahasa alami28 langkah, cfg=5.0torch.bfloat16
Photoroom/prx-256-t2i-sft512YaTidakDilatih ulang pada dataset Alchemist dataset dengan Flux VAEDapat menangani prompt yang kurang detail28 langkah, cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i512TidakTidakModel dasar yang telah dilatih sebelumnya pada 512 dengan Flux VAEBerfungsi paling baik dengan prompt detail dalam bahasa alami28 langkah, cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i-sft512YaTidakDilatih ulang pada dataset Alchemist dataset dengan Flux VAEDapat menangani prompt yang kurang detail dalam bahasa alami28 langkah, cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i-sft-distilled512YaYaModel terdistil 8 langkah dari Photoroom/prx-512-t2i-sftDapat menangani prompt yang kurang detail dalam bahasa alami8 langkah, cfg=1.0torch.bfloat16
Photoroom/prx-512-t2i-dc-ae512TidakTidakModel dasar yang telah dilatih sebelumnya pada 512 dengan Deep Compression Autoencoder (DC-AE)Berfungsi paling baik dengan prompt detail dalam bahasa alami28 langkah, cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i-dc-ae-sft512YaTidakDilatih ulang pada dataset Alchemist dataset dengan Deep Compression Autoencoder (DC-AE)Dapat menangani prompt yang kurang detail dalam bahasa alami28 langkah, cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i-dc-ae-sft-distilled512YaYaModel terdistil 8 langkah dari Photoroom/prx-512-t2i-dc-ae-sft-distilledDapat menangani prompt yang kurang detail dalam bahasa alami8 langkah, cfg=1.0torch.bfloat16

Lihat koleksi ini untuk informasi lebih lanjut.

Memuat pipeline

Muat pipeline dengan from_pretrained().

from diffusers.pipelines.prx import PRXPipeline

# Load pipeline - VAE and text encoder will be loaded from HuggingFace
pipe = PRXPipeline.from_pretrained("Photoroom/prx-512-t2i-sft", dtype=torch.bfloat16)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A front-facing portrait of a lion the golden savanna at sunset."
image = pipe(prompt, num_inference_steps=28, guidance_scale=5.0).images[0]
image.save("prx_output.png")

Memuat Komponen Secara Manual

Muat komponen secara individual untuk menyesuaikan pipeline, misalnya untuk menggunakan model terkuantisasi.

import torch
from diffusers.pipelines.prx import PRXPipeline
from diffusers.models import AutoencoderKL, AutoencoderDC
from diffusers.models.transformers.transformer_prx import PRXTransformer2DModel
from diffusers.schedulers import FlowMatchEulerDiscreteScheduler
from transformers import T5GemmaModel, GemmaTokenizerFast
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
from transformers import BitsAndBytesConfig as BitsAndBytesConfig

quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
# Load transformer
transformer = PRXTransformer2DModel.from_pretrained(
    "checkpoints/prx-512-t2i-sft",
    subfolder="transformer",
    quantization_config=quant_config,
    dtype=torch.bfloat16,
)

# Load scheduler
scheduler = FlowMatchEulerDiscreteScheduler.from_pretrained(
    "checkpoints/prx-512-t2i-sft", subfolder="scheduler"
)

# Load T5Gemma text encoder
t5gemma_model = T5GemmaModel.from_pretrained("google/t5gemma-2b-2b-ul2",
                                            quantization_config=quant_config,
                                            dtype=torch.bfloat16)
text_encoder = t5gemma_model.encoder.to(dtype=torch.bfloat16)
tokenizer = GemmaTokenizerFast.from_pretrained("google/t5gemma-2b-2b-ul2")
tokenizer.model_max_length = 256

# Load VAE - choose either Flux VAE or DC-AE
# Flux VAE
vae = AutoencoderKL.from_pretrained("black-forest-labs/FLUX.1-dev",
                                    subfolder="vae",
                                    quantization_config=quant_config,
                                    dtype=torch.bfloat16)

pipe = PRXPipeline(
    transformer=transformer,
    scheduler=scheduler,
    text_encoder=text_encoder,
    tokenizer=tokenizer,
    vae=vae
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

Optimasi Memori

Untuk lingkungan dengan keterbatasan memori:

import torch
from diffusers.pipelines.prx import PRXPipeline

pipe = PRXPipeline.from_pretrained("Photoroom/prx-512-t2i-sft", dtype=torch.bfloat16)
pipe.enable_model_cpu_offload()  # Offload components to CPU when not in use

# Or use sequential CPU offload for even lower memory
pipe.enable_sequential_cpu_offload()

PRXPipeline

kelas diffusers.PRXPipeline

< >

( transformer: PRXTransformer2DModelscheduler: FlowMatchEulerDiscreteSchedulertext_encoder: T5GemmaEncodertokenizer: transformers.models.t5.tokenization_t5.T5Tokenizer | transformers.models.gemma.tokenization_gemma.GemmaTokenizer | transformers.models.auto.tokenization_auto.AutoTokenizervae: diffusers.models.autoencoders.autoencoder_kl.AutoencoderKL | diffusers.models.autoencoders.autoencoder_dc.AutoencoderDC | None = Nonedefault_sample_size: int | None = 512 )

Parameter

  • transformer (PRXTransformer2DModel) — Model transformer PRX untuk menghilangkan noise pada latens gambar yang telah dienkod.
  • scheduler (FlowMatchEulerDiscreteScheduler) — Scheduler yang digunakan bersama transformer untuk menghilangkan noise pada latens gambar yang telah dikodekan.
  • text_encoder (T5GemmaEncoder) — Model text encoder untuk meng-encode prompt.
  • tokenizer ([T5TokenizerFast atau GemmaTokenizerFast]) — Tokenizer untuk encoder teks.
  • vae (AutoencoderKL atau AutoencoderDC) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten. Mendukung baik AutoencoderKL (kompresi 8x) maupun AutoencoderDC (kompresi 32x).

Pipeline untuk generasi teks-ke-gambar menggunakan PRX Transformer.

Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua pipeline (seperti mengunduh atau menyimpan, menjalankan pada perangkat tertentu, dll.)

__call__

< >

( prompt: str | list[str] = Nonenegative_prompt: str = ''height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 28timesteps: list = Noneguidance_scale: float = 4.0num_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneprompt_attention_mask: typing.Optional[torch.BoolTensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.BoolTensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueuse_resolution_binning: bool = Truecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']tokenizer_max_length: int | None = Noneskip_text_cleaning: bool = False ) → [~pipelines.prx.PRXPipelineOutput] or *tuple`

Parameter

  • prompt (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan prompt_embeds sebagai gantinya.
  • negative_prompt (str, opsional, default "") — Prompt atau prompt-prompt yang tidak digunakan untuk memandu generasi gambar. Diabaikan saat tidak menggunakan panduan (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • height (int, opsional, defaultnya self.transformer.config.sample_size * self.vae_scale_factor) — Tinggi gambar yang dihasilkan dalam piksel.
  • width (int, opsional, defaultnya self.transformer.config.sample_size * self.vae_scale_factor) — Lebar gambar yang dihasilkan dalam piksel.
  • num_inference_steps (int, opsional, default 28) — 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 dengan scheduler yang mendukung argumen timesteps di metode set_timesteps mereka. Jika tidak didefinisikan, perilaku default saat num_inference_steps dilewatkan akan digunakan. Harus dalam urutan menurun.
  • guidance_scale (float, opsional, default 4.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance. guidance_scale didefinisikan sebagai w dari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengatur guidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait dengan prompt teks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah.
  • num_images_per_prompt (int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt.
  • generator (torch.Generator atau list[torch.Generator], opsional) — Satu atau daftar generator torch untuk membuat proses generasi menjadi deterministik.
  • latents (torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya, 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 menggunakan generator acak yang diberikan.
  • prompt_embeds (torch.FloatTensor, opsional) — Embedding teks yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
  • negative_prompt_embeds (torch.FloatTensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan dan guidance_scale > 1, embedding negatif akan dibuat dari string kosong.
  • prompt_attention_mask (torch.BoolTensor, opsional) — Attention mask yang telah dibuat sebelumnya untuk prompt_embeds. Jika tidak disediakan, attention mask akan dibuat dari argumen input prompt.
  • negative_prompt_attention_mask (torch.BoolTensor, opsional) — Attention mask yang telah dibuat sebelumnya untuk negative_prompt_embeds. Jika tidak disediakan dan guidance_scale > 1, attention mask akan dibuat dari string kosong.
  • output_type (str, opsional, default “pil”) — Format output dari generate image. Pilih antara PIL: PIL.Image.Image atau np.array.
  • tokenizer_max_length (int, opsional) — Menggantikan jumlah token maksimum yang digunakan saat melakukan tokenisasi prompt. Secara default menggunakan model_max_length milik tokenizer itu sendiri jika tidak diatur.
  • skip_text_cleaning (bool, opsional, default False) — Jika True, hanya menggunakan pembersihan prompt ringan (perbaikan encoding + unescape HTML) alih-alih pipeline pembersihan DeepFloyd penuh.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan [~pipelines.prx.PRXPipelineOutput] alih-alih tuple biasa.
  • use_resolution_binning (bool, opsional, default True) — Jika diset ke True, tinggi dan lebar yang diminta pertama kali dipetakan ke resolusi terdekat menggunakan bin rasio aspek yang predefined. Setelah latents yang dihasilkan didekode menjadi gambar, ukuran gambar dikembalikan ke resolusi yang diminta. Berguna untuk menghasilkan gambar non-persegi pada resolusi optimal.
  • callback_on_step_end (Callable, opsional) — Fungsi yang dipanggil di akhir setiap langkah denoising selama inferensi. Fungsi ini dipanggil dengan argumen berikut: callback_on_step_end(self, step, timestep, callback_kwargs). callback_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, optional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan tensor yang terdaftar dalam atribut ._callback_tensor_inputs.

Mengembalikan

[~pipelines.prx.PRXPipelineOutput] atau *tuple`

[~pipelines.prx.PRXPipelineOutput] jika return_dict bernilai True, selain itu berupa *tuple. Saat mengembalikan tuple, elemen pertama adalah daftar berisi gambar yang dihasilkan.

Fungsi yang dipanggil saat memanggil pipeline untuk generasi.

Contoh:

>>> import torch
>>> from diffusers import PRXPipeline

>>> # Load pipeline with from_pretrained
>>> pipe = PRXPipeline.from_pretrained("Photoroom/prx-512-t2i-sft")
>>> pipe.to("cuda")

>>> prompt = "A digital painting of a rusty, vintage tram on a sandy beach"
>>> image = pipe(prompt, num_inference_steps=28, guidance_scale=5.0).images[0]
>>> image.save("prx_output.png")

check_inputs

< >

( prompt: str | list[str]height: intwidth: intguidance_scale: floatcallback_on_step_end_tensor_inputs: list[str] | None = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = None )

Periksa bahwa semua input berada dalam format yang benar.

encode_prompt

< >

( prompt: str | list[str]device: typing.Optional[torch.device] = Nonedo_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_images_per_prompt: int = 1prompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneprompt_attention_mask: typing.Optional[torch.BoolTensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.BoolTensor] = Nonetokenizer_max_length: int | None = Noneskip_text_cleaning: bool = False )

Enkode prompt teks menggunakan encoder teks dan tokenizer standar, atau gunakan embedding yang sudah dihitung sebelumnya.

get_default_resolution

< >

( ) → int

Mengembalikan

int

Ukuran sampel (tinggi/lebar) default yang digunakan untuk generasi.

Tentukan resolusi default berdasarkan VAE dan config yang dimuat.

prepare_latents

< >

( batch_size: intnum_channels_latents: intheight: intwidth: intdtype: dtypedevice: devicegenerator: typing.Optional[torch.Generator] = Nonelatents: typing.Optional[torch.Tensor] = None )

Siapkan latens awal untuk proses difusi.

PRXPipelineOutput

kelas diffusers.pipelines.prx.PRXPipelineOutput

< >

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

Parameter

  • images (list[PIL.Image.Image] atau np.ndarray) — daftar gambar PIL yang telah didenoise dengan panjang batch_size atau array numpy dengan bentuk (batch_size, height, width, num_channels). Gambar PIL atau array numpy menyajikan gambar-gambar yang telah didenoise dari pipeline difusi.

Kelas output untuk pipeline PRX.

Update on GitHub