# Gestión de las indicaciones de AIGC

AIGC (Contenido Generado por Inteligencia Artificial) ha inspirado y continúa inspirando a muchas personas a crear imágenes personales que reflejan sus gustos y preferencias únicas.

En respuesta a esta creciente fascinación por AIGC, las personas están explorando técnicas innovadoras, como la integración de Stable Diffusion y LLMs (Modelos de Lenguaje Grandes).

Pero primero, ¿qué es Stable Diffusion?

Stable Diffusion (opens new window) es un "modelo de aprendizaje profundo de texto a imagen, utilizado principalmente para generar imágenes detalladas condicionadas a descripciones de texto."

Puedes generar imágenes visualmente cautivadoras aprovechando el poder de Stable Diffusion. En la práctica, a medida que el modelo de Stable Diffusion procesa la imagen, esta se vuelve suave y consistente, produciendo una imagen detallada.

Como parte de este proceso creativo, agregar potentes LLMs (Modelos de Lenguaje Grandes) a la mezcla permite a los usuarios ingresar indicaciones o descripciones de texto, lo que permite que el sistema de IA genere imágenes correspondientes según sus preferencias estéticas. Como resultado, las personas pueden dar vida a sus visiones artísticas, lo que les brinda una sensación de satisfacción al ver cómo su obra de arte cobra vida y muestra las notables posibilidades que ofrece AIGC.

Sin embargo, ingresar las indicaciones de texto iniciales puede ser un desafío. Afortunadamente, hay una solución: podemos aprovechar el poder de una base de datos vectorial como MyScale para superar este obstáculo.

¿Cómo?

Podemos almacenar y organizar una extensa colección de indicaciones que se hayan utilizado con éxito para generar imágenes en una base de datos vectorial de MyScale, lo que proporciona un recurso valioso para los usuarios que necesitan inspiración o tienen dificultades para encontrar indicaciones adecuadas. Una base de datos vectorial bien curada facilita encontrar y recuperar indicaciones que se alineen estrechamente con el estilo y el concepto previstos de una imagen.

Esto, a su vez, agiliza el proceso creativo, lo hace más accesible y ayuda a los usuarios con la selección de indicaciones. Utilizar una base de datos vectorial permite a los usuarios superar el desafío inicial de las indicaciones y comenzar a generar imágenes con confianza y claridad.

# Mejorando la gestión de indicaciones de AIGC con MyScale

¿Por dónde empezamos?

Comencemos utilizando el siguiente flujo de trabajo para crear una base de datos vectorial para almacenar y organizar nuestra colección de indicaciones:

  1. Descubrir la indicación para una imagen dada: Para encontrar el texto de la indicación asociado a una imagen específica, podemos usar MyScale para realizar una búsqueda inversa. Podemos identificar la indicación o indicaciones que probablemente generaron la imagen al comparar sus características con los vectores almacenados. Podemos aprender del proceso creativo detrás de la imagen como resultado.

  2. Encontrar imágenes que se asemejen a un estilo específico: Utilizar MyScale nos permite buscar imágenes que se asemejen estrechamente al estilo que deseamos generar al comparar la representación vectorial del estilo deseado con las representaciones vectoriales en la base de datos. Podemos utilizar la base de datos de MyScale para acceder a imágenes seleccionadas que pueden ser referencias valiosas e inspiración para la generación de imágenes.

  3. Obtener indicaciones específicas para una idea general: Con MyScale, podemos buscar imágenes que se asemejen estrechamente al estilo que pretendemos generar al comparar su representación vectorial con las representaciones vectoriales en la base de datos. La base de datos de MyScale proporciona acceso a imágenes seleccionadas como referencias valiosas e inspiración.

  4. Utilizar la búsqueda y los LLMs para mejorar las indicaciones: Combinar algoritmos de búsqueda y LLMs puede mejorar la efectividad de nuestras indicaciones. La búsqueda en la base de datos vectorial puede encontrar indicaciones que históricamente han producido resultados relevantes. Además de mejorar nuestras indicaciones existentes, estas indicaciones sirven como punto de partida. También podemos generar nuevas variaciones de indicaciones o refinar las existentes utilizando LLMs, optimizando el proceso de generación de imágenes.

Figura 1: Flujo de trabajo de gestión de indicaciones de AIGC

