Diffusers documentation

MiniMaxH3ImageTransformer2DModel

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