Buckets:

mishig's picture
|
download
raw
13.7 kB

P-H3-Image

P-H3-Image, Pruna AI tarafından MiniMax-H3 tabanlı olarak geliştirilmiş, metinden görüntüye üretim ve talimata dayalı görüntü düzenleme için kullanılan bir görüntü modelidir. Kontrol noktasını PrunaAI/P-H3-Image adresinde bulabilirsiniz.

import torch
from diffusers import ComponentsManager, ModularPipeline

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")  # or "mps", "xpu"

pipe = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)

prompt = (
    "A German Expressionist oil painting of a Berlin street at night in the manner of Ernst Ludwig Kirchner, "
    "with gaunt figures hurrying past a glowing gas lamp."
)
image = pipe(prompt=prompt, height=3360, width=2496, generator=torch.Generator().manual_seed(3), output="images")[0]
edited = pipe(prompt="let it snow on the street", image=image, output="images")[0]

Her istek önce prompt upsampler üzerinden geçer. Hızlandırıcıdaki her bileşenle birlikte, hattın 8 megapikselde bfloat16 ile yaklaşık 101 GB'a ihtiyacı vardır; bu nedenle örnekler otomatik boşaltmayı kullanır: ComponentsManager, bir blok gerektiğinde her bileşeni hızlandırıcıya taşır ve hat 80 GB'lık bir GPU üzerinde çalışır.

Bileşenler

Bileşen Sınıf
transformer MiniMaxH3Transformer3DModel
text_encoder Qwen3VLForConditionalGeneration (Qwen3-VL-4B)
text_connector PH3ImageTextConnector
vae AutoencoderKLPH3Image
tokenizer, processor Metin kodlayıcısının belirteçleyicisi ve MiniMax-H3'ün görüntü işleyicisine sahip bir Qwen3VLProcessor
scheduler, audio_scheduler MiniMaxH3Scheduler
prompt_upsampler, prompt_upsampler_processor Qwen3_5ForConditionalGeneration (Qwen3.5-9B tabanlı) ve işlemcisi

İş Akışları

İş akışı, image girdisinde seçilir:

  • text2image, prompt üzerinden üretim yapar. height ve width varsayılan olarak 2912'dir ve 32'nin katlarına yuvarlanır. Model, 8 megapikselde en iyi sonucu verir; örneğin 2912x2912, 3872x2176 veya 2176x3872.
  • image_conditioned, image öğesini prompt içindeki talimata göre düzenler ve 4 veya 8 megapiksel çözünürlükte en iyi sonucu verir. Görsel, metin kodlayıcı için yaklaşık vision_pixels (bir megapiksel) çözünürlükte, VAE için ise kendi boyutunda kodlanır; bu aralığın dışında kalması durumunda reference_min_pixels (bir megapiksel) değerine yükseltilir veya reference_max_pixels (sekiz megapiksel) değerine düşürülür. height ve width belirtilmediğinde, düzenleme ilk görselin boyutunda oluşturulur; bu boyut daha küçükse canvas_min_pixels (dört megapiksel) değerine yükseltilir. 32'nin katlarına yuvarlanarak geçirilen height ve width değerleri tuvali değiştirir ancak görselleri değiştirmez. image ayrıca en fazla 8 görselden oluşan bir liste de olabilir: ilk görsel düzenlenir, diğerleri ise <Picture 2>, <Picture 3> vb. şeklinde referans olarak kullanılır.

Prompt örnekleme

P-H3-Image, kısa istekler yerine tam istekleri işlemek üzere tasarlandığından, pipeline her istekte önce prompt upsampler'ı çalıştırır. İsteği değerlendirir ve ardından prompt'u yazar: height ve width en-boy oranına uygun ayrıntılı bir metinden-görsele prompt veya düzenleme sırasında görsellerde nelerin korunup nelerin değiştirileceğine dair bir özet. Yazdığı prompt, prompt çıktısı olarak geri döner.

out = pipe(prompt=prompt, height=3360, width=2496, output=["images", "prompt"])
print(out["prompt"])

max_new_tokens, akıl yürütme ve istemi birlikte sınırlar; varsayılan olarak metinden görüntüye için 1024, düzenlemeler için 1536 token'dur. Upsampler kullanılabilir bir istem döndürmezse, pipeline bunu render etmek yerine bir hata fırlatır.

prompt değerini olduğu gibi görüntülemek için bloklardan adımı çıkarın. Çıkarılan blok ayrıca kendi başına da çalışır; örneğin prompt'u görüntülemesinden önce kullanıcıya göstermek için:

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")

