
% jak se dana problematika resil, proc UNET jako reseni, jaky jsouhlavni duvodu ve zpracovani, jakprobihalo zpracovnai dat, popsat model Unetu

% problemy prace: AUTORSTVI OBRAZKU = neuron aj.,
% doreseni bibtexu
% kapitla 3
% a zaver


\chapter{Výsledky a jejich vyhodnocení}

Následující kapitola \zaverecnepraci práce se zabývá   procesem trénování na vstupních datech a generováním výsledné predikce (cílové vícetřídé segmentace obrazu). Výslednou predikci neuronové konvoluční sítě dále vyhodnocuje podle doporučených  metrik a prezentuje dosažené výsledky.

\section{Metriky pro hodnocení segmentace}
Výsledek segmentace je třeba nějakým způsobem ohodnotit resp. stanovit přesnost mezi vysegmentovaným objektem a tím referenčním. Vyhodnocení práce následuje metriky, které byly též použity při hodnocení výsledků soutěže nad daným datasetem. Metriky berou v úvahu všechny segmentované třídy a stanovují výsledný koeficient pro každou třídu zvlášť tak, aby byla jasná přesnost každé z nich.


\subsection{Dice koeficient}
Jedná se o statistickou metodu, která slouží ke stanovení podobnosti dvojice vzorků. Rovnice pro výpočet koeficientu je definována jako \ref{mat:dice_koef}:

\begin{equation}\label{mat:dice_koef}
DSC = \dfrac{2 \cdot |X \cap Y|}{|X|+|Y|}
\end{equation}

Množiny $Y$ a $X$ reprezentují zkoumané vzorky resp. predikovanou a referenční segmentaci mozku.


\subsection{Hausdorffova vzdálenost}
Metrika určuje maximální vzdálenost bodu testovaného vzorku \textbf{A} k nejbližšímu bodu vzorku \textbf{B}. Ke stanovení koeficientu využívá dvojici funkcí tj. nejprve funkci pro kalkulaci vnitřních vzdáleností a poté operaci k vyhodnocení vypočtených hodnot tj. \texttt{max()}. Obecně by se hausdorffova vzdálenost dala popsat následujícím vztahem: 

\begin{equation}\label{mat:hausdorff_koef}
H(A,B) = max\{h(A,B), h(B,A)\}
\end{equation}

kde $h(A,B)$ a $h(B,A)$ reprezentují vnitřní funkci pro určení vzdálenosti bodů. Zároveň platí, že ve většině případů $h(A,B) \neq h(B,A)$.\cite{hausdorf_distance}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage % ================== nova stránka ==============================================%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{Snímková podobnost}
Poslední z metrik je snímková podobnost, která je počítána na základě  vztahu:
\begin{equation}\label{mat:volumetric_koef}
VS = 1  - \dfrac{|V_{a} - V_{b}|}{V_{a} + V_{b}}
\end{equation}

podobně jako u předešlých metrik množina $V_{a}$ symbolizuje množinu referenční segmentace  a dále $V_{b}$ hodnoty predikce. 

\section{Náročnost výpočtu a parametry trénování}
%Srovnani multiclass s binarni klasifikaci


Trénování neuronové sítě probíhalo na serveru \textit{gravy}. K dispozici byly grafické karty NVIDIA Titan XP a NVIDIA GeForce GTX 1080 Ti. K trénování sítě byly využívány obě tyto grafické karty.

Trénování neuronové konvoluční sítě pomocí fragmentů zabralo 61 hodin. Výpočet nad celými skeny trval 28 hodin. Znatelný rozdíl v době trénování byl způsoben především kvůli překryvu, který v případě trénování sítě po menších částech činil 50\%. Velikost jednoho fragmentu tedy činil \patchsize. Vlivem překryvu vzniklo na každých 5 fragmentů 4 překryvné. Jediný 3D sken se poté skládal z 81 částí. Dávkování 3D skenu bylo prováděno sekvenčně a každá dávka fragmentů byla pří trénování po každé epoše zamíchána.

Datová sada byla zvětšena pomocí augmentačních metod otočení a přiblížení celkem 10x. Metoda augmentace otočení byla aplikována v následujících variantách  7°, -7°, 12°, -12°, 17°, -17°, kde záporné/kladné hodnoty udávají směr otočení. Dále bylo aplikováno přiblížení snímků resp. zvětšení a to na hladiny: 105\%, 110\%, 117\% a 121\% původní velikosti 3D skenu.

Optimalizace byla prováděna pomocí metody \texttt{Adam} s učícím koeficientem \texttt{1e-5} a v obou případech trénování byla použita metrika přesnosti \texttt{accuracy}.

