# PixArtTransformer2DModel

Um modelo Transformer para dados semelhantes a imagens do [PixArt-Alpha](https://huggingface.co/papers/2310.00426) e do [PixArt-Sigma](https://huggingface.co/papers/2403.04692).

## PixArtTransformer2DModel[[diffusers.PixArtTransformer2DModel]]

#### diffusers.PixArtTransformer2DModel[[diffusers.PixArtTransformer2DModel]]

```python
diffusers.PixArtTransformer2DModel(num_attention_heads: int = 16, attention_head_dim: int = 72, in_channels: int = 4, out_channels: int | None = 8, num_layers: int = 28, dropout: float = 0.0, norm_num_groups: int = 32, cross_attention_dim: int | None = 1152, attention_bias: bool = True, sample_size: int = 128, patch_size: int = 2, activation_fn: str = 'gelu-approximate', num_embeds_ada_norm: int | None = 1000, upcast_attention: bool = False, norm_type: str = 'ada_norm_single', norm_elementwise_affine: bool = False, norm_eps: float = 1e-06, interpolation_scale: int | None = None, use_additional_conditions: bool | None = None, caption_channels: int | None = None, attention_type: str | None = 'default')
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/pixart_transformer_2d.py#L32)

**Parâmetros:**

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

attention_head_dim (int, opcional, padrão 72) : O número de canais em cada head.

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

out_channels (int, opcional) : O número de canais na saída. Especifique este parâmetro se o número de canais de saída for diferente do de entrada.

num_layers (int, opcional, padrão 28) : O número de blocos de camadas de Transformer a serem usados.

dropout (float, opcional, padrão 0.0) : A probabilidade de dropout a ser utilizada nos blocos do Transformer.

norm_num_groups (int, opcional, padrão 32) : Número de grupos para a normalização de grupos dentro dos blocos do Transformer.

cross_attention_dim (int, opcional) : A dimensionalidade para as camadas de atenção cruzada, geralmente correspondendo à dimensão oculta do codificador.

attention_bias (bool, opcional, padrão True) : Configura se a atenção dos blocos do Transformer deve conter um parâmetro de viés.

sample_size (int, padrão 128) : A largura das imagens latentes. Este parâmetro é fixado durante o treinamento.

patch_size (int, padrão 2) : Tamanho dos patches que o modelo processa, relevante para arquiteturas que trabalham com dados não sequenciais.

activation_fn (str, opcional, padrão "gelu-approximate") : Função de ativação a ser usada nas redes feed-forward dentro dos blocos Transformer.

num_embeds_ada_norm (int, opcional, padrão 1000) : Número de embeddings para AdaLayerNorm, fixado durante o treinamento e afeta o número máximo de etapas de desruidamento durante a inferência.

upcast_attention (bool, opcional, padrão é False) : Se verdadeiro, faz o upcast das dimensões do mecanismo de atenção para um desempenho potencialmente melhorado.

norm_type (str, opcional, padrão "ada_norm_zero") : Especifica o tipo de normalização usado, pode ser 'ada_norm_zero'.

norm_elementwise_affine (bool, opcional, padrão é False) : Se verdadeiro, habilita parâmetros afins elemento a elemento nas camadas de normalização.

norm_eps (float, opcional, padrão 1e-6) : Uma pequena constante adicionada ao denominador em camadas de normalização para evitar divisão por zero.

interpolation_scale (int, opcional) : Fator de escala a ser usado durante a interpolação dos embeddings de posição.

use_additional_conditions (bool, opcional) : Se estamos usando condições adicionais como entradas.

attention_type (str, opcional, padrão "default") : Tipo de mecanismo de atenção a ser utilizado.

caption_channels (int, opcional, padrão None) : Número de canais a serem usados para projetar os embeddings da legenda.

use_linear_projection (bool, opcional, padrão é False) : Argumento obsoleto. Será removido em uma versão futura.

num_vector_embeds (bool, opcional, padrão é False) : Argumento obsoleto. Será removido em uma versão futura.

Um modelo Transformer 2D, conforme introduzido na família de modelos PixArt (https://huggingface.co/papers/2310.00426, https://huggingface.co/papers/2403.04692).

#### forward[[diffusers.PixArtTransformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: typing.Optional[torch.Tensor] = None, timestep: typing.Optional[torch.LongTensor] = None, added_cond_kwargs: dict[str, torch.Tensor] = None, cross_attention_kwargs: dict[str, typing.Any] = None, attention_mask: typing.Optional[torch.Tensor] = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/pixart_transformer_2d.py#L227)

**Parâmetros:**

hidden_states (`torch.FloatTensor` de forma `(batch size, channel, height, width)`) : `hidden_states` de entrada.

encoder_hidden_states (`torch.FloatTensor` de forma `(batch size, sequence len, embed dims)`, *opcional*) : Embebidings condicionais para a camada de atenção cruzada. Se não fornecidos, a atenção cruzada padrão é a autoatenção.

timestep (`torch.LongTensor`, *opcional*) : Usado para indicar o passo de desruidamento. Passo de tempo opcional a ser aplicado como um embedding em `AdaLayerNorm`.

added_cond_kwargs : (`dict[str, Any]`, *opcional*): Condições adicionais a serem usadas como entradas.

cross_attention_kwargs ( `dict[str, Any]`, *opcional*) : Um dicionário de kwargs que, se especificado, é passado para o `AttentionProcessor` conforme definido em `self.processor` em [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

attention_mask ( `torch.Tensor`, *opcional*) : Uma máscara de atenção com forma `(batch, key_tokens)` é aplicada a `encoder_hidden_states`. Se `1`, a máscara é mantida; caso contrário, se `0`, ela é descartada. A máscara será convertida em um viés, que adiciona valores negativos grandes às pontuações de atenção correspondentes aos tokens "descartados".

encoder_attention_mask ( `torch.Tensor`, *opcional*) : Máscara de atenção cruzada aplicada a `encoder_hidden_states`. Dois formatos suportados:  * Máscara `(batch, sequence_length)` True = manter, False = descartar. * Viés `(batch, 1, sequence_length)` 0 = manter, -10000 = descartar.  Se `ndim == 2`: será interpretada como uma máscara e, em seguida, convertida em um viés consistente com o formato acima. Esse viés será adicionado às pontuações de atenção cruzada.

return_dict (`bool`, *opcional*, padrão `True`) : Se deve ou não retornar um [UNet2DConditionOutput](/docs/diffusers/v0.43.0/pt/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) em vez de uma tupla simples.

**Retorna:**

Se `return_dict` for True, um `~models.transformer_2d.Transformer2DModelOutput` é retornado; caso contrário, uma `tuple` onde o primeiro elemento é o tensor da amostra.

O método forward do [PixArtTransformer2DModel](/docs/diffusers/v0.43.0/pt/api/models/pixart_transformer2d#diffusers.PixArtTransformer2DModel).

#### fuse_qkv_projections[[diffusers.PixArtTransformer2DModel.fuse_qkv_projections]]

```python
fuse_qkv_projections()
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/pixart_transformer_2d.py#L196)

Ativa as projeções QKV fundidas. Para os módulos de autoatenção, todas as matrizes de projeção (ou seja, query, key, value) são fundidas. Para os módulos de atenção cruzada, as matrizes de projeção de key e value são fundidas.

> [!WARNING] > Esta API é 🧪 experimental.

#### set_default_attn_processor[[diffusers.PixArtTransformer2DModel.set_default_attn_processor]]

```python
set_default_attn_processor()
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/pixart_transformer_2d.py#L187)

Desativa os processadores de atenção personalizados e define a implementação padrão de atenção.

É seguro usar apenas `AttnProcessor()`, pois o PixArt não possui processadores de atenção exóticos no modelo padrão.

#### unfuse_qkv_projections[[diffusers.PixArtTransformer2DModel.unfuse_qkv_projections]]

```python
unfuse_qkv_projections()
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/pixart_transformer_2d.py#L218)

Desativa a projeção QKV fundida, se estiver habilitada.

> [!WARNING] > Esta API é 🧪 experimental.

