# OmniGenTransformer2DModel

Модель Transformer, которая принимает мультимодальные инструкции для генерации изображений для [OmniGen](https://github.com/VectorSpaceLab/OmniGen/).

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

*Появление больших языковых моделей (LLM) унифицировало задачи генерации текста и революционизировало взаимодействие человека с машиной. Однако в области генерации изображений единая модель, способная выполнять различные задачи в рамках одной архитектуры, по-прежнему остаётся малоизученной. В данной работе мы представляем OmniGen — новую диффузионную модель для унифицированной генерации изображений. OmniGen характеризуется следующими особенностями: 1) Унификация: OmniGen не только демонстрирует возможности генерации изображений по тексту, но и изначально поддерживает различные задачи нижнего уровня, такие как редактирование изображений, генерация по заданному объекту и условная генерация по визуальному условию. 2) Простота: Архитектура OmniGen значительно упрощена, что исключает необходимость в дополнительных плагинах. Кроме того, по сравнению с существующими диффузионными моделями, она более удобна для пользователя и может выполнять сложные задачи от начала до конца по инструкциям без необходимости дополнительных промежуточных шагов, что значительно упрощает рабочий процесс генерации изображений. 3) Перенос знаний: Благодаря обучению в унифицированном формате OmniGen эффективно переносит знания между различными задачами, справляется с невиданными ранее задачами и доменами и демонстрирует новые возможности. Мы также исследуем способности модели к рассуждениям и потенциальные применения механизма цепочки рассуждений (chain-of-thought). Данная работа представляет собой первую попытку создания универсальной модели генерации изображений, и мы опубликуем наши ресурсы по адресу https://github.com/VectorSpaceLab/OmniGen, чтобы содействовать будущему развитию в этой области.*

```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')
```

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

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

in_channels (`int`, по умолчанию `4`) : количество каналов на входе.

patch_size (`int`, по умолчанию `2`) : Размер пространственных патчей, используемых в слое встраивания патчей.

hidden_size (`int`, по умолчанию `3072`) : Размерность скрытых слоёв в модели.

rms_norm_eps (`float`, по умолчанию `1e-5`) : Eps для слоя RMSNorm.

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

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

intermediate_size (`int`, по умолчанию `8192`) : Размерность скрытого слоя в слоях FeedForward.

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

pad_token_id (`int`, по умолчанию `32000`) : Идентификатор токена отступов (padding).

vocab_size (`int`, по умолчанию `32064`) : Размер словаря эмбеддингов.

rope_base (`int`, по умолчанию `10000`) : Значение theta по умолчанию, используемое при создании RoPE.

rope_scaling (`dict`, optional) : Коэффициенты масштабирования для RoPE. Должен содержать `short_factor` и `long_factor`.

pos_embed_max_size (`int`, по умолчанию `192`) : Максимальный размер позиционных эмбеддингов.

time_step_dim (`int`, по умолчанию `256`) : Размерность выходного вектора эмбеддингов временных шагов.

flip_sin_to_cos (`bool`, по умолчанию `True`) : Нужно ли менять местами sin и cos в позиционных эмбеддингах при подготовке эмбеддингов временных шагов.

downscale_freq_shift (`int`, по умолчанию `0`) : Сдвиг частоты, используемый при уменьшении масштаба эмбеддингов временных шагов.

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

Модель Transformer, представленная в 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[torch.Tensor], input_image_sizes: dict[int, list[int]], attention_mask: Tensor, position_ids: Tensor, return_dict: bool = True)
```

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

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

hidden_states (`torch.Tensor` формы `(batch_size, in_channels, height, width)`) : Входные `hidden_states`.

timestep (`torch.LongTensor`) : Используется для указания шага денойзинга.

input_ids (`torch.Tensor`) : Мультимодальные идентификаторы текстовых токенов, используемые в качестве условия.

input_img_latents (`list` из `torch.Tensor`) : Список латентов для входных изображений, используемых в качестве условия.

input_image_sizes (`dict` из `int` в `list` из `int`) : Соответствие между индексом образца и позициями, на которых эмбеддинги входного изображения должны быть размещены в последовательности условий.

attention_mask (`torch.Tensor`) : Маска внимания для объединённой мультимодальной последовательности.

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

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `~models.transformer_2d.Transformer2DModelOutput` вместо обычного кортежа.

**Возвращает:** `~models.transformer_2d.Transformer2DModelOutput` или `tuple`

Если `return_dict` равно True, возвращается `~models.transformer_2d.Transformer2DModelOutput`, в противном случае возвращается обычный `tuple`.

Метод forward модели [OmniGenTransformer2DModel](/docs/diffusers/v0.43.0/ru/api/models/omnigen_transformer#diffusers.OmniGenTransformer2DModel).

