Diffusers documentation
PRX
PRX
PRX genera imágenes de alta calidad a partir de texto utilizando una arquitectura MMDIT simplificada en la que los tokens de texto no se actualizan a través de los bloques transformer. Emplea flow matching con programación discreta para una muestreo eficiente y utiliza el modelo T5Gemma-2B-2B-UL2 de Google para la codificación de texto multilingüe. El transformer de ~1.3B parámetros ofrece una inferencia rápida sin sacrificar la calidad. Puedes elegir entre Flux VAE (compresión 8x, 16 canales latentes) para un equilibrio entre calidad y velocidad, o DC-AE (compresión 32x, 32 canales latentes) para una mayor compresión latente y un procesamiento más rápido.
Modelos disponibles
PRX ofrece múltiples variantes con diferentes configuraciones de VAE, cada una optimizada para resoluciones específicas. Los modelos base destacan con prompts detallados, capturando composiciones complejas y sutiles detalles. Los modelos afinados entrenados en el conjunto de datos Alchemist mejoran la calidad estética, especialmente con prompts más simples.
| Modelo | Resolución | Ajustado | Destilado | Descripción | Prompts sugeridos | Parámetros sugeridos | dtype recomendado |
|---|---|---|---|---|---|---|---|
Photoroom/prx-256-t2i | 256 | No | No | Modelo base preentrenado en 256 con Flux VAE | Funciona mejor con prompts detallados en lenguaje natural | 28 pasos, cfg=5.0 | torch.bfloat16 |
Photoroom/prx-256-t2i-sft | 512 | Sí | No | Ajustado fino en el conjunto de datos Alchemist dataset con Flux VAE | Puede manejar prompts menos detallados | 28 pasos, cfg=5.0 | torch.bfloat16 |
Photoroom/prx-512-t2i | 512 | No | No | Modelo base preentrenado en 512 con Flux VAE | Funciona mejor con prompts detallados en lenguaje natural | 28 pasos, cfg=5.0 | torch.bfloat16 |
Photoroom/prx-512-t2i-sft | 512 | Sí | No | Ajustado fino en el conjunto de datos Alchemist dataset con Flux VAE | Puede manejar prompts menos detallados en lenguaje natural | 28 pasos, cfg=5.0 | torch.bfloat16 |
Photoroom/prx-512-t2i-sft-distilled | 512 | Sí | Sí | Modelo destilado de 8 pasos de Photoroom/prx-512-t2i-sft | Puede manejar prompts menos detallados en lenguaje natural | 8 pasos, cfg=1.0 | torch.bfloat16 |
Photoroom/prx-512-t2i-dc-ae | 512 | No | No | Modelo base preentrenado a 512 con Deep Compression Autoencoder (DC-AE) | Funciona mejor con prompts detallados en lenguaje natural | 28 pasos, cfg=5.0 | torch.bfloat16 |
Photoroom/prx-512-t2i-dc-ae-sft | 512 | Sí | No | Ajustado finamente en el conjunto de datos Alchemist con Deep Compression Autoencoder (DC-AE) | Puede manejar prompts menos detallados en lenguaje natural | 28 pasos, cfg=5.0 | torch.bfloat16 |
Photoroom/prx-512-t2i-dc-ae-sft-distilled | 512 | Sí | Sí | Modelo destilado de 8 pasos de Photoroom/prx-512-t2i-dc-ae-sft-distilled | Puede manejar prompts menos detallados en lenguaje natural | 8 pasos, cfg=1.0 | torch.bfloat16 |
Consulte esta colección para obtener más información.
Carga del pipeline
Load the pipeline with 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")Carga manual de componentes
Cargue los componentes de forma individual para personalizar el pipeline, por ejemplo, para usar modelos cuantizados.
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"Optimización de memoria
Para entornos con limitaciones de memoria:
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
clase diffusers.PRXPipeline
< source >( 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 )
Parámetros
- transformer (
PRXTransformer2DModel) — El modelo transformer PRX para desruidar los latentes de la imagen codificada. - scheduler (FlowMatchEulerDiscreteScheduler) —
Un scheduler para usar en combinación con
transformerpara desruidar los latentes de imagen codificados. - text_encoder (
T5GemmaEncoder) — Modelo de codificador de texto para codificar prompts. - tokenizer ([
T5TokenizerFastoGemmaTokenizerFast]) — Tokenizer para el codificador de texto. - vae (AutoencoderKL o AutoencoderDC) — Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes hacia y desde representaciones latentes. Admite tanto AutoencoderKL (compresión 8x) como AutoencoderDC (compresión 32x).
Pipeline para la generación de imágenes a partir de texto usando PRX Transformer.
Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)
__call__
< source >( 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`
Parámetros
- prompt (str o list[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, hay que pasar prompt_embeds en su lugar.
- negative_prompt (str, opcional, valor predeterminado "") — El prompt o prompts que no deben guiar la generación de la imagen. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
- height (int, opcional, por defecto self.transformer.config.sample_size * self.vae_scale_factor) — La altura en píxeles de la imagen generada.
- width (int, opcional, por defecto self.transformer.config.sample_size * self.vae_scale_factor) — El ancho en píxeles de la imagen generada.
- num_inference_steps (int, opcional, valor predeterminado 28) — El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
- timesteps (list[int], opcional) — Pasos de tiempo personalizados para usar en el proceso de desruido con programadores que admiten un argumento timesteps en su método set_timesteps. Si no se define, se usará el comportamiento predeterminado cuando se pase num_inference_steps. Debe estar en orden descendente.
- guidance_scale (float, opcional, valor predeterminado 4.0) — Escala de guía definida en Classifier-Free Diffusion Guidance. guidance_scale se define como w de la ecuación 2 del Imagen Paper. La escala de guía se habilita estableciendo guidance_scale > 1. Una escala de guía más alta fomenta la generación de imágenes estrechamente vinculadas al de texto prompt, generalmente a costa de una menor calidad de imagen.
- num_images_per_prompt (int, opcional, valor predeterminado 1) — El número de imágenes que se generarán por indicación.
- generator (torch.Generator o list[torch.Generator], opcional) — Uno o una lista de generadores de torch para hacer la generación determinista.
- latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados, muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporcionan, se generará un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
- prompt_embeds (torch.FloatTensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden utilizar para ajustar fácilmente las entradas de texto, por ejemplo, el ponderado del prompt. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
- negative_prompt_embeds (torch.FloatTensor, opcional) — Incrustaciones de texto negativas pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, por ejemplo, el ponderado del prompt. Si no se proporcionan y guidance_scale > 1, se generarán incrustaciones negativas a partir de una cadena vacía.
- prompt_attention_mask (torch.BoolTensor, opcional) — Máscara de atención pregenerada para prompt_embeds. Si no se proporciona, la máscara de atención se generará a partir del argumento de entrada prompt.
- negative_prompt_attention_mask (torch.BoolTensor, opcional) — Máscara de atención pregenerada para negative_prompt_embeds. Si no se proporciona y guidance_scale > 1, se generará la máscara de atención a partir de una cadena vacía.
- output_type (str, opcional, por defecto “pil”) — El formato de salida de la imagen generada. Elija entre PIL: PIL.Image.Image o np.array.
- tokenizer_max_length (int, opcional) —
Anula el número máximo de tokens utilizados al tokenizar el prompt. Si no se establece, el valor predeterminado es el
model_max_lengthpropio del tokenizer. - skip_text_cleaning (bool, opcional, valor predeterminado False) — Si es True, utiliza solo una limpieza ligera del prompt (corregir codificación + desescapar HTML) en lugar del pipeline completo de limpieza de DeepFloyd.
- return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un [~pipelines.prx.PRXPipelineOutput] en lugar de una tupla simple.
- use_resolution_binning (bool, opcional, valor predeterminado True) — Si se establece en True, la altura y el ancho solicitados se mapean primero a las resoluciones más cercanas utilizando bins de relación de aspecto predefinidos. Después de que los latentes generados se decodifican en imágenes, se redimensionan de nuevo a la resolución solicitada. Útil para generar imágenes no cuadradas en resoluciones óptimas.
- callback_on_step_end (Callable, opcional) — Una función que se llama al final de cada paso de desruido durante la inferencia. La función se llama con los siguientes argumentos: callback_on_step_end(self, step, timestep, callback_kwargs). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
- callback_on_step_end_tensor_inputs (list, optional) — La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrás incluir tensores que estén listados en el atributo ._callback_tensor_inputs.
Devuelve
[~pipelines.prx.PRXPipelineOutput] o *tuple`
[~pipelines.prx.PRXPipelineOutput] si return_dict es True, de lo contrario una *tuple. Al devolver una tuple, el primer elemento es una lista con las imágenes generadas.
Función invocada al llamar a la pipeline para la generación.
Ejemplos:
>>> 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
< source >( 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 )
Comprueba que todas las entradas estén en el formato correcto.
encode_prompt
< source >( 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 )
Codifica el prompt de texto usando el codificador y el tokenizador de texto estándar, o usa embeddings precalculados.
get_default_resolution
< source >( ) → int
Devuelve
int
Tamaño de muestra predeterminado (alto/ancho) para usar en la generación.
Determine la resolución predeterminada en función del VAE y la configuración cargados.
prepare_latents
< source >( batch_size: intnum_channels_latents: intheight: intwidth: intdtype: dtypedevice: devicegenerator: typing.Optional[torch.Generator] = Nonelatents: typing.Optional[torch.Tensor] = None )
Prepara los latentes iniciales para el proceso de difusión.
PRXPipelineOutput
clase diffusers.pipelines.prx.PRXPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Clase de salida para las tuberías de PRX.