# Transformer2DModel

Модель Transformer для изображений от [CompVis](https://huggingface.co/CompVis), основанная на [Vision Transformer](https://huggingface.co/papers/2010.11929), предложенном Dosovitskiy et al. [Transformer2DModel](/docs/diffusers/main/ru/api/models/transformer2d#diffusers.Transformer2DModel) принимает дискретные (классы векторных эмбеддингов) или непрерывные (собственно эмбеддинги) входные данные.

Когда вход является **непрерывным**:

1. Проекция входных данных и изменение их формы до `(batch_size, sequence_length, feature_dimension)`.
2. Примените блоки Transformer стандартным способом.
3. Изменение формы в изображение.

Когда вход является **дискретным**:

> [!TIP]
> Предполагается, что один из входных классов представляет собой замаскированный латентный пиксель. Предсказанные классы для изображения без шума не содержат предсказания для замаскированного пикселя, поскольку изображение без шума не может быть замаскировано.

1. Преобразовать вход (классы латентных пикселей) в эмбеддинги и применить позиционные эмбеддинги.
2. Примените блоки Transformer стандартным способом.
3. Предсказать классы изображения без шума.

## Transformer2DModel[[diffusers.Transformer2DModel]]

#### diffusers.Transformer2DModel[[diffusers.Transformer2DModel]]

```python
diffusers.Transformer2DModel(num_attention_heads: int = 16, attention_head_dim: int = 88, in_channels: int | None = None, out_channels: int | None = None, num_layers: int = 1, dropout: float = 0.0, norm_num_groups: int = 32, cross_attention_dim: int | None = None, attention_bias: bool = False, sample_size: int | None = None, num_vector_embeds: int | None = None, patch_size: int | None = None, activation_fn: str = 'geglu', num_embeds_ada_norm: int | None = None, use_linear_projection: bool = False, only_cross_attention: bool = False, double_self_attention: bool = False, upcast_attention: bool = False, norm_type: str = 'layer_norm', norm_elementwise_affine: bool = True, norm_eps: float = 1e-05, attention_type: str = 'default', caption_channels: int = None, interpolation_scale: float = None, use_additional_conditions: bool | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_2d.py#L39)

**Параметры:**

num_attention_heads (`int`, *optional*, по умолчанию 16) : Количество головок для использования в механизме внимания с несколькими головками.

attention_head_dim (`int`, *необязательный*, по умолчанию 88) : Количество каналов в каждой голове.

in_channels (`int`, *необязательный*) : Количество каналов на входе и выходе (указывается, если вход является **непрерывным**).

num_layers (`int`, *необязательный*, по умолчанию 1) : Количество блоков Transformer, используемых в модели.

dropout (`float`, *необязательный*, по умолчанию 0.0) : Вероятность dropout, которую следует использовать.

cross_attention_dim (`int`, *optional*) : Количество измерений `encoder_hidden_states`, которые следует использовать.

sample_size (`int`, *необязательный*) : Ширина латентных изображений (указывается, если вход **дискретный**). Это значение фиксировано во время обучения, поскольку используется для обучения набора позиционных эмбеддингов.

num_vector_embeds (`int`, *optional*) : Количество классов векторных эмбеддингов латентных пикселей (указывается, если вход **дискретный**). Включает класс для замаскированного латентного пикселя.

activation_fn (`str`, *необязательный*, по умолчанию `"geglu"`) : Функция активации, используемая в полносвязном слое.

num_embeds_ada_norm ( `int`, *optional*) : Количество шагов диффузии, используемых во время обучения. Укажите, если хотя бы один из norm_layers является `AdaLayerNorm`. Это значение фиксировано во время обучения, поскольку используется для обучения набора эмбеддингов, добавляемых к скрытым состояниям. Во время инференса вы можете выполнять денуазинг не более чем за `num_embeds_ada_norm` шагов.

attention_bias (`bool`, *необязательный*) : Настройка того, должен ли параметр смещения (bias) присутствовать в механизме внимания `TransformerBlocks`.

Двумерная модель Transformer для данных, похожих на изображения.

#### forward[[diffusers.Transformer2DModel.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, class_labels: typing.Optional[torch.LongTensor] = 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)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_2d.py#L324)

**Параметры:**

hidden_states (`torch.LongTensor` формы `(batch size, num latent pixels)` для дискретных, `torch.Tensor` формы `(batch size, channel, height, width)` для непрерывных) : входные `hidden_states`.

encoder_hidden_states ( `torch.Tensor` формы `(batch size, sequence len, embed dims)`, *optional*) : Условные эмбеддинги для слоя кросс-внимания. Если не заданы, кросс-внимание по умолчанию работает как само-внимание.

timestep ( `torch.LongTensor`, *необязательный*) : Используется для указания шага денойзинга. Необязательный временной шаг, применяемый как эмбеддинг в `AdaLayerNorm`.

class_labels ( `torch.LongTensor` формы `(batch size, num classes)`, *необязательный*) : Используется для указания условий по классам. Необязательные метки классов, применяемые как эмбеддинг в `AdaLayerZeroNorm`.

cross_attention_kwargs ( `dict[str, Any]`, *необязательный*) : Словарь kwargs, который при указании передаётся в `AttentionProcessor`, определённый в `self.processor` в [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

attention_mask ( `torch.Tensor`, *необязательный*) : маска внимания формы `(batch, key_tokens)` применяется к `encoder_hidden_states`. Если значение равно `1`, маска сохраняется, иначе, если равно `0`, она отбрасывается. Маска преобразуется в смещение (bias), которое добавляет большие отрицательные значения к оценкам внимания, соответствующим токенам, подлежащим отбрасыванию.

encoder_attention_mask ( `torch.Tensor`, *необязательный*) : Маска кросс-внимания, применяемая к `encoder_hidden_states`. Поддерживаются два формата:  * Маска `(batch, sequence_length)` True = сохранить, False = отбросить. * Смещение `(batch, 1, sequence_length)` 0 = сохранить, -10000 = отбросить.  Если `ndim == 2`: значение будет интерпретировано как маска, а затем преобразовано в смещение, соответствующее описанному выше формату. Это смещение будет добавлено к оценкам кросс-внимания.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли [UNet2DConditionOutput](/docs/diffusers/main/ru/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) вместо обычного кортежа.

**Возвращает:**

Если `return_dict` равно True, возвращается `Transformer2DModelOutput`, иначе — `tuple`, первым элементом которого является тензор выборки.

Метод forward модели [Transformer2DModel](/docs/diffusers/main/ru/api/models/transformer2d#diffusers.Transformer2DModel).

## Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

#### diffusers.models.modeling_outputs.Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

```python
diffusers.models.modeling_outputs.Transformer2DModelOutput(sample: torch.Tensor)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_outputs.py#L21)

**Параметры:**

sample (`torch.Tensor` формы `(batch_size, num_channels, height, width)` или `(batch size, num_vector_embeds - 1, num_latent_pixels)`, если [Transformer2DModel](/docs/diffusers/main/ru/api/models/transformer2d#diffusers.Transformer2DModel) дискретный): выходные скрытые состояния, обусловленные входом `encoder_hidden_states`. Если модель дискретная, возвращает распределения вероятностей для ненашумленных латентных пикселей.

Вывод [Transformer2DModel](/docs/diffusers/main/ru/api/models/transformer2d#diffusers.Transformer2DModel).

