\chapter{Neuronové sítě}
% 1.) co to je? Na cem je to zalozeny? 
% 2.) k cemu to je? najakyulohy je to efektivni a proc?
% 3.) proc to pouzivat? jake jsou vyhody oproti jinejm moznejm navrhum apod?
% 4.) Jake existuji neurnove site? je jich vic?
% 5.) co to je?
% 1.) co to je?

%%% DP osnova 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1.) neronove site 					OK

% 1.1.) neuron							OK
% 1.1.1) Umely neuron					OK
% 1.2.) Princip neuronových síti		OK
% 1.3.) Principy uceni					OK
% 1.3.1.)   uceni s ucitelem			OK
% 1.3.1.)   uceni bez ucitele			OK
% 1.3.1.)   Ostatni typy uceni

% 1.3.) konvolucni neuronove site
% 1.3.1.) konvolucni vrstva
% 1.3.2.) sdruzovaci vrstva
% 1.3.3.) plné propojena vrstva

% 1.4.) Aktivacni funkce

% 1.5.) Segmentace


% 2.) Nárvh 


% ::::::::::::::::::::::::::::::::::::::::::::::::::::ZADANI PRÁCE::::::::::::::::::::::::::::::::::::::::::::
% POKYNY PRO VYPRACOVÁNÍ:
%
% + Nastudujte současné metody segmentace obrazu, které používají tzv. hluboké učení. 
% + V rámci semestrální práce proveďte rešerši těchto metod a jejich vlastností se zaměřením na použití pro segmentaci dat do vice tříd. 
% + Dále ze zkoumaných postupů vyberte vhodnou metodu a aplikujte ji po dohodě s vedoucím na vybraný typ problému.
% + Výběr zdůvodněte a metodu otestujte pro použití na daný problém. 
% + Výsledky testování vhodně prezentujte.




Počátek neuronových sítí sahá až do čtyřicátých let minulého století, kdy byly položeny základy pro vznik oborou neuronových sítí. Neuronové sítě jako takové, jsou modelem biologických struktur tak, jak je známe dnes v živých organismech.\cite{volna2013}\cite{volna2008} Pro účely modelu proto byl vytvořen tzv. umělý neuron, což je matematický popis biologického neuronu. Skládá se z množin vstupů a jednoho výstupu. O tom jaký vstup se dostane na výstup pak rozhodují váhy a funkce. Neuronová síť je poté tvořena obrovskou množinou takto definovaných neuronů. Jednou z největších předností takových sítí je proces učení, tedy proces, kdy po jednotlivých průchodech neuronovou sítí jsou upravovaný váhy. Tento proces vede k tomu, že neuronová síť umožňuje lépe manipulovat se vstupnímu daty.\cite{volna2013}

Největší přínos neuronových sítí tkví v situacích, kdy není možné použít matematický   popis všech souvislostí a  vztahů daného problému, nebo v případech, kdy by po sestavení takového modelu byly veškeré operace nad ním příliš složité až nemožné. Doménou neuronových sítí  se stávají  úlohy pro zpracování, rozpoznávání, optimalizaci nad daty a informacemi, které jsou nepřesné, neúplné, neurčité nebo není jiná metoda, jak by deterministický systém byl schopen takové informaci pochopit tj. zpracovat. \cite{lucie_gorlichova}

Jedním z důvodů tak obrovského nárůstu významnosti neuronových sítí je ten, že jsou schopny zareagovat  na \texttt{neznámé} vstupy, na které nebyly doposud trénovány, jedná se tedy o schopnost zobecňování získaných poznatků na základě předešlých zkušeností.\cite{vondrak_vsbt}\cite{lucie_gorlichova}

\subsection*{Základní uspořádání neuronových sítí}


\begin{itemize}
	\item \texttt{Dopředná neuronová síť} – hrany jsou orientovány jedním směrem  zleva doprava, signál se tedy již nešíří zpět. Výstupy jedné vrstvy neuronu jdou na vstup druhé vrstvy až po výstupní vrstvu, která reprezentuje konečný výstup celé neuronové sítě.
	\newline
	
	\item \texttt{Rekurentní neuronová síť} – Hlavním rozdílem oproti dopředným sítím je ten, že neurony mohou byt ještě propojeny zpětně tj. zpětnou vazbou popřípadě mohou obsahovat smyčky zpět k určitému neuronu, což je vhodné k řešení iterativních úloh.
\end{itemize}

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



\section{Neuron}
Jak již bylo nastíněno výše, základní stavební jednotkou umělých  neuronových sítí je \textbf{neuron}. Jejich návrh je inspirován biologickou stavbou neuronu viz obr.\ref{fig:neuron}.\cite{cit_umely_neuron} 

Biologický neuron se skládá z těla neuronu, jádra (nucleus), dále dlouhých výběžků, které jsou nazývány také jako axony a krátkých výběžků (dendrity). Jednotlivé neurony jsou v mozku spojovány pomocí synapsí, které slouží k předávání vzruchů. 
 \begin{figure}[h]
	\centering
	\includegraphics[width=0.7\linewidth]{obrazky/neuron3}
	\caption{Biologický neuron.\cite{img_neurone}}
	\label{fig:neuron}
\end{figure}


Dendrity slouží v případě biologického neuronu k získávání vstupních informací (vzruchů) do těla neuronu od okolních neuronů. Axon slouží k šíření elektrochemických signálů na výstup neuronu. Šíření signálu po axonu je možné díky změnám elektrického náboje na jeho těle.\cite{polach} Na jeho konci  opět dochází k \uv{\texttt{napojení}} pomocí synapsí na dendrity dalších neuronu atp.\cite{matematicka_biologie}





Termín \uv{napojení} by v tomto případě měl být více rozveden, jelikož neurony spojené ve skutečnosti nejsou, jsou mezi nimi mezery, takže elektrický vzruch by zde  nemohl být fyzicky veden.\cite{polach} Synapse disponují tzv. neurotransmitery, které se navazují na receptory průchodem přes membránu. Signál na konci axonu způsobí, že neurotransmietry překonají štěrbinu, která je mezi dvojící mebrán neuronů a naváží se na již výše zmiňovaný receptor. Tím je proces přenosu úplný.

% [popsat zde biologicky neuron a jak funguje a srovnat s fungovanim umeleho neuronu, odkazovat se na obrazek]

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


\subsection{Umělý neuron}
Návrh umělého neuronu vychází ze svého biologického vzoru, ovšem bylo nutné aplikovat zjednodušení, aby bylo možné vytvořit takový matematický model. Dalo by se tedy říci, že matematická obdoba se vyvíjela poté již nezávisle vůči své původní předloze.\cite{mendelu} Vstupní informace jsou reprezentovaný množinou hodnot $ X $ (modelují dendrity u biologického neuronu), které jsou váhově ohodnoceny a po překonání určitě prahové hodnoty slouží jako vstup aktivační funkce $ f(x) $. \cite{fit_cvut} 

\begin{figure}[h]
	\centering
	\includegraphics[width=0.8\linewidth]{obrazky/umely_neuron}
	\caption{Umělý neuron}
	\label{fig:umely_neuron}
\end{figure}

Jednotlivými váhami u vstupů je v neuronu modelováno učení neboli uložení zkušeností ze zpracování předchozích průchodů. Čím je váha vstupu pak vyšší, bude i vstup neuronu důležitější a tedy preferovanější viz. obr.\ref{fig:umely_neuron}. Výstupní hodnota neuronu je pak dána aktivační funkcí $f(x)$ a zaslána na výstup $Y$ po překonání prahu $\theta$. Aktivační funkce by měla být nelineární.
Umělý neuron lze definovat matematickým zápisem:

\begin{equation}\label{rce:umely_neuron}
% volim cislovanou rovnici, je dulezity a mol bych se k ni nekdy vracet
Y =  f\left(\sum_{i=1}^{n}(W_{i}\cdot X_{i}) + \theta \right)
\end{equation}

% lze videt na obrazku  \ref{fig:neuron}

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



\section{Princip fungování sítě}
\label{neural_net:architecture}

Propojením více neuronů vzniká neuronová síť, kdy výstup jednoho neuronu je vstupem jednoho či více dalších neuronů. Vzájemné propojení neuronů a jejich počet vede k vytvoření architektury na základě vrstev. V architektuře rozlišujeme tří typy vrstev. Vstupní vrstva neuronu je vrstva, která z vnějšího prostředí lze vidět, tato vrstva je dále spojena se skrytou vrstvou, kterou již z vnějšího prostředí vidět nelze. Skrytých vrstev může být  rámci sítě větší množství. Skryté vrstvy jsou pak napojeny na ty výstupní. V rámci jedné vrstvy ovšem neurony propojeny nejsou. 

Napříč různými vrstvami je   propojení neuronů tzv. \texttt{úplné}. Změnou stavu jednotlivých neuronů, které leží na cestě mezi vstupními a výstupními neurony, je umožněno šíření a zpracování informace. Konfigurace sítě je poté reprezentována váhami. Největší dopad na stav sítě má proces učení, kdy síť upravuje svoje hodnoty na základě zpětné vazby po průchodu sítí (v případě učení s učitelem) popřípadě reklasifikace dat ve třídách (v případě učení be učitele). 
\newline
\begin{figure}[h]
	\centering
	\includegraphics[width=0.8\linewidth]{obrazky/neuralnet}
	\caption{Neuronová síť.}
	\label{fig:neuralnet}
\end{figure}
\newline
Na obrázku výše \ref{fig:neuralnet} lze vidět typickou dopřednou neuronovou síť. Neurony v rámci jedné vrstvy propojené nejsou tj. informace se šíří pouze zleva doprava. Situace by byla jiná v případě rekurentní neuronové sítě již zmiňované výše.

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

	
\section{Strojové učení}
Jedním z nezajímavějších aspektů neuronových sítí je bezpochyby jejich učení. Před   příchodem neuronových sítí bylo běžnou praxí, že vstupní data se transformovaly na ty výstupní pomocí určitého systému zpracování neboli algoritmu. Při použití neuronových sítí je ale tato fáze plně zautomatizována pomocí učení, což je proces, při kterém dojde k natrénování sítě na určitý problém a ta je schopna jej pak řešit v situaci, kdy se ji předloží data, na kterých nikdy netrénovala, neboli fáze \texttt{vybavování}. Rozlišují se dvě fáze učení - s učitelem a bez učitele.



\subsection{Učení s učitelem}
Učení s učitelem je charakteristické tím, že k určité trénovací množině, která bude mít vliv na nastavení sítě, existuje správná výstupní množina dat tj. referenční hodnoty, podle kterých neuronová síť kalibruje parametry tak, aby se výstupní data sítě  co nejvíce podobala těm referenčním. Učitelem jsou tedy v takovém případě myšlena správná výstupní data.

