

\newcommand{\state}{\vec{q}}
\newcommand{\statei}{\vec{q}_i}
\newcommand{\statemax}{\vec{\hat{q}}}

\newcommand{\particle}{\vec{p}}
\newcommand{\particlei}{\vec{p_i}}

\newcommand{\emp}[1]{\textcolor{red}{#1}}
\newcommand{\MISE}{\operatorname{MISE}}

 \setlength{\TPHorizModule}{\paperwidth}
% \setlength{\TPVertModule}{\textwidth}

\section{Background}
	\begin{frame}[fragile]
	  \frametitle{Indoor Localisation}
        \begin{tikzpicture}
         \node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=\linewidth]{gfx/info_graphic}};
        \end{tikzpicture}                       
\pause
        \begin{tikzpicture}[overlay]
           \node [draw, red, ultra thick, rounded corners,  minimum height=0.75cm, minimum width=3.5cm, shift={(9cm,0.75cm)}]  at (current page.south west) { };        
        \end{tikzpicture}
	\end{frame}
    
	\begin{frame}[fragile]
    \frametitle{System Properties}
    
    \begin{itemize}[label=\textbullet]
        \item Particle filter with importance sampling describes posterior as a set of samples        
        \item One particle: $\particlei = \langle \statei, w_i \rangle$
        
        \item Possible state
        \begin{itemize}               
            \item $\statei=(x,y,z,\theta,\hat{\rho}_{\text{rel}})^T,  \quad  \overbrace{x,y,z\in\R}^{\text{position}},  \quad \overbrace{\theta\in\R}^{\text{heading}}, \quad \overbrace{\hat{\rho}_{\text{rel}}}^{\text{rel. pressure}}$
        \end{itemize}
        
        \item Constrained computational environment (Smartphone + 500ms time frames)
        \pause        
    \end{itemize}	
    \begin{tikzpicture}[overlay]
    \node [draw, red, ultra thick, rounded corners,  minimum height=1.1cm, minimum width=2.3cm, shift={(-9.6cm,-7.2cm)}]  at (current page.north east) { };
    \end{tikzpicture}        
    \end{frame}    
    
    \begin{frame}
      \frametitle{Our problem}
      Increased error due to multi modalities 
      
      \resizebox{\textwidth}{!}{\input{gfx/multimodalpath.eps_tex}}
    \end{frame}
    
%        \begin{frame}
%            \frametitle{Our problem}
%            Multi modalities increase the error due to weighted average \\
%            Density estimate could solve this, but to expensive to fit in 500ms window \\
%            Key was to recognise that KDE can be approximated with a Gaussian filter \\
%            
%            KDE $\approx$ binned KDE \\
%            BKDE $\approx$ Gaussian filter \\
%            Gaussian filter $\approx$ box filter \\
%            $\rightarrow$ KDE $\sim$ box filter
%        \end{frame}    
    
    \begin{frame}[fragile,t]
		\frametitle{State Estimation}    

        \begin{textblock*}{0.9\textwidth}(2mm,1.2cm)
        \resizebox{1\textwidth}{!}{\input{gfx/max_particle.tex}}
        \end{textblock*}
        
        \begin{textblock*}{1.0\textwidth}(0.7\textwidth,1.4cm)
        Max particle: \par $\displaystyle \statemax := \max_{\statei} \{ w_i \}     \vphantom{\sum_i^N}$
        \end{textblock*}        
    \end{frame}
    
    \begin{frame}[fragile,t]
   		\frametitle{State Estimation}    
        \begin{textblock*}{0.9\textwidth}(2mm,1.2cm)
        \resizebox{1\textwidth}{!}{\input{gfx/weighted_avg.tex}}
        \end{textblock*}
        
        \begin{textblock*}{1.0\textwidth}(0.7\textwidth,1.4cm)
        Weighted average: \par $\displaystyle \statemax := \frac{1}{W} \sum_{i=1}^{N} w_i \statei \, \text{ with } W=\sum_{i=1}^{N}w_i$
        \end{textblock*}
    \end{frame}
    
    \begin{frame}[fragile,t]
   		\frametitle{State Estimation}    
        \begin{textblock*}{0.9\textwidth}(2mm,1.2cm)
        \resizebox{1\textwidth}{!}{\input{gfx/boxkde.tex}}
        \end{textblock*}
        
        \begin{textblock*}{1.0\textwidth}(0.7\textwidth,1.4cm)
        Kernel density estimation: \par $\displaystyle \statemax := \arg\max_{\statei} \hat{f}(\statei)    \vphantom{\sum_i^N}$
        \end{textblock*}
    \end{frame}    
    
