Skip to content
Snippets Groups Projects
Commit 227af5aa authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Final edit.

parent a2457bf4
No related branches found
No related tags found
No related merge requests found
......@@ -6,7 +6,7 @@ Zde se již dostáváme k samotným výsledkům, kterých jsme dosáhli použit
V grafu na Obrázku \ref{fig:lloyd_max_psnr} můžeme vidět průběh trénování optimálního slovníku $L=256$. Průběh je ilustrován měnící se hodnotou PSNR. Tato veličina je již na počátku poměrně dobrá, čemuž vděčíme naší úpravě Lloyd--Max algoritmu. Celkově PSNR roste nejvíce ze začátku \linebreak a s rostoucími iteracemi je zlepšení méně významné. Podobně to platí pro pokles chyby MSE.
\begin{figure}[ht!]
\begin{figure}%[ht!]
\centering
\pgfplotsset{scaled y ticks=false}
\begin{tikzpicture}
......@@ -25,7 +25,7 @@ V grafu na Obrázku \ref{fig:lloyd_max_psnr} můžeme vidět průběh trénován
Výsledky skalární kvantizace bez použití Huffmanova kódování pro stejný snímek, jako je na Obrázku \ref{fig:drosohpila_ch0} najdeme v Tabulce \ref{tab:drosophila_sq_compression}. Můžeme potvrdit, že s větším slovníkem klesá vzniklá chyba a zároveň roste hodnota BPP. Při výpočtu obou hodnot $\text{CR}_{sq}$ i BPP je do velikosti výsledného souboru započítávána velikost slovníku. Toto je důvodem, proč není hodnota BPP celočíselná a odchyluje se od $n$. Větší slovníky pak zabírají více místa, a proto u nich pozorujeme větší odchylku od $n$. Vliv Huffmanova kódování na výsledný kompresní poměr bude uveden později. Je ale jisté, že s jeho použitím dosáhneme pouze zlepšení.
\begin{table}[ht!]
\begin{table}%[ht!]
\centering
\begin{tabular}{r | r | r | r | r | r}
\toprule
......@@ -63,7 +63,7 @@ U prvních dvou z těchto obrázků ihned vidíme výraznou chybu, způsobenou m
Dále bychom se více podívali na samotnou kvantizační chybu. Vybrané statistické charakteristiky této chyby pro jednotlivé velikosti slovníku můžeme najít v Tabulce \ref{tab:sq_error_stats}. Z této tabulky vidíme, že rozdělení chyb u všech slovníku je pozitivně zešikmené a zároveň velmi špičaté. Normálnímu rozdělení se v rámci špičatosti blíží pouze poslední slovník $L = 256$. Dle vývoje mediánu můžeme pozorovat, jak se celá distribuce postupně posouvá na pravou stranu blíže k nule. Samotné zužování histogramu a přibližování se tak k Diracovu impulsu, lze dobře vyčíst ze snižující se hodnoty směrodatné odchylky. V naprosto ideálním případě by distribuce chyby vypadalo jako Diracův impuls. Všechny hodnoty chyby by byly nulové. Toto zužování histogramu chyby můžeme graficky pozorovat na Obrázku \ref{fig:sq_error_dist}.
Následně na Obrázku \ref{fig:sq_value_dist} vidíme distribuci hodnot pixelů po provedení komprese. Tyto histogramy můžeme porovnat s histogramy na Obrázku \ref{fig:drosohpila_ch0_hist}. Distribuce hodnot pixelů po kompresi by se měla co nejvíce blížit originálnímu rozdělení hodnot jasu, toto při porovnání grafů můžeme potvrdit.
Následně na Obrázku \ref{fig:sq_value_dist} vidíme distribuci hodnot pixelů po provedení komprese. Tyto histogramy můžeme porovnat s histogramy na Obrázku~\ref{fig:drosohpila_ch0_hist}. Distribuce hodnot pixelů po kompresi by se měla co nejvíce blížit originálnímu rozdělení hodnot jasu, toto při porovnání grafů můžeme potvrdit.
\begin{table}[ht!]
\centering
......@@ -82,7 +82,7 @@ Následně na Obrázku \ref{fig:sq_value_dist} vidíme distribuci hodnot pixelů
\caption{Výběrové charakteristiky hodnoty chyby skalární kvantizace}
\label{tab:sq_error_stats}
\end{table}
\newpage
Co se týče normality kvantizační chyby, tak ta může být dle vybraných statistických charakteristik v Tabulce \ref{tab:sq_error_stats} zavrhnuta. Hlavním problémem je velká špičatost. Toto tvrzení si potvrdíme provedením Kolmogorovova--Smirnovova testu. Shapiro--Wilkův test nemohl byt použit, neboť velikost výběrů přesahuje limit 5000 vzorků. Nulová hypotéza $H_0$ říká, že data pocházejí z normálního rozdělení. Alternativní hypotéza je rovna negaci nulové hypotézy, $H_A = \neg H_0$. $p$-hodnota pro daný test vyšla $\ll 0,0001$. Na hladině významnosti 5 \% tedy zamítáme nulovou hypotézu ve prospěch alternativní hypotézy a potvrzujeme, že rozdělení kvantizační chyby není normálním rozdělením.
Do této doby jsme se bavili pouze o kompresi jednoho vybraného řezu, z kanálu 0 datasetu embrya octomilky. V dalším grafu této sekce se podíváme a probereme výsledky, kterých jsme dosáhli kompresí všech rovin obou datasetů. V grafech na Obrázku \ref {fig:sq_compression_dist} můžeme vidět vývoj průměrné absolutní chyby pixelu MAE vzhledem k rovině datasetu. MAE je vypočítáno podobně jako MSE, akorát místo sumy druhé mocniny rozdílu je sčítána absolutní hodnota rozdílu.
......@@ -109,9 +109,11 @@ Zároveň na těchto grafech porovnáváme tři různé typy slovníků. V prvn
Zbylé dva grafy reprezentují výsledky dosáhnuté pomocí jediného slovníku. Tento slovník byl využit pro kompresi všech rovin v datasetu. Ihned si všimneme, že tyto výsledky nejsou pro žádnou velikost slovníku horší, než tomu bylo v prvním grafu. Je tomu právě naopak, křivky vypadají stabilněji. Například v Obrázku \ref{fig:sq_error_trend_ch1} vidíme, že nedochází ke vzniku velké chyby na několika za sebou jdoucích rovinách. Velmi dobré výsledky slovníku vytvořeného z prostřední roviny potvrzují naši hypotézu, že uprostřed datasetu se nachází řez, obsahující snímaný vzorek. Díky přítomnosti vzorku slovník obsahuje správné kvantizační hodnoty, hodící se k rekonstrukci obrazu. Toto, avšak nemusí být vždy pravda, a proto je jistější využít slovník globální, který je vytvořen ze všech rovin datasetu. Jedinou nevýhodou globálního slovníku, oproti slovníku \linebreak z prostřední roviny je délka učení. V přílohách na Obrázku \ref{fig:sq_error_trend_ch0_detail} najdeme stejný graf hodnoty MAE podle rovin, avšak pouze pro 4 nejlepší slovníky. Na těchto přiložených grafech můžeme detailněji pozorovat výsledky lepších slovníků.
\image{sq_error_trend_ch0.pdf}{Průměrná absolutní chyba skalární kvantizace podle rovin (Kanál 0)}{fig:sq_error_trend}{1.0}
Globální slovník s sebou přináší tři velké výhody. Zaprvé je naučen pouze jednou a uložen do \emph{cache} souboru. Tato operace je sice náročnější, ale jelikož počítáme s využitím na superpočítačích tak pro nás to není problém. Zadruhé rychlost komprese je mnohem vyšší. Slovník se načte z \emph{cache} souboru a trénovací krok kompresoru se může přeskočit. Čas dekomprese je taky kratší, neboť se slovník načítá z komprimovaného souboru pouze jednou. Třetí výhodou je menší komprimovaný soubor a s tím i lepší kompresní poměr, protože se v souboru se nachází pouze jeden slovník.
\image{sq_error_trend_ch0.pdf}{Průměrná absolutní chyba skalární kvantizace podle rovin (Kanál 0)}{fig:sq_error_trend}{1.0}
Dosud jsme ve výsledcích pracovali s kompresním poměrem vypočteným podle Rovnice \ref{eq:sq_cr}. Avšak v sekci \ref{sec:compression_program} jsme uvedli využití Huffmanova kódování. Jak toto kódování ovlivnilo výsledný kompresní poměr je uvedeno v Tabulce \ref{tab:sq_cr_huffman}. V této tabulce, ve sloupci CR, uvádíme kompresní poměr s Huffmanovým kódováním a $\Delta \text{CR}$ je zlepšení oproti kompresi bez tohoto kódování. Stejné platí i pro sloupec BPP. Díky tomuto přidanému kroku v rámci komprese jsme schopni ušetřit až 2 bity na pixel, jak je tomu u slovníku s $L = 256$. Celkově je kompresní poměr po využití Huffmanova kódování lepší. Pravděpodobnosti jednotlivých symbolů, pomocí kterých je tvořen Huffmanův strom můžeme, vidět v grafu na Obrázku \ref{fig:sq_huffman_prob}. V tomto grafu má symbol 0 největší pravděpodobnost, takže mu bude přiřazen nejkratší binární kód. Díky této informaci o pravděpodobnosti symbolů taky víme, jak využívané jsou jednotlivé kvantizační hodnoty ve slovníku.
......
......@@ -89,7 +89,7 @@ Porovnáme-li statistické výběrové charakteristiky vektorové kvantizace v T
\label{tab:vq_error_stats}
\end{table}
Dále si podobně jako v předchozí kapitole probereme průměrné absolutní chyby v rámci všech rovin datasetu. Také srovnáme výsledky individuálního slovníku se slovníkem globálním. Budeme se zabývat kvantizačním vektorem s rozměrem $3 \times 3$, který lépe využívá vlastností obrazů. Grafy MAE pro kanál 0 nalezneme na Obrázku \ref{fig:vq_error_trend} a pro kanál 1 v přílohách na Obrázku \ref{fig:vq_error_trend_ch1}. Prvního, čeho si všimneme oproti skalární kvantizaci je četný výkyv chyby pro nejmenší slovník. Znovu proto potvrzujeme, že 4 různé vektory nestačí na zakódování obrazu, výsledný obraz je nepoužitelný. Hlavní problém je ve tvorbě slovníku, kdy se někdy podaří vybrat 4 poměrně dobře reprezentující vektory, avšak v jiných případech budou převládat vektory, které špatně reprezentují komprimovaný obraz. Tyto výkyvy jsou ještě výraznější na grafu v Obrázku \ref{fig:vq_error_trend_ch1}. Obecně platí, že čím je slovník větší, tím je průměrná hodnota chyby podle rovin stabilnější.
Dále si podobně jako v předchozí kapitole probereme průměrné absolutní chyby v rámci všech rovin datasetu. Také srovnáme výsledky individuálního slovníku se slovníkem globálním. Budeme se zabývat kvantizačním vektorem s rozměrem $3 \times 3$, který lépe využívá vlastností obrazů. Grafy MAE pro kanál 0 nalezneme na Obrázku \ref{fig:vq_error_trend} a pro kanál 1 v přílohách na Obrázku \ref{fig:vq_error_trend_ch1}. Prvního, čeho si všimneme oproti skalární kvantizaci je četný výkyv chyby pro nejmenší slovník. Znovu proto potvrzujeme, že 4 různé vektory nestačí na zakódování obrazu, výsledný obraz je nepoužitelný. Hlavní problém je ve tvorbě slovníku, kdy se někdy podaří vybrat \linebreak 4 poměrně dobře reprezentující vektory, avšak v jiných případech budou převládat vektory, které špatně reprezentují komprimovaný obraz. Tyto výkyvy jsou ještě výraznější na grafu \linebreak v Obrázku~\ref{fig:vq_error_trend_ch1}. Obecně platí, že čím je slovník větší, tím je průměrná hodnota chyby podle rovin stabilnější.
Při porovnání si všimneme, že ve všech třech grafech je průměrná chyba nejlepšího slovníku vždy větší, než tomu bylo u skalární kvantizace. Pozitivní je, že globální slovník se znovu ukazuje jako velmi silná technika komprese. Výsledky tohoto typu slovníku jsou nejstabilnější a také nejlepší. Navíc v kanálu 1 je chyba ještě menší. Hodnoty BPP uvedeny v těchto grafech jsou vypočteny bez použití Huffmanova kódování. Dále u prvního grafu jsou BPP větší, protože \linebreak v komprimovaném souboru je uloženo 946 slovníků, oproti jednomu slovníku ve dvou následujících grafech.
......@@ -115,8 +115,8 @@ Samozřejmě i ve vektorové kvantizaci jsme využili Huffmanovo kódování, kt
\label{tab:vq_cr_huffman}
\end{table}
Na konci této sekce se ještě podíváme na propustnosti, rychlosti obou implementovaných metod, při použití globálního slovníku. Globální slovník jsme využili, protože jsme chtěli porovnat pouze časy komprese/dekomprese a nebrat v potaz čas potřebný pro naučení slovníku. Čas učení slovníku je výrazně delší u vektorové kvantizace. Výsledky byly změřeny na \linebreak počítači s procesor Intel Core i7-8850H, komprese i dekomprese byla prováděna sériově. \linebreak Naměřené hodnoty jsou uvedeny v Tabulce \ref{tab:sq_vq_speed}. Dle naměřených hodnot zjišťujeme, že pro obě metody propustnost kompresoru klesá spolu s rostoucím slovníkem. Toto je logické, neboť kompresor musí vyhledat vhodnou slovníkovou hodnotu z většího slovníku, kterou nahradí originální pixel nebo blok pixelů. U vektorové kvantizace je toto zpomalení více dramatické a s každým dalším slovníkem je propustnost dvojnásobně menší. Toto je způsobeno větším počtem porovnání, kdy musí být pro každý vektor porovnáno $N$ hodnot. Oproti tomu v dekompresi je vektorová kvantizace mnohem výkonnější a rychlost klesne až u větších slovníků. Pomalejší rychlost skalární kvantizace je daná metodou nahrazování pixelů postupně po jednom.
Nutno podotknout, že komprese i dekomprese jsou v aktuální době implementovány sériově a metody jsou poměrně snadno paralelizovatelné. Oba implementované algoritmy pracují při kompresi a dekompresi pouze s daty aktuální roviny a s konstantním slovníkem, který jim byl předán. Tyto výsledky byly získány zpracováním 250 rovin z datasetu. Můžeme si tedy představit, že při kompresi bude každé vlákno komprimovat každou rovinu zvlášť. Stejné platí pro dekompresi.
Na konci této sekce se ještě podíváme na propustnosti, rychlosti obou implementovaných metod, při použití globálního slovníku. Globální slovník jsme využili, protože jsme chtěli porovnat pouze časy komprese/dekomprese a nebrat v potaz čas potřebný pro naučení slovníku. Čas učení slovníku je výrazně delší u vektorové kvantizace. Výsledky byly změřeny na \linebreak počítači s procesor Intel Core i7-8850H, komprese i dekomprese byla prováděna sériově. \linebreak Naměřené hodnoty jsou uvedeny v Tabulce \ref{tab:sq_vq_speed}. Pomocí SQ značíme skalární kvantizaci a pomocí VQ vektorovou kvantizaci. Dle naměřených hodnot zjišťujeme, že pro obě metody propustnost kompresoru klesá spolu s rostoucím slovníkem. Toto je logické, neboť kompresor musí vyhledat vhodnou slovníkovou hodnotu z většího slovníku, kterou nahradí originální pixel nebo blok pixelů. U vektorové kvantizace je toto zpomalení více dramatické a s každým dalším slovníkem je propustnost dvojnásobně menší. Toto je způsobeno větším počtem porovnání, kdy musí být pro každý vektor porovnáno $N$ hodnot. Oproti tomu v dekompresi je vektorová kvantizace mnohem výkonnější a rychlost klesne až u větších slovníků. Pomalejší rychlost skalární kvantizace je daná metodou nahrazování pixelů postupně po jednom.
\begin{table}[ht!]
\centering
......@@ -144,7 +144,6 @@ Nutno podotknout, že komprese i dekomprese jsou v aktuální době implementov
\end{table}
Navíc je pro nás důležitější rychlost dekomprese, neboť počítáme s tím, že komprese bude prováděna na výkonném serveru nebo superpočítači. Zde mohou být obrazy kódovány za běhu, nebo už mohou být uloženy ve speciálním formátu QCMP. Komprimovaná data budou přenášena \linebreak k uživateli, na jehož počítači bude docházet k dekompresi, která je již nenáročná a rychlá.
Nutno podotknout, že komprese i dekomprese jsou v aktuální době implementovány sériově \linebreak a metody jsou poměrně snadno paralelizovatelné. Oba implementované algoritmy pracují při kompresi a dekompresi pouze s daty aktuální roviny a s konstantním slovníkem, který jim byl předán. Tyto výsledky byly získány zpracováním 250 rovin z datasetu. Můžeme si tedy představit, že při kompresi bude každé vlákno komprimovat každou rovinu zvlášť. Stejné platí pro dekompresi. Navíc je pro nás důležitější rychlost dekomprese, neboť počítáme s tím, že komprese bude prováděna na výkonném serveru nebo superpočítači. Zde mohou být obrazy kódovány za běhu, nebo už mohou být uloženy ve speciálním formátu QCMP. Komprimovaná data budou přenášena \linebreak k uživateli, na jehož počítači bude docházet k dekompresi, která je již nenáročná a rychlá.
\FloatBarrier
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment