Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Navigeer naar deze notebook op GitHub: book/ml_principles/labs/imggen_butterfly

Via bovenstaande link kan je deze notebook openen in Google Colaboratory. In die omgeving kunnen we gebruik maken van gratis quota voor GPUs (en TPUs). GPU acceleratie is hier sterk aanbevolen voor zowel model training als model inference.

Data

In dit labo trainen we een (mini) diffusionmodel met een dataset van foto’s van vlinders die afkomstig is van het Amerikaanse Smithsonian Institute.

De dataset is beschikbaar op Hugging Face en kan van daar geladen worden via het datasets package.

Data preprocessing

We transformeren de afbeeldingen naar een uniform formaat van 32x32 pixels, voeren data augmentatie uit (horizontaal flippen) en normaliseren de pixelwaarden naar het bereik (-1, 1).

Visualisatie functie

Een helper functie om batches van afbeeldingen te visualiseren als een grid.

Voorbeeld afbeeldingen

We visualiseren enkele voorbeelden uit de training dataset.

Noise scheduler

De DDPM (Denoising Diffusion Probabilistic Models) scheduler bepaalt hoe ruis gradueel wordt toegevoegd tijdens training en verwijderd tijdens generatie. We gebruiken 1000 timesteps.

Noise schedule visualisatie

Deze grafiek toont hoe het signaal (originele afbeelding) en de ruis zich verhouden over de verschillende timesteps. Aan het einde is de afbeelding bijna volledig ruis.

Alternatieve noise schedules

Deze cel toont andere mogelijke configuraties voor de noise scheduler.

Ruis toevoegen aan afbeeldingen

We demonstreren het forward diffusion proces: afbeeldingen krijgen steeds meer ruis naarmate de timestep hoger wordt.

UNet model

We definiëren een UNet architectuur met attention layers. Dit model leert om de toegevoegde ruis te voorspellen en te verwijderen.

Model test

We testen of het model de juiste output shape produceert voordat we beginnen met trainen.

Training

Het model wordt getraind om de toegevoegde ruis te voorspellen. Voor elke batch:

  1. Voeg willekeurige ruis toe aan schone afbeeldingen

  2. Laat het model de ruis voorspellen

  3. Bereken het verschil (MSE loss) tussen echte en voorspelde ruis

  4. Update de model parameters

Training verloop

Visualisatie van de loss over tijd. Een dalende trend toont dat het model leert.

Generatie

Nu gebruiken we het getrainde model om nieuwe vlinder afbeeldingen te genereren. We starten met pure ruis en verwijderen stap voor stap de ruis volgens het reverse diffusion proces.