%    \begin{frame}[fragile,t]
%		\frametitle{State Estimation}    
%        \textbf{Max particle} 
%        \begin{equation*}
%           \statemax := \max_{\statei} \{ w_i \}
%        \end{equation*}
%        %Select $\statemax$ with largest corresponding $w_i$
%        
%        \begin{tikzpicture}[remember picture,overlay]
%            \node[xshift=4.5cm,yshift=2.6cm] at (current page.south west) (a) {%
%            \input{gfx/max_particle.tex}};
%        \end{tikzpicture}
%        
%        \begin{columns}[t]
%          \column{0.58\linewidth}
%              %\input{gfx/max_particle.tex}
%            
%           \column{0.38\linewidth}
%             \begin{proconlist}
%              \itempro Fast
%              \itemcon Not smooth
%             \end{proconlist}                       
%        \end{columns}
%    \end{frame}
%    
%    \begin{frame}[fragile,t]
%   		\frametitle{State Estimation}    
%        \textbf{Weighted average}
%        \begin{equation*}
%            \statemax := \frac{1}{W} \sum_{i=1}^{N} w_i \statei \text{, with } W=\sum_{i=1}^{N}w_i
%        \end{equation*}
%        \begin{tikzpicture}[remember picture,overlay]
%            \node[xshift=4.5cm,yshift=2.6cm] at (current page.south west) (a) {%
%            \input{gfx/weighted_avg.tex}};
%        \end{tikzpicture}        
%        \begin{columns}[t]
%          \column{0.58\linewidth}
%            
%           \column{0.38\linewidth}
%            \begin{proconlist}
%             \itempro Fast and smooth
%             \itemcon Vulnerable to multi modalities
%            \end{proconlist}                              
%        \end{columns}
%    \end{frame}
%    
%    \begin{frame}[fragile,t]
%   		\frametitle{State Estimation}    
%        \textbf{Kernel density estimation} 
%        \begin{equation*}
%           \statemax := \arg\max_{\statei} \hat{f}(\statei) 
%        \end{equation*}              
%        \begin{tikzpicture}[remember picture,overlay]
%            \node[xshift=4.5cm,yshift=2.6cm] at (current page.south west) (a) {%
%            \input{gfx/boxkde.tex}};
%        \end{tikzpicture}        
%        \begin{columns}[t]
%          \column{0.58\linewidth}
%
%           \column{0.38\linewidth}
%             \begin{proconlist}
%              \itempro Complete density
%              \itemcon Additional max search
%              \itemcon Expensive
%             \end{proconlist}  
%        \end{columns}
%    \end{frame}
       
     % 1D: \tilde{f}(x) = \frac{1}{W} \sum_{i=1}^{N} \frac{w_i}{h} K \left(\frac{x-X_i}{h}\right) \text{, with } h\in\R^+ \text{ and }  K(u)=\frac{1}{\sqrt{2\pi}} \expp{- \frac{u^2}{2} } \\ 
%1D	
	\begin{frame}[t]
   		\frametitle{Kernel density estimation}
        Kernel density estimate
        \begin{flalign*}
         \hat{f}(x) &= \frac{1}{W} \sum_{i=1}^{N} \frac{w_i}{h} K \left(\frac{x-q_i}{h}\right) 
         \intertext{with Gaussian kernel} 
         K(u)   &=\frac{1}{\sqrt{2\pi}} \expp{- \frac{u^2}{2} }
         \intertext{and kernel bandwidth} 
         h \in \R^+
        \end{flalign*}
        
        $\Rightarrow$ Complexity: $\landau{MN}$
        
        \begin{textblock*}{0.6\textwidth}(0.5\textwidth,3.7cm)
           \resizebox{1.0\textwidth}{!}{\includegraphics{KdeConstruction.pdf}}               
        \end{textblock*}        
    \end{frame}                
	 
% nD	 
%    \begin{frame}[t]
%   		\frametitle{Kernel density estimation}
%        \begin{flalign*}
%         \hat{f}(\vec{u}) &= \frac{1}{W} \sum_{i=1}^{n} \frac{w_i}{h_1 \dots h_d} \left[  \prod_{j=1}^{d} K\left( \frac{u_j-q_{i,j}}{h_j} \right)  \right] 
%         \intertext{with Gaussian kernel} 
%         K(u)   &=\frac{1}{\sqrt{2\pi}} \expp{- \frac{u^2}{2} }
%         \intertext{and kernel bandwidth} 
%         \vec{h} &= (h_1, \dots, h_d) 
%        \end{flalign*}
%        
%        $\Rightarrow$ Complexity: $\landau{N^2}$
%        
%        \begin{textblock*}{0.6\textwidth}(0.5\textwidth,3.7cm)
%           \resizebox{1.0\textwidth}{!}{\includegraphics{KdeConstruction.pdf}}               
%        \end{textblock*}        
%    \end{frame}                
       
\section{Approximation method}  	
    \begin{frame}
        \frametitle{Binned Kernel Density Estimation}      
        Approximation of KDE assuming an equidistant grid with $G$ grid points \\
      
        \begin{equation*}
          \tilde{f}(g_x) = \frac{1}{W} \sum_{j=1}^{G} \frac{C_j}{h} K \left(\frac{g_x-g_j}{h}\right)
        \end{equation*}
        
        where the count at $g_j$ is given with
        \begin{equation*}
        \label{eq:gridCnts}
            C_j=\sum_{i=1}^{N} r_j(x_i,\delta)
        \end{equation*}
        and $r_j$ is a binning rule (simple or linear)
        
        $\Rightarrow$ Complexity: $\landau{G^2}$
    \end{frame}

    \begin{frame}
        \frametitle{Binned Kernel Density Estimation}
        
        Binned KDE has a discrete convolution structure \\

        \begin{equation*}
          \tilde{f}(g_x) = \frac{1}{W} \emp{\sum_{j=1}^{G}} \frac{\emp{C_j}}{h} \emp{K} \left(  \frac{\emp{g_x-g_j}}{h}  \right)
        \end{equation*}

        \begin{textblock*}{0.35\textwidth}(0.7\textwidth,2.5cm)
          \small $\displaystyle (f*g)[n] = \sum_{m=-\infty}^{\infty} f[m]\cdot g[n-m] $\normalsize
        \end{textblock*}
        
        Using a Gaussian kernel: BKDE $\approx$ Gaussian filter \\
    
        \begin{equation*}
        \tilde{f}(g_x)=\frac{1}{W\sqrt{2\pi}} \sum_{j=1}^{G} \frac{C_j}{h} \expp{-\frac{(g_x-g_j)^2}{2h^2}}
        \end{equation*}
        
        $\Rightarrow$ fast approximation using recursive box filter
    \end{frame}
	
    \begin{frame}[fragile,t]
          \frametitle{Box Filter Approximation}
            Given by central limit theorem, iterated box filters converge to Gaussian filter
            \centering 
            \begin{minipage}[b]{0.5\linewidth}
                \centering
                \include{gfx/BoxConverge1} 
                \vspace{-2ex}
              \end{minipage}%%
              \begin{minipage}[b]{0.5\linewidth}
                \centering
                \include{gfx/BoxConverge2} 
                \vspace{-2ex}
              \end{minipage} 
              \begin{minipage}[b]{0.5\linewidth}
                \centering
                \include{gfx/BoxConverge3} 
