Diffusers documentation
Ovis-Image
Ovis-Image

Ovis-Image est un modèle de génération d'images à partir de texte de 7B, spécifiquement optimisé pour un rendu de texte de haute qualité, et conçu pour fonctionner efficacement dans des contraintes de calcul strictes.
Rapport technique Ovis-Image d’Alibaba Group, par Guo-Hua Wang, Liangfu Cao, Tianyu Cui, Minghao Fu, Xiaohao Chen, Pengxin Zhan, Jianshan Zhao, Lan Li, Bowen Fu, Jiaqi Liu, Qing-Guo Chen.
L'abstract de l'article est :
Nous présentons Ovis-Image, un modèle texte-vers-image de 7B spécifiquement optimisé pour le rendu de texte de haute qualité, conçu pour fonctionner efficacement sous des contraintes de calcul strictes. Construit sur la base de notre précédent cadre Ovis-U1, Ovis-Image intègre un décodeur visuel basé sur la diffusion avec le socle multimodal plus puissant Ovis 2.5, en exploitant un pipeline d'entraînement centré sur le texte qui combine un pré-entraînement à grande échelle avec des raffinements post-entraînement soigneusement adaptés. Malgré son architecture compacte, Ovis-Image atteint des performances de rendu de texte comparables à celles de modèles ouverts nettement plus grands, tels que Qwen-Image, et se rapproche des systèmes propriétaires comme Seedream et GPT4o. Surtout, le modèle reste déployable sur un seul GPU haut de gamme avec une mémoire modérée, réduisant l'écart entre le rendu de texte de pointe et le déploiement pratique. Nos résultats indiquent que la combinaison d'un socle multimodal puissant et d'une recette d'entraînement soigneusement conçue, axée sur le texte, est suffisante pour obtenir un rendu de texte bilingue fiable sans recourir à des modèles surdimensionnés ou propriétaires.
Points forts :
- Rendu de texte performant à l'échelle compacte de 7B : Ovis-Image est un modèle texte-vers-image de 7B qui offre une qualité de rendu du texte comparable à celle de systèmes beaucoup plus grands de la classe 20B, tels que Qwen-Image, et qui rivalise avec les modèles propriétaires de pointe comme GPT4o dans les scénarios centrés sur le texte, tout en restant suffisamment léger pour s'exécuter sur des matériels largement accessibles.
- Fidélité élevée sur les prompts riches en texte et sensibles à la mise en page : Le modèle excelle sur les prompts qui exigent un alignement précis entre le contenu linguistique et la typographie rendue (par exemple, affiches, bannières, logos, maquettes d'interface utilisateur, infographies), produisant un texte lisible, correctement orthographié et sémantiquement cohérent à travers diverses polices, tailles et rapports d'aspect, sans compromettre la qualité visuelle globale.
- Efficacité et déploiabilité : Avec son budget de 7 milliards de paramètres et son architecture optimisée, Ovis-Image tient sur un seul GPU haut de gamme avec une mémoire modérée, prend en charge une utilisation interactive à faible latence et s'adapte au service de production par lots, apportant un rendu de texte proche de l'état de l'art à des applications où les modèles de plusieurs dizaines de milliards de paramètres sont irréalisables.
Ce pipeline a été contribué par l'équipe Ovis-Image. Le code source original est disponible ici.
Modèles disponibles :
| Modèle | dtype recommandé |
|---|---|
AIDC-AI/Ovis-Image-7B | torch.bfloat16 |
Consultez cette collection pour plus d'informations.
OvisImagePipeline
classe diffusers.OvisImagePipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: Qwen3Modeltokenizer: Qwen2Tokenizertransformer: OvisImageTransformer2DModel )
Paramètres
- transformer (OvisImageTransformer2DModel) — Architecture Transformer conditionnelle (MMDiT) pour le débruitage des latents d’image encodés.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Un planificateur à utiliser en combinaison avec
transformerpour débruyer les latents d'image encodés. - vae (AutoencoderKL) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images vers et depuis des représentations latentes.
- text_encoder (
Qwen3Model) — Encodeur de texte de la classe Qwen3Model. - tokenizer (
Qwen2TokenizerFast) — Tokeniseur de la classe Qwen2TokenizerFast.
Le pipeline Ovis-Image pour la génération d'images à partir de texte.
Référence : https://github.com/AIDC-AI/Ovis-Image
__call__
< source >( prompt: str | list[str] = Nonenegative_prompt: str | list[str] = ''guidance_scale: float = 5.0height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50sigmas: list[float] | None = Nonenum_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.FloatTensor] = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truejoint_attention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 256 ) → OvisImagePipelineOutput or tuple
Paramètres
- prompt (
stroulist[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passerprompt_embedsà la place. - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scalen’est pas supérieur à1). - guidance_scale (
float, facultatif, valeur par défaut 1.0) — La guidance sans classifieur (guidance scale) est activée lorsqueguidance_scale> 1 et quenegative_promptest fourni. - height (
int, facultatif, par défaut self.unet.config.sample_size * self.vae_scale_factor) — La hauteur en pixels de l'image générée. Cette valeur est fixée à 1024 par défaut pour obtenir les meilleurs résultats. - width (
int, facultatif, par défaut self.unet.config.sample_size * self.vae_scale_factor) — La largeur en pixels de l'image générée. Cette valeur est fixée à 1024 par défaut pour obtenir les meilleurs résultats. - num_inference_steps (
int, facultatif, valeur par défaut 50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente. - sigmas (
list[float], facultatif) — Sigmas personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argumentsigmasdans leur méthodeset_timesteps. S'il n'est pas défini, le comportement par défaut lorsquenum_inference_stepsest passé sera utilisé. - num_images_per_prompt (
int, facultatif, valeur par défaut 1) — Le nombre d'images à générer par invite. - generator (
torch.Generatoroulist[torch.Generator], facultatif) — Un ou une liste de générateurs torch pour rendre la génération déterministe. - latents (
torch.FloatTensor, facultatif) — Latents bruités pré-générés, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération d’images. Peut être utilisé pour ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents sera généré par échantillonnage à l’aide dugeneratoraléatoire fourni. - prompt_embeds (
torch.FloatTensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.FloatTensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - output_type (
str, facultatif, par défaut"pil") — Le format de sortie de l'image générée. Choisissez entre PIL :PIL.Image.Imageounp.array. - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner un~pipelines.flux.FluxPipelineOutputplutôt qu'un simple tuple. - joint_attention_kwargs (
dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttentionProcessordéfini sousself.processordans diffusers.models.attention_processor. - callback_on_step_end (
Callable, facultatif) — Une fonction appelée à la fin de chaque étape de débruitage pendant l'inférence. La fonction est appelée avec les arguments suivants :callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargscontiendra une liste de tous les tenseurs spécifiés parcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
List, facultatif) — La liste des entrées tensorielles pour la fonctioncallback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argumentcallback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut._callback_tensor_inputsde votre classe de pipeline. - max_sequence_length (
intpar défaut 512) — Longueur maximale de la séquence à utiliser avec leprompt.
Retourne
OvisImagePipelineOutput ou tuple
OvisImagePipelineOutput si return_dict est True, sinon un tuple. Lors du retour d'un tuple, le premier élément est une liste contenant les images générées.
Fonction appelée lors de l'appel du pipeline pour la génération.
Exemples :
>>> import torch
>>> from diffusers import OvisImagePipeline
>>> pipe = OvisImagePipeline.from_pretrained("AIDC-AI/Ovis-Image-7B", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = 'A creative 3D artistic render where the text "OVIS-IMAGE" is written in a bold, expressive handwritten brush style using thick, wet oil paint. The paint is a mix of vibrant rainbow colors (red, blue, yellow) swirling together like toothpaste or impasto art. You can see the ridges of the brush bristles and the glossy, wet texture of the paint. The background is a clean artist's canvas. Dynamic lighting creates soft shadows behind the floating paint strokes. Colorful, expressive, tactile texture, 4k detail.'
>>> image = pipe(prompt, negative_prompt="", num_inference_steps=50, guidance_scale=5.0).images[0]
>>> image.save("ovis_image.png")encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1max_sequence_length: int = 256prompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = None )
Paramètres
- prompt (
stroulist[str], facultatif) — prompt à encoder - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. Utilisé uniquement lorsquedo_classifier_free_guidanceestTrue. S’il n’est pas défini, une chaîne vide est utilisée. - do_classifier_free_guidance (
bool, facultatif, valeur par défautTrue) — Indique s'il faut également encoder lenegative_promptpour le guidage sans classifieur. - device — (
torch.device) : torch device - num_images_per_prompt (
int) — nombre d'images à générer par invite - max_sequence_length (
int, facultatif, valeur par défaut 256) — Longueur maximale de séquence à utiliser pour leprompt. - prompt_embeds (
torch.FloatTensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.FloatTensor, facultatif) — Embeddings de texte négatifs pré-générés. S'ils ne sont pas fournis, ils sont générés à partir denegative_prompt.
OvisImagePipelineOutput
classe diffusers.pipelines.ovis_image.OvisImagePipelineOutput
< source >( images: list[PIL.Image.Image, numpy.ndarray] )
Classe de sortie pour les pipelines Ovis-Image.