# OmniGenTransformer2DModel

Um modelo Transformer que aceita instruções multimodais para gerar imagens para o [OmniGen](https://github.com/VectorSpaceLab/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 campo da geração de imagens, um modelo unificado capaz de lidar com diversas tarefas dentro de 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 inerentemente 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 efetivamente conhecimento 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.*

```python
import torch
from diffusers import OmniGenTransformer2DModel

transformer = OmniGenTransformer2DModel.from_pretrained("Shitao/OmniGen-v1-diffusers", subfolder="transformer", dtype=torch.bfloat16)
```

## OmniGenTransformer2DModel[[diffusers.OmniGenTransformer2DModel]]

#### diffusers.OmniGenTransformer2DModel[[diffusers.OmniGenTransformer2DModel]]

```python
diffusers.OmniGenTransformer2DModel(in_channels: int = 4, patch_size: int = 2, hidden_size: int = 3072, rms_norm_eps: float = 1e-05, num_attention_heads: int = 32, num_key_value_heads: int = 32, intermediate_size: int = 8192, num_layers: int = 32, pad_token_id: int = 32000, vocab_size: int = 32064, max_position_embeddings: int = 131072, original_max_position_embeddings: int = 4096, rope_base: int = 10000, rope_scaling: dict = None, pos_embed_max_size: int = 192, time_step_dim: int = 256, flip_sin_to_cos: bool = True, downscale_freq_shift: int = 0, timestep_activation_fn: str = 'silu')
```

[Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_omnigen.py#L283)

**Parâmetros:**

in_channels (`int`, padrão `4`) : O número de canais na entrada.

patch_size (`int`, padrão `2`) : O tamanho dos patches espaciais a serem usados na camada de incorporação de patches.

hidden_size (`int`, padrão `3072`) : A dimensionalidade das camadas ocultas no modelo.

rms_norm_eps (`float`, padrão `1e-5`) : Eps para a camada RMSNorm.

num_attention_heads (`int`, padrão `32`) : O número de cabeças a serem usadas para a atenção multi-cabeça.

num_key_value_heads (`int`, padrão `32`) : O número de cabeças a serem usadas para chaves e valores na atenção multi-cabeça.

intermediate_size (`int`, padrão `8192`) : Dimensão da camada oculta nas camadas FeedForward.

num_layers (`int`, padrão `32`) : O número de blocos de transformadores a serem usados.

pad_token_id (`int`, padrão `32000`) : O id do token de padding.

vocab_size (`int`, padrão `32064`) : O tamanho do vocabulário do vocabulário de incorporação.

rope_base (`int`, padrão `10000`) : 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 conter `short_factor` e `long_factor`.

pos_embed_max_size (`int`, padrão `192`) : O tamanho máximo dos embeddings posicionais.

time_step_dim (`int`, padrão `256`) : Dimensão de saída dos embeddings de timestep.

flip_sin_to_cos (`bool`, padrão `True`) : Se deve inverter o sin e o cos nos embeddings posicionais ao preparar os embeddings de timestep.

downscale_freq_shift (`int`, padrão `0`) : O deslocamento de frequência a ser usado ao reduzir a escala dos embeddings de timestep.

timestep_activation_fn (`str`, padrão `silu`) : 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[[diffusers.OmniGenTransformer2DModel.forward]]

```python
forward(hidden_states: Tensor, timestep: typing.Union[int, float, torch.FloatTensor], input_ids: Tensor, input_img_latents: list, input_image_sizes: dict, attention_mask: Tensor, position_ids: Tensor, return_dict: bool = True)
```

[Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_omnigen.py#L407)

**Parâmetros:**

hidden_states (`torch.Tensor` de forma `(batch_size, in_channels, height, width)`) : `hidden_states` de entrada.

timestep (`torch.LongTensor`) : Usado para indicar o passo de desruidamento.

input_ids (`torch.Tensor`) : IDs de tokens de texto multimodal usados como condicionamento.

input_img_latents (`list` de `torch.Tensor`) : Lista de latentes para as imagens de entrada usadas como condicionamento.

input_image_sizes (`dict` de `int` para `list` de `int`) : Mapeamento do índice da amostra para as posições onde os embeddings da 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ão `True`) : Indica se deve retornar um `~models.transformer_2d.Transformer2DModelOutput` em 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](/docs/diffusers/main/pt/api/models/omnigen_transformer#diffusers.OmniGenTransformer2DModel).

