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は、テキストトークンがTransformerブロックを通じて更新されない簡素化されたMMDITアーキテクチャを用いて、テキストから高品質な画像を生成します。効率的なサンプリングのために、離散スケジューリングを備えたフローマッチングを採用し、多言語テキストエンコーディングにはGoogleのT5Gemma-2B-2B-UL2モデルを使用しています。約1.3BパラメータのTransformerにより、品質を犠牲にすることなく高速な推論を実現します。バランスの取れた品質と速度を求める場合はFlux VAE(8倍圧縮、16の潜在チャネル)、潜在圧縮とより高速な処理を求める場合はDC-AE(32倍圧縮、32の潜在チャネル)を選択できます。

利用可能なモデル

PRXには、異なるVAE設定を持つ複数のバリアントがあり、それぞれが特定の解像度に最適化されています。ベースモデルは詳細なプロンプトで優れた性能を発揮し、複雑な構図や微細なディテールを捉えます。Alchemist datasetで学習されたファインチューニング済みモデルは、特にシンプルなプロンプトにおいて、美的品質を向上させます。

モデル解決ファインチューニング済み蒸留済み説明推奨プロンプト推奨パラメータ推奨されるdtype
Photoroom/prx-256-t2i256いいえいいえFlux VAEで256に事前学習されたベースモデル自然言語による詳細なプロンプトで最も効果的に動作します28ステップ、cfg=5.0torch.bfloat16
Photoroom/prx-256-t2i-sft512はいいいえFlux VAE を使用して、Alchemist dataset でファインチューニング詳細度が低いプロンプトにも対応できます28ステップ、cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i512いいえいいえFlux VAEで512に事前学習されたベースモデル自然言語による詳細なプロンプトで最も効果的に動作します28ステップ、cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i-sft512はいいいえFlux VAE を使用して、Alchemist dataset でファインチューニング自然言語による詳細度の低いプロンプトを処理できます28ステップ、cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i-sft-distilled512はいはいPhotoroom/prx-512-t2i-sftからの8ステップ蒸留モデル自然言語による詳細度の低いプロンプトを処理できます8ステップ、cfg=1.0torch.bfloat16
Photoroom/prx-512-t2i-dc-ae512いいえいいえ512で事前学習されたベースモデル、Deep Compression Autoencoder (DC-AE)自然言語による詳細なプロンプトで最も効果的に動作します28ステップ、cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i-dc-ae-sft512はいいいえAlchemist datasetで、Deep Compression Autoencoder (DC-AE)を使用してファインチューニングしました自然言語による詳細度の低いプロンプトを処理できます28ステップ、cfg=5.0torch.bfloat16
Photoroom/prx-512-t2i-dc-ae-sft-distilled512はいはいPhotoroom/prx-512-t2i-dc-ae-sft-distilledからの8ステップ蒸留モデル自然言語による詳細度の低いプロンプトを処理できます8ステップ、cfg=1.0torch.bfloat16

詳細については、こちらのコレクションを参照してください。

パイプラインの読み込み

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")

手動コンポーネントの読み込み

パイプラインをカスタマイズするため(例えば、量子化モデルを使用する場合など)、コンポーネントを個別に読み込むことができます。

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"

メモリ最適化

メモリが制約された環境向け:

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

class 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 )

パラメータ

  • transformer (PRXTransformer2DModel) — エンコードされた画像の潜在変数(latents)をデノイズするための PRX transformer モデル。
  • scheduler (FlowMatchEulerDiscreteScheduler) — transformer と組み合わせて、エンコードされた画像の潜在変数からノイズを除去するために使用するスケジューラ。
  • text_encoder (T5GemmaEncoder) — プロンプトをエンコードするためのテキストエンコーダーモデルです。
  • tokenizer ([T5TokenizerFast または GemmaTokenizerFast]) — テキストエンコーダー用のトークナイザー。
  • vae (AutoencoderKL または AutoencoderDC) — 画像を潜在表現にエンコードし、潜在表現からデコードするための Variational Auto-Encoder (VAE) モデルです。 AutoencoderKL (8倍圧縮) と AutoencoderDC (32倍圧縮) の両方をサポートしています。

PRX Transformer を使用したテキストから画像への生成を行う Pipeline。

このモデルは DiffusionPipeline を継承しています。すべてのパイプラインに対してライブラリが実装している汎用的なメソッド(ダウンロードや保存、特定のデバイスでの実行など)については、スーパークラスのドキュメントを参照してください。