Jak již bylo nastíněno výše, celé učení neuronových sítí závisí na nastavení vah u jednotlivých neuronů, které jsou zase závislé na nastavení prahu a zvolené aktivační funkci. Pro úpravu vah je zaveden koeficient rychlost učení, kterým se definuje velikost kroku při jejich úpravě. Tato velikost kroku má poté vliv na to, jak rychle se nastavené váhy v čase mění.

Přesnost výstupů sítě se pak odvíjí od počtu trénovacích cyklů, při kterých docházelo k přenastavování vah. Těmto trénovacím cyklům se říká \texttt{\textit{epochy}} a s rostoucím počtem epoch je i neuronová síť výkonnější. Obvykle je k naučení sítě potřeba větší počet epoch. 

Epochy ale nejsou jediné, které mají vliv na přesnost neuronové sítě. Obrovský vliv má též velikost trénovací množiny, díky které si síť rozšiřuje svoje zkušenosti. 

Ke zjištění přesnosti neboli výkonnosti sítě slouží testovací/validační množina dat. Jedná se cíleně o data, s kterými se neuronová síť ještě nesetkala (na kterých netrénovala), aby se zjistila její odezva resp. přesnost. Ke zjištění přesnosti se využívají různá kritéria, nejčastěji se používá střední aritmetická odchylka aplikovaná na výstupní data sítě s referenčními hodnotami.

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


Aby síť mohla upravit svoje hodnoty na základě zjištěné chyby, musí použít některý z algoritmů šíření chyby. Tím nejrozšířenějším pro  tento účel se používá   \textit{backpropagation} neboli algoritmus zpětného šíření chyby. Jeho funkce spočívá v tom, že   určí  chybu neuronů na výstupech  výstupní vrstvy a šíří ji zpět na vrstvy předcházející. Algoritmus má tyto tři etapy\cite{volna2013}: 
\begin{itemize}
	\item Dopředné síření vstupního signálu.
	\item Zpětné šíření chyby.
	\item Aktualizace váhových hodnot na jednotlivých spojeních.
\end{itemize}





\subsection{Učení bez učitele}

% Učení bez učitele 3
% – při učení bez učitele není vyhodnocován výstup. Při tomto učení je
% výstup neznámý. Síť dostává na vstup sadu vzorů, které si sama třídí. Buď si vzory třídí do
% skupin a reaguje na typického zástupce, nebo si přizpůsobí topologii vlastnostem vstupu.
%  Změnou vah je třeba docílit konzistentní výstup, tj. aby síť poskytovala při stejných
% vstupních (nebo alespoň podobných) hodnotách, stejné hodnoty výstupní.
%  Našim cílem je neuronovou síť naučit, tak aby vstup odpovídal výstupu.


Metoda učení bez učitele nemá k dispozici množinu výstupních hodnot, tudíž není schopna ověřovat svoje výstupy způsobem, jako předcházející metoda. Veškeré informace, kterými disponuje, jsou pouze vstupní  data resp. množina trénovacích dat. 

Neuronová síť tedy v takovém případě začne data třídit do skupin dle vzájemné podobnosti tj. objekty o stejných či podobných vlastnostech\cite{matematicka_biologie}.

Změnou vah se pak síť snaží dosáhnout konzistentního výstupu tj. pokud jsou na vstup přivedena data stejná či podobná o určitých vlastnostech, neuronová síť bude schopná tyto data správě zařadit a poskytnou odpovídající výstup\footnote{Na stejné či podobné vstupní hodnoty bude reagovat adekvátním výstupem. } s ohledem na data, na kterých byla trénována.

\begin{figure}[h]
	\centering
	\includegraphics[width=0.58\linewidth]{obrazky/without_teacher}
	\caption{Učení bez učitele - roztřídění vstupních dat do tříd.}
	\label{fig:uceni_bez_ucitele}
\end{figure}

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


\section{Konvoluční neuronové sítě}
Jedná se o speciální dopředné vícevrstvé neuronové sítě, které zaujaly velký význam ve zpracovávání obrazu, jelikož   díky  svým vlastnostem dokázaly řešit velice efektivně úlohy zaměřené na obrazové zpracování. V současné době jsou široce uplatňované v hlubokém učení, zejména pro klasifikaci obrazu do více tříd, rozpoznávání apod. 

Typickými znaky konvoluční neuronové sítě je velké množství neuronových vrstev, kde jsou neurony vzájemně propojeny vždy mezi jednotlivými vrstvami. Díky svým vlastnostem umožňují identifikovat objekt z obrazu na základě jeho podobnosti  a to bez ohledu na posunutí, deformaci či úplně jinou velikost\cite{lecun}. 

Konvoluční neuronové sítě   mají  svá určitá specifika. Mezi ty hlavní patří, že jsou hluboké, mají pevnou konvoluční strukturu propojení  a disponují třemi typy vrstev:
\newline
\begin{enumerate}
	\item \textbf{Konvoluční vrstva}
	\item \textbf{Sdružovací vrstva}
	\item \textbf{Plně propojená vrstva}\newline
\end{enumerate}

Architekturu konvoluční neuronové sítě lze vidět na obr. níže.

\begin{figure}[h]
	\centering
	\includegraphics[width=1.0\linewidth]{obrazky/konvolucni_neuron_net2}
	\caption{Architektura konvoluční neuronové sítě.}
	\label{fig:konvolucni_neuron_net}
\end{figure}

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


%Aby byla neuronová síť schopna rozeznat jeden obrázek od druhého, postupuje velice podobným způsobem jako lidský mozek. Začne hledat vlastnosti, které obrázek vystihují. Tyto vlastnosti má tedy každý obrázek jiné a samy o sobě zaručují rozeznání jeden od druhého. Takové vlastnosti neboli lokální charakteristiky obrazu se v konvolučních neuronových sítích označují jako \texttt{mapy příznaků}. 
%
%Vstupem konvoluční vrstvy je \texttt{obrázek}, ze kterého jsou vytvořeny takové \textit{mapy příznaků} - jedná se o výřezy obrazu např. o velikosti 3x3px, které jsou pak vstupem jednoho neuronu, který je díky sdílení vah dále rozkopírován pro každou podoblast. Z těchto map jsou poté vytvořeny filtry viz. obr.\ref{fig:2d_convolution}, které filtrují vstupní obraz pomocí konvoluce. Díky konvoluci je vrstva schopna matematicky vypočítat míru shody. Výstupem vrstvy jsou přefiltrované obrázky mapou  příznaků a slouží jako vstup vrstvy následující.
%
%Konvoluce je  diskrétní matematická operace od níž vrstva dostala i své jméno. Tato operace se provádí nad celým obrázkem. Matematicky lze diskrétní 2D konvoluci definovat  vztahem \ref{mat:2d_convoluction}\cite{fit_spanel}:



\subsection{Konvoluční vrstva}
Aby byla neuronová síť schopna rozeznat jeden obrázek od druhého, postupuje velice podobným způsobem jako lidský mozek. Začne hledat znaky, které obrázek vystihují. Tyto vlastnosti resp. lokální charakteristiky obrazu má tedy každý obrázek jiné a samy o sobě zaručují rozeznání jednoho obrázku od druhého.

Vstupem konvoluční vrstvy je tedy \texttt{obrázek}, ze kterého jsou vytvořeny takové \textit{mapy příznaků} - jedná se o výřezy obrazu např. o velikosti 3x3px, které jsou pak vstupem jednoho neuronu, který je díky sdílení vah dále rozkopírován pro každou podoblast. Z těchto map jsou poté vytvořeny filtry neboli konvoluční jádra viz. obr.\ref{fig:2d_convolution}, které filtrují vstupní obraz pomocí konvoluce. 

Konvoluce je  diskrétní matematická operace od níž vrstva dostala i své jméno. Tato operace se provádí nad celým obrázkem a díky ní je konvoluční vrstva schopna matematicky vypočítat míru shody obrázku s příznakem.  Diskrétní 2D konvoluci lze matematicky definovat  vztahem \ref{mat:2d_convoluction}\cite{fit_spanel}:

\begin{equation}\label{mat:2d_convoluction}
I(x,y) * h(x,y) = \sum_{i=-k}^{k}\sum_{j=-k}^{k} I(x-i, y-j)\cdot h(i,j) 
\end{equation}

kde $ h(x,y) $ představuje \textit{konvoluční jádro}  a $ I(x,y) $ diskrétní obraz. Jak již bylo nastíněno výše, \textit{konvoluční jádra} jsou jakési filtry, pomocí kterých se filtruje obraz\footnote{Z důvodu překryvu byly na   obr. \ref{fig:2d_convolution} vyznačeny  barevně jen některé oblasti konvoluce.}. V konvoluční vrstvě je těchto filtrů více (podle počtu příznaků), protože každý má za cíl detekovat jinou část obrázku. Výsledkem poté je matice hodnot, neboli přefiltrovaný obrázek pomoci těchto jader. 
\begin{figure}[h]
	\centering
	\includegraphics[width=1.0\linewidth]{obrazky/2d_convolution}
	\caption{2D konvoluce.}
	\label{fig:2d_convolution}
\end{figure}

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


Při filtrování je také definován krok, kterým říkáme, o kolik se ma filtrační maska posunout při konvoluci další části obrazu. Čím větší krok tedy, tím rychlejší filtrace, ale nižší přesnost.


Výstupních map příznaků, resp. obrázků přefiltrovaných těmito mapami, musí být stejný počet jako filtrů. Výstup konvoluční vrstvy poté slouží jako vstup sdružovací vrstvy.


Na obr. \ref{fig:2d_convolution} je patrné, že při zpracováni obrazu bylo použito velikosti kroku filtrace 1 - maska se posouvá vždy o jedno políčko a poté provádí výpočet znova.


\subsubsection{Dilatovaná konvoluční vrstva}
%Dilated convolutions introduce another parameter to convolutional layers called the dilation rate. This defines a spacing between the values in a kernel. A 3x3 kernel with a dilation rate of 2 will have the same field of view as a 5x5 kernel, while only using 9 parameters. Imagine taking a 5x5 kernel and deleting every second column and row.

%This delivers a wider field of view at the same computational cost. Dilated convolutions are particularly popular in the field of real-time segmentation. Use them if you need a wide field of view and cannot afford multiple convolutions or larger kernels.


Vedle klasické konvoluční vrstvy existují ještě tzv. dilatované konvoluční vrstvy. Hlavní rozdíl mezi nimi je ten, že dilatované ještě dále rozšiřují práci s konvolučními jádry. V knihovně \texttt{keras} (viz. kapitola \ref{subsection:keras}) je možné z normální konvoluce udělat dilatovanou pomoci parametru \texttt{dilation\_rate}.\cite{types_of_convolutions}