\section{Průběh trénování neuronové sítě}
Jak již bylo nastíněno výše, byly vyzkoušeny dvě možnosti provedení celé vícetřídé segmentace, které se liší způsobem přístupu k datům zvoleného datasetu, což se poté promítá i v dalších částech zpracování jako např. parametry modelu nebo zacházení z daty po provedení trénování a stanovení výsledné predikce neuronovou sítí. Cílem tedy je provést vícetřídou segmentaci a ověřit, který z přístupů může produkovat lepší výsledky.



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage % ================== nova stránka ==============================================%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{Trénování pomocí celých 3D skenů}
Následující část demonstruje trénování nad celými 3D skeny tak, jak byly dodávány v datasetu. Metriky \texttt{acc} a  \texttt{loss} udávají hodnoty nad trénovací množinou a \texttt{val\_acc} a  \texttt{val\_loss}\footnote{V našem případě nejdůležitější metrika.} nad validační.

Vztah růstu přesnosti a vývoj chyby v průběhu jednotlivých epoch  lze pozorovat na obr. \ref{fig:prubeh_trenovani_cely_sken}. 

\begin{figure}[h!]
	\centering
	\includegraphics[width=1.0\linewidth]{obrazky/prubeh_trenovani_cely_sken}
	\caption{Průběh trénování po celých skenech.}
	\label{fig:prubeh_trenovani_cely_sken}
\end{figure}

Z grafu lze pozorovat, že trénování sítě skončilo cca po 145 epochách. Konec trénování způsobil především fakt, že se již poslední epochy síť nezlepšovala a začalo tzv. přetrénování. V této chvíli byl tedy výpočet ukončen. Tuto skutečnost lze pozorovat i přímo z grafu trénování, kde začíná být znatelný rozdíl v křivce \texttt{loss} a \texttt{val\_loss}, kdy \texttt{loss} jde dolů, což znamená, že síť se zlepšovala jen na trénovacích datech ale predikce byla buď horší nebo stagnovala.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage % ================== nova stránka ==============================================%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



\subsection{Trénování pomocí fragmentů}
Situace v případe trénování pomocí fragmentů je dost odlišná. Vztah růstu přesnosti a vývoj chyby v průběhu jednotlivých epoch při trénování pomocí fragmentů vyobrazuje graf \ref{fig:prubeh_trenovani_graf}. 

\begin{figure}[h!]
	\centering
	\includegraphics[width=1.0\linewidth]{obrazky/prubeh_trenovani_fragmenty}
	\caption{Průběh trénování.}
	\label{fig:prubeh_trenovani_graf}
\end{figure}

Z průběhu ja znatelná pozvolnější konvergence. Celé trénování proběhlo na 265 epoch, přičemž jedná epocha trvala cca 14 minut. Po celém průběhu se síť zlepšovala a dosáhla výsledné přesnosti cca 0.82 v případě metriky \texttt{accuracy}. Proces trénování byl ukončen po příliš  malém přírůstku delta parametru resp. míry zlepšení mezi dvěma cykly trénování.



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage % ================== nova stránka ==============================================%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%






% dsc,       '(higher is better, max=1)')
% h95, 'mm',  '(lower is better, min=0)')
% vs,       '(higher is better, max=1)')



\section{Výsledky segmentace}
Po provedení   predikce byly na výsledné skeny masek aplikovány metriky dice-koeficient, hausdorffova vzdálenost a snímková podobnost. U výsledných masek bylo ve všech případech ignorováno pozadí a metriky vyhodnocovaly třídy 1-8 viz. tabulka \ref{tab:multiclasses_labels}. Stejně tak jako pozadí (třída 0) byla  při měření zanedbána i třída 9 resp. infarkt. Důvodem, proč byla tato třída vyloučena ze soutěže je ten, že v datasetu nebyla zastoupena v dostatečné míře. Jelikož bylo pozadí při vyhodnocení zanedbáno, tak i z výsledné predikce bylo   zcela odstraněno post-zpracováním predikovaných masek.

Dice koeficient nabývá hodnot od 0-1 přičemž nejlepší výsledek je 1. Stejně tak v případe snímkové podobnosti. Odlišný interval hodnot má až metrika hausdorff,  u které platí, že čím měně, tím lépe. Nejlepší možnou hodnotou v případě této metriky je tedy 0.

%Po rekonstrukci dat z predikovaných masek je možné vypočítat přesnost jednotlivých tříd. K výpočtu přesnosti je využit \textit{dice koeficient}, který je vhodný ke zjišťování podobností dvojice vzorků. Výsledný vysegmentovaný obrázek mozku se skládá ze 48 řezů , kde každý řez obsahuje 0-9 tříd. 


\subsection{Přesnost trénování po celých 3D skenech}

