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