La solución de generación de texto a imagen integrada en el dispositivo MediaPipe ya está disponible para Android Developers

OCT 09, 2023
Paul Ruiz Senior Developer Relations Engineer
Kris Tonthat Technical Writer

A principios de este año, tuvimos un anticipo de la generación de texto a imagen integrada en el dispositivo con modelos de difusión para Android mediante MediaPipe Solutions. Hoy nos complace anunciar que la solución experimental temprana Image Generator ya está disponible para que los desarrolladores la prueben en dispositivos Android, lo que les permitirá generar con facilidad imágenes en el dispositivo en su totalidad en tan solo unos 15 segundos en dispositivos de gama alta. ¡Ansiamos ver lo que crearás!

Existen tres formas principales en las que puedes usar esta nueva tarea de MediaPipe Image Generator:

  1. Generación de texto a imagen en función de indicaciones de texto utilizando modelos de difusión estándar.
  2. Generación de texto a imagen controlable en función de indicaciones de texto e imágenes de condicionamiento utilizando complementos de difusión.
  3. Generación de texto a imagen personalizada en función de indicaciones de texto utilizando ponderaciones de Adaptación de bajo rango (LoRA) que te permiten crear imágenes de conceptos específicos predefinidas en relación con tus casos de uso únicos.

Modelos

Antes de abocarnos a todas las partes divertidas y emocionantes de esta nueva tarea de MediaPipe, es importante saber que nuestra API de generación de imágenes es compatible con cualquier modelo que coincida exactamente con la arquitectura Stable Diffusion v1.5. Puedes utilizar un modelo preentrenado o tus modelos ajustados convirtiéndolos a un formato de modelo compatible con MediaPipe Image Generator mediante nuestro alfabeto de conversión.

También puedes personalizar un modelo de base a través del ajuste fino de LoRA de MediaPipe Diffusion en Vertex AI si insertas nuevos conceptos en un modelo de base sin tener que ajustar todo el modelo. Puedes encontrar más información sobre este proceso en nuestra documentación oficial.

Si deseas probar esta tarea hoy sin ninguna personalización, también ponemos a disposición enlaces a algunos modelos de trabajo verificados en esa misma documentación.

Generación de imágenes a través de modelos de difusión

La forma más sencilla de probar la tarea de Image Generator es darle una indicación de texto y, luego, recibir como resultado una imagen utilizando un modelo de difusión.

Al igual que las otras tareas de MediaPipe, comenzarás creando un objeto de opciones. En este caso, solo tendrás que definir la ruta a los archivos del modelo de base en el dispositivo. Una vez que tengas ese objeto de opciones, podrás crear el ImageGenerator.

val options = ImageGeneratorOptions.builder().setImageGeneratorModelDirectory(MODEL_PATH).build() imageGenerator = ImageGenerator.createFromOptions(context, options)

Después de crear tu nuevo ImageGenerator, puedes crear una nueva imagen pasando en la indicación el número de iteraciones que debe realizar el generador para generarla y un valor inicial. De esta manera, se ejecutará una operación de bloqueo para crear una nueva imagen, por lo que seguramente desees ejecutarla en un subproceso de segundo plano antes de devolver el nuevo objeto de mapa de bits que obtuviste como resultado.

val result = imageGenerator.generate(prompt_string, iterations, seed) val bitmap = BitmapExtractor.extract(result?.generatedImage())

Además de este formato simple de entrada/salida de resultados, también admitimos una forma de pasar por cada iteración de forma manual con la función execute(), en la que recibes como resultado las imágenes intermedias en diferentes etapas para mostrar el progreso generativo. Si bien, en la mayoría de las aplicaciones, no se recomienda obtener resultados intermedios debido a cuestiones de rendimiento y complejidad, es una buena manera de demostrar lo que sucede tras bambalinas. Se trata de un proceso un poco más profundo, pero puedes encontrar esta demostración y los otros ejemplos que aparecen en esta publicación en nuestra aplicación de oficial de ejemplo de GitHub.

Generación de imágenes con complementos

Si bien la posibilidad de crear nuevas imágenes a partir de solo una indicación en un dispositivo ya representa un gran paso, fuimos un poco más allá al implementar un nuevo sistema de complementos que permite que el modelo de difusión acepte una imagen de condicionamiento y una indicación de texto como entradas.

Actualmente admitimos tres formas diferentes en las que puedes proporcionar una base para tus generaciones: estructuras faciales, detección de bordes y percepción de la profundidad. Los complementos te brindan la posibilidad de proporcionar una imagen, extraer estructuras específicas de ella y, luego, crear nuevas imágenes utilizando esas estructuras.

Pesos de LoRA

La tercera característica importante que implementamos hoy es la capacidad de personalizar la tarea de Image Generator con LoRA para enseñar al modelo de base nuevos conceptos, como objetos, personas o estilos específicos que se presentan durante el entrenamiento. Con los nuevos pesos de LoRA, Image Generator se convierte en un generador especializado capaz de insertar conceptos específicos en las imágenes generadas.

Los pesos de LoRA son útiles, por ejemplo, en los casos en los que deseas que las imágenes tengan el estilo de una pintura al óleo o que una tetera en particular aparezca en los entornos creados. Puedes encontrar más información sobre los pesos de LoRA en Vertex AI en la tarjeta modelo de LoRA de MediaPipe Stable Diffusion y crearlos usando este bloc de notas. Una vez generados, puedes implementar los pesos de LoRA en el dispositivo mediante la API de MediaPipe Tasks Image Generator, o bien a través de la implementación de un solo clic de Vertex AI para lograr la inferencia optimizada del servidor.

En el siguiente ejemplo, creamos pesos de LoRA con varias imágenes de una tetera del conjunto de imágenes de entrenamiento de teteras Dreambooth. Luego, usamos los pesos para generar una nueva imagen de la tetera en diferentes entornos.

Próximos pasos

Este es solo el comienzo de lo que planeamos admitir con la generación de imágenes en el dispositivo. Esperamos con ansias ver las grandes cosas que creará la comunidad de desarrolladores, así que asegúrate de publicarlas en X (anteriormente, Twitter) con el hashtag #MediaPipeImageGen y etiqueta a @GoogleDevs. Puedes consultar el ejemplo oficial en GitHub, donde se muestra todo lo que acabas de aprender, leer nuestra documentación oficial para obtener aún más detalles y seguir con atención el canal de YouTube de Google para desarrolladores, donde podrás obtener actualizaciones y tutoriales a medida que el equipo de MediaPipe los publique.

Agradecimientos

Nos gustaría agradecer a todos los miembros del equipo que contribuyeron a este trabajo: Lu Wang, Yi-Chun Kuo, Sebastian Schmidt, Kris Tonthat, Jiuqiang Tang, Khanh LeViet, Paul Ruiz, Qifei Wang, Yang Zhao, Yuqi Li, Lawrence Chan, Tingbo Hou, Joe Zou, Raman Sarokin, Juhyun Lee, Geng Yan, Ekaterina Ignasheva, Shanthal Vasanth, Glenn Cameron, Mark Sherwood, Andrei Kulik, Chuo-Ling Chang y Matthias Grundmann del equipo de Core ML, y también a Changyu Zhu, Genquan Duan, Bo Wu, Ting Yu y Shengyang Dai de Google Cloud.