blocks = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image").blocks
upsampler_block = blocks.sub_blocks.pop("prompt_upsampler")

upsampler = upsampler_block.init_pipeline("PrunaAI/P-H3-Image", components_manager=manager)
upsampler.load_components(dtype=torch.bfloat16)
upsampled = upsampler(prompt=prompt, height=3360, width=2496, output="prompt")

pipe = blocks.init_pipeline("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)
image = pipe(prompt=upsampled, height=3360, width=2496, output="images")[0]

Adım olmadan, upsampler'ın yazdığı her iki biçimdeki düzenleme komutu, altı bölümlük özet veya Edit <Picture 1>. ile başlayan bir paragraf, olduğu gibi kodlanır; diğer tüm talimatlar bu önekle eklenir.

Örnekleme

  • 8 adım, kontrol noktasının sample_sigmas üzerinde çalışır. Başka bir ızgara kullanmak için sigmas parametresini iletin.
  • Model rehberlik damıtılmıştır, bu nedenle bir rehber, negative_prompt veya guidance_scale yoktur.

PH3ImageModularPipeline[[diffusers.PH3ImageModularPipeline]]

diffusers.PH3ImageModularPipeline[[diffusers.PH3ImageModularPipeline]]

diffusers.PH3ImageModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)

Kaynak

MiniMax-H3 tabanlı bir görüntü modeli olan P-H3-Image için metinden görüntüye (text2image) ve talimata dayalı düzenleme (image_conditioned) için bir ModularPipeline.

Görsel, iki adet atılan ses latentini içeren tek bir paketlenmiş dizide gürültüden arındırılmış tek bir latent karedir.

import torch
from diffusers import ComponentsManager, ModularPipeline

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")

pipe = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)
prompt = (
    "A German Expressionist oil painting of a Berlin street at night in the manner of Ernst Ludwig Kirchner, "
    "with gaunt figures hurrying past a glowing gas lamp."
)
image = pipe(prompt=prompt, height=3360, width=2496, output="images")[0]

PH3ImageBlocks[[diffusers.PH3ImageBlocks]]

diffusers.PH3ImageBlocks[[diffusers.PH3ImageBlocks]]

diffusers.PH3ImageBlocks()

Kaynak

P-H3-Image için modüler pipeline blokları: text2image ve image geçirildiğinde talimata dayalı düzenleme (image_conditioned). prompt önce prompt upsampler'dan geçer; verilen haliyle render etmek için prompt_upsampler adımını kaldırın.

Desteklenen iş akışları:

  • text2image: prompt gerektirir
  • image_conditioned: prompt ve image gerektirir

Bileşenler: image_processor (VaeImageProcessor) prompt_upsampler (Qwen3_5ForConditionalGeneration): İstem yükseltici. prompt_upsampler_processor (AutoProcessor): İşlemcisi. text_encoder (Qwen3VLForConditionalGeneration) text_connector (PH3ImageTextConnector) tokenizer (Qwen2Tokenizer) processor (Qwen3VLProcessor) vae (AutoencoderKLPH3Image) scheduler (MiniMaxH3Scheduler) audio_scheduler (MiniMaxH3Scheduler) transformer (MiniMaxH3Transformer3DModel)

Yapılandırmalar: reference_min_pixels (varsayılan: 1048576) reference_max_pixels (varsayılan: 8388608) canvas_min_pixels (varsayılan: 4194304) vision_pixels (varsayılan: 1000000) sample_sigmas (varsayılan: [1.0, 0.984753, 0.967905, 0.951688, 0.925372, 0.881923, 0.810083, 0.528718, 0.0]): sigmas geçirilmediğinde kullanılan checkpoint'in örneklem ızgarası.

