Skip to content

ozikazina/bin_2024

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BIN - Využití neurovoných sítí v aproximaci (5)

Autor: Ondřej Vlček (xvlcek27)

Instalace

Závislosti projektu jsou uvedeny v souboru requirements.txt. Především vyžaduje projektu PyTorch Geometric pro grafové sítě a ModernGL pro referenční řešení. Pro řešení bez ModernGL lze sestavit statickou knihovnu ve složce clib. Ta vyžaduje CMake a knihovnu OpenCV2.

Pro vyhodnocení modelů lze využít notebook _evaluate_.ipynb. Předtrénované modely se nachází ve složce gnn/pretrained. Vyhodnocení vyžaduje sčítačky z EvoApproxLib, které jsou přiloženy ve složce components.

Pro natrénování vlastních modelů lze použít notebook gnn/_train_.ipynb. Architektury modelů jsou v souboru gnn/models.py a připravená trénovací data jsou v souboru gnn/training_data.csv. Nová data lze generovat souborem gnn/generate_training_data.py (je potřeba je spouštět ze složky gnn), který generuje CSV soubor na výstup.

Grafický filtr a cíl projektu

Zvolený grafický filtr je takzvaný stack blur, jehož matice vypadá následovně:

Filter

Daný filtr je jen první fáze separovatelného filtru, tento projekt se ale soustředí pouze na tuto první fázi. Pro jeho výpočet je potřeba sečíst 6 čísel (prostřední trojnásobek je rozdělen na jedno sečtení, dvojnásobky jsou vypočteny bitovým posunem), tudíž je potřeba 5 sčítaček. Ty mohou být zapojeny v libovolné stromové struktuře.

Cílem projektu je pomocí NSGA-2 získat Pareto frontu pro plochu na čipu a PSNR výsledného filtru. Následně je PSNR filtru aproximováno pomocí grafové neuronové sítě.

Struktura genotypu a mutace

Každý jedinec je reprezentován dvěma seznamy čísel - strukturou a sčítačkami. Prvky seznamu sčítaček jsou indexy do 12 bitových bezznámenkových komponent z EvoApproxLib.

Prvky struktury jsou po řadě dvojice vstupů do sčítaček. Jedná se o nepřímou reprezentaci, která se převádí na strom následovně:

  1. Prvotních 6 hodnot z obrázku je uloženo v seznamu uzlů
  2. Prvky dle indexů z následující dvojice jsou spojeny sčítačkou
  3. Výsledný uzel je uložen na nižší z indexů
  4. Vyšší z indexů je nahrazen posledním prvkem seznamu uzlů
  5. Seznam je zkrácen o 1
  6. Pokračuje se krokem 2 dokud není vytvořen kořen stromu

Reprezentace byla navržena tak aby byla jednoduchá pro mutaci, její změny nejsou ale zcela lokálně smysluplné - může dojít v velké změně reprezentace. Mutace je provedena nahrazením náhodného prvku libovolným číslem v rozsahu délky seznamu uzlů, kterou by měl v dané fázi konstrukci stromu. Jediná podmínka je, aby byly oba prvky ve dvojici rozdílné.

Neuronová síť

Pro grafovou neurovonou síť jsou stromy po konstrukci dále upraveny. Vnitřní uzly reprezentují sčítačky, zatímco listové uzly jsou odpovídají pixelům z obrázku.

Uzly jsou spojovány orientovaně směrem ke kořenu sčítaček a také tranzitivně - potomci jsou spojeni s rodiči rodičů a dále. Vazby jsou váhovány inverzně ke vzdálenosti uzlů v hloubce stromu (1, 0.5, 0.33, ...).

Každý uzel má 6 chybových metrik z knihovny EvoApproxLib. Listové uzly mají všechny chyby nastavené na nulu. Hrany nesou číslo buď 0 nebo 1, podle toho, jestli se jedná o levý nebo pravý operand sčítačky (nebo jeho potomků).

Neuronová síť se skládá z několika vrstev hranové konvoluce, následovanými takzavnou topologicky adaptivní grafovou konvolucí, globální pooling vrstvou a plně propojenými vrstvami. Modely používají buď ReLU nebo ELU aktivační funkce.

Příklad výsledků

Následující běhy byly získány s velikostí populace 500, 80 rodiči a 10 iteracemi NSGA-2. Referenční OpenGL řešení vypadá následovně:

Reference

Pro nejmenší model sítě po prvotním trénování (označený undertrained v předtrénovaných modelech) lze vidět vysokou nepřesnost v oblasti od 100 do 200 mikrometrů, kde validace odstraňuje přehodnocená řešení. Problém byl řešen doplněním náhodných stromů o maximální výšce (degradované na sekvenční sčítání).

Undertrained

Aproximace neuronovou sítí

Následují ukázky tří modelů neuronových sítí, největší má velikost parametrů 0.25 MB, nejmenší má 10 kB. (matplotlib opakuje barvy pro více běhů než 10, může se potom zdát že některé běhy nejsou Pareto fronty.)

Velký model

Undertrained

Střední model

Undertrained

Malý model

Undertrained

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published