Dilatovaná vrstva dle natavení rozděluje resp. vkládá mezeru  mezi jednotlivé parametry konvolučního jádra.\cite{Dilated_Convolutions_paper} Pokud by tedy bylo konvoluční jádro o velikosti 3x3 a dilatační parametr nastaven na 2, vznikne konvoluční jádro o velikosti 5x5 a to tak, že zůstane každý druhy řádek a sloupec jádra prázdný. Zde lze již vidět  jasná výhoda dilatace. I s menším konvolučním jádrem lze pomoci dilatování dosáhnout větší zpracovávané oblasti se stejnými výpočetními požadavky, jako by se jednalo pouze o konvoluci s jádrem 3x3. Nemění se tedy ani celkový počet map příznaků.

Ne vždy je tato vrstva ale přínosem, obzvlášť v situacích, kdy je nastaven vzrůstající dilatační faktor příliš agresivně  a je třeba rozlišovat malé objekty\cite{Dilated_Convolutions_paper}. Takto dochází ke generování nepřesných map příznaků, které velkou část důležitých znaků v obraze přeskakují.

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


\subsection{Sdružovací vrstva}
Sdružovací vrstva realizuje podvzorkování vstupních dat.  Tato vlastnost má zásadní heuristický vliv na celou síť, protože výsledek vede k tomu, že se eliminuje velká část hodnot a zanechají se jen některé, díky čemuž se sníží počet operací pro vyšší vrstvy\cite{deeplearning_net}.  

Nejpoužívanější funkcí pro tento účel se používá \texttt{max-pooling}, která podle velikosti okna vybere nejvyšší hodnotu v dané oblasti a tu zanechá, všechny ostatní jsou poté vyloučeny tj. agregace velikosti na jednu jedinou hodnotu. Obrovskou výhodou \textit{max-poolingu} je, že se přímo podílí na zvýšení invariance vůči posuvu. Nejčastěji se používá velikost okna $ 2 \cdot 2 $ popřípadě $ 3 \cdot 3 $, na obr.\ref{fig:pooling} je při podvzorkování použita oblast  o velikosti $ 2 \cdot 2$. Ve většině případů,  typicky při segmentaci obrazu, dosahuje max-pooling nejlepších výstupů oproti ostatním sdružovacím funkcím.



V případech, kdy není nutné podvzorkovávat takto progresivně jako u max-poolingu, je zde alternativa \texttt{average-pooling}, který agreguje masku na jedinou hodnotu pomocí průměrování hodnot v okně. Tímto postupem dojde k tomu, že se do další vrstvy přenáší i část informace z okolních bodů, což může v konečném důsledku znamenat i \uv{přesnější} výstup.\footnote{V praxi záleží vždy na datasetu, tedy jaká data se budou klasifikovat a podle toho se odvíjí také použití.} 

\begin{figure}[h]
	\centering
	\includegraphics[width=0.9\linewidth]{obrazky/pooling}
	\caption{Max pooling.}
	\label{fig:pooling}
\end{figure}

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


\subsection{Plně propojená vrstva}

Výstupy z předchozích vrstev jsou v plně propojené vrstvě transformovány do jednorozměrného vektoru, který je poté vstupem každého neuronu výstupní vrstvy, kde se vypočítá konečný výstup. Každý neuron plně propojené vrstvy je spojen s všemi neurony z předcházející vrstvy. Plně propojená vrstva obsahuje stejný počet neuronů jako je počet klasifikačních tříd, do kterých se vstupní obrázek bude třídit.\cite{ujj_walkarn} V praxi vzniká takových plně propojených vrstev více - vytváří se síť neuronů, kde tato architektura má vstupní, výstupní a skryté vrstvy viz. část \nameref{neural_net:architecture}.

Každá výstupní vrstva je ohodnocena mírou pravděpodobnosti výstupu, na jehož základě je poté rozhodnuto o výsledku. Součet pravděpodobností v plně propojené vrstvě je dána hodnotou 1.

\subsubsection{Metoda dropout}
Metoda slouží k předejití problému přetrénování sítě a využívá se u plně propojených vrstev. 

Problém přetrénování spočívá v tom, že síť začne ztrácet svoje správně naučené obecné rysy  a bude se více specializovat na daný problém, který bude sice umět řešit, ale s jeho obdobnými variantami si již nebude schopna poradit.

Princip metody \textit{dropout} spočívá v deaktivaci části neuronů na vrstvě po každém trénovacím průchodu a jejich výsledným průměrováním po natrénování sítě.


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


\section{Dávková normalizace}
Dávková normalizace (\textit{Batch-normalization} ) je technika, kterou v roce 2015 představili Christian Szegedy a Sergey Ioffe z Google AI. Řeší problém tzv. kovariantního posuvu. 

Při trénování neuronové sítě dochází neustále ke změně rozložení aktivací jednotlivých neuronů, což zpomaluje proces učení celé sítě, protože každá vrstva se musí přizpůsobit nové dávce dat dle kroku učení. Nejvíce se tento problém vyskytuje v mezilehlých vrstvách. 

Problém kovariantního posuvu se do jisté míry dá řešit menším koeficientem učení a zvýšením počtu epoch. Díky dávkové normalizaci ale můžeme naopak potom koeficient učení zvýšit, celý proces učení tedy bude konvergovat rychleji s výslednou menší chybou.

V praxi se vrstva umisťuje mezi konvoluční či plně propojenou vrstvu a aktivační funkci.

\begin{equation}
 \mu_{\mathcal{B}} = \frac{1}{m} \sum_{i=1}^{m} x_{i} 
 \label{mat:mean}
\end{equation}


\begin{equation}
\sigma^{2}_{\mathcal{B}} = \frac{1}{m} \sum_{i=1}^{m} (x_{i} - \mu_{\mathcal{B}})^{2} 
\label{mat:sigma_deviation}
\end{equation}

\begin{equation}
\hat{x}_{i} = \frac{x_{i} - \mu_{\mathcal{B}}}{\sqrt{\sigma^{2}_{\mathcal{B}} + \epsilon}}
\label{mat:normalization} 
\end{equation}


\begin{equation}
y_{i} = \gamma \hat{x}_{i} + \beta
\label{mat:shift_output} 
\end{equation}


Vztahem \ref{mat:mean} je vypočítán průměr vstupní dávky a poté pomoci rovnice \ref{mat:sigma_deviation} stanoven rozptyl. Samotná normalizace dávky se vypočítá vztahem \ref{mat:normalization}\cite{standford_prednaska} díky stanovení statistik dávky v předchozích dvou krocích. Výsledek normalizace je dán rovnicí \ref{mat:shift_output}, kdy dochází ke škálování dávky a výslednému posuvu.\cite{Ioffe:2015:BNA:3045118.3045167}

Proměnné $\gamma$ a $\beta$ jsou nastaveny sítí během trénování spolu s původními parametry sítě.\cite{batch_norm_towardsdatascience}

Normalizace udržuje střední aktivační hladinu kolem  0 a standardní odchylku blízko hodnoty 1.\cite {keras}

% . This layer basically takes an input volume (whatever the output is of the conv or ReLU or pool layer preceding it) and outputs an N dimensional vector where N is the number of classes that the program has to choose from. For example, if you wanted a digit classification program, N would be 10 since there are 10 digits. Each number in this N dimensional vector represents the probability of a certain class. For example, if the resulting vector for a digit classification program is [0 .1 .1 .75 0 0 0 0 0 .05], then this represents a 10% probability that the image is a 1, a 10% probability that the image is a 2, a 75% probability that the image is a 3, and a 5% probability that the image is a 9 (Side note: There are other ways that you can represent the output, but I am just showing the softmax approach). The way this fully connected layer works is that it looks at the output of the previous layer (which as we remember should represent the activation maps of high level features) and determines which features most correlate to a particular class. For example, if the program is predicting that some image is a dog, it will have high values in the activation maps that represent high level features like a paw or 4 legs, etc. Similarly, if the program is predicting that some image is a bird, it will have high values in the activation maps that represent high level features like wings or a beak, etc. Basically, a FC layer looks at what high level features most strongly correlate to a particular class and has particular weights so that when you compute the products between the weights and the previous layer, you get the correct probabilities for the different classes.

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


\section{Aktivační funkce}
	Slouží k aktivaci neuronu na jeho výstup. Důležitým kritériem aktivačních funkcí je, aby produkovaly nelineární hodnoty. Důvodem je fakt, že pokud by lineárními byly, tak potom by celá neuronová síť byla lineární, čímž ztratíme veškerou výhodu neuronových sítí.



\subsection{ReLU}
	\zk{zkRELU} (\zkratkatext{zkRELU}) je aktivační funkce definovaná vždy od $0$, tudíž pokud narazí na hodnoty, které jsou záporné, automaticky je převede do svého rozsahu tj. na nulu. Zbylé hodnoty zůstávají netknuté. Konverguje rychleji nežli funkce \textit{sigmoid} nebo \textit{tanh} a není souměrná kolem nuly.\cite{standford_prednaska}  \zk{zkRELU} je definovaná vztahem \ref{mat:RELU}:
	
	\begin{equation}\label{mat:RELU}
		f(x) = max(0,x)
	\end{equation}

	\begin{figure}[h]
		\centering
		\includegraphics[width=0.4\linewidth]{obrazky/relu}
		\caption{ReLU}
		\label{fig:relu}
	\end{figure}



\subsection{Sigmoid}
Jedná se historicky o nejpoužívanější aktivační funkci. Je dána rozsahem $ <0, 1> $ a není souměrná kolem nuly. Je definována vztahem \ref{mat:sigmoid}\cite{standford}:
\begin{equation}\label{mat:sigmoid}
f(x) =  \frac{1}{1+e^{-x}}
\end{equation}

\begin{figure}[h]
	\centering
	\includegraphics[width=0.4\linewidth]{obrazky/sigmoid}
	\caption{Sigmoid}
	\label{fig:sigmoid}
\end{figure}

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


\subsection{Tanh}
	Aktivační funkce s rozsahem $ <-1, 1> $, která je souměrná kolem nuly. Dána vztahem \cite{standford}:
	\begin{equation}\label{mat:Tanh}
		f(x) = tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}
	\end{equation}

	\begin{figure}[h]
	\centering
	\includegraphics[width=0.4\linewidth]{obrazky/tanh}
	\caption{Tanh}
	\label{fig:tanh}
	\end{figure}

\subsection{Softmax}
Používá se k vícetřídé klasifikaci, kde je objekt přiřazen do jedné třídy. Suma všech pravděpodobností je rovna jedné. Všechny vypočítané pravděpodobnosti jsou vždy v rozsahu od nuly do jedné. Aktivační funkce \textit{softmax} je dána vztahem \cite{medium_com}: 

\begin{equation}\label{mat:Softmax}
S(y_{i}) =  \frac{ e^{y_{i}}}{\sum_{j}  e^{y_{j}}}
\end{equation}


