89 lines
4.1 KiB
TeX
89 lines
4.1 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=1.8mm]},line width=0.65pt,draw=navy},
|
|
localflow/.style={flow,draw=teal},
|
|
box/.style={draw=navy,rounded corners=1.5pt,line width=0.65pt,
|
|
fill=bluefill,minimum height=8mm,align=center,inner sep=2.2pt},
|
|
localbox/.style={box,draw=teal,fill=tealfill},
|
|
note/.style={font=\sffamily\tiny,text=grayline,align=center}
|
|
]
|
|
\node[anchor=west,font=\sffamily\scriptsize\bfseries,text=navy]
|
|
at (-0.15,3.15) {Model: global context + recent evidence};
|
|
\node[align=center,text=navy] (av) at (0.65,2.45)
|
|
{full-scene AV\\observed prefix};
|
|
\node[box] (omni) at (3.05,2.45) {frozen Qwen2.5-Omni\\8-s maximum context};
|
|
\node[box] (global) at (5.65,2.45) {last-four-layer\\projection $G_n$};
|
|
\node[align=center,text=teal] (audio) at (0.65,1.28)
|
|
{recent 1-s\\mixed audio};
|
|
\node[localbox] (ae) at (3.05,1.28) {frozen Qwen audio\\valid-token mean};
|
|
\node[localbox] (ap) at (5.65,1.28) {local projection\\$\widetilde A_n$ + validity};
|
|
\node[align=center,text=teal] (video) at (0.65,0.08)
|
|
{recent 1-s\\person crops};
|
|
\node[localbox,dashed] (ve) at (3.05,0.08)
|
|
{frozen Qwen visual\\recent crop pooling};
|
|
\node[localbox,dashed] (vp) at (5.65,0.08)
|
|
{optional projection\\$\widetilde V_n$ + validity};
|
|
\node[box,minimum width=20mm] (fusion) at (8.35,1.28)
|
|
{feature concatenation\\trainable MLP};
|
|
\node[box,minimum width=23mm] (out) at (11.15,1.28)
|
|
{$10\times3$ future activity\\0.2--2.0 s};
|
|
\draw[flow] (av) -- (omni);
|
|
\draw[flow] (omni) -- (global);
|
|
\draw[localflow] (audio) -- (ae);
|
|
\draw[localflow] (ae) -- (ap);
|
|
\draw[localflow,dashed] (video) -- (ve);
|
|
\draw[localflow,dashed] (ve) -- (vp);
|
|
\draw[flow] (global.east) -- ++(0.35,0) |- (fusion.north);
|
|
\draw[localflow] (ap) -- (fusion);
|
|
\draw[localflow,dashed] (vp.east) -- ++(0.35,0) |- (fusion.south);
|
|
\draw[flow] (fusion) -- (out);
|
|
\node[note] at (10.95,0.22)
|
|
{background / wearer / aggregate others\\no semantic event or identity output};
|
|
\draw[grayline,line width=0.45pt] (-0.15,-0.65) -- (12.5,-0.65);
|
|
\node[anchor=west,font=\sffamily\scriptsize\bfseries,text=navy]
|
|
at (-0.15,-0.98) {Stream: committed history + temporary current tail};
|
|
\node[anchor=east,text=navy] at (2.05,-1.65) {Omni media};
|
|
\foreach \a/\b/\lab in {2.3/3.9/2 s,3.9/5.5/2 s,5.5/7.1/2 s} {
|
|
\draw[fill=bluefill,draw=navy,line width=0.55pt]
|
|
(\a,-1.87) rectangle (\b,-1.43);
|
|
\node[text=navy] at ({(\a+\b)/2},-1.65) {\lab};
|
|
}
|
|
\draw[fill=orangefill,draw=orange,line width=0.65pt]
|
|
(7.1,-1.87) rectangle (8.5,-1.43);
|
|
\node[text=orange,font=\sffamily\tiny] at (7.8,-1.65) {partial tail};
|
|
\draw[fill=white,draw=grayline,dashed,line width=0.55pt]
|
|
(8.5,-1.87) rectangle (8.7,-1.43);
|
|
\node[note,anchor=west] at (9.0,-1.65)
|
|
{three completed blocks + observed tail\\8-s maximum; future portion excluded};
|
|
\node[note,text=navy] at (4.7,-2.13) {reuse completed media payloads};
|
|
\node[note,text=orange] at (7.8,-2.13) {recompute at each cutoff};
|
|
\node[anchor=east,text=teal] at (2.05,-2.62) {local evidence};
|
|
\draw[draw=teal,line width=1.8pt] (7.7,-2.62) -- (8.5,-2.62);
|
|
\node[note,anchor=west,text=teal] at (9.0,-2.62)
|
|
{recent 1-s audio / optional vision\\refreshed on the common 5-Hz grid};
|
|
\node[anchor=east,text=navy] at (2.05,-3.18) {decision grid};
|
|
\draw[draw=navy,line width=0.6pt] (2.3,-3.18) -- (8.5,-3.18);
|
|
\foreach \x in {2.42,2.58,...,8.34} {
|
|
\draw[draw=navy,line width=0.5pt] (\x,-3.28) -- (\x,-3.08);
|
|
}
|
|
\draw[draw=navy,line width=0.9pt] (8.5,-3.3) -- (8.5,-3.06);
|
|
\draw[dashed,draw=orange,line width=0.75pt]
|
|
(8.5,-3.35) -- (8.5,-1.15);
|
|
\node[anchor=south,text=orange,font=\sffamily\tiny\bfseries]
|
|
at (8.5,-1.15) {cutoff $t_n$};
|
|
\node[note,anchor=west,text=navy] at (9.0,-3.18)
|
|
{one prediction every 200 ms\\same cutoff and target index};
|
|
\end{tikzpicture}
|
|
\end{document}
|