\documentclass[10pt,tikz]{standalone}

\usepackage{tikz}
\usepackage{ifthen}

\newlength{\cell}
\setlength{\cell}{1cm}

\newlength{\separation}
\setlength{\separation}{3cm}

\begin{document}
\foreach \m in {0,...,9}
{
  \foreach \n in {0,...,7}
  {
    \begin{tikzpicture}
      
      % draw main grid
      \draw[thick] (0,0) rectangle (10 * \cell, 12 * \cell);

      \foreach \x in {0,...,9}
      {
        \foreach \y in {0,...,11}
        {
          \draw (\x * \cell, \y * \cell) rectangle (\x * \cell + \cell, \y * \cell + \cell);
        }
      }

      \node[anchor=base] at (5 * \cell, -\cell) {INPUT};

      % draw convolution
      \draw[thick, fill=red!20, opacity=0.5] (\n * \cell, 12 * \cell - \m * \cell) rectangle (\n * \cell + 3 * \cell, 12 * \cell - 3 * \cell - \m * \cell);

      \draw[fill=red!20, opacity=0.5] (\n * \cell + 10 * \cell + \separation, 9 * \cell - \m * \cell) rectangle (\n * \cell + 10 * \cell + \separation + \cell, 9 * \cell + \cell - \m * \cell);

      \draw[thick, red] (\n * \cell + 1.5 * \cell, 12 * \cell - \m * \cell) -- (\n * \cell + 10 * \cell + \separation + 0.5 * \cell, 10 * \cell - 0.5 * \cell - \m * \cell) -- (\n * \cell + 1.5 * \cell, 9 * \cell - \m * \cell);

      % draw filter
      \draw[thick] (10 * \cell + \separation, 0) rectangle (18 * \cell + \separation, 10 * \cell);

      \foreach \x in {0,...,7}
      {
        \foreach \y in {0,...,9}
        {
          \draw (10 * \cell + \separation + \x * \cell, \y * \cell) rectangle (10 * \cell + \separation + \x * \cell + \cell, \y * \cell + \cell);
        }
      }

      \node[anchor=base] at (10 * \cell + \separation + 4 * \cell, -\cell) {OUTPUT};
    \end{tikzpicture}
  }
}
\end{document}