\subsection{LReLU - Leaky ReLU}
LReLU  vznikla modifikací původní funkce ReLU. Hlavním rozdílem oproti ní je ta, že LReLU nahrazuje nulovou část tj. interval  [$-\infty$, 0] nízkým sklonem. Hlavním důvodem zavedení LReLU je ten, že nulový sklon v případě funkce ReLU může v určitých případech vést k pomalému učení např. když neuron využívá  aktivační funkci \texttt{sigmoid} - některé z neuronů   se nemusí vůbec aktivovat.\cite{juan_miguel_lrelu_prelu} Funkce je dána vztahem\cite{standford_prednaska}:

\begin{equation}\label{mat:LRELU}
f(x) = max(0.01x,x)
\end{equation}

	\begin{figure}[h]
	\centering
	\includegraphics[width=0.5\linewidth]{obrazky/lrelu}
	\caption{LReLU}
	\label{fig:LRELU}
	\end{figure}

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

\chapter{Analýza problému}
\ref{chapter:2}
V následující kapitole budou popsány současné metody segmentace obrazu, které používají tzv. hluboké učení. Dále jejich vlastnosti se zaměřením na použití pro segmentaci dat do více tříd.  Součástí kapitoly bude také popis dat, které jsou přímo určené pro vícetřídé zpracování a princip jejich získávání.

% současné metody segmentace obrazu, které používají tzv. hluboké učení
% rešerši těchto metod a jejich vlastností se zaměřením na použití pro segmentaci dat do vice tříd
% ze zkoumaných postupů vyberte vhodnou metodu a aplikujte ji po dohodě s vedoucím na vybraný typ problému
% Výběr zdůvodněte a metodu otestujte pro použití na daný problém. 
% Výsledky testování vhodně prezentujte


\section{Segmentace obrazu}
V dnešní době je již nedílnou součástí zpracování obrazu právě segmentace, která je jednou z nejdůležitějších kroků při analýze obrazu. Hlavním cílem segmentace je proces dělení obrazu na části a rozlišení jednotlivých objektů v obraze, s kterými se poté dále pracuje, například  členění jednotlivých objektů k určité třídě podobně vysegmentovaných objektů. Segmentace se  při dalším zpracování hojně využívá ke klasifikaci objektů, vychází hlavně z globální znalosti obrazu např. barvy, tvaru, apod. V současné době existuje velké množství segmentačních metod. Velká část z nich je nastíněna v následující kapitole.\cite{stanislav_straka}

Proces segmentace je dělení obrazu na podobrazy, které splňují určitá kritéria. Splňujícím kritériem může být buď jediné nebo i jejich množina. Mezi takové kritéria patří:
\newline
\begin{itemize}
	\item Pixely v segmentované částí resp. podobrazu mají stejnou úroveň šedi, barvy, jasu apod.\newline
	\item Úroveň šedi, barvy, jasu apod. daných pixelů v segmentované částí resp. podobrazu se neliší více nežli o velikosti předem stanovené hodnoty.\newline
	\item Odchylka úrovní šedi jednotlivých pixelů v podobrazu je dostatečné malá apod. \cite{fit_spanel}
\end{itemize}

 

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


\section{Současné metody segmentace obrazu}
K segmentaci lze přistoupit celou řadou způsobů, kdy můžeme segmentační algoritmy rozdělit na metody zaměřující se na detekci hran v obraze, kde se využívá faktu, že existuje   významný rozdíl okolních pixelů, což umožní hranovým detektorům identifikovat lokální hrany. Detektory hran jsou algoritmy, jejíž výstupem je množina hran v obraze. 

Mimo metod založených na \textit{detekcí hran} existují také metody   orientované na oblasti (regiony). Využívají detekování hran k tomu, aby mohly rozeznat oblasti v obraze. Mají ale jednu velkou nevýhodu, pokud by kontura byla v obraze porušena, tak k ohraničení celé oblasti dojít nemusí. \cite{pc_videni_sonka_hlavac}

Další metodou a zároveň jednou z nejstarších, ale také nejjednodušších je \textit{metoda prahování}. Lze ji využívat samostatně nebo jako součást dokonalejších metod. Prahování při segmentaci využívá rozdílných úrovní intenzity objektu a pozadí. Na základě stanovení prahu se poté určuje příslušnost pixelu buď k pozadí nebo objektu.\cite{prednaska_janakova_fekt}

Pokud bychom využívali toho, že metody mají určitou znalost obrazu resp. segmentovaných objektů, potom se jedná o \textit{znalostní metody}. Tyto metody mohou segmentaci velice ulehčit, protože využívají tzv. atlas modelů či předloh segmentovaných objektů, které jsou generovaná na základě trénovacích dat automaticky. V případech, kdy to je možné, lze předlohy vkládat ručně díky bohaté lidské zkušenosti, což poté povede k přesnější segmentaci.\cite{fit_spanel}

Někdy segmentační techniky obsahují vlastnosti každé z již zmíněných a není možné je tedy jednoznačně zařadit. Tyto metody označujeme jako \textit{hybridní} a patří sem metody založené na morfologii, amplitudové projekci nebo \textbf{neuronových sítích}.\cite{prednaska_janakova_fekt}

\subsection{Detekce hran}
Na segmentaci pomocí detekce hran je založena celá řada segmentačních algoritmů. I když tato metoda patří do nižší úrovně zpracování obrazu, má v segmentaci stále své místo. Hranou jsou označeny body, ve kterých se prudce mění jas, což v praxi znamená, že jde o hranice objektu, pozadí apod. Každá hrana je vedle prudkého výkyvu jasu určena také směrem a velikostí. Ideální hranou pro účely modelování by tedy  byla skoková funkce, ale v reálných datech jsou změny jasu hrany téměř vždy postupné.

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


Pokud by se tedy na hranu pohlíželo jako na funkci, která pro daný pixel vrací její velikost intenzity, lze takovou hranu popsat průběhem funkce na obr. \ref{fig:edges}, kde lze vidět více typů hran\cite{edge_types_fourier}. Oranžová hrana značí typ hrany \textit{roof}, fialová \textit{line}, zelená \textit{step edge} a červená \textit{ramp}.

\begin{figure}[h]
	\centering
	\includegraphics[width=0.9\linewidth]{obrazky/edges}
	\caption{Jednotlivé typy hran.}
	\label{fig:edges}
\end{figure}

Jak lze vidět, hrana může nabývat různých podob. Důvodem je ten,  že určení  přesné polohy hrany je složitý proces, jelikož zde jsou faktory, které přímo určování hrany ovlivňují. Jedná se zejména o šum, kvůli kterému není snadné rozhodnout, zdali se změna intenzity vtahuje na hranu nebo právě na šum. Tento problém se da vyřešit předzpracováním pomocí filtru.\cite{stanislav_straka}

Hlavní metody detekce hran využívají \textit{první derivace} popřípadě \textit{druhou derivaci}. V okrajových případech, kdy tyto metody použít nelze, např. tam, kde dochází k detekování hranic dvou sousedících textur, se používají \textit{statistické metody} nebo \textit{srovnání se vzorem}.

Při použití první derivace  vycházejí metody z předpokladu, že k největší změně intenzity dochází v místech hrany, zatímco v ostatních oblastech předpokládají, že je výkyv intenzity nulový. Takové metody se také označují jako gradientní. První derivace se získává rozdílem okolních pixelů diskrétního obrazu. Postupuje se zejména tak, že se řádky a sloupce vypočítávají zvlášť (platí pro nejjednodušší případy). \cite{fit_spanel} V případě použití druhé derivace se využívá faktu, že je daleko jednodušší nalézt bod, kde dochází k průchodu nulou nežli hledání extrému. Využívá se zejména v případech, kdy není nutné znát velikost a směr hran. 


\subsection{Prahování}
Metoda prahování (tresholding) je velice populární díky své jednoduchosti, může být používána jak samostatně, tak jako součást složitějších metod. Celá metody je založena na předpokladu, že objekty a pozadí mají rozdílný stupeň intenzity a díky tomuto předpokladu se stanovuje tzv. \textit{práh}. 

Jedním z nejstěžejnějších úkonů celé metody je tudíž stanovení adekvátního prahu $ T $, na základě něhož se srovnávají vstupní pixely obrazu a zjišťuje se, zdali splňují podmínku prahu, pokud ano je pixel označen jako pixel objektu, pokud ne jedná se o pozadí. Algoritmizace celé metody by mohla vypadat dle vztahu viz. \ref{mat:prahovani_pseudo_code},

\begin{subequations} \label{mat:prahovani_pseudo_code}
	\begin{gather}
		if ( g(i,j) \geq T): \qquad\qquad\\
		\qquad f(i,j) = 1\qquad \\
		else: \qquad\qquad\qquad\qquad \\
		\qquad f(i,j) = 0	\qquad
	\end{gather}
\end{subequations}
\newline
kde $ g(i,j) $ značí vstupní obraz a $f(i,j)$ výstupní obraz s prahem $T$. Existuje vícero způsobů, jak práh $T$ nastavit. Jedním z nich je \textit{globální prahování}, kdy je jedna hodnota prahu nastavena pro celý obraz. U tohoto postupu je velká nevýhoda v případě velkých výkyvů intenzit v obrázku (např. různé části obrázku budou jinak osvětleny), která se ale dá vyřešit předzpracováním obrazu určitým  filtrem.\cite{stanislav_straka}.  

Výsledek prahování lze vidět na obrázku vpravo při použití prahu stupně šedi \textit{127} na škále \textit{0-255}.\footnote{Na původním bitmapovém obrázku \uv{Lena} bylo nejprve provedeno prahování a poté byly oba bitmapové obrázky vektorizovány.}

\begin{figure}[h]
	\centering
	\includegraphics[width=1.0\linewidth]{obrazky/prahovani_lena}
	\caption{Prahování.}
	\label{fig:prahovani_lena}
\end{figure}

V případech, kdy globální prahování je zcela nevhodné, je možné použít metodu \textit{adaptivního prahování}, které se umí daleko lépe vyrovnat s velkou různorodostí obrázku. Obraz je rozdělen na menší části a pro každou takovou část je určen práh. Vypočítává se z hodnot jasu pomocí mediánu případně průměrováním nebo z průměru maximálních a minimálních hodnot. Dále je možné na výpočet prahu použít iterativní metodu, ve které se využívá konvergence prahových hodnot.\cite{ondrej_mikus}.


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

\subsection{Metody založené na regionech}
Metody založené na regionech namísto hran detekují oblasti o homogenních vlastnostech. Přináší to velkou výhodu hlavně v případech, kdy je v obraze   hodně šumu. Regionální metody se s tímto problémem dokáží vypořádat lépe než metody založené na detekci hran. Homogenní vlastnosti mohou být např. barva, tvar, úroveň šedi apod.\cite{fit_spanel} Stejně jako předešlé segmentační techniky i metody založené na regionech disponují více způsoby jak oblasti detekovat.

