# UVit2DModel

Модель [U-ViT](https://hf.co/papers/2301.11093) представляет собой UNet на основе vision transformer (ViT). Эта модель объединяет элементы ViT (рассматривает все входные данные, такие как время, условия и зашумленные патчи изображения, в качестве токенов) и UNet (длинные skip-соединения между поверхностными и глубокими слоями). Skip-соединение важно для предсказания пиксельных признаков. Перед финальным выводом применяется дополнительный свёрточный блок 3x3 для улучшения качества изображения.

Аннотация из статьи:

*В настоящее время применение диффузионных моделей в пиксельном пространстве изображений высокого разрешения затруднено. Вместо этого существующие подходы фокусируются на диффузии в пространствах меньшей размерности (латентная диффузия) или используют несколько уровней супер-разрешения генерации, называемых каскадами. Недостатком этих подходов является добавление дополнительной сложности в диффузионный фреймворк. Данная статья направлена на улучшение денуайзинговой диффузии для изображений высокого разрешения при сохранении максимально простой модели. Статья сосредоточена на исследовательском вопросе: как обучить стандартные модели денуайзинговой диффузии на изображениях высокого разрешения и при этом получить производительность, сопоставимую с альтернативными подходами? Четыре основных вывода: 1) расписание шума должно быть скорректировано для изображений высокого разрешения, 2) достаточно масштабировать только определённую часть архитектуры, 3) dropout следует добавлять в конкретных местах архитектуры, и 4) даунсемплинг является эффективной стратегией для избежания карт признаков высокого разрешения. Сочетая эти простые, но эффективные техники, мы достигли наилучших результатов в генерации изображений среди диффузионных моделей без модификаторов выборки на ImageNet.*

## UVit2DModel[[diffusers.UVit2DModel]]

#### diffusers.UVit2DModel[[diffusers.UVit2DModel]]

```python
diffusers.UVit2DModel(hidden_size: int = 1024, use_bias: bool = False, hidden_dropout: float = 0.0, cond_embed_dim: int = 768, micro_cond_encode_dim: int = 256, micro_cond_embed_dim: int = 1280, encoder_hidden_size: int = 768, vocab_size: int = 8256, codebook_size: int = 8192, in_channels: int = 768, block_out_channels: int = 768, num_res_blocks: int = 3, downsample: bool = False, upsample: bool = False, block_num_heads: int = 12, num_hidden_layers: int = 22, num_attention_heads: int = 16, attention_dropout: float = 0.0, intermediate_size: int = 2816, layer_norm_eps: float = 1e-06, ln_elementwise_affine: bool = True, sample_size: int = 64)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L38)

#### forward[[diffusers.UVit2DModel.forward]]

```python
forward(input_ids, encoder_hidden_states, pooled_text_emb, micro_conds, cross_attention_kwargs = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L150)

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

input_ids (`torch.LongTensor`) : Идентификаторы токенов замаскированных латентных изображений, с формой `(batch_size, height, width)`.

encoder_hidden_states (`torch.Tensor`) : Условные эмбеддинги (эмбеддинги, вычисленные на основе входных условий, таких как промпты), которые следует использовать.

pooled_text_emb (`torch.Tensor`) : Пул-эмбеддинги текста, используемые для дополнительного обусловливания.

micro_conds (`torch.Tensor`) : Значения микро-условий, которые встраиваются и комбинируются с `pooled_text_emb`.

cross_attention_kwargs (`dict`, *необязательный*) : Словарь kwargs, который при указании передается в `AttentionProcessor`.

**Возвращает:** `torch.Tensor`

Логиты по кодовой книге для каждого токена изображения, с формой `(batch_size, codebook_size, height, width)`.

#### set_default_attn_processor[[diffusers.UVit2DModel.set_default_attn_processor]]

```python
set_default_attn_processor()
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L232)

Отключает пользовательские обработчики внимания и устанавливает реализацию внимания по умолчанию.

## UVit2DConvEmbed[[diffusers.models.unets.uvit_2d.UVit2DConvEmbed]]

#### diffusers.models.unets.uvit_2d.UVit2DConvEmbed[[diffusers.models.unets.uvit_2d.UVit2DConvEmbed]]

```python
diffusers.models.unets.uvit_2d.UVit2DConvEmbed(in_channels, block_out_channels, vocab_size, elementwise_affine, eps, bias)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L248)

## UVitBlock[[diffusers.models.unets.uvit_2d.UVitBlock]]

#### diffusers.models.unets.uvit_2d.UVitBlock[[diffusers.models.unets.uvit_2d.UVitBlock]]

```python
diffusers.models.unets.uvit_2d.UVitBlock(channels, num_res_blocks: int, hidden_size, hidden_dropout, ln_elementwise_affine, layer_norm_eps, use_bias, block_num_heads, attention_dropout, downsample: bool, upsample: bool)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L263)

## ConvNextBlock[[diffusers.models.unets.uvit_2d.ConvNextBlock]]

#### diffusers.models.unets.uvit_2d.ConvNextBlock[[diffusers.models.unets.uvit_2d.ConvNextBlock]]

```python
diffusers.models.unets.uvit_2d.ConvNextBlock(channels, layer_norm_eps, ln_elementwise_affine, use_bias, hidden_dropout, hidden_size, res_ffn_factor = 4)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L362)

## ConvMlmLayer[[diffusers.models.unets.uvit_2d.ConvMlmLayer]]

#### diffusers.models.unets.uvit_2d.ConvMlmLayer[[diffusers.models.unets.uvit_2d.ConvMlmLayer]]

```python
diffusers.models.unets.uvit_2d.ConvMlmLayer(block_out_channels: int, in_channels: int, use_bias: bool, ln_elementwise_affine: bool, layer_norm_eps: float, codebook_size: int)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L407)

