Diffusers documentation
OmniGenTransformer2DModel
OmniGenTransformer2DModel
Un modèle Transformer qui accepte des instructions multimodales pour générer des images pour OmniGen.
L'abstract de l'article est :
L’émergence des grands modèles de langage (LLM) a unifié les tâches de génération de langage et révolutionné l’interaction homme-machine. Cependant, dans le domaine de la génération d’images, un modèle unifié capable de gérer diverses tâches au sein d’un seul cadre reste largement inexploré. Dans ce travail, nous présentons OmniGen, un nouveau modèle de diffusion pour la génération d’images unifiée. OmniGen se caractérise par les fonctionnalités suivantes : 1) Unification : OmniGen ne démontre pas seulement des capacités de génération d’images à partir de texte, mais prend également en charge de manière inhérente diverses tâches en aval, telles que l’édition d’images, la génération pilotée par un sujet et la génération conditionnelle visuelle. 2) Simplicité : L’architecture d’OmniGen est fortement simplifiée, éliminant le besoin de plugins supplémentaires. De plus, par rapport aux modèles de diffusion existants, il est plus convivial et peut accomplir des tâches complexes de bout en bout via des instructions, sans avoir besoin d’étapes intermédiaires supplémentaires, simplifiant ainsi considérablement le flux de travail de génération d’images. 3) Transfert de connaissances : Grâce à l’apprentissage dans un format unifié, OmniGen transfère efficacement les connaissances entre différentes tâches, gère les tâches et les domaines inconnus et présente des capacités novatrices. Nous explorons également les capacités de raisonnement du modèle et les applications potentielles du mécanisme de chaîne de pensée. Ce travail représente la première tentative de création d’un modèle de génération d’images à usage général, et nous publierons nos ressources sur https://github.com/VectorSpaceLab/OmniGen pour favoriser les avancées futures.
import torch
from diffusers import OmniGenTransformer2DModel
transformer = OmniGenTransformer2DModel.from_pretrained("Shitao/OmniGen-v1-diffusers", subfolder="transformer", dtype=torch.bfloat16)OmniGenTransformer2DModel
classe 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' )
Paramètres
- in_channels (
int, par défaut4) — Le nombre de canaux de l'entrée. - patch_size (
int, par défaut2) — La taille des patches spatiaux à utiliser dans la couche d'encodage de patches. - hidden_size (
int, par défaut3072) — La dimension des couches cachées du modèle. - rms_norm_eps (
float, par défaut1e-5) — Eps pour la couche RMSNorm. - num_attention_heads (
int, par défaut32) — Le nombre de têtes à utiliser pour l'attention multi-têtes. - num_key_value_heads (
int, par défaut32) — Le nombre de têtes à utiliser pour les clés et les valeurs dans l'attention multi-têtes. - intermediate_size (
int, par défaut8192) — Dimension de la couche cachée dans les couches FeedForward. - num_layers (
int, par défaut32) — Le nombre de blocs de transformeurs à utiliser. - pad_token_id (
int, par défaut32000) — L'identifiant du jeton de bourrage. - vocab_size (
int, par défaut32064) — La taille du vocabulaire des embeddings. - rope_base (
int, par défaut10000) — La valeur theta par défaut à utiliser lors de la création de RoPE. - rope_scaling (
dict, optionnel) — Les facteurs d'échelle pour le RoPE. Doit contenirshort_factoretlong_factor. - pos_embed_max_size (
int, par défaut192) — La taille maximale des embeddings positionnels. - time_step_dim (
int, par défaut256) — Dimension de sortie des embeddings de pas de temps. - flip_sin_to_cos (
bool, par défautTrue) — Indique s'il faut inverser le sin et le cos dans les embeddings positionnels lors de la préparation des embeddings de timestep. - downscale_freq_shift (
int, par défaut0) — Le décalage de fréquence à utiliser lors de la réduction de l'échelle des embeddings de timestep. - timestep_activation_fn (
str, par défautsilu) — La fonction d'activation à utiliser pour les embeddings de timestep.
Le modèle Transformer introduit dans 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
Paramètres
- hidden_states (
torch.Tensorde forme(batch_size, in_channels, height, width)) —hidden_statesd'entrée. - timestep (
torch.LongTensor) — Utilisé pour indiquer l'étape de débruitage. - input_ids (
torch.Tensor) — Identifiants de jetons de texte multimodal utilisés comme conditionnement. - input_img_latents (
listdetorch.Tensor) — Liste de latents pour les images d'entrée utilisées comme conditionnement. - input_image_sizes (
dictdeintverslistdeint) — Correspondance entre l'indice d'échantillon et les positions où les embeddings d'images d'entrée doivent être placés dans la séquence de conditionnement. - attention_mask (
torch.Tensor) — Masque d'attention pour la séquence multimodale conjointe. - position_ids (
torch.Tensor) — Identifiants de position utilisés pour calculer les embeddings positionnels. - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner un~models.transformer_2d.Transformer2DModelOutputplutôt qu'un simple tuple.
Retourne
~models.transformer_2d.Transformer2DModelOutput ou tuple
Si return_dict est True, un ~models.transformer_2d.Transformer2DModelOutput est renvoyé, sinon
un simple tuple est renvoyé.
Méthode forward du OmniGenTransformer2DModel.