← Všechny projekty
Strojové učení

Difuzní modely od základů

Difuzní model vytvořený od nuly pro pochopení toho, jak DDPM generují obrázky.

KategorieStrojové učení
Aktualizováno14. 10. 2025
Repozitářhttps://github.com/martinledl/mini_diffusion.git
Technologie
AIMachine LearningDDPMImage GenerationPyTorchNumPy

Přehled

Zajímalo mě, jak DDPM (Denoising Diffusion Probabilistic Models) generují obrázky. Abych jejich principům lépe porozuměl, vytvořil jsem malý difuzní model od základů.

Jde o učební projekt, ne o hotovou knihovnu. Repozitář obsahuje hlavní experimenty a výsledky, ale některé části kódu nejsou dokončené nebo podrobně zdokumentované.

Výsledky

Model byl nejprve natrénován na datasetu MNIST (ručně psané číslice). I přes jednoduchost datasetu posloužil jako dobrý výchozí bod.

MNIST Results

Následně jsem experimentoval s datasetem sprite obrázků, jaké znáte ze starých videoher. Dataset sice není velký, ale obrázky jsou složitější než MNIST.

Sprites Dataset

Mnoho obrázků v datasetu se opakovalo jen s malými obměnami. Model proto často generoval obrázky podobné trénovacím příkladům, což ukazuje na přeučení. Rozmanitější dataset by tento problém pravděpodobně omezil.

Sprites Results

Detaily projektu

Začal jsem jednoduchým pokusem: přidal jsem do obrázku šum a trénoval neuronovou síť, aby jej odstranila. Celému procesu DDPM jsem tehdy ještě nerozuměl a výsledky byly omezené. Pokus mi ale ukázal, co potřebuji nastudovat dál.

Finální implementace vychází z článku Denoising Diffusion Probabilistic Models.

Úskalí

Jednou z hlavních výzev bylo pochopení matematických základů difuzních modelů. Pojmy dopředného a zpětného difuzního procesu nebyly těžké, ale bez dalších klíčových konceptů (jako přidávání šumu během denoizingu) model nebyl schopen generovat dostatečně kvalitní obrázky.

Harmonogram šumu, rychlost učení a architektura ovlivňovaly výsledné obrázky. Testoval jsem proto několik nastavení. Některé modely generovaly rozmazané výsledky nebo stále stejný obrázek, což ukazovalo na mode collapse.

Trénování také vyžadovalo více výpočetního výkonu, než jsem měl k dispozici lokálně. Zmenšil jsem architekturu i datasety, upravil trénink a pro některé běhy si pronajal cloudové GPU.

Použité technologie

  • Python
  • PyTorch
  • NumPy
  • Jupyter Notebooks
  • HuggingFace (datasety)