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