%                \vspace{4ex}
              \end{minipage}%% 
              \begin{minipage}[b]{0.5\linewidth}
                \centering
                \include{gfx/BoxConverge4} 
%                \vspace{4ex}
              \end{minipage} 
    \end{frame}          
    
   
    \begin{frame}[t]
        \frametitle{Box Filter Approximation}       
        Naive calculation $\landau{NL}$:
        \begin{equation*}
          y[i]=\frac{1}{2l+1} \sum_{j=-l}^{l}x[i+j]
        \end{equation*}
        
        Recursive calculation $\landau{N}$:
        \begin{equation*}
          y[i] = y[i-1] + x[i+l] - x[i-l-1]
        \end{equation*}
        
        Mapping bandwidth to box filter radius:
        \begin{equation*}
            \Lideal = \sqrt{\frac{12\sigma^2}{n}+1}
        \end{equation*}

%        \begin{textblock*}{0.1}[1,0](0.6,5)        
        \begin{textblock*}{0.2\textwidth}(0.6\textwidth,2.2cm)
          \small Radius: $\displaystyle l=\frac{L-1}{2} $\normalsize
        \end{textblock*}
        
    \end{frame}

\section{Experiments}
%    \begin{frame}
%        \frametitle{Approximation error - Ground Truth}
%        
%        \begin{columns}
%        \begin{column}{0.75\textwidth}
%            \includegraphics[width=1\textwidth]{gfx/Eval1GroundTruth.png}       
%        \end{column}
%        \begin{column}{0.25\textwidth}
%            \setlength{\mathindent}{1pt}
%            \begin{align*}
%              \bm{X} \sim ~ & \G{\VecTwo{0}{0}}{0.5\bm{I}} + \\
%                          & \G{\VecTwo{3}{0}}{\bm{I}} + \\
%                          & \G{\VecTwo{0}{3}}{\bm{I}} + \\ 
%                          & \G{\VecTwo{-3}{0} }{\bm{I}}  + \\
%                          & \G{\VecTwo{0}{-3}}{\bm{I}}
%            \end{align*}
%            
%            Grid: $30\times 30$
%        \end{column}
%        \end{columns}
%        
%    \end{frame}

