\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.multipart,fit,backgrounds}

\begin{document}

\pgfdeclarelayer{background}

\begin{tikzpicture}[
    node distance = 10mm and 20mm,
    box/.style={draw, minimum width=20mm, minimum height=5mm, rounded corners},
    column_box/.style={draw, rounded corners, on background layer}
]

% Left column
\node[box] (image1) {Image};
\node[box, below=of image1] (patches1) {Patches};
\node[box, below=of patches1] (tokens1) {Tokens};
\node[box, below=of tokens1] (positional_encoding1) {Positional Encoding};
\node[box, below=of positional_encoding1] (transformer1) {Transformer};
\node[box, below=of transformer1] (classifier1) {Classifier};
\node[below=of classifier1] (output1) {\{Shark, Not Shark\}
};


% Middle column
\node[box, right=4cm of image1] (image2) {Image};
\node[box, below=of image2] (patches2) {Patches};
\node[box, below=of patches2] (tokens2) {Tokens};
\node[box, below=of tokens2] (positional_encoding2) {Positional Encoding};
\node[box, below=of positional_encoding2] (transformer2) {Transformer};
\node[box, below=of transformer2] (classifier2) {Classifier};
\node[below=of classifier2] (output2) {\{Genera\}};

% Right column
\node[box, right=4cm of image2] (image3) {Image};
\node[box, below=of image3] (patches3) {Patches};
\node[box, below=of patches3] (tokens3) {Tokens};
\node[box, below=of tokens3] (positional_encoding3) {Positional Encoding};
\node[box, below=of positional_encoding3] (transformer3) {Transformer};
\node[box, below=of transformer3] (classifier3) {Classifier};
\node[below=of classifier3] (output3) {\{Species\}};


% Column boxes
\begin{pgfonlayer}{background}
\node[column_box, fit=(patches1) (classifier1), inner sep=8mm,  fill={rgb,255:red,204;green,255;blue,204}] {};
\node[column_box, fit=(patches2) (classifier2), inner sep=8mm,  fill={rgb,255:red,204;green,204;blue,255}] {};
\node[column_box, fit=(patches3) (classifier3), inner sep=8mm, fill={rgb,255:red,255;green,204;blue,204}] {};
\end{pgfonlayer}

% Connections within columns
\foreach \i in {1,2,3} {
    \draw[->] (image\i) -- (patches\i);
    \draw[->] (patches\i) -- (tokens\i);
    \draw[->] (tokens\i) -- (positional_encoding\i);
    \draw[->] (positional_encoding\i) -- (transformer\i);
    \draw[->] (transformer\i) -- (classifier\i);
    \draw[->] (classifier\i) -- (output\i);
}

% Connections between columns
\draw[->] (output1.east) -- ++(1.3cm,0) |- (image2);
\draw[->] (output2.east) -- ++(2.2cm,0) |- (image3);

\end{tikzpicture}

\end{document}
