Diffusers documentation

OmniGenTransformer2DModel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

OmniGenTransformer2DModel

一个能够接收多模态指令并为 OmniGen 生成图像的 Transformer 模型。

该论文的摘要如下:

大语言模型(LLM)的出现统一了语言生成任务,并彻底改变了人机交互方式。然而,在图像生成领域,能够在单一框架内处理多种任务的统一模型仍鲜有探索。在本工作中,我们提出了 OmniGen,一种用于统一图像生成的新型扩散模型。OmniGen 具有以下特点:1) 统一性:OmniGen 不仅具备文本到图像的生成能力,还天然支持多种下游任务,例如图像编辑、主体驱动生成和视觉条件生成。2) 简洁性:OmniGen 的架构高度简化,无需额外的插件。此外,与现有的扩散模型相比,它更易于使用,能够通过指令端到端地完成复杂任务,无需额外的中间步骤,从而大大简化了图像生成工作流。3) 知识迁移:得益于统一格式下的学习,OmniGen 能够有效地在不同任务之间迁移知识,处理未见过的任务和领域,并展现出新颖的能力。我们还探索了模型的推理能力以及思维链机制的潜在应用。本工作是对通用图像生成模型的首次尝试,我们将在 https://github.com/VectorSpaceLab/OmniGen 发布我们的资源,以促进未来的发展。

import torch
from diffusers import OmniGenTransformer2DModel

transformer = OmniGenTransformer2DModel.from_pretrained("Shitao/OmniGen-v1-diffusers", subfolder="transformer", dtype=torch.bfloat16)

OmniGenTransformer2DModel

类 diffusers.OmniGenTransformer2DModel

< >

( in_channels: int = 4patch_size: int = 2hidden_size: int = 3072rms_norm_eps: float = 1e-05num_attention_heads: int = 32num_key_value_heads: int = 32intermediate_size: int = 8192num_layers: int = 32pad_token_id: int = 32000vocab_size: int = 32064max_position_embeddings: int = 131072original_max_position_embeddings: int = 4096rope_base: int = 10000rope_scaling: dict = Nonepos_embed_max_size: int = 192time_step_dim: int = 256flip_sin_to_cos: bool = Truedownscale_freq_shift: int = 0timestep_activation_fn: str = 'silu' )

参数

  • in_channels (int,默认为 4) — 输入数据的通道数。
  • patch_size (int,默认为 2) — 用于 patch 嵌入层的空间 patch 大小。
  • 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) — 填充 token 的 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 中介绍的 Transformer 模型(https://huggingface.co/papers/2409.11340)。

forward

< >

( hidden_states: Tensortimestep: typing.Union[int, float, torch.FloatTensor]input_ids: Tensorinput_img_latents: list[torch.Tensor]input_image_sizes: dict[int, list[int]]attention_mask: Tensorposition_ids: Tensorreturn_dict: bool = True ) → ~models.transformer_2d.Transformer2DModelOutput or tuple

参数

  • hidden_states(形状为 (batch_size, in_channels, height, width) 的 torch.Tensor)— 输入的 hidden_states。
  • timestep (torch.LongTensor) — 用于指示去噪步骤。
  • input_ids (torch.Tensor) — 用作条件输入的多模态文本 token id。
  • input_img_latents (list of torch.Tensor) — 用作条件输入的图像潜变量列表。
  • input_image_sizes(dict,键为 int,值为 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 的前向方法。

Update on GitHub