TP5: Synthèse d'images génératives et inpainting avec des modèles de diffusion (English version) Posez une question !

TP5: Generative Image Synthesis and Inpainting with Diffusion Models (Version française) Ask a question!

Diffusion inpainting teaser

Pour chaque section de ce travail, veuillez indiquer si vous avez utilisé un assistant basé sur l'IA et, si oui, le prompt exact que vous avez utilisé ainsi qu'un résumé dans vos mots de l'approche employée dans votre remise. Si vous n'avez pas utilisé d'assistant IA pour une section, veuillez résumer votre approche en un court paragraphe. For each section of this assignment, please indicate whether you used an AI assistant and, if so, the exact prompt you used as well as a short summary in your own words of the approach used in your submission. If you did not use an AI assistant for a section, please summarize your approach in a short paragraph.

Petit cours d'histoire

En 2022, le domaine de la génération d'images a été révolutionné par les modèles de diffusion — une classe de modèles génératifs qui apprennent à créer des images en débruitant progressivement du bruit aléatoire. L'idée clé provient de l'article « Denoising Diffusion Probabilistic Models » (DDPM) de Ho et al. (2020), qui a montré que le débruitage itératif d'une image sur de nombreuses étapes pouvait produire des résultats photoréalistes. Cependant, les premiers modèles de diffusion étaient coûteux en calcul, nécessitant des centaines d'étapes de débruitage. Les modèles de diffusion latente (Latent Diffusion Models, LDM), introduits par Rombach et al. en 2022, ont considérablement amélioré l'efficacité en effectuant le processus de diffusion dans un espace latent compressé plutôt que dans l'espace pixel.

Pour rendre la génération praticable sur processeur (CPU), nous utiliserons un modèle compressé (compact model) appelé bk-sdm qui maintient une qualité de génération acceptable tout en étant beaucoup plus léger que le modèle original. Dans ce travail, vous explorerez ces modèles de manière pratique.

Brief History Lesson

In 2022, the field of image generation was revolutionized by diffusion models—a class of generative models that learn to create images by gradually denoising random noise. The key insight came from the 2020 paper "Denoising Diffusion Probabilistic Models" (DDPM) by Ho et al., which showed that iteratively denoising an image over many steps could produce photorealistic results. However, early diffusion models were computationally expensive, requiring hundreds of denoising steps. Latent Diffusion Models (LDMs), introduced by Rombach et al. in 2022, dramatically improved efficiency by performing the diffusion process in a compressed latent space rather than pixel space.

To make generation practical on CPUs, we will use a compressed model named bk-sdm which maintains acceptable generation quality while being much lighter than the original model. In this assignment, you will explore these models hands-on.

Survol

Le but de ce travail est d'explorer la génération d'images texte-vers-image à l'aide de modèles de diffusion et d'étendre un code existant pour supporter l'inpainting — la tâche de remplir des régions masquées d'une image. Vous devrez :

  1. Configurer votre environnement Python et générer des images à partir de prompts textuels
  2. Explorer l'effet du guidage sans classifieur (classifier-free guidance) sur la qualité de génération
  3. Étendre le code de départ pour implémenter l'inpainting d'images
  4. Utiliser votre implémentation d'inpainting pour effectuer la suppression et le remplacement d'objets
Important : Ce travail comporte des exigences différentes pour les étudiants de premier cycle (GIF-4105) et des cycles supérieurs (GIF-7105). Ces différences sont clairement indiquées tout au long de l'énoncé avec des badges de couleur.

Overview

The goal of this homework is to explore text-to-image generation using diffusion models and extend an existing codebase to support inpainting—the task of filling in masked regions of an image. You will:

  1. Set up your Python environment and generate images from text prompts
  2. Explore the effect of classifier-free guidance on generation quality
  3. Extend the provided starter code to implement image inpainting
  4. Use your inpainting implementation to perform object removal and replacement
Important: This assignment has different requirements for undergraduate (GIF-4105) and graduate (GIF-7105) students. These differences are clearly marked throughout with color-coded badges.

Détails

Données requises : Téléchargez imgs.zip (images et masques de test) nécessaires pour les sections sur l'inpainting.

1. Réchauffement 15% (GIF-4105) 10% (GIF-7105)

