reco_sd14_laion

j-min
Texto a imagen

Una implementación de Diffusers de ReCo: Generación de Texto a Imagen Controlada por Región (CVPR 2023). Esta implementación es compatible con la tubería de Difusión Estable y permite la conversión entre estructuras de datos regionales y generación de imágenes. Utiliza archivos de punto de control originales y configuraciones de Pytorch Lightning. Se enfoca especialmente en la generación detallada de imágenes especificadas a nivel regional.

Como usar

import torch
from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained(
"j-min/reco_sd14_laion",
torch_dtype=torch.float16
)
pipe = pipe.to("cuda")

prompt = "Una caja contiene seis donas con diferentes tipos de glaseados y coberturas. dona de chocolate. dona de vainilla oscura. dona con chispas. dona con azúcar en polvo. dona rosa. dona marrón."
imagen_generada = pipe(
prompt,
escala_de_guía=4).images[0]
imagen_generada

Método para crear prompts de ReCo:

def create_reco_prompt(
    caption: str = '',
    phrases=[],
    boxes=[],
    normalize_boxes=True,
    image_resolution=512,
    num_bins=1000,
):
    """
    Método para crear un prompt de ReCo
    
    caption: leyenda global
    phrases: lista de leyendas regionales
    boxes: lista de coordinadas regionales (xyxy sin normalizar)
    """

    SOS_token = ' '
    EOS_token = ' '

    leyendas_con_coordenadas = []
    
    leyendas_con_coordenadas += [caption]
    leyendas_con_coordenadas += [EOS_token]

    for phrase, box in zip(phrases, boxes):

        if normalize_boxes:
            box = [float(x) / image_resolution for x in box]

        # cuantizar en bins
        quant_x0 = int(round((box[0] * (num_bins - 1))))
        quant_y0 = int(round((box[1] * (num_bins - 1))))
        quant_x1 = int(round((box[2] * (num_bins - 1))))
        quant_y1 = int(round((box[3] * (num_bins - 1))))

        # formato ReCo
        # añadir SOS/EOS antes/después de leyendas regionales
        leyendas_con_coordenadas += [
            f" {str(quant_x0).zfill(3)}",
            f" {str(quant_y0).zfill(3)}",
            f" {str(quant_x1).zfill(3)}",
            f" {str(quant_y1).zfill(3)}",
            SOS_token,
            phrase,
            EOS_token
        ]

    text = " ".join(leyendas_con_coordenadas)
    return text

caption = "una foto de autobús y bote; el bote está a la izquierda del autobús."
phrases = ["una foto de un autobús.", "una foto de un bote."]
boxes =  [[0.702, 0.404, 0.927, 0.601], [0.154, 0.383, 0.311, 0.487]]
prompt = create_reco_prompt(caption, phrases, boxes, normalize_boxes=False)
prompt
'a photo of bus and boat; boat is left to bus. a photo of a bus. a photo of a boat. '

caption = "Una caja contiene seis donas con diferentes tipos de glaseados y coberturas."
phrases = ["dona de chocolate.", "dona de vainilla oscura.", "dona con chispas.", "dona con azúcar en polvo.", "dona rosa.", "dona marrón."]
boxes = [[263.68, 294.912, 380.544, 392.832], [121.344, 265.216, 267.392, 401.92], [391.168, 294.912, 506.368, 381.952], [120.064, 143.872, 268.8, 270.336], [264.192, 132.928, 393.216, 263.68], [386.048, 148.48, 490.688, 259.584]]
prompt = create_reco_prompt(caption, phrases, boxes)
prompt
'A box contains six donuts with varying types of glazes and toppings. chocolate donut. dark vanilla donut. donut with sprinkles. donut with powdered sugar. pink donut. brown donut. '

Funcionalidades

Generación de texto a imagen controlada por región
Compatible con AutoTrain
Compatible con Endpoints de Inferencia
Utiliza la tubería de Difusión Estable
Soporte para la configuración personalizada

Casos de uso

Generación de imágenes detalladas para proyectos creativos
Creación de prompts para imágenes regionalmente específicas
Optimización de campañas visuales basadas en descripciones textuales
Educación y formación en técnicas avanzadas de AI/ML