Diffusers documentation
OmniGenTransformer2DModel
OmniGenTransformer2DModel
Um modelo Transformer que aceita instruções multimodais para gerar imagens para o OmniGen.
O resumo do artigo é:
O surgimento dos Large Language Models (LLMs) unificou as tarefas de geração de linguagem e revolucionou a interação humano-máquina. No entanto, no âmbito da geração de imagens, um modelo unificado capaz de lidar com diversas tarefas em um único framework permanece em grande parte inexplorado. Neste trabalho, apresentamos o OmniGen, um novo modelo de difusão para geração unificada de imagens. O OmniGen é caracterizado pelas seguintes funcionalidades: 1) Unificação: o OmniGen não apenas demonstra capacidades de geração de texto para imagem, mas também suporta intrinsicamente diversas tarefas downstream, como edição de imagem, geração dirigida por sujeito e geração condicional visual. 2) Simplicidade: a arquitetura do OmniGen é altamente simplificada, eliminando a necessidade de plugins adicionais. Além disso, em comparação com modelos de difusão existentes, ele é mais amigável ao usuário e pode concluir tarefas complexas de ponta a ponta por meio de instruções, sem a necessidade de etapas intermediárias extras, simplificando enormemente o fluxo de trabalho de geração de imagens. 3) Transferência de conhecimento: beneficiando-se do aprendizado em um formato unificado, o OmniGen transfere conhecimento de forma eficaz entre diferentes tarefas, gerencia tarefas e domínios não vistos e exibe capacidades novas. Também exploramos as capacidades de raciocínio do modelo e as aplicações potenciais do mecanismo de chain-of-thought. Este trabalho representa a primeira tentativa de um modelo de geração de imagens de uso geral, e disponibilizaremos nossos recursos em https://github.com/VectorSpaceLab/OmniGen para fomentar avanços futuros.
import torch
from diffusers import OmniGenTransformer2DModel
transformer = OmniGenTransformer2DModel.from_pretrained("Shitao/OmniGen-v1-diffusers", subfolder="transformer", dtype=torch.bfloat16)OmniGenTransformer2DModel
classe diffusers.OmniGenTransformer2DModel
< source >( in_channels: int = 4patch_size: int = 2hidden_size: int = 3072rms_norm_eps: float = 1e-05num_attention_heads: int = 32num_key_value_heads: int = 32intermediate_size: int = 8192num_layers: int = 32pad_token_id: int = 32000vocab_size: int = 32064max_position_embeddings: int = 131072original_max_position_embeddings: int = 4096rope_base: int = 10000rope_scaling: dict = Nonepos_embed_max_size: int = 192time_step_dim: int = 256flip_sin_to_cos: bool = Truedownscale_freq_shift: int = 0timestep_activation_fn: str = 'silu' )
Parâmetros
- in_channels (
int, padrão4) — O número de canais na entrada. - patch_size (
int, padrão2) — O tamanho dos patches espaciais a serem usados na camada de incorporação de patches. - hidden_size (
int, padrão3072) — A dimensionalidade das camadas ocultas no modelo. - rms_norm_eps (
float, padrão1e-5) — Eps para a camada RMSNorm. - num_attention_heads (
int, padrão32) — O número de cabeças a serem usadas para a atenção multi-cabeça. - num_key_value_heads (
int, padrão32) — O número de cabeças a serem usadas para chaves e valores na atenção multi-cabeça. - intermediate_size (
int, padrão8192) — Dimensão da camada oculta nas camadas FeedForward. - num_layers (
int, padrão32) — O número de blocos de transformadores a serem usados. - pad_token_id (
int, padrão32000) — O id do token de preenchimento. - vocab_size (
int, padrão32064) — O tamanho do vocabulário do vocabulário de incorporação. - rope_base (
int, padrão10000) — O valor padrão de theta a ser usado ao criar o RoPE. - rope_scaling (
dict, opcional) — Os fatores de escala para o RoPE. Deve contershort_factorelong_factor. - pos_embed_max_size (
int, padrão192) — O tamanho máximo dos embeddings posicionais. - time_step_dim (
int, padrão256) — Dimensão de saída dos embeddings de timestep. - flip_sin_to_cos (
bool, padrãoTrue) — Se deve inverter o sin e o cos nos embeddings posicionais ao preparar os embeddings de timestep. - downscale_freq_shift (
int, padrão0) — O deslocamento de frequência a ser usado ao reduzir a escala dos embeddings de timestep. - timestep_activation_fn (
str, padrãosilu) — A função de ativação a ser usada para os embeddings de timestep.
O modelo Transformer introduzido em OmniGen (https://huggingface.co/papers/2409.11340).
forward
< source >( hidden_states: Tensortimestep: typing.Union[int, float, torch.FloatTensor]input_ids: Tensorinput_img_latents: listinput_image_sizes: dictattention_mask: Tensorposition_ids: Tensorreturn_dict: bool = True ) → ~models.transformer_2d.Transformer2DModelOutput or tuple
Parâmetros
- hidden_states (
torch.Tensorde forma(batch_size, in_channels, height, width)) —hidden_statesde entrada. - timestep (
torch.LongTensor) — Usado para indicar o passo de desruido. - input_ids (
torch.Tensor) — IDs de tokens de texto multimodal usados como condicionamento. - input_img_latents (
listdetorch.Tensor) — Lista de latentes para imagens de entrada usadas como condicionamento. - input_image_sizes (
dictdeintparalistdeint) — Mapeamento do índice da amostra para as posições onde os embeddings de imagem de entrada devem ser colocados na sequência de condicionamento. - attention_mask (
torch.Tensor) — Máscara de atenção para a sequência multimodal conjunta. - position_ids (
torch.Tensor) — Ids de posição usados para calcular os embeddings posicionais. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um~models.transformer_2d.Transformer2DModelOutputem vez de uma tupla simples.
Retorna
~models.transformer_2d.Transformer2DModelOutput ou tuple
Se return_dict for True, um ~models.transformer_2d.Transformer2DModelOutput é retornado; caso contrário, uma tuple simples é retornada.
O método forward do OmniGenTransformer2DModel.