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.

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.
![]()
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.
![]()
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)