\subsubsection{Metoda spojování oblasti }
\label{chapter:2:spojovani_oblasti}
Nejdříve dochází k rozdělení obrazu na podoblasti, pro která se pak definuje kritérium pro jejich spojování resp. spojení jednotlivých pixelů. Kritériem jsou zde myšleny společné znaky náležící určitému objektu v obraze. K dokončení operace spojování dochází ve chvíli, kdy již není možné spojit žádnou oblast. Sdružené podoblasti pak reprezentují hledaný podobraz.\cite{minh_tuan_pham}

\subsubsection{Metoda štěpení oblasti }
Metoda štěpení postupuje opačným způsobem jako metoda spojování oblastí. Na začátku je jedna velká oblast, která se pak dále dělí na co největší počet navzájem nezávislých podoblastí.


\subsubsection{Metoda watershed transform }
Neboli metoda rozvodí. Metodu lze také zařadit do hybridních metod díky svým vlastnostem. Princip metody má geografický základ, kdy je obraz chápán jako reliéf, který je pak zaplavován vodou. Rozvodí jsou u této metody chápány jako hranice mezi regiony.

Metoda postupuje tak, že nejprve nalezne lokální minima a poté začne povodí zaplňovat vodou. Jak postupně hladina sloupá, tak by mohlo   dojít k tomu, že by se dvě povodí slily. V takovém případě se mezi nimi vytvoří hráz. Metoda skončí v momentě dosažení maxima daného terénu.\cite{prednaska_janakova_fekt}\cite{prednaska_janakova_2_fekt}


\subsubsection{Metoda narůstání oblasti}
Nejjednodušším způsobem jak vytvořit segmentovanou oblast je metoda narůstání oblasti (\textit{region growing}). Jak již název napovídá, jedná se o seskupování oblasti sousedních pixelů s podobnou amplitudou.

Při vytváření počátečního regionu se zvolí náhodný pixel tzv. semínko, které je považováno ja počáteční bod regionu. Postupným připojováním sousedních pixelů dochází k rozrůstání oblasti a to až do doby, dokud není splněno určité kritérium homogenity.\cite{stanislav_straka} Těchto semínek je zvoleno více a cílem je z nich vytvořit souvislé oblasti, které podléhají zvoleným kritériím. Rozrůstání semínka může probíhat buď vždy přes hranu tj. sousední pixely, tudíž rozrůstání oblasti probíhá ve čtyřech směrech nebo je rozrůstání ještě obohaceno o diagonální sousedy, potom se tedy semínko rozrůstá do osmi směrů. Další krok rozrůstání se děje až v momentě, kdy dojde k výpočtu rozdílu mezi počátečním bodem semínka a jeho sousedem, pokud pak je tato vypočtená hodnota menší než je kritérium, dojde ke sloučení pixelů. Jako nové semínko je  zvoleno to s nejmenším rozdílem. Poté dojde k výpočtu nové hodnoty počátečního bodu jako průměr hodnot regionu.\cite{minh_tuan_pham}

\subsubsection{Shluková analýza}
Jedná se o obecnou statistickou klasifikační metodu, která při zpracování obrazu sdružuje pixely podobných vlastností do tzv. shluků. Každý shluk má poté nějaké společné vlastnosti, které jsou vždy odlišné od vlastností u jiných shluků. Shlukování je použito například u nerunových síťí v případě učení bez učitele. \cite{prednaska_janakova_2_fekt}

Jedním ze způsob, jak data shlukovat, je  metoda \textit{k-means}. Jedná se o iterativní algoritmus, kde počet shluků \texttt{k} je předem dán. Jsou zavedeny centrální body (středy shluků), které reprezentují shluk a jsou také ve stejném prostoru jako vstupní množina dat. Centrální body jsou obvykle voleny náhodně nebo s využitím nějaké heuristiky. Kolem tohoto centrálního bodu se pak ostatní body zařazují dle nejmenší vzdálenosti. Jakmile dojde ke klasifikaci dle stanoveného kritéria, tak je poté i přepočítán středový bod.

\begin{figure}[h]
	\centering
	\includegraphics[width=0.5\linewidth]{obrazky/k-means}
	\caption{K-means.}
	\label{fig:k-means}
\end{figure}

\subsection{Znalostní  metody}
Pokud metody využívají již dříve získané znalosti objektů v obraze, potom se řadí do znalostních metod, jelikož ostatní metody tyto  informace k dispozici nemají. 

Získané znalosti jsou interpretovány jako modely nebo šablony objektů. Princip znalostních metod poté spočívá v tom, že tyto šablony/modely objektů srovnávají s přiloženým obrazem a hledá se shoda.\cite{fit_spanel} Srovnávat lze také regiony nebo hledání shody pouze části obrazu s částmi určitého vzoru. Vlivem šumu, zkreslení apod. ale nelze očekávat absolutní shodu, úspěchem resp. shodou v tomto případě bude vhodné maximální kritérium.\cite{prednaska_janakova_2_fekt}

\subsubsection{Active Appearance Models}
Metoda se využívá při ztvárnění lékařských snímku, jejich detekci či rozpoznávání obličeje apod. Princip   spočívá v tom, že se nejprve z vysegmentovaných trénovacích dat vytvoří statistický model, který je pak porovnáván s objektem v obraze.\cite{prednaska_janakova_2_fekt} Model se skládá z kontury a textury, které jsou uvnitř tvaru. Výsledkem je pak zjištění transformace modelu na vstupní obraz, která je řešena regresní analýzou, díky které dochází k minimalizaci rozdílu mezi vstupním obrazem a tím vytvořeným ze statistického modelu. Velkou výhodou metody je rychlé porovnávání resp. prohledávání obrazu. \cite{pavel_svoboda_fit}


\subsection{Hybridní metody}
\label{chapter:2:hybridni_metody}
Jedná se o metody, které nelze klasifikovat do již zmíněných kategorií výše, jelikož  využívají některé prvky předchozích typů metod tj. kombinaci přístupů.

\subsubsection{Metody založené na neuronových sítích}
% jak postupuje segmentace obrazu pomoci neuronove site tj. rozebrat vstupni, vystupni, konvolucni, sdrzuovaci a plne propojene vrstvy apod, a pak neuronvoe site porovnat s predchozimi metodamy atd., cca a4

Metody popsané výše vždy postupovaly dle určitého předem daného algoritmu, řešící určitý typ problému určitým způsobem. V případě neuronových sítí je zcela vynecháno zaměření se na konkretní úlohu, jedná se o obecný návrh, kterému stačí předložit vstupní hodnoty a jemu odpovídající výstupy. Algoritmizace je zde nahrazena strojovým učením. Sítě se učí daný problém díky konfrontaci se správnými výstupy, čímž získávají  markantní výhodu oproti jiným metodám.

Jak již bylo nastíněno  v předchozí kapitole, neuronové sítě jsou velice flexibilní nástroj a v případě změny problému, na který jsou aplikovány, jsou schopny rychle reagovat díky možnosti učení. Smyslem neuronových sítí je přiblížit zpracování obrazu tak, jak  jej zpracovává lidský mozek.

Konvoluční neuronové sítě postupují při segmentaci obrazu tak, že si nejprve  ze vstupního obrázku sestaví sadu příznaků, kterými pak filtruje vstupní obraz pomocí konvoluce, která nám udává míru shody. Výstupem vrstvy je potom stejný počet vrstev jako příznaků, protože se obrázek filtroval všemi příznaky a tedy disponuje více mezivýsledky, které slouží jako vstup následující sdružovací vrstvy. 

Sdružovací vrstva tyto konvoluční vrstvy zmenší, přičemž se snaží zanechat maximum přínosných informací. Díky této vrstvě dojde k zásadnímu zmenšení vstupních dat a snížení paměťových nároků. 

Poslední vrstvou je plně propojená vrstva, která řídí vyhodnocení zpracovaných dat. Tvoří logiku konvolučních neuronových sítí. Rozhoduje především o klasifikaci objektů do skupiny případně i skupiny, do kterých je objekt zařazen. 

Po klasifikaci dochází již k sestavení   obrazu a výsledné segmentaci.
\newline
\begin{description}
	\item[LeNet-5] Jedná se o sedmistupňovou 		konvoluční neuronovou síť, kterou navrhl již v roce 1998 Yann LeCun a jeho tým. Architektura vyniká svojí jednoduchostí, což byl také jeden z hlavních důvodů jejího dalšího širokého použití.
	\newline
	
	Síť se skládá ze dvojice konvolučních a poolingových vrstev, kterou jsou následovány podvzorkovací vrstvou, dále dvojicí plně propojených vrstev a nakonec klasifikátorem softmax.\cite{lenet_alexnet}
	\newline
	
	Její první použití sloužily k rozpoznání číslic, které byly digitalizovány do formátu 32x32px ve stupni šedi. S vyšším rozlišením vstupních obrázků ma síť velké paměťové nároky.\newline
\end{description}

\begin{description}
	\item[AlexNet] Síť má podobnou architekturu jako LeNet, ale oproti ní, jde více do hloubky, kde s každým zanořením se vyskytuje také vyšší počet filtrů. Po každé plně propojené nebo konvoluční vrstvě následuje  aktivace ReLU
	\newline
	
	AlexNet se skládá z pěti  plně propojených  a pěti konvolučních vrstev. První dvě konvoluční vrstvy jsou následovány těmi sdružovacími. Následně třetí, čtvrtá a pátá vrstva jsou spojeny přímo. Po poslední páté vrstvě následuje sdružovací vrstva. Výstup sítě je realizován pomocí dvojice prvně propojených vrstev a klasifikátorem softmax. Po každé konvoluční a plně propojené vrstvě je aplikována funkce ReLU.\cite{AlexNet}\newline
\end{description}

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


\begin{description}
	\item[GoogleNet/Inception] Síť se skládá z celkem 27 vrstev z toho 5 sdružovacích (poolingových).\cite{google_net_paper} Celá síť se významně liší např. od AlexNetu nebo VGGNet architektury. Střed sítě zahrnuje konvoluci 1x1 a namísto plně propojených vrstev na konci sítě (na výstupu) je použita globální sdružovací vrstva.  \cite{google_net} GoogleNet také implementuje nový prvek, čimž se významně odslišuje od předešlých architektur a to je tzv. \texttt{inception module}, který využívá dávkovou normalizaci a je založený na několika malých konvolucích, díky čemuž je možné významně snížit počet parametrů.\cite{google_net_paper}\newline
\end{description}


\begin{description}
	\item[VGGNet] Neuronová síť je složená z 16 konvolučních vrstev(v hlubší specifikaci může být tento počet i vyšší). Využívá pouze konvoluci 3x3 ale velký počet filtrů. Konvoluční krok je   nastaven fixně na 1px. Stejně tak prostorové zarovnání pro konvoluce je 1px. Sdružování tj. \texttt{max-pooling} je prováděno přes okno o velikosti 2x2px s krokem 2.\newline
	
	Sadu konvolučních vrstev následuje trojice plně propojených vrstev s rozdílnými počty kanálů. Jejich nastavení je v síti VGGNet pro všechny konfigurace stejná.\newline
	
	Poslední vrstva obsahuje funkci softmax a všechny skryté vrstvy neuronové sítě používají jako aktivační funkci ReLU.\cite {vgg16}\newline