%    \begin{frame}[t]
%        \frametitle{Approximation error}
%        
%        \begin{columns}
%        \begin{column}{0.60\textwidth}
%          \renewcommand{\footnotesize}{\fontsize{7pt}{11pt}\selectfont}
%          \resizebox{1.0\textwidth}{!}{\input{gfx/error.tex}}
%        \end{column}
%        \begin{column}{0.40\textwidth}
%            $\displaystyle \operatorname{MISE} =~\E{\int \left( \hat{f}(x)-f(x) \right)^2 \dop{x}}$
%            
%            Average error:
%            \setlength{\mathindent}{1pt}
%            \begin{align*}
%              ~&\overline{t}_{\text{BKDE}}   &= \SI{10.10}{\second} \phantom{0} \\                  
%              ~&\overline{t}_{\text{BoxKDE}} &= \SI{0.4092}{\second} \\
%              ~&\overline{t}_{\text{WA}}     &= \SI{0.0043}{\second}
%            \end{align*}            
%        \end{column}
%        \end{columns}
%       
%    \end{frame}
    
    \begin{frame}
       \frametitle{Approximation error}
        \begin{textblock*}{0.75\textwidth}(0mm,1cm)
           \renewcommand{\footnotesize}{\fontsize{7pt}{11pt}\selectfont}
           \resizebox{1.0\textwidth}{!}{\input{gfx/error.tex}}                     
        \end{textblock*}
        
        \begin{textblock*}{0.4\textwidth}(0.78\textwidth,1.5cm)
          \footnotesize$\displaystyle \MISE =~\E{\int \left( \hat{f}(x)-f(x) \right)^2 \dop{x}}$ \normalsize
        \end{textblock*}        
       
        \begin{textblock*}{0.3\textwidth}(0.78\textwidth,3.2cm)
            Average error {\small  $(\times 10^{-3})$}:
            \setlength{\mathindent}{1pt}
            \begin{align*}
              ~&\overline{\MISE}_{\text{BoxKDE}} &= 5.14 \\
              ~&\overline{\MISE}_{\text{BKDE}}   &= 4.73 \\              
              ~&\overline{\MISE}_{\text{KDE}}    &= 4.40
            \end{align*}            
        \end{textblock*}
    \end{frame}
    
    \begin{frame}
       \frametitle{Performance}
       \begin{itemize}[label=\textbullet]
         \item Hardware
         \begin{itemize}[label=-]
           \item Intel Core \mbox{i5-7600K} CPU with \SI{4.2}{\giga\hertz}
           \item \SI{16}{\giga\byte} main memory
         \end{itemize}
         \item Algorithms
         \begin{itemize}[label=-]
             \item C++ implementation of our BoxKDE approximation
             \item R language package \texttt{ks} (FFT-based BKDE; optimized in C)
             \item C++ implementation of weighted average         
         \end{itemize}
         \item Input
         \begin{itemize}[label=-]
           \item Number of grid points $G \in [10^2, 10^8]$
         \end{itemize}

       \end{itemize}
    \end{frame}    
       
    \begin{frame}
       \frametitle{Performance}
        \begin{textblock*}{0.75\textwidth}(2mm,1cm)
           \renewcommand{\footnotesize}{\fontsize{7pt}{11pt}\selectfont}
           \resizebox{1.0\textwidth}{!}{\input{gfx/perf.tex}}                     
        \end{textblock*}
        \begin{textblock*}{0.25\textwidth}(0.82\textwidth,1.5cm)
        Average time:
            \setlength{\mathindent}{1pt}
            \begin{align*}
              ~&\overline{t}_{\text{BKDE}}   &= \SI{10.10}{\second} \phantom{0} \\                  
              ~&\overline{t}_{\text{BoxKDE}} &= \SI{0.4092}{\second} \\
              ~&\overline{t}_{\text{WA}}     &= \SI{0.0043}{\second}
            \end{align*}
        \end{textblock*}        
    \end{frame}    
        
\section{Summary}    
    \begin{frame}[t]
        \frametitle{Summary}
        \begin{itemize}[label=\textbullet]
          \item Novel rapid approximation scheme for KDE
          \item Key idea is to interpret KDE as filter problem
          \item Assuming a Gaussian kernel, box filter approximation can be used
          \item Sufficiently fast for our real time application
          \item Acceptable small error
        \end{itemize}
    \end{frame}

\section{Thank you}

    \begin{frame}
\frametitle{Approximation error - Ground Truth}

\begin{columns}
    \begin{column}{0.75\textwidth}
        \includegraphics[width=1\textwidth]{gfx/Eval1GroundTruth.png}       
    \end{column}
    \begin{column}{0.25\textwidth}
        \setlength{\mathindent}{1pt}
        \begin{align*}
        \bm{X} \sim ~ & \G{\VecTwo{0}{0}}{0.5\bm{I}} + \\
        & \G{\VecTwo{3}{0}}{\bm{I}} + \\
        & \G{\VecTwo{0}{3}}{\bm{I}} + \\ 
        & \G{\VecTwo{-3}{0} }{\bm{I}}  + \\
        & \G{\VecTwo{0}{-3}}{\bm{I}}
        \end{align*}
        
        $N = 5000$
        
        Grid: $30\times 30$
    \end{column}
\end{columns}

\end{frame}