Diffusers documentation
OmniGenTransformer2DModel
OmniGenTransformer2DModel
Модель Transformer, которая принимает мультимодальные инструкции для генерации изображений для OmniGen.
Аннотация из статьи:
Появление больших языковых моделей (LLM) унифицировало задачи генерации текста и революционизировало взаимодействие человека с машиной. Однако в области генерации изображений единая модель, способная выполнять различные задачи в рамках одной архитектуры, по-прежнему остаётся малоизученной. В данной работе мы представляем OmniGen — новую диффузионную модель для унифицированной генерации изображений. OmniGen характеризуется следующими особенностями: 1) Унификация: OmniGen не только демонстрирует возможности генерации изображений по тексту, но и изначально поддерживает различные задачи нижнего уровня, такие как редактирование изображений, генерация по заданному объекту и условная генерация по визуальному условию. 2) Простота: Архитектура OmniGen значительно упрощена, что исключает необходимость в дополнительных плагинах. Кроме того, по сравнению с существующими диффузионными моделями, она более удобна для пользователя и может выполнять сложные задачи от начала до конца по инструкциям без необходимости дополнительных промежуточных шагов, что значительно упрощает рабочий процесс генерации изображений. 3) Перенос знаний: Благодаря обучению в унифицированном формате OmniGen эффективно переносит знания между различными задачами, справляется с невиданными ранее задачами и доменами и демонстрирует новые возможности. Мы также исследуем способности модели к рассуждениям и потенциальные применения механизма цепочки рассуждений (chain-of-thought). Данная работа представляет собой первую попытку создания универсальной модели генерации изображений, и мы опубликуем наши ресурсы по адресу 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
< source >( 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) — Размер пространственных патчей, используемых в слое встраивания патчей. - 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) — Идентификатор токена отсечки. - 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
< source >( hidden_states: Tensortimestep: typing.Union[int, float, torch.FloatTensor]input_ids: Tensorinput_img_latents: listinput_image_sizes: dictattention_mask: Tensorposition_ids: Tensorreturn_dict: bool = True ) → ~models.transformer_2d.Transformer2DModelOutput or tuple
Параметры
- 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.