# PriorTransformer

Prior Transformer был впервые представлен в работе [Hierarchical Text-Conditional Image Generation with CLIP Latents](https://huggingface.co/papers/2204.06125) Ramesh et al. Он используется для предсказания изображений CLIP по текстовым эмбеддингам CLIP; эмбеддинги изображений предсказываются с помощью процесса диффузионного шумоподавления.

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

*Показано, что контрастивные модели, такие как CLIP, обучают робастные представления изображений, захватывающие как семантику, так и стиль. Чтобы использовать эти представления для генерации изображений, мы предлагаем двухэтапную модель: априорную модель, которая генерирует представление изображения CLIP по текстовому описанию, и декодер, который генерирует изображение с условием на это представление. Мы показываем, что явная генерация представлений изображений повышает разнообразие генерируемых изображений при минимальной потере фотореализма и сходства с описанием. Наши декодеры, работающие с условием на представления изображений, также могут создавать вариации изображения, сохраняя его семантику и стиль, но изменяя несущественные детали, отсутствующие в представлении изображения. Более того, совместное пространство представлений CLIP позволяет выполнять манипуляции с изображениями по языковому запросу в режиме zero-shot. Мы используем диффузионные модели для декодера и проводим эксперименты как с авто регрессионными, так и с диффузионными моделями для априорной модели, обнаружив, что вторые вычислительно более эффективны и дают образцы более высокого качества.*

## PriorTransformer[[diffusers.PriorTransformer]]

#### diffusers.PriorTransformer[[diffusers.PriorTransformer]]

```python
diffusers.PriorTransformer(num_attention_heads: int = 32, attention_head_dim: int = 64, num_layers: int = 20, embedding_dim: int = 768, num_embeddings = 77, additional_embeddings = 4, dropout: float = 0.0, time_embed_act_fn: str = 'silu', norm_in_type: str | None = None, embedding_proj_norm_type: str | None = None, encoder_hid_proj_type: str | None = 'linear', added_emb_type: str | None = 'prd', time_embed_dim: int | None = None, embedding_proj_dim: int | None = None, clip_embed_dim: int | None = None)
```

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

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

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

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

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

embedding_dim (`int`, *необязательный*, по умолчанию 768) : размерность входных данных модели `hidden_states`

num_embeddings (`int`, *необязательный*, по умолчанию 77) : количество эмбеддингов входных данных модели `hidden_states`

additional_embeddings (`int`, *optional*, по умолчанию 4) : Количество дополнительных токенов, добавляемых к спроецированным `hidden_states`. Фактическая длина используемых `hidden_states` равна `num_embeddings + additional_embeddings`.

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

time_embed_act_fn (`str`, *необязательный*, по умолчанию 'silu') : Функция активации, используемая для создания эмбеддингов временных шагов.

norm_in_type (`str`, *необязательный*, по умолчанию None) : Слой нормализации, применяемый к скрытым состояниям перед передачей в блоки Transformer. Установите `None`, если нормализация не требуется.

embedding_proj_norm_type (`str`, *необязательный*, по умолчанию None) : Слой нормализации, применяемый к входному `proj_embedding`. Установите `None`, если нормализация не требуется.

encoder_hid_proj_type (`str`, *необязательный*, по умолчанию `linear`) : Слой проекции, применяемый к входным `encoder_hidden_states`. Установите значение `None`, если `encoder_hidden_states` равно `None`.

added_emb_type (`str`, *optional*, по умолчанию `prd`) : Дополнительные эмбеддинги для обусловливания модели. Выберите `prd` или `None`. Если выбрано `prd`, перед эмбеддингами будет добавлен токен, указывающий на (квантованное) скалярное произведение текстового и изображенческого эмбеддингов, как предложено в статье unclip https://huggingface.co/papers/2204.06125 Если указано `None`, дополнительные эмбеддинги не будут добавлены.

time_embed_dim (`int, *optional*, defaults to None) : The dimension of timestep embeddings. If None, will be set to `num_attention_heads * attention_head_dim`

embedding_proj_dim (`int`, *необязательный*, по умолчанию None) : Размерность `proj_embedding`. Если None, будет установлена в `embedding_dim`.

clip_embed_dim (`int`, *необязательный*, по умолчанию None) : Размерность вывода. Если None, будет установлена в `embedding_dim`.

Модель A Prior Transformer.

#### forward[[diffusers.PriorTransformer.forward]]

```python
forward(hidden_states, timestep: typing.Union[torch.Tensor, float, int], proj_embedding: Tensor, encoder_hidden_states: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.BoolTensor] = None, return_dict: bool = True)
```

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

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

hidden_states (`torch.Tensor` формы `(batch_size, embedding_dim)`) : Текущие предсказанные эмбеддинги изображений.

timestep (`torch.LongTensor`) : Текущий шаг денойзинга.

proj_embedding (`torch.Tensor` формы `(batch_size, embedding_dim)`) : Вектор вложенности, на который опирается процесс шумоподавления.

encoder_hidden_states (`torch.Tensor` формы `(batch_size, num_embeddings, embedding_dim)`) : Скрытые состояния текстовых эмбеддингов, на которые опирается процесс денойзинга.

attention_mask (`torch.BoolTensor` формы `(batch_size, num_embeddings)`) : Маска текста для текстовых эмбеддингов.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли [PriorTransformerOutput](/docs/diffusers/v0.43.0/ru/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) вместо обычного кортежа.

**Возвращает:** [PriorTransformerOutput](/docs/diffusers/v0.43.0/ru/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) или `tuple`

Если return_dict равно True, возвращается [PriorTransformerOutput](/docs/diffusers/v0.43.0/ru/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput), иначе возвращается кортеж, первым элементом которого является тензор выборки.

Метод forward класса [PriorTransformer](/docs/diffusers/v0.43.0/ru/api/models/prior_transformer#diffusers.PriorTransformer).

#### set_default_attn_processor[[diffusers.PriorTransformer.set_default_attn_processor]]

```python
set_default_attn_processor()
```

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

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

## PriorTransformerOutput[[diffusers.models.transformers.prior_transformer.PriorTransformerOutput]]

#### diffusers.models.transformers.prior_transformer.PriorTransformerOutput[[diffusers.models.transformers.prior_transformer.PriorTransformerOutput]]

```python
diffusers.models.transformers.prior_transformer.PriorTransformerOutput(predicted_image_embedding: Tensor)
```

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

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

predicted_image_embedding (`torch.Tensor` формы `(batch_size, embedding_dim)`) : Предсказанное встраивание изображения CLIP, обусловленное входным встраиванием текста CLIP.

Вывод [PriorTransformer](/docs/diffusers/v0.43.0/ru/api/models/prior_transformer#diffusers.PriorTransformer).