\end{description}


\begin{description}
	\item[ResNet] Základy sítě ResNet jsou inspirovány sítěmi VGGNet, oproti nim ale disponují vyšším počtem konvolučních vrstev tj. 34. Oproti VGGNet má menší počet filtrů.\newline
	
	
	 Konvoluční vrstvy mají filtry o velikosti 3x3. V síti musí být splněn fakt, že velikost výstupní mapy příznaků musí odpovídat stejnému počtu filtrů. Pokud v sítí dochází k dělení map příznaků, potom se počet filtrů násobí. Navíc jsou mezi skupinky konvolučních vrstev přidány dopředná spojení. Díky takovým přidaným spojením je možné trénovat neuronovou síť i s větším počtem konvolučních vrstev aniž by architektura sítě byla složitější např. než síť VGGNet.\newline
	
	Podvzorkování je realizováno pomoci konvolučních vrstev s krokem 2. Plně propojená výsledná vrstva sítě má aktivační funkci softmax.\cite {resnet}
\end{description}


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

\section{U-net}
Jedná se o konkrétní podobu \zk{zkFCN} (\zkratkatext{zkFCN}) resp. její modifikaci, která provádí segmentaci obrazu. U-net architektura   přináší vylepšení především pro lepší zpracování biomedicínských obrazů, jelikož   dokáže lépe manipulovat s větším rozlišením vstupních obrázků s efektivnější paměťovou náročností.


Architektura byla modifikována a rozšířena tak, aby byla schopna i s menší množinou trénovacích dat dosahovat přesné segmentace. Jednou z nejdůležitějších modifikací také je, že v nadvzorkovací části je obsaženo velké množství map příznaků, které umožňují propagovat kontextové informace do vyšších vrstev. Mezi další charakteristické vlastnosti patří, že využívá symetrické rozšiřovací cesty, díky kterým umožňuje přesně lokalizovat jednotlivé pixely.


\subsection{Architektura}
Architektura UNET se skládá ze dvojice cest neboli stran, kde v levé částí dochází k zanořování a v pravé postupné skládání ze zanořených vrstev. Zanořování se skládá z opakované aplikace konvoluce s aktivací ReLU a dále ze zmenšení neboli podvzorkování dat (poolingu). Naopak vynořovací strana poté aplikuje opačný proces, tedy nadvzorkování vzorků.
\begin{figure}[h]
	\centering
	\includegraphics[width=0.97\linewidth]{obrazky/u-net}
	\caption{Architektura U-net. Převzato z \cite{unet}}
	\label{fig:unet}
\end{figure}


V každém podvzorkovacím kroku se zdvojnásobuje počet příznaků. Celkem má síť 23 konvolučních vrstev, které jsou rozděleny do pěti úrovní zpracování jak pro podvzorkování (pomyslné schody dolů), tak pro nadvzorkování (pomyslné schody nahoru). Po načtení vstupního obrázku následuje dvojice konvolučních vrstev 3x3 a jedna podvzorkovací vrstva 2x2. Jednotlivé úrovně, tak jak postupně dochází k zanořování, jsou spojené s výstupními úrovněmi. Toto spojení slouží k překopírování a ořezaní dat, což je pak vhodné při rekonstrukci výsledného segmentovaného obrazu. S každým přechodem do nižší úrovně resp. zanoření dochází ke zdvojnásobení map příznaků díky sdružovací vrstvě tj. 64 se zdvojnásobí na 128 atp.\cite{unet_deeplearning} Účelem podvzorkovacích vrstev napříč všemi úrovněmi zpracování je ten, aby během \textit{poolingu} získaly co nejvíce kontextových informací o vstupním obraze, které se pak využijí k provedení segmentace. Analogickou resp. opačnou operaci nadvzorkování lze vidět poté opět u vynořování, kdy se počet map zase dvakrát zmenšuje. Mezi částí, kde dochází k   zanoření a vynoření, se nachází pomyslný most, který je tvořen dvěma konvolučními vrstvami a dochází zde k metodě \textit{dropout} viz výše a generování vektoru. Most zde má roli plně propojené vrstvy\cite{unet}

Díky svým výše popsaným vlastnostem umožňuje U-net architektura využívat jako vstup obrázky o rozdílných velikostech. Důvodem je ten, že jediné parametry, které mají vliv na učení jsou konvoluční jádra (mapy příznaků) a jsou zcela nezávislé na velikosti vstupních obrázků. Jejich menší velikost  je méně paměťové náročná, tedy i zpracování bude rychlejší. V případě větších obrázků tomu bude sice naopak, ale zase se bude dosahovat přesnějších výsledků.\cite{unet_deeplearning}



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


\section{Vývojové prostředí}
K tomu aby bylo možné pracovat s architekturou U-net, je nutné mít připravené běhové prostředí. Jedná se o knihovny, díky kterým se dají vstupní data zpracovávat a poté s nimi dále pracovat. 

\subsection{Tensorflow}
Jedná se o software s otevřeným zdrojovým kódem, který je určen pro vysoce náročné numerické operace. Díky své flexibilní architektuře umožňuje výpočty napříč různými platformami od obyčejných procesorů přes výkonné grafické karty až po speciální hardwarové výpočetní jednotky specializované na neuronové sítě. Díky \zk{zkAPI} (\zkratkatext{zkAPI}) lze    provádět výpočty nejen na běžných počítačích, ale i clusterech, serverech a mobilních telefonech. \zk{zkAPI} také poskytuje základní stavební bloky pro vytvoření trénovacích modelů.

Tensorflow byl původně  vyvíjen výzkumným týmem a inženýry z firmy Google, která se zabývala strojovým učením a neuronovými sítěmi. Software je užitečný ale i v dalších vědních oblastech.\cite{tensorflow}

\subsection{Keras}
\label{subsection:keras}
Knihovna Keras je stejně jako Tensorflow software s otevřeným zdrojovým kódem. Jeho autorem je François Chollet z firmy Google. Je navržen tak, aby běžel pomocí některé z knihoven Tensorflow, Microsoft Cognitive Toolkit (CNTK) nebo Theano.

Keras je primárně určen a navržen tak, aby umožňoval rychlé experimentování s hlubokými neuronovými sítěmi. Velký důraz klade na to, aby byl rozšířitelný, modulární a uživatelsky přívětivý. Podporuje jak konvoluční neuronové sítě, tak rekurentní sítě. Díky vhodně navrženému API, které  následuje doporučené postupy tj. široce používané návyky při jeho návrhu, je významně zredukována kognitivní zátěž. \cite{keras}

\subsection{Numpy}
\label {sec:numpy}
Knihovna NumPy se specializuje na zpracování numerických dat pomocí multidimenzionálních polí označované jako \texttt{ndarrays}. Je napsaná v pythonu a umožňuje rozšířit pole o operace nad jednotlivými prvky v poli, které python sám o sobě nenabízí.  Například pokud je nutné použít nějakou lineární operaci nad polem pro jeho další  použití, tak není nutné pole nejdříve předzpracovávat.

Pole mohou byt také modifikovány dynamicky v případě, kdy je nutné se zbavit z určitého pole nějakých hodnot. Není nutné vytvářet nové pole, ale stačí použit masku na pole stávající.\cite{scipy_and_numpy}


\subsection{Scikit}
Scikit neboli scikit-image je opět otevřená knihovna se zdrojovými kódy, která je určena ke zpracování obrázků v programovacím jazyce python. Autorem je Stéfan van der Walt.

Scikit-image umožňuje  ukládání, načítání a úpravu obrázků. Dále obsahuje  také algoritmy transformace, detekce příznaků, segmentace obrazu (např. pomocí prahování), analýzy, filtrování (zostření obrazu, odstranění šumu apod.) apod. Knihovna je navržena tak, aby byla kompatibilní i s dalšími knihovnami jako je např. SciPy nebo NumPy. \cite{scikit}\cite{scipy_and_numpy}


 


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


\section{Vstupní data}
Následující část pojednává o přístroji, kterým jsou data snímány. Dále o typech dat, jejich formátu a   způsobu, jakým se budou  provádět veškeré operace nad takovými daty. Dále také způsob řazení dat do více tříd, proces zjednodušení a informace k manuální segmentaci tj. referenčním maskám.


\subsection{Magnetická rezonance - MRI}

Magnetická rezonance se v současné době řadí mezi jedny z nejmodernějších vyšetřovacích metod. Slouží pro přesné zobrazení částí lidského těla bez použití rentgenových paprsků, které jsou nahrazeny silným magnetickým polem. Principiálně magnetická rezonance dokáže interagovat s atomy vodíků, který je v lidském těle zastoupen v obrovském množství díky vodě. Silné stacionární  magnetické pole interaguje s vysokofrekvenčními radiovými vlnami a dochází tak k detekování indukovaných proudů, které se poté převádí na obraz. Rozdílné intenzity  znamenají různé hustoty atomů vodíku. Snímání částí lidského tělo   probíhá po řezech (tenkých vrstvách), které mají obvykle tloušťku do 5mm. Velkou výhodou MRI je také to, že kosti nijak nenarušují obraz. Tato vlastnost plyne z podstaty měření, jelikož magnetická rezonance se využívá především u měkkých tkání apod.

Doposud nebyly prokázány   škodlivé účinky magnetické rezonance. Využívá se především k vyšetření mozku, míchy, dále při neurologických či onkologických onemocněních. 

\subsection{Popis zpracovávaných dat}
\label{popis:dat}
Zvolený dataset, nad kterým se bude v následující části práce pracovat, je složen z více typů skenů magnetické rezonance. Data mají velikost voxelu  0.958mm × 0.958mm × 3.0mm a všechny jsou zarovnány. Pole zkreslení bylo opraveno pomocí algoritmu \textit{N4ITK}. Dataset je součástí výzvy \textit{MRBrainS18}.

V některých snímcích T1-IR se ve spodní částí objevují oblasti nebo objekty (šum), který se objevuje často právě při skenování a může mít vliv na přesnost, proto s ním musí automatická segmentace počítat.


Formát dodávaných dat je typu \zk{zkNIFTI} (\zkratkatext{zkNIFTI}) s koncovkou \texttt{.nii}. Důvodem zavedení takového lékařského formátu byl ten, že jiné typy dat nedisponovaly informacemi o orientaci v prostoru, tudíž data nemohla být jednoznačně interpretována.

Trénovací data se skládají ze 7 subjektů, ke kterým je přiložena i manuálně vytvořena reference s dělením do 11 tříd.\cite{MRBrainS18}  Třídy jsou definovány v tabulce \ref{tab:multiclasses_labels}


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


