Diffusers documentation

PRX Pixel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

PRX Pixel

PRXPixel là mô hình tạo ảnh từ văn bản trong không gian pixel do Photoroom phát triển. Một PRXTransformer2DModel ~7B khử nhiễu trực tiếp trên ảnh RGB thô — không cần VAE. Mô hình được điều kiện bởi bộ mã hóa văn bản Qwen3-VL và sử dụng flow matching, trong đó transformer dự đoán ảnh sạch ở mỗi bước (x-prediction). Độ phân giải sinh ảnh được đưa vào điều biến timestep để mô hình nhận biết kích thước đích.

Các model khả dụng

Mô hìnhGiải phápMô tảCác tham số được đề xuấtdtype được khuyến nghị
Photoroom/prxpixel-t2i1024Mô hình không gian pixel ~7B với bộ mã hóa văn bản Qwen3-VL28 bước, cfg=5.0torch.bfloat16

Tải pipeline

PRXPixelPipeline yêu cầu transformers >= 4.57 (phiên bản giới thiệu Qwen3VLTextModel). Nạp nó bằng from_pretrained():

import torch
from diffusers import PRXPixelPipeline

pipe = PRXPixelPipeline.from_pretrained("Photoroom/prxpixel-t2i", dtype=torch.bfloat16)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

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

Tối ưu hóa bộ nhớ

Đối với các môi trường bị giới hạn bộ nhớ:

import torch
from diffusers import PRXPixelPipeline

pipe = PRXPixelPipeline.from_pretrained("Photoroom/prxpixel-t2i", dtype=torch.bfloat16)
pipe.enable_model_cpu_offload()

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

PRXPixelPipeline

lớp diffusers.PRXPixelPipeline

< >

( transformer: PRXTransformer2DModelscheduler: FlowMatchEulerDiscreteSchedulertext_encoder: PreTrainedModeltokenizer: transformers.models.auto.tokenization_auto.AutoTokenizer | transformers.tokenization_utils_base.PreTrainedTokenizerBasedefault_sample_size: int | None = 1024prompt_max_tokens: int = 256noise_scale: float = 2.0 )

Tham số

  • transformer (PRXTransformer2DModel) — Bộ khử nhiễu PRX có ~7B tham số. Đối với PRXPixel, mô hình này được xây dựng với in_channels=3, một nút thắt cổ chai img_in, và resolution_embeds=True, và được huấn luyện để dự đoán ảnh sạch x0.
  • scheduler (FlowMatchEulerDiscreteScheduler) — Trình lập lịch flow-matching được sử dụng để khử nhiễu các latents (trong không gian pixel).
  • text_encoder (PreTrainedModel) — Khung xương chữ (text backbone) Qwen3-VL được dùng để mã hóa các prompt (tháp thị giác bị loại bỏ). Phải trả về một last_hidden_state.
  • tokenizer (PreTrainedTokenizerBase) — Tokenizer cho text_encoder (thường được nạp qua AutoTokenizer).
  • default_sample_size (int, tùy chọn, mặc định là 1024) — Chiều cao/chiều rộng mặc định được sử dụng khi không có giá trị nào được truyền vào __call__.
  • prompt_max_tokens (int, tùy chọn, mặc định là 256) — Số lượng token văn bản mà prompt được đệm/cắt ngắn trước khi mã hóa.
  • noise_scale (float, tùy chọn, mặc định là 2.0) — Hệ số tỷ lệ áp dụng cho nhiễu Gaussian ban đầu. PRXPixel được huấn luyện với hệ số tỷ lệ nhiễu ban đầu không đơn vị, do đó quá trình lấy mẫu phải bắt đầu từ randn * noise_scale.

Pipeline để tạo ảnh từ văn bản với mô hình PRXPixel.

PRXPixel là một pipeline text-to-image độc lập, hoạt động trong không gian pixel. Nó khử nhiễu trực tiếp trên dữ liệu RGB thô bằng PRXTransformer2DModel có khoảng 7B tham số và không có VAE (quá trình tạo ảnh diễn ra hoàn toàn trong không gian pixel, nên đầu ra sau khi khử nhiễu chính là ảnh). Prompt được mã hóa bằng text encoder Qwen3-VL (tháp thị giác bị loại bỏ). Khác với PRXPipeline, transformer được huấn luyện với x-prediction: ở mỗi bước, nó dự đoán ảnh sạch x0, sau đó giá trị này được chuyển thành velocity của flow-matching trước khi thực hiện bước scheduler. Quá trình lấy mẫu bắt đầu từ randn * noise_scale (mặc định noise_scale=2.0) và độ phân giải mặc định là 1024px.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các pipeline (chẳng hạn như tải xuống hoặc lưu, chạy trên một thiết bị cụ thể, v.v.)

Ví dụ:

>>> import torch
>>> from diffusers import PRXPixelPipeline

