\documentclass[a4paper,10pt]{scrartcl}

\usepackage[czech]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}


\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}

\usepackage[cm]{fullpage}

\usepackage{graphicx}
\usepackage[usenames]{color}
\usepackage{subcaption}
\usepackage{float}

\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{circuits.ee.IEC}
\usetikzlibrary{backgrounds}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{graphs}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{calc}
\usetikzlibrary{patterns}

\usepackage{lettrine}

\usepackage{siunitx}

\title{Vidění robotů - tréninková úloha - řešení}
\author{Jan Chleboun}

\begin{document}
\maketitle
Mějme konvoluční síť s jednou vrstvou, která provádí konvoluci s třídimenzionálním jádrem 4x5(x3), padding = 1, stride = 1. Vstupem je obrázek 100x100, který má 4 složky - R, G, B a hloubkovou informaci. Spočítejte počet operací, které proběhnou při průchodu jednoho obrázku danou konvolucí (jedna operace je buď sečtení dvou prvků, nebo vynásobení dvou prvků). Má v takovémto případě 3D konvoluce smysl (pokud ne, navrhněte lepší řešení)?
\begin{itemize}
    \item Nejprve si uvědomíme, že po aplikaci paddingu bude mít náš obrázek rozměry 102x102x6. 3D konvoluci si rozdělíme do 3 směrů.
    \item V horizontálním směru se do obrázku vejde konvoluční jádro $n_x$ krát, kde  
    $$n_x = \left(\text{šířka obrázku - šířka jádra}\right) + 1 = \left(102 - 4\right)+1 = 99$$
    \item Ve vertikálním směru uděláme obdobnou úvahu, jádro se vejde $n_y$ krát, kde
    $$n_y = \left(\text{výška obrázku - výška jádra}\right) + 1 = \left(102 - 5\right)+1 = 98$$
    \item Musíme vzít v potaz také průchod napříč jednotlivými kanály. Zde se jádro vejde $n_z$ krát, kde 
    $$n_z = \left(\text{počet kanálů - hloubka jádra}\right) + 1 = \left(6 - 3\right)+1 = 4$$
    \item Získáme počet "otisků jádra" n, jako
    $$n = n_x \, n_y \, n_z = 99 \cdot 98 \cdot 4 = 38808$$
    \item Počet operací pro jeden otisk jádra je
    \subitem Násobit 2 prvky budeme $4 \cdot 5 \cdot 3 = 60$ krát
    \subitem Tyto vynásobené prvky poté posčítáme, sčítat budeme tedy 59 krát.
    \item Na jeden "otisk jádra" tedy připadne $60 + 59 = 119$ operací.
    \item Celkový počet operací je tedy
    $$119 \, n = 119 \cdot 38808 = 4618152$$
    \item Nyní se zamyslíme nad smyslem zadané úlohy - provádíme zde 3D konvoluci obrázku, který obsahuje hloubkovou složku - tím vlastně "mícháme jablka a hrušky" - do informací o hranách v obrázku přidáváme informaci vzdálenosti, tyto spolu ale vůbec nemusí souviset. Dalším problémem je, že naším cílem je detekovat stejný objekt ať už je v jakékoli vzdálenosti, informace o ní nám tedy spíše škodí a vůbec ji nepotřebujeme. Lepším řešením by tedy byla například 2D konvoluce s jádrem 3x3 sečtená přes barevné kanály, kde bychom hloubkovou informaci do sítě vůbec neposílali.
\end{itemize}
\end{document}

