Standalone LaTeX/TikZ skill for non-tensor paper figures: node/edge macros, lint-on-warning build, golden examples, and negative fixtures.
57 lines
1.7 KiB
TeX
57 lines
1.7 KiB
TeX
% superfig golden example 4 -- a dual-encoder dependency, not a linear pipeline.
|
|
% Two encoder rows share a rail; fusion is placed from their east anchors.
|
|
% ../scripts/build.sh dependency-graph.tex
|
|
\documentclass[border=10pt]{standalone}
|
|
\usepackage[cjk]{superfig}
|
|
|
|
\sfsetrole{text}{sfTeal}
|
|
\sfsetrole{img}{sfOrange}
|
|
\sfsetrole{fuse}{sfViolet}
|
|
\sfsetrole{out}{sfCoral}
|
|
|
|
\begin{document}
|
|
\begin{tikzpicture}
|
|
|
|
\sfstage{S1}{双塔编码}
|
|
\sfrow{R1}{12mm}
|
|
\sfnode[role=text]{txt}{文本}{14mm}{10mm}
|
|
\sfconn{e1}{}
|
|
\sfnode[role=text]{te}{文本编码}{18mm}{10mm}
|
|
\sfrowend
|
|
\sflane{R1}
|
|
\sfcaption{txt}{text}{token 序列}
|
|
\sfcaption{te}{$E_t$}{文本向量}
|
|
|
|
\sfrow{R2}{12mm}
|
|
\sfnode[role=img]{img}{图像}{14mm}{10mm}
|
|
\sfconn{e2}{}
|
|
\sfnode[role=img]{ve}{视觉编码}{18mm}{10mm}
|
|
\sfrowend
|
|
\sflane{R2}
|
|
\sfcaption{img}{image}{视觉输入}
|
|
\sfcaption{ve}{$E_v$}{视觉向量}
|
|
|
|
% Fusion sits to the right of the two encoders, on their shared east line.
|
|
\sfnode[role=fuse, at={($(te.east)!0.5!(ve.east)+(20mm,0)$)}]{fu}{融合}{16mm}{10mm}
|
|
\sfnode[role=out, at={($(fu.east)+(16mm,0)$)}]{dec}{解码}{16mm}{10mm}
|
|
\sfnode[role=out, at={($(dec.east)+(16mm,0)$)}]{out}{输出}{14mm}{10mm}
|
|
\sfarrow{te.east}{fu.west}
|
|
\sfarrow{ve.east}{fu.west}
|
|
\sfarrow{fu.east}{dec.west}
|
|
\sfarrow{dec.east}{out.west}
|
|
\sfnolane
|
|
\sfcaption{fu}{fuse}{晚融合}
|
|
\sfcaption{dec}{decode}{条件生成}
|
|
\sfcaption{out}{out}{目标文本}
|
|
|
|
\sfbbox{all}
|
|
\sftopformula{F}{%
|
|
$y = \mathrm{Dec}\bigl(\mathrm{Fuse}(E_t(x),\, E_v(I))\bigr)$}
|
|
\sfmeaningbox{mb}{112mm}{all}
|
|
{两个编码器互不共享权重,只在融合节点会合}
|
|
{文本塔、视觉塔、融合、解码}
|
|
{各塔独立编码;融合后才进入解码,所以任一侧的依赖都经过融合节点}
|
|
|
|
\end{tikzpicture}
|
|
\end{document}
|