Dle výsledků tabulky \ref{tab:vysledek_fit} je zřejmé, že některé třídy mají   nízkou přesnost. Třída  \zk{zkCSF} (\zkratkatext{zkCSF}) a  \zk{zkBG} (\zkratkatext{zkBG}) vykazují velmi nízké hodnoty. 

\begin{table}[h]
	\centering
	
	\input{mrbrains_eval_fit}
	
	\caption{Výsledky trénování pomocí celých skenů.}
	\label{tab:vysledek_fit}
\end{table}

Třídu \zk{zkBS} (\zkratkatext{zkBS}) se vysegmentovat nepodařilo, tudíž \zk{zkDSC} (\zkratkatext{zkDSC}) a \zk{zkVS} (\zkratkatext{zkVS}) jsou  nulové, podobně pak i metrika \zk{zkH} (\zkratkatext{zkH}), která je pomyslně rovna nekonečnu, čímž potvrzuje výsledek předchozí dvojice metrik.

Nejlepších výsledků  pak segmentace dosahuje u tříd \zk{zkWM} (\zkratkatext{zkWM}) a \zk{zkCGM} (\zkratkatext{zkCGM}).
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage % ================== nova stránka ==============================================%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%




\subsection{Přesnost trénování po fragmentech}
Následující případ opět vykazuje zcela odlišný výsledek v porovnání s tím předešlým. Z hodnot v tabulce \ref{tab:vysledek_fragment} je patrné, že nejenže došlo k vysegmentování všech tříd, ale některé se podařilo vysegmentovat   s relativně vysokou přesností. Nejméně se pak dařilo vysegmentovat třídu \zk{zkWML} (\zkratkatext{zkWML}) a \zk{zkBG} (\zkratkatext{zkBG}).



\begin{table}[h]
	\centering
	
	\input{mrbrains_eval}

	
	\caption{Výsledky trénování pomocí fragmentů.}
	\label{tab:vysledek_fragment}
\end{table}



Naopak \zk{zkBS} (\zkratkatext{zkBS}),  \zk{zkV} (\zkratkatext{zkV}) a  \zk{zkC} (\zkratkatext{zkC}) dosahují   nejvyšších přesností. V zásadě by se dle výsledku trénování pomocí fragmentů   dalo říci, že přesnost tříd je přímo závislá na procentuálním zastoupení dané třídy v mozku. Pokud tedy má třída vyšší zastoupení v mozku, je to dobrý předpoklad pro úspěšnější predikci, což tedy i potvrzuje   hlavní důvod, proč byla třída   infarktu vynechána. 



\begin{figure}[h!]
	\centering

	\includegraphics[width=0.5\linewidth]{obrazky/mozek_2d_rez}
	\caption{Řez výsledné vícetřídé segmentace. }
	\label{fig:mozek_2d_rez}
\end{figure}
Na obr. \ref{fig:mozek_2d_rez} se nachází 26 řez transverzální roviny z predikovaného 3D skenu. Kromě segmentovaných tříd jsou v obrázku zjevné i nežádoucí artefakty, které vznikly během překryvu při dekonvoluci.



\subsection{Výsledná 3D segmentace}
Každá třída segmentace je reprezentována jinou intenzitou stupně šedi. Referenční masky nabývají intenzity dle třídy tj. 0-9, což je pro vizualizace nedostačující a také proto  byla  pro tyto účely zvýšena intenzita jednotlivých úrovní tříd tak, aby byl výsledek predikce viditelný.

Na obrázku \ref{fig:3d_segmentace_cely_mozek} lze vidět výslednou segmentaci celého mozku, který je poskládán z jednotlivých tříd.%\footnote{Vykresleno pomocí VK volume redering v programu Aliza.}


\begin{figure}[h!]
	\centering
	%\includegraphics[width=0.8\linewidth]{obrazky/3d_segmentace_3_tridy_vectorized}
	\includegraphics[width=0.9\linewidth]{obrazky/3d_segmentace_cely_mozek}
	\caption{Výsledná 3D segmentace celého mozku. }
	\label{fig:3d_segmentace_cely_mozek}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage % ================== nova stránka ==============================================%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Segmentaci několika tříd poté demonstruje obr. \ref{fig:3d_segmentace_3_tridy}. Segmentované třídy jsou zvýrazněny barevně, kdy třída \zk{zkC} (\zkratkatext{zkC}) je vyznačen oranžovou barvou, dále třída  \zk{zkV} (\zkratkatext{zkV}), která je zvýrazněna červenou barvou a žlutou barvou je zvýrazněn \zk{zkBS} (\zkratkatext{zkBS}).


