\documentclass[tikz,border=2pt]{standalone} \usepackage{amsmath} \usetikzlibrary{arrows.meta,calc,positioning} \definecolor{navy}{HTML}{17324D} \definecolor{bluefill}{HTML}{EAF2F8} \definecolor{teal}{HTML}{137C8B} \definecolor{tealfill}{HTML}{E8F6F5} \definecolor{orange}{HTML}{D97706} \definecolor{orangefill}{HTML}{FFF3E0} \definecolor{grayline}{HTML}{73808C} \begin{document} \begin{tikzpicture}[ font=\sffamily\scriptsize, >=Latex, flow/.style={-{Latex[length=2.0mm]}, line width=0.65pt, draw=navy}, aux/.style={-{Latex[length=1.8mm]}, line width=0.6pt, draw=teal}, box/.style={draw=navy, rounded corners=1.5pt, line width=0.65pt, fill=bluefill, minimum height=7mm, align=center, inner sep=2.3pt}, localbox/.style={box, draw=teal, fill=tealfill}, residualbox/.style={box, draw=orange, fill=orangefill}, labelbox/.style={align=center, text=navy}, note/.style={font=\sffamily\tiny, text=grayline, align=center} ] \node[labelbox] (av) at (0,2.65) {causal full-scene AV\\prefix $\mathcal X_{\leq t_n}$}; \node[box, right=7mm of av, minimum width=24mm] (qwen) {frozen\\Qwen2.5-Omni}; \node[box, right=8mm of qwen, minimum width=12mm] (g) {global\\$G_{t_n}$}; \node[labelbox] (audio) at (0,1.45) {mixed audio\\$\leq t_n$}; \node[localbox, right=7mm of audio, minimum width=24mm] (cpc) {frozen causal CPC\\25-Hz processing}; \node[localbox, right=8mm of cpc, minimum width=12mm] (u) {shared\\$U_{t_n}$}; \node[labelbox] (faces) at (0,0.15) {visible face crops\\$\leq t_n$}; \node[localbox, right=7mm of faces, minimum width=24mm] (asd) {frozen causal AV/ASD\\25-Hz processing}; \node[localbox, right=8mm of asd, minimum width=20mm] (persons) {anonymous set\\$\mathcal P_{t_n}=\{[V_i;s_i]\}$}; \node[box, minimum width=21mm] (base) at (8.25,2.05) {$G+U$ base head\\$Z^{\rm base}_{t_n}$}; \node[localbox, minimum width=22mm] (attn) at (8.25,0.70) {masked person MHA\\query: $G_{t_n}+U_{t_n}$\\\scriptsize memory: $\mathcal P_{t_n}+$ NULL}; \node[residualbox, minimum width=19mm] (res) at (10.65,0.70) {zero-init residual\\$\Delta Z_{t_n}$}; \node[circle, draw=navy, fill=white, line width=0.7pt, minimum size=5.5mm, inner sep=0pt] (sum) at (11.55,2.05) {$+$}; \node[box, minimum width=21mm] (out) at (13.15,2.05) {$10\!\times\!3$ future activity\\$0.2$--$2.0$ s}; \draw[flow] (av) -- (qwen); \draw[flow] (qwen) -- (g); \draw[aux] (audio) -- (cpc); \draw[aux] (cpc) -- (u); \draw[aux] (faces) -- (asd); \draw[aux] (asd) -- (persons); \draw[flow] (g.east) -| ($(base.west)+(-0.25,0.12)$) -- (base.west); \draw[aux] (u.east) -| ($(base.west)+(-0.25,-0.12)$) -- (base.west); \draw[flow] (g.east) -- ++(0.3,0) |- (attn.north west); \draw[aux] (u.east) -- ++(0.5,0) |- (attn.west); \draw[aux] (persons.east) -- (attn.west); \draw[flow] (base) -- (sum); \draw[aux] (attn) -- (res); \draw[flow, draw=orange] (res.north) |- (sum.south); \draw[flow] (sum) -- (out); \node[note, below=1.5mm of base] {trained first, then frozen}; \node[note, below=1.2mm of res] {trainable adaptation}; \draw[grayline, line width=0.45pt] (-0.15,-0.62) -- (14.35,-0.62); \node[anchor=west, font=\sffamily\scriptsize\bfseries, text=navy] at (-0.05,-0.92) {Causal streaming at cutoff $t_n$}; \node[anchor=east, text=navy] at (2.25,-1.45) {Omni input}; \draw[fill=bluefill, draw=navy, line width=0.55pt] (2.45,-1.67) rectangle (4.35,-1.23); \draw[fill=bluefill, draw=navy, line width=0.55pt] (4.35,-1.67) rectangle (6.25,-1.23); \node[text=navy] at (3.40,-1.45) {cached 2-s blocks}; \node[text=navy] at (5.30,-1.45) {$\cdots$}; \draw[fill=orangefill, draw=orange, line width=0.65pt] (6.25,-1.67) rectangle (9.15,-1.23); \node[text=orange] at (7.70,-1.45) {current partial block}; \draw[dashed, draw=orange, line width=0.8pt] (9.15,-2.90) -- (9.15,-1.02); \node[anchor=south, text=orange, font=\sffamily\tiny\bfseries] at (9.15,-1.02) {$t_n$}; \node[note, anchor=west] at (9.40,-1.45) {latest observed input included\\up to 8-s rolling budget}; \node[anchor=east, text=teal] at (2.25,-2.15) {local encoder}; \foreach \x in {2.55,2.85,...,8.85} { \draw[draw=teal, line width=0.55pt] (\x,-2.33) -- (\x,-1.97); } \draw[draw=teal, line width=0.55pt] (2.55,-2.15) -- (9.15,-2.15); \node[note, anchor=west, text=teal] at (9.40,-2.15) {25 Hz internal states}; \node[anchor=east, text=navy] at (2.25,-2.72) {forecast grid}; \draw[draw=navy, line width=0.65pt] (2.55,-2.72) -- (9.15,-2.72); \foreach \x/\lab in {3.15/0.2,4.65/0.4,6.15/0.6,7.65/0.8,9.15/$t_n$} { \draw[draw=navy, line width=0.75pt] (\x,-2.92) -- (\x,-2.52); \node[below=0.5mm, font=\sffamily\tiny, text=navy] at (\x,-2.92) {\lab}; \draw[-{Latex[length=1.4mm]}, draw=teal, line width=0.55pt] (\x,-2.32) -- (\x,-2.50); } \node[note, anchor=west, text=navy] at (9.40,-2.72) {5 Hz fusion and prediction\\every fifth local right edge}; \end{tikzpicture} \end{document}