>>> pipe = PRXPixelPipeline.from_pretrained("Photoroom/prxpixel-t2i", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

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

__call__

< >

( prompt: str | list[str] = Nonenegative_prompt: str = ''height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 28timesteps: list[int] = 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[str] = ['latents'] ) → PRXPipelineOutput or tuple

Tham số

  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
  • negative_prompt (str, tùy chọn, mặc định là "") — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • height (int, tùy chọn, mặc định là default_sample_size) — Chiều cao của hình ảnh được tạo ra, tính bằng pixel.
  • width (int, tùy chọn, mặc định là default_sample_size) — Chiều rộng của hình ảnh được tạo ra, tính bằng pixel.
  • num_inference_steps (int, tùy chọn, mặc định là 28) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn với chi phí là suy luận chậm hơn.
  • timesteps (list[int], tùy chọn) — Các bước thời gian tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch hỗ trợ đối số timesteps trong phương thức set_timesteps của chúng. Nếu không được định nghĩa, hành vi mặc định khi num_inference_steps được truyền vào sẽ được sử dụng. Phải được sắp xếp theo thứ tự giảm dần.
  • guidance_scale (float, tùy chọn, mặc định là 4.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặt guidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với prompt văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.
  • num_images_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • generator (torch.Generator hoặc list[torch.Generator], tuỳ chọn) — Một hoặc một danh sách torch generator để đảm bảo quá trình sinh là tất định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
  • prompt_embeds (torch.FloatTensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.FloatTensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp và guidance_scale > 1, các embedding âm sẽ được tạo từ một chuỗi rỗng.
  • prompt_attention_mask (torch.BoolTensor, tùy chọn) — Mặt nạ chú ý (attention mask) được tạo trước cho prompt_embeds. Nếu không được cung cấp, mặt nạ chú ý sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_attention_mask (torch.BoolTensor, tùy chọn) — Mặt nạ chú ý (attention mask) được tạo trước cho negative_prompt_embeds. Nếu không được cung cấp và guidance_scale > 1, mặt nạ chú ý sẽ được tạo từ một chuỗi rỗng.
  • output_type (str, tùy chọn, mặc định là "pil") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL: PIL.Image.Image hoặc np.array.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một PRXPipelineOutput thay vì một tuple thông thường hay không.
  • use_resolution_binning (bool, tùy chọn, mặc định là True) — Nếu được đặt thành True, chiều cao và chiều rộng yêu cầu sẽ được ánh xạ trước tiên đến các độ phân giải gần nhất bằng cách sử dụng các bin tỷ lệ khung hình được định nghĩa trước. Sau khi các latents được tạo ra được giải mã thành hình ảnh, chúng sẽ được thay đổi kích thước trở lại độ phân giải yêu cầu. Hữu ích để tạo các hình ảnh không vuông ở các độ phân giải tối ưu.
  • callback_on_step_end (Callable, tùy chọn) — Một hàm được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận. Hàm này được gọi với các đối số sau: callback_on_step_end(self, step, timestep, callback_kwargs). callback_kwargs sẽ bao gồm danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, tùy chọn) — Danh sách các đầu vào tensor cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các tensor được liệt kê trong thuộc tính ._callback_tensor_inputs.

Trả về

PRXPipelineOutput hoặc tuple

PRXPipelineOutput nếu return_dict là True, ngược lại là một `tuple. Khi trả về tuple, phần tử đầu tiên là một danh sách chứa các hình ảnh đã tạo.

Hàm được gọi khi gọi pipeline cho việc sinh.

Ví dụ:

>>> import torch
>>> from diffusers import PRXPixelPipeline

>>> pipe = PRXPixelPipeline.from_pretrained("Photoroom/prxpixel-t2i", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

>>> prompt = "A front-facing portrait of a lion in the golden savanna at sunset."
>>> image = pipe(prompt, num_inference_steps=28, guidance_scale=5.0).images[0]
>>> image.save("prxpixel_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 )

Kiểm tra xem tất cả các đầu vào có đúng định dạng hay không.

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 )

Mã hóa prompt văn bản bằng trình mã hóa và bộ phân từ văn bản tiêu chuẩn, hoặc sử dụng các embedding đã được tính toán trước.

prepare_latents

< >

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

Chuẩn bị các latent ban đầu cho quá trình khuếch tán.

PRXPixel được huấn luyện với thang đo nhiễu ban đầu không đơn vị, do đó nhiễu được lấy mẫu sẽ được nhân với self.config.noise_scale.

PRXPipelineOutput

lớp diffusers.pipelines.prx.PRXPipelineOutput

< >

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

Tham số

  • images (list[PIL.Image.Image] hoặc np.ndarray) — danh sách các hình ảnh PIL đã khử nhiễu có độ dài batch_size hoặc mảng numpy có hình dạng (batch_size, height, width, num_channels). Các hình ảnh PIL hoặc mảng numpy thể hiện các hình ảnh đã khử nhiễu của pipeline khuếch tán.

Lớp đầu ra cho các pipeline PRX.

Update on GitHub