Diffusers documentation

MiniMaxH3ImageTransformer2DModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MiniMaxH3ImageTransformer2DModel

Um modelo Diffusion Transformer para geração e edição de imagens, introduzido em MiniMax-H3-Image pela MiniMax.

É o MiniMaxH3Transformer3DModel sem seu fluxo de áudio: uma única pilha de blocos processa uma sequência 1-D empacotada que contém a condição de texto, as linhas das imagens de referência e as linhas da imagem gerada. A construção do layout empacotado é responsabilidade do chamador, motivo pelo qual a assinatura do forward recebe o layout separado dos latentes: a grade de posições (t, h, w), as tags de modalidade por linha, os índices de timestep por linha e os dois tensores de índice que endereçam as linhas de imagem e de texto. O MiniMaxH3ImageBlocks constrói tudo isso.

O checkpoint é destilado para seis etapas de amostragem com Parallel Decoding Distillation (PDD), que mantém uma cabeça de saída por etapa. Portanto, forward recebe pdd_step_index, a etapa em execução, e projeta com a cabeça dessa etapa.

import torch
from diffusers import MiniMaxH3ImageTransformer2DModel

transformer = MiniMaxH3ImageTransformer2DModel.from_pretrained(
    "MiniMaxAI/MiniMax-H3-Image", subfolder="transformer_diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

O checkpoint é de precisão mista: a projeção de entrada do patch, o MLP de timestep e as saídas são float32, enquanto a pilha de blocos é bfloat16. from_pretrained mantém esse layout por meio de _keep_in_fp32_modules, então passe dtype=torch.bfloat16 e deixe que ele posicione os módulos float32, em vez de converter o modelo com .to(torch.bfloat16) depois.

MiniMaxH3ImageTransformer2DModel

classe diffusers.MiniMaxH3ImageTransformer2DModel

< >

( num_attention_heads: int = 56attention_head_dim: int = 128hidden_size: int = 5376num_layers: int = 50num_refiner_layers: int = 2ffn_dim: int = 14336in_channels: int = 24patch_size: tuple[int, int, int] = (1, 2, 2)text_dim: int = 5120freq_dim: int = 256time_embed_hidden_dim: int = 5376time_embed_dim: int = 2688rope_freq_dim: int = 16rope_theta: float = 10000.0norm_eps: float = 1e-05qk_norm_eps: float = 1e-05final_norm_eps: float = 1e-05num_pdd_heads: int = 6 )

Parâmetros

  • num_attention_heads (int, padrão 56) — O número de cabeças a serem usadas para a atenção multi-cabeça.
  • attention_head_dim (int, padrão 128) — O número de canais em cada cabeça de atenção. Observe que num_attention_heads * attention_head_dim é maior que hidden_size.
  • hidden_size (int, padrão 5376) — O número de canais da sequência empacotada (o fluxo residual).
  • num_layers (int, padrão 50) — O número de blocos de transformer.
  • num_refiner_layers (int, padrão 2) — O número de blocos de refinamento de tokens aplicados ao fluxo de texto projetado.
  • ffn_dim (int, padrão 14336) — A dimensão interna das camadas feed-forward SwiGLU.
  • in_channels (int, padrão 24) — O número de canais dos latentes da imagem.
  • patch_size (tuple[int, int, int], padrão (1, 2, 2)) — O patch (t, h, w) usado para empacotar os latentes em linhas.
  • text_dim (int, padrão 5120) — O número de canais da condição de texto produzida pelo codificador de texto.
  • freq_dim (int, padrão 256) — A dimensão do embedding sinusoidal de timestep. Os timesteps são consumidos sem escala em [0, 1].
  • time_embed_hidden_dim (int, padrão 5376) — A dimensão interna do MLP de passo de tempo.
  • time_embed_dim (int, padrão 2688) — A dimensão de saída do MLP de timestep, ou seja, a entrada de cada projeção AdaLN.
  • rope_freq_dim (int, padrão 16) — O número de frequências rotativas por eixo. Os eixos (t, h, w) compartilham um buffer inv_freq deste comprimento e 2 * 3 * rope_freq_dim dos canais de attention_head_dim são rotacionados.
  • rope_theta (float, padrão 10000.0) — A base do agendamento de frequência rotativa a partir do qual o buffer rope.inv_freq é calculado.
  • norm_eps (float, padrão 1e-5) — Epsilon das normalizações pré-atenção e pré-feed-forward.
  • qk_norm_eps (float, padrão 1e-5) — Epsilon das normalizações de query/key por cabeça.
  • final_norm_eps (float, padrão 1e-5) — Epsilon da normalização da saída do refinador de tokens e de norm_out.
  • num_pdd_heads (int, padrão 6) — O número de etapas de amostragem para as quais o checkpoint foi destilado, cada uma com seu próprio output head.

Um modelo Transformer para geração e edição de imagens, introduzido no MiniMax-H3-Image.

É o transformer MiniMax-H3 sem seu fluxo de áudio: uma única pilha de blocos processa uma sequência 1-D empacotada que contém a condição de texto, as linhas das imagens de referência e as linhas da imagem gerada. A atenção é autoatenção completa sobre essa sequência; não há atenção cruzada. O checkpoint é destilado para um número fixo de etapas de amostragem com Parallel Decoding Distillation (PDD), que mantém uma cabeça de saída por etapa, de modo que forward recebe o índice da etapa em execução.

O chamador é responsável por construir o layout empacotado: aplicar patchify aos latentes, ordenar as linhas e produzir a grade de posições (t, h, w), as tags de modalidade por linha e os índices de timestep por linha. A sequência não possui padding, portanto a atenção é executada sem máscara sobre um único documento e todos os backends de atenção permanecem disponíveis.

O eixo de lote é um eixo de replicação pura: os argumentos estruturais (timestep, timestep_indices, token_tags, position_ids e os dois tensores de índice) descrevem um único layout empacotado que todos os itens do lote compartilham.

forward

< >

( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensortimestep_indices: Tensortoken_tags: Tensorposition_ids: Tensorimage_indices: Tensortext_indices: Tensorpdd_step_index: intreturn_dict: bool = True ) → Transformer2DModelOutput or tuple

Parâmetros

  • hidden_states (torch.Tensor de forma (batch_size, num_image_tokens, in_channels * prod(patch_size))) — Linhas latentes em patches — as linhas das imagens de referência e as linhas da imagem gerada — ordenadas conforme aparecem na sequência empacotada, ou seja, correspondendo a image_indices.
  • encoder_hidden_states (torch.Tensor de forma (batch_size, num_text_tokens, text_dim)) — Condição de texto, ordenada para corresponder a text_indices.
  • timestep (torch.Tensor de forma (num_timesteps,)) — Os valores de timestep distintos presentes na sequência empacotada, em [0, 1] e sem escala. Uma única passagem de frente atende linhas em diferentes níveis de ruído (linhas geradas, linhas de referência).
  • timestep_indices (torch.Tensor de forma (seq_len,)) — Para cada linha da sequência empacotada, o índice do seu timestep em timestep.
  • token_tags (torch.Tensor de forma (seq_len,)) — Para cada linha da sequência empacotada, sua modalidade: 0 imagem, 1 texto.
  • position_ids (torch.Tensor de forma (seq_len, 3)) — As coordenadas rotacionais (t, h, w) de cada linha da sequência empacotada.
  • image_indices (torch.Tensor de forma (num_image_tokens,)) — Posições das linhas de imagem na sequência empacotada.
  • text_indices (torch.Tensor de forma (num_text_tokens,)) — Posições das linhas de texto na sequência empacotada.
  • pdd_step_index (int) — O passo de amostragem, que seleciona a cabeça de saída.
  • return_dict (bool, padrão True) — Se deve retornar um Transformer2DModelOutput em vez de uma tupla simples.

Retorna

Transformer2DModelOutput ou tuple

A velocidade de cada linha de imagem, de forma (batch_size, num_image_tokens, in_channels * prod(patch_size)), na ordem de linha de image_indices.

Update on GitHub