Diffusers documentation
Ovis-Image
Ovis-Image

Ovis-Image es un modelo de texto a imagen de 7B optimizado específicamente para la renderización de texto de alta calidad, diseñado para operar de manera eficiente bajo restricciones computacionales estrictas.
Informe técnico de Ovis-Image de Alibaba Group, de Guo-Hua Wang, Liangfu Cao, Tianyu Cui, Minghao Fu, Xiaohao Chen, Pengxin Zhan, Jianshan Zhao, Lan Li, Bowen Fu, Jiaqi Liu, Qing-Guo Chen.
El resumen del artículo es:
Presentamos Ovis-Image, un modelo de texto a imagen de 7B optimizado específicamente para el renderizado de texto de alta calidad, diseñado para operar de manera eficiente bajo restricciones computacionales estrictas. Basado en nuestro marco de trabajo anterior Ovis-U1, Ovis-Image integra un decodificador visual basado en difusión con el backbone multimodal más potente Ovis 2.5, aprovechando un pipeline de entrenamiento centrado en el texto que combina el preentrenamiento a gran escala con refinamientos de posentrenamiento cuidadosamente diseñados. A pesar de su arquitectura compacta, Ovis-Image logra un rendimiento de renderizado de texto comparable al de modelos abiertos significativamente más grandes, como Qwen-Image, y se acerca a sistemas de código cerrado como Seedream y GPT4o. Crucialmente, el modelo sigue siendo desplegable en una sola GPU de gama alta con memoria moderada, reduciendo la brecha entre el renderizado de texto de nivel frontera y el despliegue práctico. Nuestros resultados indican que combinar un backbone multimodal potente con una receta de entrenamiento enfocada en el texto y cuidadosamente diseñada es suficiente para lograr un renderizado de texto bilingüe confiable sin recurrir a modelos de gran tamaño o propietarios.
Aspectos destacados:
- Renderizado de texto potente a una escala compacta de 7B: Ovis-Image es un modelo de texto a imagen de 7B que ofrece una calidad de renderizado de texto comparable a la de sistemas mucho más grandes de la clase de 20B, como Qwen-Image, y es competitivo con modelos de código cerrado líderes como GPT4o en escenarios centrados en texto, todo ello manteniéndose lo suficientemente pequeño para ejecutarse en hardware ampliamente accesible.
- Alta fidelidad en prompts con mucho texto y sensibles al diseño: El modelo destaca en prompts que exigen una alineación precisa entre el contenido lingüístico y la tipografía renderizada (p. ej., carteles, banners, logotipos, maquetas de interfaz, infografías), generando texto legible, correctamente escrito y semánticamente coherente en una amplia variedad de fuentes, tamaños y relaciones de aspecto, sin comprometer la calidad visual general.
- Eficiencia y capacidad de despliegue: Con su presupuesto de 7B parámetros y su arquitectura optimizada, Ovis-Image cabe en una sola GPU de gama alta con memoria moderada, soporta un uso interactivo de baja latencia y escala para el servicio de producción por lotes, llevando el renderizado de texto casi de frontera a aplicaciones donde los modelos con decenas de miles de millones de parámetros no son prácticos.
Este pipeline fue aportado por el equipo Ovis-Image. La base de código original se puede encontrar aquí.
Modelos disponibles:
| Modelo | dtype recomendado |
|---|---|
AIDC-AI/Ovis-Image-7B | torch.bfloat16 |
Consulte esta colección para obtener más información.
OvisImagePipeline
clase diffusers.OvisImagePipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: Qwen3Modeltokenizer: Qwen2Tokenizertransformer: OvisImageTransformer2DModel )
Parámetros
- transformer (OvisImageTransformer2DModel) — Arquitectura Conditional Transformer (MMDiT) para desruidar los latentes de imagen codificados.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Un scheduler para usar en combinación con
transformerpara desruidar los latentes de imagen codificados. - vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes a partir de y hacia representaciones latentes.
- text_encoder (
Qwen3Model) — Codificador de texto de la clase Qwen3Model. - tokenizer (
Qwen2TokenizerFast) — Tokenizer de la clase Qwen2TokenizerFast.
El pipeline Ovis-Image para la generación de imágenes a partir de texto.
Referencia: 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 = ['latents']max_sequence_length: int = 256 ) → OvisImagePipelineOutput or tuple
Parámetros
- prompt (
strolist[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, hay que pasarprompt_embedsen su lugar. - negative_prompt (
strolist[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. Se ignora cuando no se usa guía (es decir, se ignora siguidance_scaleno es mayor que1). - guidance_scale (
float, opcional, valor predeterminado 1.0) — La guía libre de clasificador (escala de guía) se habilita cuandoguidance_scale> 1 y se proporcionanegative_prompt. - height (
int, opcional, por defecto self.unet.config.sample_size * self.vae_scale_factor) — La altura en píxeles de la imagen generada. Por defecto, se establece en 1024 para obtener los mejores resultados. - width (
int, opcional, valor predeterminado self.unet.config.sample_size * self.vae_scale_factor) — El ancho en píxeles de la imagen generada. Por defecto, se establece en 1024 para obtener los mejores resultados. - num_inference_steps (
int, opcional, valor predeterminado 50) — El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta. - sigmas (
list[float], opcional) — Sigmas personalizados para usar en el proceso de desruido con programadores que admiten un argumentosigmasen su métodoset_timesteps. Si no se define, se usará el comportamiento predeterminado cuando se pasenum_inference_steps. - num_images_per_prompt (
int, opcional, valor predeterminado 1) — El número de imágenes que se generarán por indicación. - generator (
torch.Generatorolist[torch.Generator], opcional) — Un generador o una lista de generadores de torch para hacer la generación determinista. - latents (
torch.FloatTensor, opcional) — Latentes ruidosos pregenerados, muestreados de una distribución gaussiana, que se usarán como entradas para la generación de imágenes. Se pueden utilizar para ajustar la misma generación con diferentes prompts. Si no se proporcionan, se generará un tensor de latentes mediante muestreo usando elgeneratoraleatorio suministrado. - prompt_embeds (
torch.FloatTensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entradaprompt. - negative_prompt_embeds (
torch.FloatTensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entradanegative_prompt. - output_type (
str, opcional, valor predeterminado"pil") — El formato de salida de la imagen generada. Elija entre PIL:PIL.Image.Imageonp.array. - return_dict (
bool, opcional, valor predeterminadoTrue) — Indica si se debe devolver un~pipelines.flux.FluxPipelineOutputen lugar de una tupla simple. - joint_attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttentionProcessordefinido enself.processordentro de diffusers.models.attention_processor. - callback_on_step_end (
Callable, opcional) — Una función que se llama al final de cada paso de desruido durante la inferencia. La función se llama con los siguientes argumentos:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsincluirá una lista de todos los tensores especificados porcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
List, opcional) — La lista de entradas de tensor para la funcióncallback_on_step_end. Los tensores especificados en la lista se pasarán como argumentocallback_kwargs. Solo podrá incluir variables listadas en el atributo._callback_tensor_inputsde su clase de pipeline. - max_sequence_length (
intpor defecto 512) — Longitud máxima de la secuencia para usar con elprompt.
Devuelve
OvisImagePipelineOutput o tuple
OvisImagePipelineOutput si return_dict es True, de lo contrario una tuple. Al devolver una tupla, el primer elemento es una lista con las imágenes generadas.
Función invocada al llamar a la pipeline para la generación.
Ejemplos:
>>> 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 )
Parámetros
- prompt (
strolist[str], opcional) — prompt a codificar - negative_prompt (
strolist[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Se utiliza solo cuandodo_classifier_free_guidanceesTrue. Si no se define, se utiliza una cadena vacía. - do_classifier_free_guidance (
bool, opcional, valor predeterminadoTrue) — Si se debe codificar también elnegative_promptpara la guía sin clasificador. - device — (
torch.device): dispositivo de torch - num_images_per_prompt (
int) — número de imágenes que deben generarse por prompt - max_sequence_length (
int, opcional, valor predeterminado 256) — Longitud máxima de secuencia a utilizar para elprompt. - prompt_embeds (
torch.FloatTensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entradaprompt. - negative_prompt_embeds (
torch.FloatTensor, opcional) — Incrustaciones de texto negativo pregeneradas. Si no se proporcionan, se generan a partir denegative_prompt.
OvisImagePipelineOutput
clase diffusers.pipelines.ovis_image.OvisImagePipelineOutput
< source >( images: list )
Clase de salida para las tuberías de Ovis-Image.