\begin{figure}[h!]
	\centering
	%\includegraphics[width=0.8\linewidth]{obrazky/3d_segmentace_3_tridy_vectorized}
	\includegraphics[width=0.8\linewidth]{obrazky/3d_segmentace_3_tridy}
	\caption{Výsledná 3D segmentace mozku do více tříd. }
	\label{fig:3d_segmentace_3_tridy}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage % ================== nova stránka ==============================================%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 
\section{Vyhodnocení výsledků a možné pokračování práce}




Z naměřených hodnot a provedených výpočtů jasně vyplynulo, že metodou rozložení mozku na menší částí lze provést úspěšnější vícetřídou segmentaci, nežli v případě trénování po celých 3D skenech. Daří se tak díky menším částem mozku lepé reflektovat změny, aby segmentace dosahovala ve výsledku lepší predikce.




%Diplomová práce přináší  řešení segmentace do více tříd díky rozložení na menší podčásti. Dle provedené segmentace produkuje jasně lepší výsledky trénování pomocí menší velikosti modelu a zpracováním dat po menších částech.

Díky této metodě se dařilo na základě malých fragmentů lépe upravovat váhy modelu, aby byla celá vícetřídá segmentace přesnější. Z toho důvodu by bylo velice zajímavé tento přístup dále rozvinout a pokusit se dále optimalizovat pro vícetřídou segmentaci. Jednou ze zajímavých možností jak pokračovat by byl   méně deterministický způsob dávkování trénovacích dat do modelu např. náhodným volením dávek, což by více přispělo ke generalizaci sítě. 
Dalším možným způsobem by mohlo být trénování s menší velikostí fragmentů a porovnat poté jejich výsledek navzájem např. o velikosti \texttt{(8,12,12)} a \texttt{(16,16,16)}. Model v takovém případě může být daleko menší a vzniká velké množství dalších množných kombinací, jak segmentaci provést.

Mezi další možnosti, jak   se lze pokusit výsledky vícetřídé segmentace zlepšit, je použití jiných architektur konvolučních neuronových sítí, jako je například již zmiňovaný ResNet, VGG v kapitole \ref{chapter:2:hybridni_metody} apod. Popřípadě vyzkoušení tří-kanálové extrakce příznaků pro každý typ skenu pomocí samostatného enkodéru v kombinaci s jedním dekodérem. Lze také  vyzkoušet větší adaptaci  zvoleného modelu přesně na daný dataset či jiné modifikace.

%%%% tohle doladit
Díky fragmentaci 3D skenu je možné pracovat ještě s daleko většími obrázky, jelikož se pak sken může díky fragmentům rozdělit na menší části a ty zpracovávat samostatně. Z toho také plyne další možnost, jak dosáhnout lepších výsledků. V případech, kdy je obrázek malý pro vícetřídou segmentaci, je možné obrázky zvětšit na daleko větší velikost, čímž by se zvedlo zastoupení detailů vůči celému obrázku a tedy i síť bude schopna lepší predikce.


%Jedním z možných rozšíření programu by mohlo být to, že by se jako vstup vedle .png řezů daly využít formáty .nii, které mají některá zajímavá data již v hlavičce např. odstup mezi jednotlivými řezy, které v případě .png exportu zachovány nejsou. 

%Dataset, na kterém probíhá trénování konvoluční sítě, disponuje cca 8 třídami, do kterých jsou data řazena. Možným rozšířením je nenasazovat zjednodušení tj. v tomto  případě   nasazení všech 11 tříd. Tato  \zaverecnaprace práce postupovala při zpracování dle nastavených parametrů celé výzvy - tedy zjednodušení tříd na 8 a poté jejich seskupení. 

%Mezi další možná vylepšení spadá problematika heuristik. Paměťová náročnost v případě použití Unet je obrovská a to i za předpokladu, že již tak tato architektura sama o sobě přináší mnoho heuristik při  zpracování. Základní architektura Unet se dá dále rozšířit např. propojením jednotlivých úrovní, což by umožnilo snížit paměťové nároky a tím i zvýšit výpočetní možnosti, což by bylo velice zajímavé takové výstupy porovnat se základní verzí Unetu. 

%V neposlední řadě by bylo možné nad programem postavit jednoduché grafické rozhraní. Program by disponoval předtrénovanými sítěmi na určité problémy a díky procesu vybavování by po nahrání testovacích dat a jejich korekci mohl program produkovat jak grafické, tak výpočetní výstupy. Jinými slovy by takový program přenesl   přínos neuronových sítí více do popředí, kde by jej mohli využít např. lékaři apod. Vedle předtrénovaných síťí by disponoval sám o sobě možností natrénování na daný typ problému při dodání vstupních dat pomocí .nii nebo řezů .png, ke kterým by se asociovaly maskovací data pro rekonstrukci.

 