Installation et configuration
  • Assurez-vous que vous êtes dans un environnement virtuel Python. Téléchargez le code de départ et installez les dépendances Python via pip install -r requirements.txt.
  • Vérifiez que votre installation fonctionne en exécutant le script: python tp5.py. Lors de la première exécution, le téléchargement du modèle prendra quelques minutes.
  • Modifiez la variable prompt dans tp5.py avec une courte description de votre cru (par exemple "un paysage magnifique avec un soleil couchant") et exécutez à nouveau le script. Vous devriez voir l'image générée s'enregistrer sous example.png. Répétez cette opération avec au moins 3 prompts différents de votre cru et rapportez les images générées dans votre rapport.
  • Dans votre rapport, documentez les spécifications de votre ordinateur (processeur, système d'exploitation) et le temps de génération pour une image.
Figures requises dans votre rapport :
  • Au moins deux images générées ainsi que le texte employé pour la génération
  • Discussion brève de vos résultats

2. Guidage sans classifieur (Classifier-Free Guidance) 15% (GIF-4105) 10% (GIF-7105)

Comprendre l'échelle de guidage

Le guidage sans classifieur (Classifier-Free Guidance, CFG) est une technique qui améliore l'alignement entre les images générées et les prompts textuels. Le paramètre d'échelle de guidage (guidance scale) contrôle le compromis entre la qualité/diversité des images et l'adhérence au prompt.

L'équation clef est :

$\varepsilon_{\text{guidé}} = \varepsilon_{\text{incond}} + s \cdot (\varepsilon_{\text{cond}} - \varepsilon_{\text{incond}})$

où $\varepsilon_{\text{cond}}$ est la prédiction du modèle conditionnée par le prompt textuel, $\varepsilon_{\text{incond}}$ est la prédiction inconditionnelle (sans prompt) et $s$ est le facteur de guidage. Un facteur de guidage plus élevé aligne la génération plus fortement vers le prompt, mais peut causer des artéfacts.

Étude expérimentale

En utilisant la même graine (seed, déjà spécifié fixe dans le code de départ) et le même prompt, générez des images avec les facteurs de guidage suivants : 0.0, 0.5, 1.0, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 20.0, 40.0 et 60.0. Vous devrez modifier la variable guidance_scale dans le script tp5.py.

Pour chaque échelle de guidage, documentez :

  • La qualité visuelle de l'image générée
  • À quel point l'image correspond au prompt
Questions d'analyse (répondez dans votre rapport) :
  • Que se passe-t-il lorsque guidance_scale = 1.0 ? Pourquoi ?
  • À quelle échelle de guidage observez-vous la meilleure adhérence au prompt ?
  • À quelle échelle de guidage les artéfacts commencent-ils à apparaître ?
Figures requises dans votre rapport :
  • Grille montrant le même prompt aux différentes échelles de guidage
  • Discussion brève résumant vos observations

3. Implémentation de l'inpainting 30% (GIF-4105) 25% (GIF-7105)

L'inpainting consiste à reconstruire une région masquée d'une image en générant un contenu cohérent avec le contexte visuel autour du masque.

Étendez le code fourni pour supporter l'inpainting d'images.

Contexte : Comment fonctionne l'inpainting

Voici les étapes à réaliser pour effectuer l'inpainting:

  1. Ajouter l'image d'entrée et le masque d'entrée comme paramètres d'entrée de la fonction generate_image.
  2. Avant la boucle de débruitage, redimensionnez l'image à width et height pixels, puis convertissez-la en tenseur [-1, 1] et encodez l'image par le VAE pour obtenir les vecteurs latents qui la représentent. Finalement, générez le masque latent en réduisant la résolution du masque d'entrée pour correspondre aux dimensions latentes. Voici un code d'exemple pour réaliser ceci:
    image = image.resize((width, height), Image.Resampling.LANCZOS)
    mask = mask.resize((width, height), Image.Resampling.LANCZOS)
    
    # Convertir l'image en tenseur [-1, 1]
    img_array = np.array(image.convert("RGB")).astype(np.float32) / 127.5 - 1.0
    img_tensor = torch.from_numpy(img_array).permute(2, 0, 1).unsqueeze(0).to(device, dtype=text_embeddings.dtype)
    
    # Encoder l'image dans l'espace latent
    init_latents_orig = pipe.vae.encode(img_tensor).latent_dist.sample(generator=generator)
    init_latents_orig = init_latents_orig * pipe.vae.config.scaling_factor
    
    # Convertir le masque en tenseur [0, 1] et redimensionner pour correspondre aux dimensions latentes
    mask_array = np.array(mask.convert("L")).astype(np.float32) / 255.0
    # Le masque est 1 où nous voulons régénérer (blanc), 0 où nous voulons conserver (noir)
    mask_tensor = torch.from_numpy(mask_array).unsqueeze(0).unsqueeze(0).to(device, dtype=text_embeddings.dtype)
    mask_latent = torch.nn.functional.interpolate(mask_tensor, size=(height // 8, width // 8), mode='nearest')
  3. À chaque étape de débruitage, fusionnez les latents de l'image originale (avec le niveau de bruit approprié, disponible dans t_prev = timesteps[i + 1]) dans les régions non masquées, par exemple:
    noise = torch.randn_like(init_latents_orig)
    t_prev_tensor = torch.tensor([t_prev.item()], device=device)
    noisy_orig_latents = pipe.scheduler.add_noise(init_latents_orig, noise, t_prev_tensor)
    Puis, fusionnez ces latents avec les latents générés à l'étape courante, une étape similaire à celle de composition: latents = (1 - mask_latent) * noisy_orig_latents + mask_latent * latents
  4. Décodez les latents finaux en espace pixel.
Validation

Testez votre implémentation sur les images et masques de test fournis. Votre inpainting devrait :

  • Fusionner harmonieusement le contenu généré avec l'image originale
  • Respecter les frontières du masque sans coutures visibles
  • Générer du contenu correspondant au prompt textuel
  • Maintenir un éclairage et un style cohérents avec l'image environnante
Figures requises dans votre rapport :
  • Décrivez votre implémentation dans votre rapport

Discussion requise : Veuillez discuter brièvement des résultats obtenus dans cette section, avec quelques images de tests et leurs résultats en inpainting.

4. Suppression d'objets 15% (GIF-4105) 10% (GIF-7105)

Exemple de suppression d'objet (avant / masque / résultat). Le modèle employé n'est pas parfait, mais permet d'obtenir des résultats éducatifs.

Château - avant la suppression d'objet
Masque - suppression d'objet
Château - après la suppression d'objet

En utilisant votre implémentation d'inpainting, effectuez la suppression d'objets sur des images. L'objectif est de retirer des objets indésirables et de remplir la région avec un contenu d'arrière-plan plausible.

Tâches

Utilisez les images de imgs.zip suivantes (avec le masque *_mask.png correspondant) :

  • graffiti.png : supprimez le graffiti
  • pisa.png : supprimez la tour de Pise
  • chateau_frontenac.png : supprimez la personne devant le Château

Pour chaque suppression :

  • Documentez l'image originale, le masque, le prompt utilisé et le résultat
  • Discutez de tout artéfact ou imperfection
  • Si le résultat n'est pas satisfaisant, expliquez pourquoi et montrez vos tentatives d'amélioration

Exigence obligatoire (évaluée) : Ajoutez au moins un cas supplémentaire avec votre propre image et votre propre masque.

Questions d'analyse :
  • Quels types d'arrière-plans sont les plus faciles/difficiles à reconstruire ?
  • Comment la taille de l'objet supprimé affecte-t-elle la qualité ?
  • Quelles stratégies de prompts fonctionnent le mieux pour la suppression d'objets ?
Figures requises dans votre rapport :
  • Au moins 4 exemples de suppression d'objets avec avant/après/masque
  • Montrez des cas d'échecs avec une analyse de ce qui n'a pas fonctionné, si vous en observez.

Discussion requise : Veuillez discuter brièvement des résultats obtenus dans cette section.

5. Remplacement d'objets 15% (GIF-4105) 10% (GIF-7105)

Remplacement d'objet (avant / masque / résultat).

Pyramides - avant le remplacement d'objet
Masque - remplacement d'objet
Pyramides - après le remplacement d'objet

Le remplacement d'objets combine le masquage avec la génération ciblée : au lieu de remplir avec de l'arrière-plan, vous générez un nouvel objet à la place de l'ancien.

Tâches

Utilisez les images de imgs.zip suivantes (avec le masque *_mask.png correspondant) :

  • pyramides.webp : ajoutez de la neige sur la pyramide
  • baie_beauport.avif : ajoutez un pingouin sur la plage
  • moulin.png : remplacez le moulin par un géant

Pour chaque remplacement :

  • Documentez l'objet original, le prompt de remplacement et le résultat
  • Analysez comment le nouvel objet s'intègre dans la scène
  • Discutez de la cohérence de l'éclairage, de l'échelle appropriée et de la qualité des bords

Exigence obligatoire (évaluée) : Ajoutez au moins un cas supplémentaire avec votre propre image et votre propre masque.

Figures requises dans votre rapport :
  • Au moins 4 exemples de remplacement d'objets avec avant/après/masque/prompt

Discussion requise : Veuillez discuter brièvement des résultats obtenus dans cette section.

6. Exigence supplémentaire pour les cycles supérieurs

Cette section est OBLIGATOIRE pour les étudiants aux cycles supérieurs (maîtrise/doctorat) :

Visualisation de chaque étape de diffusion 15%

Dans votre rapport, montrez clairement l'évolution du débruitage au fil des étapes de diffusion pour au moins un exemple d'inpainting.

  • Affichez une séquence d'images intermédiaires couvrant des étapes précoces, intermédiaires et tardives
  • Expliquez brièvement ce qui change visuellement d'une étape à l'autre
  • Commentez l'impact du nombre d'étapes sur la qualité finale
Figures requises :
  • Une visualisation claire de la trajectoire de diffusion (plusieurs étapes)
  • Résultat final de l'inpainting associé à cette trajectoire

Discussion requise : Veuillez discuter brièvement des résultats obtenus dans cette section.

Details

Required Data: Download imgs.zip (test images and masks) needed for the inpainting sections.

1. Warm-up 15% (GIF-4105) 10% (GIF-7105)

Installation and Configuration
  • Make sure you are in a Python virtual environment. Download the starter code and install Python dependencies via pip install -r requirements.txt.
  • Verify your setup by running python tp5.py. On the first run, model download will take a few minutes.
  • Modify the variable prompt in tp5.py with a short prompt of your choice (for example "a beautiful landscape with a sunset") and run the script again. You should see the generated image saved as example.png. Repeat this with at least 3 different prompts and include the generated images in your report.
  • In your report, document your machine specifications (CPU, operating system) and the generation time for one image.
Required in Your Report:
  • At least two generated images with the corresponding prompts used for generation
  • A brief discussion of your results

2. Classifier-Free Guidance 15% (GIF-4105) 10% (GIF-7105)

Understanding Guidance Scale

Classifier-Free Guidance (CFG) is a technique that improves the alignment between generated images and text prompts without requiring a separate classifier network. The guidance scale parameter controls the trade-off between image quality/diversity and prompt adherence.

The key equation is:

$\varepsilon_{\text{guided}} = \varepsilon_{\text{uncond}} + s \times (\varepsilon_{\text{cond}} - \varepsilon_{\text{uncond}})$

where $\varepsilon_{\text{cond}}$ is the model's prediction conditioned on the text prompt, $\varepsilon_{\text{uncond}}$ is the unconditional prediction (no prompt), and $s$ is the guidance scale. Higher guidance scales push the generation more strongly toward the prompt, but may produce artifacts.

Experimental Study

Using the same seed (already fixed in the starter code) and the same prompt, generate images with guidance scales: 0.0, 0.5, 1.0, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 20.0, 40.0, and 60.0. You will need to modify the variable guidance_scale in tp5.py.

For each guidance scale, document:

  • Visual quality of the generated image
  • How well the image matches the prompt
Analysis Questions (answer in your report):
  • What happens at guidance_scale = 1.0? Why?
  • At what guidance scale do you observe the best prompt adherence?
  • At what guidance scale do artifacts begin to appear?
Required Figures in Your Report:
  • Grid showing the same prompt at different guidance scales
  • A brief discussion summarizing your observations for this single prompt

3. Implementing Inpainting 30% (GIF-4105) 25% (GIF-7105)

Inpainting is the task of reconstructing a masked region in an image by generating content that is consistent with the surrounding visual context.

Extend the provided code to support image inpainting.

Background: How Inpainting Works

Here are the steps to implement inpainting:

  1. Add the input image and input mask as inputs to the function generate_image.
  2. Before the denoising loop, resize the image to width and height, convert it to a tensor in [-1, 1], and encode it with the VAE to obtain latent vectors. Then build a latent mask by downsampling the input mask to match latent dimensions. Example code:
    image = image.resize((width, height), Image.Resampling.LANCZOS)
    mask = mask.resize((width, height), Image.Resampling.LANCZOS)
    
    # Convert image to tensor [-1, 1]
    img_array = np.array(image.convert("RGB")).astype(np.float32) / 127.5 - 1.0
    img_tensor = torch.from_numpy(img_array).permute(2, 0, 1).unsqueeze(0).to(device, dtype=text_embeddings.dtype)
    
    # Encode image in latent space
    init_latents_orig = pipe.vae.encode(img_tensor).latent_dist.sample(generator=generator)
    init_latents_orig = init_latents_orig * pipe.vae.config.scaling_factor
    
    # Convert mask to tensor [0, 1] and resize to latent dimensions
    mask_array = np.array(mask.convert("L")).astype(np.float32) / 255.0
    # The mask is 1 where we regenerate (white), 0 where we keep (black)
    mask_tensor = torch.from_numpy(mask_array).unsqueeze(0).unsqueeze(0).to(device, dtype=text_embeddings.dtype)
    mask_latent = torch.nn.functional.interpolate(mask_tensor, size=(height // 8, width // 8), mode='nearest')
  3. At each denoising step, merge original image latents (with the appropriate noise level, available in t_prev = timesteps[i + 1]) in the unmasked region, for example:
    noise = torch.randn_like(init_latents_orig)
    t_prev_tensor = torch.tensor([t_prev.item()], device=device)
    noisy_orig_latents = pipe.scheduler.add_noise(init_latents_orig, noise, t_prev_tensor)
    Then combine these latents with current generated latents, similarly to compositing: latents = (1 - mask_latent) * noisy_orig_latents + mask_latent * latents.
  4. Decode final latents back to pixel space.
Validation

Test your implementation on the provided test images and masks. Your inpainting should:

  • Seamlessly blend generated content with the original image
  • Respect mask boundaries without visible seams
  • Generate content that matches the text prompt
  • Maintain consistent lighting and style with the surrounding image
Required Figures in Your Report:
  • Describe your implementation in your report

Required Discussion: Please discuss briefly the results obtained in this section.

4. Object Removal 15% (GIF-4105) 10% (GIF-7105)

Teaser: object removal (before / mask / result).

Château - before object removal
Mask - object removal
Château - after object removal

Using your inpainting implementation, perform object removal on images. The goal is to remove unwanted objects and fill the region with plausible background content.

Tasks

Use the following images from imgs.zip (with the corresponding *_mask.png mask):

  • graffiti.png: remove the graffiti
  • pisa.png: remove the Pisa tower
  • chateau_frontenac.png: remove the person in front of the Château

For each removal:

  • Document the original image, mask, prompt used, and result
  • Discuss any artifacts or imperfections
  • If the result is not satisfactory, explain why and show attempts to improve it

Mandatory graded requirement: Include at least one additional test case using your own image and your own mask.

Analysis Questions:
  • What types of backgrounds are easiest/hardest to reconstruct?
  • How does the size of the removed object affect quality?
  • What prompt strategies work best for object removal?
Required in Your Report:
  • At least 4 object removal examples with before/after/mask
  • Failed cases with analysis of what went wrong

Required Discussion: Please discuss briefly the results obtained in this section.

5. Object Replacement 15% (GIF-4105) 10% (GIF-7105)

Teaser: object replacement (before / mask / result).

Pyramids - before object replacement
Mask - object replacement
Pyramids - after object replacement

Object replacement combines masking with targeted generation: instead of filling with background, you generate a new object in place of the old one.

Tasks

Use the following images from imgs.zip (with the corresponding *_mask.png mask):

  • pyramides.webp: add snow on the pyramid
  • baie_beauport.avif: add a penguin to the beach
  • moulin.png: replace the windmill by a giant

For each replacement:

  • Document the original object, replacement prompt, and result
  • Analyze how well the new object integrates with the scene
  • Discuss lighting consistency, scale appropriateness, and edge quality

Mandatory graded requirement: Include at least one additional test case using your own image and your own mask.

Required in Your Report:
  • At least 4 object replacement examples with before/after/mask/prompt

Required Discussion: Please discuss briefly the results obtained in this section.

6. Graduate Student Additional Requirement

This section is MANDATORY for graduate students (Masters/PhD):

Show each diffusion step in your report 15%

In your report, clearly present the denoising progression across diffusion steps for at least one inpainting example.

  • Show a sequence of intermediate images spanning early, middle, and late diffusion steps
  • Briefly explain the visible changes from one step to the next
  • Comment on how the number of diffusion steps affects final quality
Required:
  • A clear visualization of the diffusion trajectory (multiple steps)
  • The final inpainting result associated with that trajectory

Required Discussion: Please discuss briefly the results obtained in this section.

Crédits supplémentaires (jusqu'à 20% bonus)

Essayez une (ou plusieurs !) de ces idées pour approfondir vos connaissances (et bonifier votre note). Pour chaque idée, vous devez présenter les résultats obtenus et une brève discussion sur ceux-ci.

  • Génération automatique de masques avec SAM (5%) : Intégrez le Segment Anything Model (SAM) ou un modèle de segmentation similaire pour générer automatiquement des masques à partir de clics utilisateur ou de descriptions textuelles. Démontrez le pipeline de bout en bout : clic sur un objet → génération du masque → inpainting.
  • Anonymisation de foule (10%) : Construisez un pipeline d'anonymisation de foule qui détecte automatiquement les visages (réutilisez votre détecteur de visages du TP3) et les remplace par des visages synthétiques via l'inpainting. Cela crée une version préservant la vie privée d'images de foule où les individus ne peuvent pas être identifiés mais l'image semble naturelle.
    Exigences :
    • Détecter automatiquement tous les visages dans une image
    • Générer des masques appropriés pour chaque visage
    • Inpainter chaque visage avec un prompt tel que « visage humain réaliste »
    • Tester sur des images avec 5+ personnes
  • Adoucissement de masque (Mask feathering) (5%) : Implémentez une interpolation à chaque étape entre l'image encodée et l'étape débruitée courante dans les zones du masque où la valeur est strictement entre 0 et 1 (donc ni 0, ni 1), puis comparez visuellement avec la version binaire standard. Assurez-vous d'interpoler les latents correctement!
  • Outpainting (5%) : Étendez l'image au-delà de ses frontières originales en construisant un masque adapté et en documentant les limites observées.
  • Inpainting vidéo (10%) : Étendez votre inpainting pour fonctionner sur des trames vidéo avec cohérence temporelle. Supprimez ou remplacez un objet sur plusieurs trames tout en maintenant des transitions fluides.
  • Vos propres idées (jusqu'à 5%) : Toute autre idée — demandez l'approbation sur PAX avant de commencer !

Extra Credit (up to 20% bonus)

Try one (or many!) of these ideas to increase your understanding on this subject (and your grade). For each idea, you must present the results obtained and a brief discussion on them.

  • Automatic Mask Generation with SAM (5%): Integrate the Segment Anything Model (SAM) or a similar segmentation model to automatically generate masks from user clicks or text descriptions. Demonstrate the end-to-end pipeline: click on object → generate mask → inpaint.
  • Crowd Anonymization (10%): Build a crowd anonymization pipeline that automatically detects faces (reuse your face detector from HW3) and replaces them with synthetic faces via inpainting. This creates a privacy-preserving version of crowd images where individuals cannot be identified but the image looks natural.
    Requirements:
    • Automatically detect all faces in an image
    • Generate appropriate masks for each face
    • Inpaint each face with a prompt like "realistic human face"
    • Test on images with 5+ people
  • Mask Feathering (5%): Implement per-step interpolation between the encoded image and the current denoised step inside mask regions where values are strictly between 0 and 1 (neither 0 nor 1), then compare visually against the standard binary-mask version.
  • Outpainting (5%): Extend images beyond their original boundaries using a suitable mask construction and document observed limitations.
  • Video Inpainting (10%): Extend your inpainting to work on video frames with temporal consistency. Remove or replace an object across multiple frames while maintaining smooth transitions.
  • Your Own Ideas (up to 5%): Any other idea—ask on PAX for approval first!

Trucs et astuces

  • Commencez par exécuter et lire le code de tp5.py et diffusion.py pour comprendre la boucle de base avant de la modifier.
  • Pour la création de masques, tout éditeur d'image (GIMP, Photoshop, Paint, autres) peut créer des masques binaires. Sauvegardez en PNG pour préserver les frontières exactes.
  • Lorsque vous testez l'inpainting, commencez par des cas simples (arrière-plans uniformes) avant de vous attaquer à des scènes complexes.
  • L'espace latent est typiquement plus petit que l'espace pixel (image 512×512 → latents 64×64). Tenez-en compte lors de la réduction de résolution des masques.
  • Pour la suppression d'objets, des prompts décrivant le contexte de l'arrière-plan fonctionnent mieux que « rien » ou « vide ».
  • Utilisez une graine fixe (seed) lors de la comparaison de différents paramètres — cela assure que les différences sont dues aux paramètres, et non au hasard.

Tips and Hints

  • Begin by running and reading the code in tp5.py and diffusion.py to understand the basic loop before modifying it.
  • For mask creation, any image editor (GIMP, Photoshop, Paint) can create binary masks. Save as PNG to preserve exact boundaries.
  • When testing inpainting, start with simple cases (uniform backgrounds) before tackling complex scenes.
  • The latent space is typically smaller than pixel space (512×512 image → 64×64 latents). Account for this when downscaling masks.
  • For object removal, prompts describing the background context work better than "nothing" or "empty".
  • Use a fixed seed when comparing different parameters—this ensures differences are due to the parameter, not randomness.

Livrables et pondération

Contenu du rapport (rapport/index.html) :

Chaque section doit inclure des figures démontrant vos résultats :

Section Contenu requis Points (GIF-4105) Points (GIF-7105)
1. Configuration et génération Info système, exemples de génération, expériences de prompts 15% 10%
2. Guidage sans classifieur Comparaisons d'échelle de guidage, analyse et discussion 15% 10%
3. Implémentation de l'inpainting Explication du code, résultats de validation 30% 25%
4. Suppression d'objets Exemples avant/après, analyse des échecs 15% 10%
5. Remplacement d'objets Exemples de remplacement 15% 10%
6. Visualisation des étapes de diffusion (cycles supérieurs) Séquence des étapes intermédiaires et analyse 15%
Qualité du rapport Clarté, qualité des figures, complétude 10% 10%
Crédits supplémentaires Description, résultats, brève discussion pour chaque Jusqu'à 20% bonus

Deliverables and Grading

Report Content (rapport/index.html):

Each section must include figures demonstrating your results:

Section Required Content Points (GIF-4105) Points (GIF-7105)
1. Setup and Generation System info, generation examples, prompt experiments 15% 10%
2. Classifier-Free Guidance Guidance scale comparisons, analysis and discussion 15% 10%
3. Inpainting Implementation Code explanation, validation results 30% 25%
4. Object Removal Before/after examples, failure analysis 15% 10%
5. Object Replacement Replacement examples 15% 10%
6. Diffusion Step Visualization (graduate only) Intermediate step sequence and analysis of its effect 15%
Report Quality Clarity, figure quality, completeness 10% 10%
Extra Credit Description, results, brief discussion for each Up to 20% bonus

Remise

Pour la remise de votre travail, créez un fichier tp5.zip qui contient :

  • Un dossier code contenant tous vos fichiers sources modifiés et scripts supplémentaires
  • Un dossier rapport contenant votre rapport HTML (rapport/index.html) et toutes les images/ressources auxquelles il fait référence. Assurez-vous de mettre les images en chemin relatif, afin que les images puissent être chargées depuis l'ordinateur du correcteur!

Finalement, veuillez téléverser votre fichier tp5.zip sur le portail des cours avant la date limite. La politique des retards mentionnée dans le plan de cours sera appliquée. Pour toutes questions concernant la procédure de remise ou le travail lui-même, posez vos questions sur PAX !

Attention !
  • La taille limite permise sur le portail des cours est de 250MB.

Handing in Procedure

For this homework, you must create a tp5.zip file containing:

  • A code folder containing all modified source files and additional scripts
  • A rapport folder containing your HTML report (rapport/index.html) and all images/assets it references. Make sure all image paths are relative, so images load correctly on the grader's machine.

Finally, you should upload this file (tp5.zip) on the "portail des cours" before the deadline. The late submission policy described in the course plan will be applied. For any question regarding the submission process or the project as such, ask your questions on PAX!

Be careful!
  • File size limit on the "portail" is 250MB.

Références

Si vous souhaitez approfondir vos connaissances sur les modèles de diffusion et l'inpainting, nous recommandons les ressources suivantes :

References

If you want to deepen your understanding of diffusion models and inpainting, we recommend the following resources:

Retour à la page web du cours.

Back to the class webpage.