Generación de Fondo de Fotos
yahoo-inc
Texto a imagen
Este repositorio acompaña nuestro artículo, 'Generación de Fondos Conscientes de Objetos Salientes usando Modelos de Difusión Guiados por Texto', que ha sido aceptado para su publicación en el taller de Modelos Generativos para la Visión por Computador de CVPR 2024. El artículo aborda un problema que llamamos 'expansión de objetos' al generar fondos para objetos salientes usando modelos de difusión de inpainting. Mostramos que modelos como el Stable Inpainting a veces pueden expandir o distorsionar arbitrariamente el objeto saliente, lo cual es indeseable en aplicaciones donde la identidad del objeto debe ser preservada, como anuncios de comercio electrónico.
Como usar
from diffusers import DiffusionPipeline
model_id = "yahoo-inc/photo-background-generation"
pipeline = DiffusionPipeline.from_pretrained(model_id, custom_pipeline=model_id)
pipeline = pipeline.to('cuda')
from PIL import Image, ImageOps
import requests
from io import BytesIO
from transparent_background import Remover
def resize_with_padding(img, expected_size):
img.thumbnail((expected_size[0], expected_size[1]))
delta_width = expected_size[0] - img.size[0]
delta_height = expected_size[1] - img.size[1]
pad_width = delta_width // 2
pad_height = delta_height // 2
padding = (pad_width, pad_height, delta_width - pad_width, delta_height - pad_height)
return ImageOps.expand(img, padding)
seed = 0
image_url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/16/Granja_comary_Cisne_-_Escalavrado_e_Dedo_De_Deus_ao_fundo_-Teres%C3%B3polis.jpg/2560px-Granja_comary_Cisne_-_Escalavrado_e_Dedo_De_Deus_ao_fundo_-Teres%C3%B3polis.jpg'
response = requests.get(image_url)
img = Image.open(BytesIO(response.content))
img = resize_with_padding(img, (512, 512))
remover = Remover()
remover = Remover(mode='base')
fg_mask = remover.process(img, type='map')
seed = 13
mask = ImageOps.invert(fg_mask)
img = resize_with_padding(img, (512, 512))
generator = torch.Generator(device='cuda').manual_seed(seed)
prompt = 'A dark swan in a bedroom'
cond_scale = 1.0
with torch.autocast("cuda"):
controlnet_image = pipeline(
prompt=prompt, image=img, mask_image=mask, control_image=mask, num_images_per_prompt=1, generator=generator, num_inference_steps=20, guess_mode=False, controlnet_conditioning_scale=cond_scale
).images[0]
controlnet_image
Funcionalidades
- Generación de fondo consciente de objetos salientes
- Modelos de difusión guiados por texto
- Prevención de la expansión indeseada de objetos
- Generación de imágenes inpainting estables
Casos de uso
- Generación de fondos para imágenes con objetos salientes
- Creación de anuncios de comercio electrónico
- Aplicaciones donde la identidad del objeto debe ser preservada
- Generación de imágenes inpainting estables