Este diagrama ilustra cómo el flujo de trabajo de gestión de indicaciones de AIGC genera una imagen:

  1. El conjunto de datos que contiene las imágenes y sus indicaciones relacionadas se convierte en vectores y se almacena en una base de datos vectorial de MyScale. La conversión en vectores implica convertir imágenes o indicaciones en representaciones vectoriales que permiten su recuperación y uso posterior en este proceso.

  2. El segundo paso es buscar en la base de datos de MyScale utilizando imágenes o indicaciones. Si tienes una imagen existente, se puede transformar en una representación vectorial y comparar con los vectores de imágenes de la base de datos. De manera similar, si tienes una indicación existente, se puede convertir en una representación vectorial y comparar con las indicaciones vectorizadas existentes.

  3. La base de datos de MyScale devuelve resultados que coinciden con la imagen o indicación de entrada. Una vez que se ha enviado la consulta que contiene la imagen o indicación a la base de datos, esta devolverá imágenes o indicaciones similares almacenadas allí.

  4. Puedes consultar los resultados de imágenes e indicaciones devueltos por la base de datos y utilizar un LLM para mejorar las indicaciones. El LLM puede analizar y aprender de estos resultados, generando indicaciones únicas y optimizadas, y ayudándote a refinar tus expectativas y direcciones creativas.

  5. Luego se utiliza un modelo de Stable Diffusion para generar imágenes más precisas basadas en la indicación mejorada. En la práctica, después de mejorar la indicación, se introduce en el modelo de Stable Diffusion para crear imágenes relacionadas con esta indicación.

  6. Por último, pero no menos importante, las imágenes generadas y las indicaciones mejoradas se almacenan en la base de datos de MyScale para su uso futuro. Con la acumulación continua de imágenes e indicaciones dentro de la base de datos, se hacen posibles búsquedas y esfuerzos creativos futuros.

# Estudio de caso: generación de una imagen

En este escenario, utilizamos el Modelo de Stable Diffusion (opens new window) para generar una imagen basada en la siguiente indicación: "Un gato durmiendo en el sofá".

La siguiente imagen se genera:

Un buen comienzo. Pero podemos mejorar esta imagen adentrándonos en el siguiente flujo de trabajo:

# Instalar los requisitos previos

El primer paso es instalar los siguientes requisitos previos (además de streamlit, pandas, lmdb y torch) ejecutando el comando CLI que se encuentra al final de esta sección:

  • transformers: El modelo CLIP para crear incrustaciones de texto e imágenes
  • tqdm: Una barra de progreso visualmente atractiva
  • clickhouse-connect: El cliente de la base de datos MyScale
python3 -m pip install transformers tqdm clickhouse-connect streamlit pandas lmdb torch

# Preparar los datos

Comencemos con el Conjunto de datos de 900k Indicaciones de Difusión (opens new window) de Kaggle. Este conjunto de datos consta de 900,000 pares de indicaciones de Stable Diffusion y sus correspondientes URL de imágenes. Cada par incluye una indicación del modelo de Stable Diffusion y una URL de imagen asociada.

Por ejemplo:

id prompt url width height source_site
00000d0e-45cb-47b6-9f72-6a481e940d78 hombre despertando, habitación oscura y tranquila, escena cinematográfica ... URL_de_la_imagen 512 512 stablediffusionweb.com (opens new window)

Como se ve en este ejemplo, el conjunto de datos consta de las siguientes seis columnas:

  • id: Un identificador único para cada par de indicación e imagen
  • prompt: La indicación del par de imagen
  • url: Una URL que apunta a la imagen asociada a la indicación
  • width: El ancho de la imagen
  • height: La altura de la imagen
  • source_site: La etiqueta de la imagen

La siguiente imagen es la imagen real vinculada a este par de imagen. Se obtiene haciendo clic en la URL_de_la_imagen.

# Crear una tabla en la base de datos de MyScale

A menos que utilices la consola en línea de MyScale, necesitarás una conexión a nuestra base de datos para crear una tabla en MyScale.

Consulta nuestra guía detallada sobre cómo configurar un cliente de Python (opens new window) para conectarse a la base de datos de MyScale.

Te resultará mucho más fácil trabajar con MyScale si estás familiarizado con SQL (Structured Query Language). MyScale combina consultas estructuradas de SQL con búsquedas vectoriales, incluida la creación de tablas de bases de datos. En otras palabras, crear una tabla de base de datos vectorial es casi idéntico a crear una tabla de base de datos convencional.

La siguiente declaración SQL describe cómo crear una tabla vectorial en SQL:

