Buckets:

mishig's picture
|
download
raw
39.5 kB

Inpainting

L’inpainting remplace ou modifie des zones spécifiques d’une image. Il s’agit donc d’un outil utile pour la restauration d’images, comme la suppression de défauts et d’artefacts, ou même le remplacement d’une zone d’image par un contenu entièrement nouveau. L’inpainting s’appuie sur un masque pour déterminer quelles régions de l’image doivent être remplies ; la zone à inpainter est représentée par des pixels blancs et la zone à conserver par des pixels noirs. Les pixels blancs sont remplis par le prompt.

Avec 🤗 Diffusers, voici comment effectuer de l'inpainting :

  1. Chargez un point de contrôle d'inpainting avec la classe AutoPipelineForInpainting. Cette classe détectera automatiquement la classe de pipeline appropriée à charger en fonction du point de contrôle :
import torch
from diffusers import AutoPipelineForInpainting
from diffusers.utils import load_image, make_image_grid

pipeline = AutoPipelineForInpainting.from_pretrained(
    "kandinsky-community/kandinsky-2-2-decoder-inpaint", 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()

Vous remarquerez tout au long du guide que nous utilisons enable_model_cpu_offload() et enable_xformers_memory_efficient_attention() pour économiser de la mémoire et augmenter la vitesse d'inférence. Si vous utilisez PyTorch 2.0, il n'est pas nécessaire d'appeler enable_xformers_memory_efficient_attention() sur votre pipeline, car il utilisera déjà le scaled-dot product attention natif de PyTorch 2.0.

  1. Charger les images de base et de masque :
init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint.png")
mask_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint_mask.png")
  1. Créez un prompt pour l’image à inpainter et passez-le au pipeline avec les images de base et de masque :
prompt = "a black cat with glowing eyes, cute, adorable, disney, pixar, highly detailed, 8k"
negative_prompt = "bad anatomy, deformed, ugly, disfigured"
image = pipeline(prompt=prompt, negative_prompt=negative_prompt, image=init_image, mask_image=mask_image).images[0]
make_image_grid([init_image, mask_image, image], rows=1, cols=3)
image de base



masque d'image



image générée

Créer une image de masque

Tout au long de ce guide, l’image de masque est fournie dans tous les exemples de code pour plus de commodité. Vous pouvez effectuer de l’inpainting sur vos propres images, mais vous devrez créer une image de masque à cet effet. Utilisez l’espace ci-dessous pour créer facilement une image de masque.

Téléchargez une image de base sur laquelle effectuer l'inpainting et utilisez l'outil de croquis pour dessiner un masque. Une fois terminé, cliquez sur Run pour générer et télécharger l'image du masque.

Xet Storage Details

Size:
39.5 kB
·
Xet hash:
761e54e33b9495f1bf5ad51ad5e2dd499a91b283aafb58cb4cf7b739663a8671

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.