__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`

パラメータ

  • prompt (str または list[str]、optional) — 画像生成をガイドするためのプロンプトです。未定義の場合、代わりに prompt_embeds を渡す必要があります。
  • negative_prompt (str、optional、デフォルトは "") — 画像生成をガイドしないプロンプトです。ガイダンスを使用していない場合は無視されます(guidance_scale が 1 未満の場合は無視されます)。
  • height (int、任意、デフォルトは self.transformer.config.sample_size * self.vae_scale_factor) — 生成される画像のピクセル単位の縦幅。
  • width (int、任意、デフォルトは self.transformer.config.sample_size * self.vae_scale_factor) — 生成される画像の幅(ピクセル単位)。
  • num_inference_steps (int、optional、デフォルト値は 28)— デノイジングのステップ数です。デノイジングのステップ数を増やすと、推論速度が遅くなる代わりに、通常はより高品質な画像が得られます。
  • timesteps (list[int]、任意) — timesteps 引数をサポートするスケジューラーの set_timesteps メソッドで、デノイジングプロセスに使用するカスタムタイムステップ。定義されていない場合、num_inference_steps が渡された際のデフォルトの動作が使用されます。降順で指定する必要があります。
  • guidance_scale (float、optional、デフォルト値は 4.0) — Classifier-Free Diffusion Guidance で定義されているガイダンススケールです。guidance_scale は、Imagen Paper の数式 2 の w として定義されています。guidance_scale > 1 を設定することでガイダンススケールが有効になります。ガイダンススケールを高くすると、prompt のテキストと強く関連する画像の生成が促されますが、通常は画像の品質が低下する傾向があります。
  • num_images_per_prompt (int、任意、デフォルト値は 1) — プロンプトごとに生成する画像の数。
  • generator (torch.Generator または list[torch.Generator]、省略可) — 生成を決定論的にするための torch ジェネレーター 1 つまたはリスト。
  • latents (torch.Tensor, optional) — 画像生成の入力として使用する、ガウス分布からサンプリングされた事前生成されたノイジーな潜在変数です。異なるプロンプトで同じ生成を調整するために使用できます。指定されない場合、指定されたランダムgeneratorを使用してサンプリングを行い、潜在変数テンソルが生成されます。
  • prompt_embeds (torch.FloatTensor、任意) — 事前に生成されたテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うことができます。指定されない場合、prompt 入力引数からテキスト埋め込みが生成されます。
  • negative_prompt_embeds (torch.FloatTensor、任意) — 事前に生成されたネガティブなテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されず、かつ guidance_scale > 1 の場合、空の文字列からネガティブな埋め込みが生成されます。
  • prompt_attention_mask (torch.BoolTensor、任意) — prompt_embeds 用の事前生成されたアテンションマスクです。指定されない場合、prompt 入力引数からアテンションマスクが生成されます。
  • negative_prompt_attention_mask (torch.BoolTensor、任意) — negative_prompt_embeds 用の事前生成されたアテンションマスクです。指定されず、かつ guidance_scale > 1 の場合、空の文字列からアテンションマスクが生成されます。
  • output_type (str、optional、デフォルトは “pil”) — 画像生成の出力形式。PIL: PIL.Image.Image または np.array から選択します。
  • tokenizer_max_length (int, optional) — プロンプトのトークン化時に使用されるトークンの最大数を上書きします。設定されていない場合、デフォルトではトークナイザー自身のmodel_max_lengthが使用されます。
  • skip_text_cleaning (bool、任意、デフォルトは False) — True の場合、DeepFloyd の完全なクリーニングパイプラインの代わりに、軽量のプロンプトクリーニング(エンコーディングの修正と HTML のアンエスケープ)のみを使用します。
  • return_dict (bool、optional、デフォルトは True) — プレーンなタプルではなく [~pipelines.prx.PRXPipelineOutput] を返すかどうか。
  • use_resolution_binning (bool、optional、デフォルトは True) — True に設定すると、要求された高さおよび幅は、事前に定義されたアスペクト比のビンに基づいて、最も近い解像度にマッピングされます。生成された潜在変数が画像にデコードされた後、要求された解像도에リサイズされます。最適な解像度で正方形でない画像を生成する場合に有用です。
  • callback_on_step_end (Callable, optional) — 推論中の各デノイジングステップの終了時に呼び出される関数です。この関数は、以下の引数とともに呼び出されます: callback_on_step_end(self, step, timestep, callback_kwargs)。 callback_kwargs には、callback_on_step_end_tensor_inputs で指定されたすべてのテンソルのリストが含まれます。
  • callback_on_step_end_tensor_inputs (list、optional) — callback_on_step_end 関数に渡すテンソル入力のリストです。リストに指定されたテンソルは、callback_kwargs 引数として渡されます。含めることができるのは、._callback_tensor_inputs 属性にリストアップされているテンソルのみです。

戻り値

[~pipelines.prx.PRXPipelineOutput] または *tuple`

~pipelines.prx.PRXPipelineOutput を返します。return_dict が True の場合、それ以外の場合は *tuple を返します。tuple を返す場合、最初の要素は生成された画像のリストです。

生成用のパイプラインを呼び出したときに実行される関数。

例:

>>> 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 )

すべての入力が正しい形式であることを確認してください。

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 )

標準的なテキストエンコーダーとトークナイザーを使用してテキストプロンプトをエンコードするか、事前計算された埋め込みを使用します。

get_default_resolution

< >

( ) → int

戻り値

int

生成に使用するデフォルトのサンプルサイズ(高さ/幅)。

読み込まれたVAEと設定に基づいて、デフォルトの解像度を決定します。

prepare_latents

< >

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

拡散プロセス用の初期潜在変数を準備します。

PRXPipelineOutput

クラス diffusers.pipelines.prx.PRXPipelineOutput

< >

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

パラメータ

  • images (list[PIL.Image.Image] または np.ndarray) — batch_size 長さのデノイズ済み PIL イメージのリスト、または (batch_size, height, width, num_channels) の形状を持つ numpy 配列。PIL イメージまたは numpy 配列は、拡散パイプラインのデノイズ済みイメージを表します。

PRX パイプライン用の出力クラスです。

Update on GitHub