CREATE TABLE IF NOT EXISTS Prompt_text_900k(
        id String,
        prompt String,
        url String,
        width UInt64,
        height UInt64,
        source_site String,
        prompt_vector Array(Float32),
CONSTRAINT vec_len CHECK length(prompt_vector) = 512
) ENGINE = MergeTree ORDER BY id; 

# Extraer pares de texto e imagen, creando conjuntos de datos

CLIP (opens new window) empareja texto e imágenes para permitir la recuperación de alto rendimiento en varios modos. CLIP puede aprender a reconocer objetos y escenas en imágenes y utilizar el texto para analizar el contenido. Esto le permite emparejar imágenes y texto con alta precisión y velocidad, lo que permite una búsqueda rápida y precisa en varios modos.

Aquí tienes un ejemplo:

import torchimport clipfrom PIL import Image
# Cargar el modelo CLIP
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)
# Cargar y preprocesar la imagen
# Codificar el texto
text = "Your text here"
text_input = clip.tokenize([text]).to(device)
with torch.no_grad():
    text_features = model.encode_text(text_input)
# Imprimir las características de la imagen y el texto
print("Image features shape:", image_features.shape)
print("Text features shape:", text_features.shape)

# Subir los datos a MyScale

A continuación, se suben las incrustaciones a MyScale y se crea un índice vectorial, como se muestra en el siguiente extracto de código en Python:

# subir datos desde los conjuntos de datos
client.insert("Prompt_text_900k", 
              data_text.to_records(index=False).tolist(), 
              column_names=data_image.columns.tolist())
# crear índice vectorial con coseno
client.command("""
ALTER TABLE Prompt_text_900k
ADD VECTOR INDEX prompt_vector_index feature
TYPE MSTG
('metric_type=Cosine')
""")

# Buscar en la base de datos de MyScale

Cuando un usuario ingresa una indicación, la convertimos en un vector y lo utilizamos para consultar la base de datos, devolviendo las mejores n indicaciones y sus imágenes correspondientes. Utilizamos los siguientes pasos para buscar en la base de datos de MyScale:

  • El primer paso es convertir la indicación (pregunta) en un vector, como indica el siguiente fragmento de código:

    question = 'A cat is sleeping on the sofa'
    emb_query = retriever.encode(question).tolist()
    
  • El segundo paso es ejecutar una consulta que buscará en el conjunto de datos y devolverá las mejores no indicaciones (textos) y sus imágenes correspondientes, como se ve en el siguiente fragmento de código:

    top_k = 2
    results = client.query(f"""
    SELECT prompt, url, distance(prompt_vector, {emb_query}) as dist
    FROM Prompt_text_900k
    ORDER BY dist LIMIT {top_k}
    """)
    summaries = {'prompt': [], 'url': []}
    for res in results.named_results():
      summaries['prompt'].append(res["prompt"])
      summaries['url'].append(res["url"])
    

Los resultados de la consulta se describen en el siguiente fragmento de código:

{'prompt':['`two cute calico cats sleeping inside a cozy home in the evening, two multi - colored calico cats`','`two cats sleeping by the window Chinese new year digital art painting by makoto shinkai`'],
'url': ['`https://image.lexica.art/full_jpg/c6fc8242-86b6-4a2c-adee-3053bb345147`','https://image.lexica.art/full_jpg/06c4451c-ce40-4926-9ec7-0381f3dcc028']}

Con las URL que apuntan a las imágenes:

# Generar nuevas imágenes

Utilizando la API de GPT4, podemos crear nuevas indicaciones con GPT4 basadas en los datos devueltos de esta consulta, como se muestra en el siguiente fragmento de código:

system_message = f"""
    Please provide a more native-sounding rewrite of the user-input 
    image generation prompt based on the following description
    {summaries}
"""

Las siguientes imágenes se generarán utilizando estas nuevas indicaciones:

La recuperación de imágenes también se puede hacer utilizando un flujo de trabajo similar.

# Conclusión

Las imágenes personalizadas son el corazón de la tendencia de AIGC. Es posible crear contenido visualmente cautivador utilizando Stable Diffusion y LLMs. Con MyScale, puedes encontrar indicaciones adecuadas como se describe a lo largo de este artículo con su completa base de datos vectorial. Los usuarios pueden superar desafíos, refinar la creatividad e interactuar con AIGC utilizando MyScale con Stable Diffusion y LLMs, lo que resulta en un contenido generado por IA único.

Last Updated: Sat Apr 13 2024 10:45:55 GMT+0000