98 lines
4.7 KiB
TeX
98 lines
4.7 KiB
TeX
\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}
|