Girdiler: image (Image | list, isteğe bağlı): Düzenlenecek görüntü veya en fazla 8 görüntünün listesi: ilki düzenlenir, diğerleri referans olarak kullanılır. height (int, isteğe bağlı): Üretilen görüntünün piksel cinsinden yüksekliği, 32'nin katına yuvarlanır. text2image için varsayılan değer 2912'dir ve 8 megapikselde en iyi sonucu verir. Bir düzenleme, en az canvas_min_pixels olmak üzere ilk görüntünün boyutuna ayarlanır ve 4 veya 8 megapikselde en iyi sonucu verir. width (int, isteğe bağlı): Üretilen görüntünün piksel cinsinden genişliği, 32'nin katına yuvarlanır. text2image için varsayılan değer 2912'dir ve 8 megapikselde en iyi sonucu verir. Bir düzenleme, en az canvas_min_pixels olmak üzere ilk görüntünün boyutuna ayarlanır ve 4 veya 8 megapikselde en iyi sonucu verir. prompt (str): İstem veya image geçirildiğinde düzenleme talimatı. Tek bir dize. max_new_tokens (int, isteğe bağlı, iş akışına bağlı olarak varsayılan 1536 veya 1024): Upsampler'ın akıl yürütmesi dahil olmak üzere üretebileceği en fazla token sayısı. vision_images (list, isteğe bağlı): Metin kodlayıcı için yeniden boyutlandırılmış düzenleme görüntüleri, düzenlenecek görüntü ilk sırada. reference_images (list, isteğe bağlı): VAE için yeniden boyutlandırılmış düzenleme görüntüleri, düzenlenecek görüntü ilk sırada. condition_latents (list, isteğe bağlı): Düzenleme görüntülerinin koşullandırma latentleri. Biçimleri, referans bloklarının geometrisini verir. generator (Generator, isteğe bağlı): İsteğin üreteci. Koşullandırma gürültüsü, üretilen satırların gürültüsünden önce, her koşul için bir çekim olacak şekilde buradan çekilir. latents (Tensor): (1, latent_channels, 1, latent_height, latent_width) biçiminde önceden üretilmiş görüntü gürültüsü, çekim yerine kullanılır. sigmas (list, isteğe bağlı): Sıkı şekilde azalan ve 0 ile biten özel bir örneklem ızgarası. Varsayılan olarak kontrol noktasının sample_sigmas değerini kullanır. **denoiser_input_fields (None, isteğe bağlı): Transformer'ın adla okuduğu paketlenmiş dizinin yapısal açıklaması: token_tags, position_ids ve üç satır-dizin tensörü. attention_kwargs (dict, isteğe bağlı): Dikkat işleyicileri için ek kwargs. output_type (str, isteğe bağlı, varsayılan pil): Çıktı biçimi: 'pil', 'np', 'pt'.

Çıktılar: görüntüler (list): Oluşturulan görüntüler.

PH3ImageTextConnector[[diffusers.PH3ImageTextConnector]]

diffusers.PH3ImageTextConnector[[diffusers.PH3ImageTextConnector]]

diffusers.PH3ImageTextConnector(hidden_state_indices: tuple = (13, 19, 25, 31, 36), text_hidden_size: int = 2560, out_channels: int = 5120)

Kaynak

Parametreler:

hidden_state_indices (tuple[int, ...], varsayılan (13, 19, 25, 31, 36)) : Metin kodlayıcısının hidden_states alanındaki hangi girdilerin okunacağı, output_hidden_states numaralandırmasına göre (0 gömme çıktısı, i i. çözücü katmanının çıktısı ve sonuncu ise son normalize edilmiş gizli durum).

text_hidden_size (int, varsayılan 2560) : Metin kodlayıcısının gizli boyutu.

out_channels (int, varsayılan 5120) : MiniMax-H3'ün transformer'ının okuduğu koşullandırma kanal sayısı.

P-H3-Image'ın Qwen3-VL metin kodlayıcısının gizli durumlarını, dönüştürücüsünün okuduğu metin koşullamasına eşler.

hidden_state_indices içinde listelenen gizli durumlar birleştirilir, standartlaştırılır, doğrusal olarak projekte edilir ve standartlaştırma işlemi geri alınır. İlk token, her istem için aynı koşullandırmaya sahip bir dikkat yutucusudur (attention sink) bu nedenle sink_embedding ile değiştirilir.

forward[[diffusers.PH3ImageTextConnector.forward]]

forward(hidden_states: tuple)

Kaynak

Parametreler:

hidden_states (tuple[torch.Tensor, ...]) : Metin kodlayıcısının gizli durumları, output_hidden_states=True ile döndürüldüğü gibi: her giriş için (batch_size, num_tokens, text_hidden_size) biçiminde bir tensör.

Dönüş: torch.Tensor

bağlantıcının parametrelerinin veri türünde, (batch_size, num_tokens, out_channels) biçimindeki koşullandırma.

Xet Storage Details

Size:
13.7 kB
·
Xet hash:
40125f1e8343222b1464ab3b9cf8c28665631828659bf7d03df15c9b105d360f

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.