# OmniGenTransformer2DModel

[OmniGen](https://github.com/VectorSpaceLab/OmniGen/)の画像生成に対応するマルチモーダル指示を受け取るTransformerモデルです。

論文の抄録は以下の通りです：

*大規模言語モデル（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`) : RMSNorm層のEps。

num_attention_heads (`int`、デフォルトは`32`) : マルチヘッドアテンションで使用するヘッド数。

num_key_value_heads (`int`、デフォルトは`32`) : マルチヘッドアテンションでキーとバリューに使用するヘッド数。

intermediate_size (`int`、デフォルトは`8192`) : FeedForward層における隠れ層の次元数。

num_layers (`int`、デフォルトは`32`) : 使用するtransformerブロックの層数。

pad_token_id (`int`、デフォルトは`32000`) : padding トークンの ID。

vocab_size (`int`、デフォルトは`32064`) : 埋め込み語彙のサイズ。

rope_base (`int`、デフォルトは`10000`) : RoPE を作成する際に使用するデフォルトの theta 値。

rope_scaling (`dict`, 任意) : 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`) : タイムステップ埋め込みに使用する活性化関数。

OmniGen (https://huggingface.co/papers/2409.11340) で紹介された Transformer モデル。

#### 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`) : 条件付けとして使用されるマルチモーダルなテキストトークンID。

input_img_latents (`list` of `torch.Tensor`) : 条件付けに使用される入力画像の潜在変数のリスト。

input_image_sizes (`dict` of `int` to `list` of `int`) : サンプルインデックスから、入力画像の埋め込みを条件付けシーケンス内のどの位置に配置すべきかを表すマッピング。

attention_mask (`torch.Tensor`) : 統合マルチモーダルシーケンス用のアテンションマスク。

position_ids (`torch.Tensor`) : 位置埋め込みを計算するために使用される位置 ID。

return_dict (`bool`、*任意*、デフォルトは`True`) : プレーンなタプルではなく`~models.transformer_2d.Transformer2DModelOutput`を返すかどうか。

**戻り値:** `~models.transformer_2d.Transformer2DModelOutput` または `tuple`

`return_dict` が True の場合、`~models.transformer_2d.Transformer2DModelOutput` が返され、それ以外の場合は通常の `tuple` が返されます。

[OmniGenTransformer2DModel](/docs/diffusers/v0.43.0/ja/api/models/omnigen_transformer#diffusers.OmniGenTransformer2DModel)のforwardメソッドです。

