Buckets:
| # Imagen a imagen | |
| Image-to-image es similar a [text-to-image](conditional_image_generation), pero además de un prompt, también puedes pasar una imagen inicial como punto de partida para el proceso de difusión. La imagen inicial se codifica en el espacio latente y se le añade ruido. Luego, el modelo de difusión latente toma un prompt y la imagen latente con ruido, predice el ruido añadido y elimina el ruido predicho de la imagen latente inicial para obtener la nueva imagen latente. Por último, un decodificador decodifica la nueva imagen latente de vuelta a una imagen. | |
| Con 🤗 Diffusers, es tan fácil como 1-2-3: | |
| 1. Cargue un punto de control en la clase [AutoPipelineForImage2Image](/docs/diffusers/main/es/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image); este pipeline maneja automáticamente la carga de la clase de pipeline correcta en función del punto de control: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import load_image, make_image_grid | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| ``` | |
| > [!TIP] | |
| > A lo largo de la guía, notará que usamos [enable_model_cpu_offload()](/docs/diffusers/main/es/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) y [enable_xformers_memory_efficient_attention()](/docs/diffusers/main/es/api/pipelines/overview#diffusers.DiffusionPipeline.enable_xformers_memory_efficient_attention) para ahorrar memoria y aumentar la velocidad de inferencia. Si está usando PyTorch 2.0, no necesita llamar a [enable_xformers_memory_efficient_attention()](/docs/diffusers/main/es/api/pipelines/overview#diffusers.DiffusionPipeline.enable_xformers_memory_efficient_attention) en su pipeline, ya que ya estará utilizando la [scaled-dot product attention](../optimization/fp16#scaled-dot-product-attention) nativa de PyTorch 2.0. | |
| 2. Cargue una imagen para pasarla a la tubería: | |
| ```py | |
| init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png") | |
| ``` | |
| 3. Pase un prompt y una imagen a la pipeline para generar una imagen: | |
| ```py | |
| prompt = "cat wizard, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney, 8k" | |
| image = pipeline(prompt, image=init_image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| imagen inicial | |
| imagen generada | |
| ## Modelos populares | |
| Los modelos de imagen a imagen más populares son [Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5), [Stable Diffusion XL (SDXL)](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) y [Kandinsky 2.2](https://huggingface.co/kandinsky-community/kandinsky-2-2-decoder). Los resultados de los modelos Stable Diffusion y Kandinsky varían debido a las diferencias en su arquitectura y proceso de entrenamiento; en general, se puede esperar que SDXL produzca imágenes de mayor calidad que Stable Diffusion v1.5. Echemos un vistazo rápido a cómo usar cada uno de estos modelos y comparemos sus resultados. | |
| ### Stable Diffusion v1.5 | |
| Stable Diffusion v1.5 es un modelo de difusión latente inicializado a partir de un checkpoint anterior y afinado adicionalmente durante 595K pasos en imágenes de 512x512. Para usar este pipeline para image-to-image, debes preparar una imagen inicial para pasarla al pipeline. Luego, puedes pasar un prompt y la imagen al pipeline para generar una nueva imagen: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| imagen inicial | |
| imagen generada | |
| ### Stable Diffusion XL (SDXL) | |
| SDXL es una versión más potente del modelo Stable Diffusion. Utiliza un modelo base más grande y un modelo refiner adicional para aumentar la calidad de la salida del modelo base. Lea la guía de [SDXL](../api/pipelines/stable_diffusion/stable_diffusion_xl) para obtener una explicación más detallada sobre cómo usar este modelo y otras técnicas que emplea para generar imágenes de alta calidad. | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-sdxl-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image, strength=0.5).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| imagen inicial | |
| imagen generada | |
| ### Kandinsky 2.2 | |
| El modelo Kandinsky es diferente de los modelos Stable Diffusion porque utiliza un modelo de prior de imagen para crear embeddings de imagen. Los embeddings ayudan a crear una mejor alineación entre el texto y las imágenes, permitiendo que el modelo de difusión latente genere mejores imágenes. | |
| La forma más sencilla de usar Kandinsky 2.2 es: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| imagen inicial | |
| imagen generada | |
| ## Configurar los parámetros de la canalización | |
| Hay varios parámetros importantes que puedes configurar en el pipeline y que afectarán al proceso de generación de imágenes y a la calidad de las imágenes. Veamos más de cerca qué hacen estos parámetros y cómo afecta su modificación a la salida. | |
| ### Fuerza | |
| `strength` es uno de los parámetros más importantes a considerar y tendrá un gran impacto en la imagen generada. Determina en qué medida la imagen generada se asemeja a la imagen inicial. En otras palabras: | |
| - 📈 un valor de `strength` más alto otorga al modelo más "creatividad" para generar una imagen diferente a la imagen inicial; un valor de `strength` de 1.0 significa que la imagen inicial se ignora más o menos | |
| - 📉 un valor de `strength` más bajo significa que la imagen generada es más similar a la imagen inicial | |
| Los parámetros `strength` y `num_inference_steps` están relacionados porque `strength` determina el número de pasos de ruido a añadir. Por ejemplo, si `num_inference_steps` es 50 y `strength` es 0.8, esto significa añadir 40 (50 * 0.8) pasos de ruido a la imagen inicial y luego desruidar durante 40 pasos para obtener la imagen recién generada. | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image, strength=0.8).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| strength = 0.4 | |
| strength = 0.6 | |
| strength = 1.0 | |
| ### Escala de guía | |
| El parámetro `guidance_scale` se utiliza para controlar el grado de alineación entre la imagen generada y el texto de la solicitud. Un valor más alto de `guidance_scale` significa que la imagen generada está más alineada con la solicitud, mientras que un valor más bajo de `guidance_scale` significa que la imagen generada tiene más margen para desviarse de la solicitud. | |
| Puedes combinar `guidance_scale` con `strength` para un control aún más preciso sobre la expresividad del modelo. Por ejemplo, combina un alto `strength + guidance_scale` para una creatividad máxima o utiliza una combinación de bajo `strength` y bajo `guidance_scale` para generar una imagen que se asemeje a la imagen inicial pero que no esté tan estrictamente ligada al prompt. | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image, guidance_scale=8.0).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| guidance_scale = 0.1 | |
| guidance_scale = 5.0 | |
| guidance_scale = 10.0 | |
| ### Prompt negativo | |
| Un prompt negativo condiciona al modelo para que *no* incluya ciertos elementos en una imagen, y puede utilizarse para mejorar la calidad de la imagen o modificarla. Por ejemplo, puedes mejorar la calidad de la imagen incluyendo prompts negativos como "poor details" o "blurry" para animar al modelo a generar una imagen de mayor calidad. O bien, puedes modificar una imagen especificando los elementos que se deben excluir de ella. | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, negative_prompt=negative_prompt, image=init_image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| negative_prompt = "feo, deformado, desfigurado, detalles pobres, mala anatomía" | |
| negative_prompt = "jungle" | |
| ## Pipelines de imagen a imagen encadenados | |
| Existen otras formas interesantes de utilizar un pipeline de imagen a imagen, además de simplemente generar una imagen (aunque eso también es bastante genial). Puedes llevarlo un paso más allá y encadenarlo con otros pipelines. | |
| ### Texto a imagen a imagen | |
| Encadenar un pipeline de texto a imagen y un pipeline de imagen a imagen permite generar una imagen a partir de texto y utilizar la imagen generada como imagen inicial para el pipeline de imagen a imagen. Esto es útil si se desea generar una imagen completamente desde cero. Por ejemplo, encademos un modelo de Stable Diffusion y un modelo de Kandinsky. | |
| Comience generando una imagen con el pipeline de texto a imagen: | |
| ```py | |
| from diffusers import AutoPipelineForText2Image, AutoPipelineForImage2Image | |
| import torch | |
| from diffusers.utils import make_image_grid | |
| pipeline = AutoPipelineForText2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| text2image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k").images[0] | |
| text2image | |
| ``` | |
| Ahora puede pasar esta imagen generada a la pipeline de imagen a imagen: | |
| ```py | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| image2image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", image=text2image).images[0] | |
| make_image_grid([text2image, image2image], rows=1, cols=2) | |
| ``` | |
| ### Imagen a imagen a imagen | |
| También puede encadenar varios pipelines de imagen a imagen para crear imágenes más interesantes. Esto puede ser útil para realizar transferencias de estilo de forma iterativa en una imagen, generar GIFs cortos, restaurar el color de una imagen o restaurar áreas faltantes de una imagen. | |
| Comience generando una imagen: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image, output_type="latent").images[0] | |
| ``` | |
| > [!TIP] | |
| > Es importante especificar `output_type="latent"` en el pipeline para mantener todas las salidas en el espacio latente y evitar un paso innecesario de decodificación y codificación. Esto solo funciona si los pipelines encadenados utilizan el mismo VAE. | |
| Pase la salida latente de este pipeline al siguiente pipeline para generar una imagen en un [estilo de arte de cómic](https://huggingface.co/ogkalu/Comic-Diffusion): | |
| ```py | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "ogkalu/Comic-Diffusion", dtype=torch.float16 | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # need to include the token "charliebo artstyle" in the prompt to use this checkpoint | |
| image = pipeline("Astronaut in a jungle, charliebo artstyle", image=image, output_type="latent").images[0] | |
| ``` | |
| Repite una vez más para generar la imagen final en un [estilo de pixel art](https://huggingface.co/kohbanye/pixel-art-style): | |
| ```py | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "kohbanye/pixel-art-style", dtype=torch.float16 | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # need to include the token "pixelartstyle" in the prompt to use this checkpoint | |
| image = pipeline("Astronaut in a jungle, pixelartstyle", image=image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| ### Imagen a amplificador a superresolución | |
| Otra forma de encadenar tu pipeline de imagen a imagen es con un pipeline de escalado y superresolución para aumentar realmente el nivel de detalle en una imagen. | |
| Comience con un pipeline de imagen a imagen: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image_1 = pipeline(prompt, image=init_image, output_type="latent").images[0] | |
| ``` | |
| > [!TIP] | |
| > Es importante especificar `output_type="latent"` en el pipeline para mantener todas las salidas en el espacio *latente* y evitar un paso innecesario de decodificación y codificación. Esto solo funciona si los pipelines encadenados utilizan el mismo VAE. | |
| Encadenarlo a un pipeline de upscaler para aumentar la resolución de la imagen: | |
| ```py | |
| from diffusers import StableDiffusionLatentUpscalePipeline | |
| upscaler = StableDiffusionLatentUpscalePipeline.from_pretrained( | |
| "stabilityai/sd-x2-latent-upscaler", dtype=torch.float16, use_safetensors=True | |
| ) | |
| upscaler.enable_model_cpu_offload() | |
| upscaler.enable_xformers_memory_efficient_attention() | |
| image_2 = upscaler(prompt, image=image_1).images[0] | |
| ``` | |
| Por último, encadenarlo a un pipeline de superresolución para mejorar aún más la resolución: | |
| ```py | |
| from diffusers import StableDiffusionUpscalePipeline | |
| super_res = StableDiffusionUpscalePipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-x4-upscaler", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| super_res.enable_model_cpu_offload() | |
| super_res.enable_xformers_memory_efficient_attention() | |
| image_3 = super_res(prompt, image=image_2).images[0] | |
| make_image_grid([init_image, image_3.resize((512, 512))], rows=1, cols=2) | |
| ``` | |
| ## Controlar la generación de imágenes | |
| Intentar generar una imagen que se vea exactamente como lo deseas puede ser difícil, por lo que las técnicas y modelos de generación controlada son tan útiles. Si bien puedes usar `negative_prompt` para controlar parcialmente la generación de imágenes, existen métodos más robustos como el ponderado de prompts y ControlNets. | |
| ### Pesos de los prompts | |
| El ponderado de prompts permite escalar la representación de cada concepto en un prompt. Por ejemplo, en un prompt como "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", puedes elegir aumentar o disminuir los embeddings de "astronaut" y "jungle". La biblioteca [Compel](https://github.com/damian0815/compel) proporciona una sintaxis simple para ajustar los pesos de los prompts y generar los embeddings. Puedes aprender a crear los embeddings en la guía de [Ponderado de prompts](weighted_prompts). | |
| [AutoPipelineForImage2Image](/docs/diffusers/main/es/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image) tiene un parámetro `prompt_embeds` (y `negative_prompt_embeds` si estás usando un prompt negativo) donde puedes pasar los embeddings que reemplazan al parámetro `prompt`. | |
| ```py | |
| from diffusers import AutoPipelineForImage2Image | |
| import torch | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| image = pipeline(prompt_embeds=prompt_embeds, # generated from Compel | |
| negative_prompt_embeds=negative_prompt_embeds, # generated from Compel | |
| image=init_image, | |
| ).images[0] | |
| ``` | |
| ### ControlNet | |
| ControlNets ofrecen una forma más flexible y precisa de controlar la generación de imágenes, ya que puedes utilizar una imagen de condicionamiento adicional. La imagen de condicionamiento puede ser una imagen canny, un mapa de profundidad, una segmentación de imagen e incluso garabatos. Sea cual sea el tipo de imagen de condicionamiento que elijas, el ControlNet genera una imagen que preserva la información contenida en ella. | |
| Por ejemplo, condicional una imagen con un mapa de profundidad para conservar la información espacial de la imagen. | |
| ```py | |
| from diffusers.utils import load_image, make_image_grid | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| init_image = init_image.resize((958, 960)) # resize to depth image dimensions | |
| depth_image = load_image("https://huggingface.co/lllyasviel/control_v11f1p_sd15_depth/resolve/main/images/control.png") | |
| make_image_grid([init_image, depth_image], rows=1, cols=2) | |
| ``` | |
| Carga un modelo de ControlNet condicionado en mapas de profundidad y el [AutoPipelineForImage2Image](/docs/diffusers/main/es/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image): | |
| ```py | |
| from diffusers import ControlNetModel, AutoPipelineForImage2Image | |
| import torch | |
| controlnet = ControlNetModel.from_pretrained("lllyasviel/control_v11f1p_sd15_depth", dtype=torch.float16, variant="fp16", use_safetensors=True) | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| ``` | |
| Ahora genera una nueva imagen condicionada en el mapa de profundidad, la imagen inicial y el prompt: | |
| ```py | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| image_control_net = pipeline(prompt, image=init_image, control_image=depth_image).images[0] | |
| make_image_grid([init_image, depth_image, image_control_net], rows=1, cols=3) | |
| ``` | |
| imagen inicial | |
| imagen de profundidad | |
| Imagen de ControlNet | |
| Aplicaremos un nuevo [estilo](https://huggingface.co/nitrosocke/elden-ring-diffusion) a la imagen generada desde ControlNet encadenándolo con un pipeline de imagen a imagen: | |
| ```py | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "nitrosocke/elden-ring-diffusion", dtype=torch.float16, | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| prompt = "elden ring style astronaut in a jungle" # include the token "elden ring style" in the prompt | |
| negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy" | |
| image_elden_ring = pipeline(prompt, negative_prompt=negative_prompt, image=image_control_net, strength=0.45, guidance_scale=10.5).images[0] | |
| make_image_grid([init_image, depth_image, image_control_net, image_elden_ring], rows=2, cols=2) | |
| ``` | |
| ## Optimizar | |
| Ejecutar modelos de difusión es computacionalmente costoso e intensivo, pero con algunos trucos de optimización es totalmente posible ejecutarlos en GPUs de consumo y de nivel gratuito. Por ejemplo, puedes usar una forma de atención más eficiente en memoria, como la [atención de producto punto escalado](../optimization/fp16#scaled-dot-product-attention) de PyTorch 2.0 o [xFormers](../optimization/attention_backends) (puedes usar uno u otro, pero no hay necesidad de usar ambos). También puedes descargar el modelo a la GPU mientras los demás componentes de la pipeline esperan en la CPU. | |
| ```diff | |
| + pipeline.enable_model_cpu_offload() | |
| + pipeline.enable_xformers_memory_efficient_attention() | |
| ``` | |
| Con [`torch.compile`](../optimization/fp16#torchcompile), puedes aumentar aún más la velocidad de inferencia envolviendo tu UNet con él: | |
| ```py | |
| pipeline.unet = torch.compile(pipeline.unet, mode="reduce-overhead", fullgraph=True) | |
| ``` | |
| Para obtener más información, consulta [Optimize and scale](../optimization/overview#optimization-techniques). | |
Xet Storage Details
- Size:
- 26.1 kB
- Xet hash:
- 5c8550bc12cb4407a4b6749a8e689a754e9066e9b3fa070bfec684680eb966bc
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.