\begin{table}[h!]
	\begin{tabular}{|l|l|}

		\hline 
		\multicolumn{1}{|c|}{\textbf{\texttt{Štítek}}} & \multicolumn{1}{c|}{\textbf{\texttt{Popis}}} \\ %\rowcolor[gray]{.95}
		\hline 
		0& pozadí \\ 
		%\hline 
		1& kortikální šedá hmota \\
		%\hline 
		2& bazální ganglia \\ 
		%\hline 
		3& bílá hmota \\
		%\hline 
		4& léze bílé hmoty \\ 
		%\hline 
		5& mozkomíšní mok (cerebrospinální tekutina \zk{zkCSF}) \\
		%\hline 
		6&  mozkové komory\\ 
		%\hline 
		7&  mozeček\\
		%\hline 
		8&  mozkový kmen\\ 
		%\hline 
		9&  infarkt\\
		%\hline 
		10&  ostatní\\ 
		\hline 
	\end{tabular}
	\centering
	\caption{Úplná tabulka segmentovaných tříd.\cite{MRBrainS18}}
	\label{tab:multiclasses_labels}
\end{table}

Ovšem cílem výzvy je automatická segmentace do tříd 1 - 8, zbylé budou z vyhodnocení vyloučeny tj. nebudou nijak ovlivňovat výslednou přesnost a lze je označit libovolným štítkem. Štítek (třída) 0 neboli pozadí nebude považován za samostatný objekt.

Algoritmy, které segmentují pouze šedou hmotu, cerebrospinální tekutinu a bílou hmotu by   měly
sloučit   třídy následovně: 1 a 2, 3 a 4, 5 a 6 tj. celkem tedy 1-6. Výstup bude označeno jako 0, šedá hmota jako 1, bílá hmota pomocí štítku 2 a cerebrospinální tekutinu jako 3.  Mozeček a mozkový kmen (7 a 8) budou z hodnocení vyloučeny a budou zařazeny zvlášť.\cite{MRBrainS18}

\subsubsection{Poznámky k manuální segmentaci}
 
\begin{itemize}
	\item Na skenování léze (poranění) bílé hmoty byl použit sken FLAIR
	\item Vnější okraj  \zk{zkCSF} (\zkratkatext{zkCSF}) nebo \textit{mozkomíšní mok} byl segmentován metodami:
		\begin{itemize}
			\item T1(vážený)
			\item T1(vážený)-IR (inversion recovery)
		\end{itemize}
	\item Všechny ostatní struktury byly segmentovány pomocí T1(vážený) o velikosti voxelu \texttt{0.958mm × 0.958mm × 3.0mm}
	\item V  \zk{zkCSF} je také zahrnut cerebrální falx.
	\item Segmentace \zk{zkCSF} zahrnuje také vrchní sagitální sinus a transverzální
	 siny.\cite{MRBrainS18}
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage % ================== nova stránka ==============================================%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsubsection{Vizualizace segmentace}
Vizualizace vícetřídé segmentace lze vidět na obr. \ref{fig:2d_segmentation}. Jak již bylo nastíněno výše, různé části mozku se označují jiným štítkem. Na řezu vpravo lze vidět tyto štítky obarvené pro lepší orientaci v segmentaci. Obrázek napravo je zároveň i ukázkou referenční manuální segmentace, podle které se bude celá konvoluční neuronová síť učit a upravovat svoje výstupy.

\begin{figure}[h!]
	\centering
	\includegraphics[width=1.0\linewidth]{obrazky/2d-segmentace_bitmap}
	\caption{2D obrázek řezu mozku.}
	\label{fig:2d_segmentation}
\end{figure}

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


\subsubsection{Vizualizace 3D skenu}
Jednotlivé snímky lze rekonstrukci poskládat tak, jak byl veden sken. Lze pozorovat jednotlivé řezy lebkou (žluté okraje) a průřez mozkem (rudá část). Obrázek \ref{fig:3d_segmentation} je realizován skenem FLAIR, výsledek skenu poté prošel i korekcí, kdy bylo opraveno pole zkreslení pomocí algoritmu viz výše. \footnote{Renderování řezů do 3D bylo realizováno pomocí programu Aliza. Bitmapový obrázek byl poté vektorizován. }.


\begin{figure}[h!]
	\centering
	\includegraphics[width=0.85\linewidth]{obrazky/mozek_3d}
	\caption{3D obrázek řezů mozku.}
	\label{fig:3d_segmentation}
\end{figure}


%
%DODAT DO KAP.2
%- UNET
%- BEHOVE PROSTREDI
%- popis vstupnich dat (muze to byt vektor tj. ilustracne), zde uvist co to je TJ MRI popsat, JAK FUNGUJE SGEMENTACE u techt pristroiju a jak bude probiaht zpracovani apod.
%
%KAP.3
%- vyhodnoceni vysledku
%
%KAP.4
%- ZAVER

 


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



% mozna osnova:
% ● odstavec s úvodem (ať to není příliš hrr a čtenář vidí souvislost s předchozím textem)
% ● Topologie (a nastavitelné parametry???)
% ● Princip učení a testování - sem bych dal potom vybrané vzorce
% ● Příklady typického využití


\chapter{Implementace vícetřídé segmentace}
Vícetřídou segmentaci lze řešit nepřeberným množstvím způsobů a také z toho důvodu bude následující kapitola  pojednávat o více možnostech a přístupech, jak problém vícetřídé segmentace řešit. Tyto metody budou trénovat neuronovou síť nad stejně objemným datasetem viz.  \ref{popis:dat}.

Postupy, které byly zvoleny pro řešení vícetřídé segmentace, se liší zejména ve způsobu, jakým bude na data pohlíženo a jakým způsobem budou zpracovávány, od čehož se také bude odvíjet následné řešení celé segmentace. Změny přístupu ve zpracování dat se poté musí též reflektovat i v  samotném modelu konvoluční neuronové sítě.

První možností, jak vícetřídou klasifikaci provést, je že se vstupní velikost modelu bude shodovat s velikostí obrázku, tedy nebude nutné obrázky upravovat, co se do jejich velikosti týče. Počet vstupních dat bude   odpovídat počtu 3D skenů. Model bude nastaven tak, aby byl schopen rozlišovat 10 různých tříd. Výhodou takového řešení je, že příprava dat je jednodušší.

Druhý přístup bude poněkud odlišný. K datům  bude přistupovat tak, že si 3D skeny zmenší na menší částí, které se pak mohou a nemusí překrývat. Jeden sken tedy nebude zpracován sítí během jednoho kroku, jako je tomu u řešení výše. Jelikož se data takto zmenší resp. jejich dimenze, tak vznikne velké množství fragmentů z původního velkého skenu, což je velice přínosné např. v případech, kdy je dat nedostatek. Počet kroků pro zpracování jedné hlavy bude tedy roven počtu 3D fragmentů vytvořených z původního nezmenšeného 3D skenu. Díky fragmentování 3D skenu   lze použít při zpracování i překryv tj. posuvné okno, které se postará a rozložení hlavy na menší části. Překryvem jednotlivých kostek pak objem fragmentů naroste poměrově o velikost překryvu, což má poté též pozitivní vliv na celou síť.



\section{Transformace vstupních dat}
Vstupní data, jak již bylo nastíněno v předešlé kapitole, jsou dodávány ve formátu \textit{.nii}. Pro účely zpracování byly data převedeny pomocí skriptu \texttt{dataset.py} do formátu \textit{.png}, se kterým se bude dále pracovat. Velikost každého řezu je 240 x 240 pixelů. Každý sken se skládá ze 48 takových řezů. Dataset disponuje 7 různými 3D skeny, které jsou nasnímány v různých režimech. Výhodou formátu \texttt{.nii} oproti \texttt{.png} je ten, že obsahuje dodatečné informace o umístění řezu v prostoru, což zlepšuje jejich interpretaci zejména v případech, kdy je důležité se v nich rychle  zorientovat. 


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



Důvodem zvolení exportu do \texttt{.png} souborů ale  byla jejich výhoda v dalším zpracování, jako je možnost prohlížení přímo po jednotlivých řezech nebo garance, že obrázky   v sobě nebudou mít dodatečné informace, které se přímo dat jako takových netýkají a mohly by poté mít i negativní vliv na výsledek trénování. 



\subsection{Zpracování vstupních dat a proces výpočtů}
Aby se dalo s jednotlivými obrázky neboli řezy mozku pracovat, bylo třeba tyto obrázky nahrát do numpy matic, které vedle uchovávání dat také disponují celou  řadou operací nad těmito daty (viz. v kapitole \ref {sec:numpy}), které přináší obrovskou výhodu při dalším zpracování.



\subsection{Základní zpracování dat a načtení do numpy}
Jak již bylo zmíněno výše, každý vstupní obrázek se skládá ze 48 řezů o velikosti 240 sloupců a řádků - zde  je ale třeba ještě uvažovat kanál, který z důvodu jednoduchosti je pouze jediný. Paleta RGB  je zde převedena na stupeň šedi\footnote{Jedná se pouze o převod režimu   RGB do stupně šedi, data barevnou složku sama o sobě neobsahují.}, čímž se nám počet kanálů zredukuje z 3 na 1. Proces zpracování probíhal tak, že se řez po řezu nahrál do   matic  a výsledná numpy matice měla rozměr pro jeden obrázek při úvaze jednoho kanálu ve formátu n-tice: \newline\texttt{(počet\_skenů,pocet\_řezů,šířka\_řezu,výška\_řezu,kanál)} což odpovídá tvaru: 48x240x240x1 resp. \texttt{7x48x240x240x1} pro 7 mozků.



U masek je situace poněkud složitější, protože je zde ještě nutné uvažovat vedle základních 4 rozměrů také třídy, podle kterých mají být trénovací data segmentovány. Počet tříd poté tvoří poslední rozměr matice masek, tedy \texttt{ 7x48x240x240x10}. Kanál, jelikož je pouze jediný, se může zanedbat díky změně tvaru celé matice, která se využívá v architektuře UNET. Data masek jsou z načteného tvaru převedeny na tvar 7x($48\cdot 240\cdot 240$)x10 resp. \texttt{7x2764800x10} a dále  pomocí funkce \texttt{to\_categorical} do vicetřídého tvaru. Jedná se o tvar, kdy je zabezpečena korespondence masky a obrázku. Takový tvar umožňuje neuronové síti stanovit pravděpodobnost každé masky v daném řezu. Z takového formátu se poté   převádí zpět reverzní funkcí po provedení predikce na testovacích datech.



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



\section{Extrakce 3D obrázku na  menší částí}
Rozdělení většího trojrozměrného obrázků na menší částí přináší celou řadu výhod jako je větší míra flexibility řešení z hlediska heuristiky nebo různými možnostmi při trénování. A to je také důvod, proč takové řešení bylo implementováno.

Při zpracování velkého datasetu také často vzniká problém s pamětí, protože trénovány objekt je moc velký na jeho nahrání do ní resp. na takové řešení má daleko vetší dopad velikost grafické karty, což je nežádoucí. 

Aby se takovému problému předešlo, byl celý sken rozdělen na menší části (fragmenty) o dané velikosti. Každý takové menší segment je již možné velice snadno nahrát do paměti. Fragmentů 3D skenu je možné pomoci dávkového zpracování (při trénování) nahrát do paměti hned několik, jelikož jsou  samy o sobě dostatečně malé. 


Jednou z výhod  menších částí pak v takovém případě je, že se data z datasetu mohou nahrát přímo a extrakce na menší částí může probíhat v momentě, než je zahájeno trénování. Další a nejspíše i největší výhodou také je, jak již bylo nastíněno výše, že je možné použit pro extrakci pohyblivé okno tj. jednotlivé fragmenty mozku se mohou v paměti překrývat, čímž je možné ve výsledku dosáhnout přesnější finální predikce.


\begin{figure}[h!]
	\centering
	\includegraphics[width=0.55\linewidth]{obrazky/cube_patches}
	\caption{3D patche \cite{img_cube_patches}}
	\label{fig:cube_patches}
\end{figure}

Ukázka rozdělení na menší části lze vidět na obr. \ref{fig:cube_patches} výše, kdy velká krychle reprezentuje celý 3D sken hlavy a menší barevné částí zmiňované fragmenty.


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



\subsection{Rozdělení 3D skenu pomocí posuvného 3D okna}
Při extrakci fragmentů ze 3D skenu mozku je možné zvolit určitý překryv, o kolik se budou jednotlivé části překrývat tj. krok a dále velikost 3D okna, která reprezentuje i samotnou velikost cílového fragmentu. Definované 3D okénko se poté posouvá o velikost kroku, což vytváří výsledný přeryv. Pokud by např. byl krok posunu 3D okna shodný s jeho velikostí, překryv by byl nulový.\footnote{Za koncem jednoho fragmentu bude začínat ihned další apod., což samo o sobě odpovídá blokovému zpracování.}



Tímto způsobem tedy díky překryvu vznikne větší množství menších částí skenu, nežli by vůbec mozek obsahoval.\footnote{V případě blokového zpracování.} Pokud by byly fragmenty extrahovány blokově \footnote{V případě, že krok je shodný s velikostí okna.}, kde překryv není žádný a každý segment plynule navazuje na ten následující, tak  počet fragmentů již bude shodný.


\begin{figure}[h!]
	\centering
	\includegraphics[width=0.65\linewidth]{obrazky/cube_patches_sliding_window2}
	\caption{3D patche }
	\label{fig:cube_patches_sliding_window}
\end{figure}

Na obr. \ref{fig:cube_patches_sliding_window}  je demonstrován 50\% překryv fragmentů, kdy barevné 3D kostky reprezentují 3D okno a vyhraničené oblasti bílou a červenou přerušovanou čárou vyznačují posunuté 3D okno o velikost kroku. Posun trojrozměrného okna je možný  ve všech třech osách \texttt{x}, \texttt{y} a \texttt{z}.
 
 

\section{Augmentace dat}
Hlavní přínos augmentace dat spočívá v tom, že je možné tímto způsobem rozšířit datovou sadu např. v případě, kdy zvolený dataset nedisponuje dostatečným objemem dat. Díky jednoduchým augmentačním technikám pak zůstane   zachován fakt, že se síti budou předkládat data, která ještě neviděla a které přispějí k její vyšší obecnosti. 


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



Mezi další přínosy patří zvýšení tzv. invariance na posuvy apod. V situacích, kdy jsou data pořizována různými technikami pod různými úhly reflektující jednou a tutéž věc, může dojít k tomu, že  neuronová síť by taková data, jen trochu odlišná od těch, na které byla trénovaná, již nemusela  vůbec rozpoznat.

Neuronová síť má také tendenci k tomu si dataset pamatovat, čímž dochází k přetrénování a obecně ke snížení obecnosti celé sítě.

Augmentovat data lze např. rotací, posuvem, přidáním šumu apod. Díky ní pak bude neuronová síť robustnější a také významně přispěje k její generalizaci.

Další faktor augmentace je ten, že by pozměněná data vůči původním měly pořád dávat smysl a měly by být pro neuronovou síť přínosem v učení. Jedná se tedy o konkrétní použití dané sítě  a od toho se poté odvíjí i postup.

V případě vícetřídé segmentace dává smysl otočení hlavy, aby síť byla schopna reagovat na situaci, kdy obrázky nejsou přesně skenovány kolem ose x nebo y. Další použitou augmentační technikou je zvětšení, jelikož skeny mozku nemusí být vždy totožné velikosti a síť by s touto variantou měla počítat.



\subsection{Aplikace augmentace}
V případě augmentace dat jsou možné dva přístupy, jak ji aplikovat. Vstupní data lze augmentovat přímo při zpracování čímž by nedošlo k rozšíření datové sady. Druhá možnost je augmentaci přidat jako rozšíření datasetu, čímž by došlo k tomu, že by neuronová síť byla méně náchylná k přetrénování a zároveň dokázala lépe řešit segmentaci, jelikož deformace, posuvy, šum apod. by nehrál takový vliv při predikci, jelikož by síť i na tyto případy byla trénovaná. 

K řešení vícetřídé segmentace slouží augmentace zejména k rozšíření trénovací sady, jelikož dataset neobsahuje dostatečně velkou množinu dat pro trénování.

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



\section{Vytvoření modelu a jeho parametry}
Model byl postaven na architektuře Unet. Mezi hlavní důvody, proč byla zvolena tato architektura, patří především to, že dokáže dosahovat dobrých výsledků na menší množině dat a také dále disponuje menší paměťovou náročností.

Samotný proces vytvoření modelu závisí především na vstupních datech, od kterých se odvíjí také parametry modelu. V případě  segmentace 3D lékařských dat  do více tříd je třeba uvažovat, že síť bude klasifikovat data   dle štítků do různých kategorií, které se trénují fakticky separátně. Nejstěžejnější částí modelu  vícetřídé segmentace je nastavení výstupní vrstvy dle počtu tříd, do kterých se segmentuje a tomu přizpůsobit všechny vstupní data, masky a   metriky. Tvar dat, kterými disponuje výstupní vrstva,  očekává model poté i u vstupních  masek při trénování. Vstupní formát trénovacích dat a masek se  neshoduje a také proto tomu bylo nutné     přizpůsobit výstupní vrstvu modelu pomocí změny tvaru této vrstvy.


Model má nastavenou aktivační funkci   \texttt{softmax} na své poslední vrstvě, jelikož se využívá vícetřídá klasifikace. Jako optimalizační \textit{loss} funkci používá \\\texttt{categorical\_crossentropy}. Inicializace  jader probíhá pomocí normálového rozložení na všech  konvolučních 3D vrstvách. %Model též využívá dávkovou normalizaci a dropout.

Korekce výstupu ke vstupním datům během trénování dochází  tak, že\\ \texttt{categorical\_crossentropy} vypočítává pravděpodobnost jednotlivých tříd pro každý pixel úpravou pole o velikosti shodné s počtem segmentovaných tříd, kde každá hodnota pole reprezentuje pravděpodobnost dané třídy, která je dána indexem hodnoty pole.

%- vystupni vrstva unetu musi mit stejny shape jako data masek, ktery se rvou do model.fit(train, masky, .... ), proto se to reshapuje a otaci!!!


% proc byl zvolenej unet rp onase ucely?
% postup vytvoreni unetu
% vstupni foramt dat,
% postup downsamplingu a upsamplingu
% vystupni vrtsva a aktivacni funkce a loss metrika





\section{Rekonstrukce dat}
V momentě ukončení trénování je na řadě predikce, která probíhala ne jediném 3D obrázku resp. více obrázcích vytvořených z  původního 3D skenu pomocí augmentace. Výsledná  výstupní predikce masek, která je výstupem  modelu, se dále musí ještě zpracovat. Jelikož \texttt{categorical\_crossentropy} vypočítává pravděpodobnost jednotlivých tříd pro jednotlivé body obrazu, je nutné vybrat nejpravděpodobnější třídu, a tu pak aplikovat na daný pixel, čímž dojde k vysegmentování pixelu do dané třídy. Každý pixel disponuje polem o velikosti 10\footnote{Velikost odpovídá počtu segmentovaných tříd.} a hodnota, která nabývá nejvyšší hodnoty v tomto poli je predikovaná třída pixelu. Zařazení obrazového bodu do třídy následně probíhá tak, že index vítězné třídy se přiřadí hodnotě pixelu v momentě zpracování predikovaných masek.





Pokud predikce proběhne nad nefragmentovanými řezy resp. skenem, který nebyl pomoci 3D okna fragmentován, tak výstup odpovídá stejnému formátů, jaký do predikce byl nahrán. Situace je tedy složitější v případech, kdy bylo 3D okno použito pro zpracování dat. 





Predikce dat zde probíhá pomocí metody \texttt{fit\_predict}, která má na vstupu jednotlivé fragmenty 3D skenu a pro každý fragment predikuje výslednou masku. Následné zpracování obrázku tedy probíhá tak, že  se nejprve vypočítá pomocí metody \texttt{argmax} výsledná třída segmentace pro všechny řezy 3D fragmentu, díky čemuž je již možné jednotlivé řezy složit do výsledného fragmentu.  Poslední krok zpracování 3D skenu z predikce  spočívá ve složení jednotlivých fragmentů, kterým byly vypočítány klasifikace. %Posledním krokem rekonstrukce do finální podoby probíhá tak, že se překrývající bloky predikce přeskakují a vybírají se pouze nepřekrývající fragmenty.


\begin{figure}[h!]
	\centering
	\includegraphics[width=0.6\linewidth]{obrazky/builded_blocks_of_patches}
	\caption{Ukázka sestavení jednoho řezu z fragmentů.}
	\label{fig:builded_blocks_of_patches}
\end{figure}

 

Na obr. \ref{fig:builded_blocks_of_patches} je demonstrováno skládání 3D skenu z jednotlivých fragmentů po natrénování cca 2 epoch. Z obrázku jsou ještě patrné jednotlivé bloky, z kterých byl daný řez složen. Postupem trénování se vzrůstající přesností dochází k zahlazování jednotlivých bloků a zvyšování detailů až do té míry, že fragmentace již není patrná. Na obrázků již je i patrný obrys výsledné vícetřídé segmentace mozku.



%Do regularizacedat bactnorm, dropout, a jeste do augmentace   histeq

%\patchsize
%\batchsize
%\datasetimagesize
%\slidingwindowstride
%\subsection{Předzpracování dat}
%\subsubsection{Mean normalization}
%https://medium.freecodecamp.org/https-medium-com-hadrienj-preprocessing-for-deep-learning-9e2b9c75165c
%\subsubsection{Mean normalization}
%\subsubsection{Regrese}



