202 lines
15 KiB
XML
202 lines
15 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 760">
|
||
<defs>
|
||
<linearGradient id="pbg" x1="0%" y1="0%" x2="100%" y2="100%">
|
||
<stop offset="0%" style="stop-color:#0f172a"/>
|
||
<stop offset="100%" style="stop-color:#1e1b4b"/>
|
||
</linearGradient>
|
||
<marker id="pa" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
||
<path d="M0,0 L8,3 L0,6" fill="none" stroke="#475569" stroke-width="1"/>
|
||
</marker>
|
||
<marker id="paG" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
||
<path d="M0,0 L8,3 L0,6" fill="none" stroke="#22c55e" stroke-width="1"/>
|
||
</marker>
|
||
</defs>
|
||
|
||
<!-- Background -->
|
||
<rect width="600" height="760" rx="12" fill="url(#pbg)"/>
|
||
|
||
<!-- ===== TOP: STANDARD STACKING ===== -->
|
||
<rect x="20" y="14" width="560" height="24" rx="6" fill="#e94560" opacity="0.12"/>
|
||
<text x="300" y="31" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#e94560" text-anchor="middle" font-weight="700" letter-spacing="2">STANDARD LORA STACKING</text>
|
||
|
||
<!-- Pipeline: Model → +A → +B → +C → Output -->
|
||
<rect x="20" y="52" width="60" height="28" rx="6" fill="#334155" stroke="#64748b" stroke-width="1"/>
|
||
<text x="50" y="70" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8" text-anchor="middle">Model</text>
|
||
|
||
<line x1="80" y1="66" x2="100" y2="66" stroke="#475569" stroke-width="1.5" marker-end="url(#pa)"/>
|
||
|
||
<rect x="108" y="52" width="96" height="28" rx="6" fill="#1e293b" stroke="#f87171" stroke-width="1.5"/>
|
||
<text x="156" y="70" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#f87171" text-anchor="middle" font-weight="600">+ LoRA A (0.8)</text>
|
||
|
||
<line x1="204" y1="66" x2="218" y2="66" stroke="#475569" stroke-width="1.5" marker-end="url(#pa)"/>
|
||
|
||
<rect x="226" y="52" width="96" height="28" rx="6" fill="#1e293b" stroke="#c084fc" stroke-width="1.5"/>
|
||
<text x="274" y="70" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#c084fc" text-anchor="middle" font-weight="600">+ LoRA B (0.7)</text>
|
||
|
||
<line x1="322" y1="66" x2="336" y2="66" stroke="#475569" stroke-width="1.5" marker-end="url(#pa)"/>
|
||
|
||
<rect x="344" y="52" width="96" height="28" rx="6" fill="#1e293b" stroke="#38bdf8" stroke-width="1.5"/>
|
||
<text x="392" y="70" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#38bdf8" text-anchor="middle" font-weight="600">+ LoRA C (0.6)</text>
|
||
|
||
<line x1="440" y1="66" x2="454" y2="66" stroke="#475569" stroke-width="1.5" marker-end="url(#pa)"/>
|
||
|
||
<rect x="462" y="52" width="60" height="28" rx="6" fill="#e94560" opacity="0.15" stroke="#e94560" stroke-width="1.5"/>
|
||
<text x="492" y="70" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#e94560" text-anchor="middle" font-weight="600">Output</text>
|
||
|
||
<!-- Total effect bar -->
|
||
<text x="20" y="100" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#64748b">Total effect:</text>
|
||
<rect x="100" y="92" width="420" height="12" rx="4" fill="#334155"/>
|
||
<rect x="100" y="92" width="420" height="12" rx="4" fill="#e94560" opacity="0.5"/>
|
||
<line x1="300" y1="89" x2="300" y2="107" stroke="#f59e0b" stroke-width="1.5"/>
|
||
<text x="300" y="118" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#f59e0b" text-anchor="middle">1.0 safe limit</text>
|
||
<text x="520" y="118" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#e94560" text-anchor="end">2.1x — oversaturated</text>
|
||
|
||
<!-- Problem cards: 2 columns -->
|
||
<!-- Card 1: Overshoot -->
|
||
<rect x="20" y="130" width="270" height="130" rx="10" fill="#1e293b" stroke="#e94560" stroke-width="1"/>
|
||
<text x="42" y="154" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#e94560" font-weight="700">Strength Overshoot</text>
|
||
<text x="42" y="172" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">Effects add up blindly — total strength</text>
|
||
<text x="42" y="186" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">far exceeds what the model can handle.</text>
|
||
|
||
<!-- Visual: stacking bars -->
|
||
<rect x="42" y="200" width="230" height="7" rx="2" fill="#334155"/>
|
||
<rect x="42" y="200" width="85" height="7" rx="2" fill="#f87171" opacity="0.7"/>
|
||
<rect x="42" y="211" width="230" height="7" rx="2" fill="#334155"/>
|
||
<rect x="42" y="211" width="160" height="7" rx="2" fill="#c084fc" opacity="0.5"/>
|
||
<rect x="42" y="222" width="230" height="7" rx="2" fill="#334155"/>
|
||
<rect x="42" y="222" width="215" height="7" rx="2" fill="#38bdf8" opacity="0.4"/>
|
||
<line x1="210" y1="197" x2="210" y2="232" stroke="#f59e0b" stroke-width="1" stroke-dasharray="3,2"/>
|
||
<text x="214" y="246" font-family="Segoe UI, Arial, sans-serif" font-size="8" fill="#f59e0b">safe limit</text>
|
||
<text x="42" y="246" font-family="Segoe UI, Arial, sans-serif" font-size="8" fill="#64748b">A alone → A+B → A+B+C</text>
|
||
|
||
<!-- Card 2: Conflicts -->
|
||
<rect x="310" y="130" width="270" height="130" rx="10" fill="#1e293b" stroke="#f59e0b" stroke-width="1"/>
|
||
<text x="332" y="154" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#f59e0b" font-weight="700">Weight Conflicts</text>
|
||
<text x="332" y="172" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">LoRAs push the same weights in opposite</text>
|
||
<text x="332" y="186" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">directions — they cancel each other out.</text>
|
||
|
||
<!-- Visual: opposing arrows -->
|
||
<rect x="332" y="200" width="65" height="16" rx="4" fill="#f87171" opacity="0.2" stroke="#f87171" stroke-width="0.5"/>
|
||
<text x="365" y="212" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#f87171" text-anchor="middle">A: +0.8</text>
|
||
<line x1="402" y1="208" x2="438" y2="208" stroke="#f87171" stroke-width="2.5"/>
|
||
<polygon points="438,204 448,208 438,212" fill="#f87171"/>
|
||
|
||
<rect x="332" y="222" width="65" height="16" rx="4" fill="#c084fc" opacity="0.2" stroke="#c084fc" stroke-width="0.5"/>
|
||
<text x="365" y="234" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#c084fc" text-anchor="middle">B: −0.7</text>
|
||
<line x1="438" y1="230" x2="402" y2="230" stroke="#c084fc" stroke-width="2.5"/>
|
||
<polygon points="402,226 392,230 402,234" fill="#c084fc"/>
|
||
|
||
<text x="465" y="216" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#64748b">=</text>
|
||
<rect x="480" y="210" width="8" height="14" rx="2" fill="#f59e0b" opacity="0.5"/>
|
||
<text x="496" y="221" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#f59e0b">+0.1</text>
|
||
<text x="480" y="247" font-family="Segoe UI, Arial, sans-serif" font-size="8" fill="#64748b">Both lost</text>
|
||
|
||
<!-- Card 3: Bleeding (full width centered) -->
|
||
<rect x="120" y="272" width="360" height="100" rx="10" fill="#1e293b" stroke="#c084fc" stroke-width="1"/>
|
||
<text x="142" y="296" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#c084fc" font-weight="700">Style Bleeding</text>
|
||
<text x="142" y="314" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">Each LoRA is applied to the output of the previous one —</text>
|
||
<text x="142" y="328" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">one style contaminates the next.</text>
|
||
|
||
<!-- Visual: overlapping circles -->
|
||
<circle cx="310" cy="342" r="18" fill="#f87171" opacity="0.2" stroke="#f87171" stroke-width="1.5"/>
|
||
<text x="310" y="345" font-family="Segoe UI, Arial, sans-serif" font-size="8" fill="#f87171" text-anchor="middle">Style</text>
|
||
<circle cx="338" cy="336" r="18" fill="#c084fc" opacity="0.2" stroke="#c084fc" stroke-width="1.5"/>
|
||
<text x="338" y="339" font-family="Segoe UI, Arial, sans-serif" font-size="8" fill="#c084fc" text-anchor="middle">Char</text>
|
||
<circle cx="366" cy="342" r="18" fill="#38bdf8" opacity="0.2" stroke="#38bdf8" stroke-width="1.5"/>
|
||
<text x="366" y="345" font-family="Segoe UI, Arial, sans-serif" font-size="8" fill="#38bdf8" text-anchor="middle">Pose</text>
|
||
<text x="400" y="340" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#64748b">Overlap =</text>
|
||
<text x="400" y="354" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#c084fc">artifacts</text>
|
||
|
||
<!-- ===== DIVIDER ===== -->
|
||
<line x1="40" y1="390" x2="560" y2="390" stroke="#334155" stroke-width="1" stroke-dasharray="4,4"/>
|
||
|
||
<!-- ===== BOTTOM: OPTIMIZER ===== -->
|
||
<rect x="20" y="404" width="560" height="24" rx="6" fill="#22c55e" opacity="0.12"/>
|
||
<text x="300" y="421" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#22c55e" text-anchor="middle" font-weight="700" letter-spacing="2">LORA OPTIMIZER</text>
|
||
|
||
<!-- Pipeline: Model → Optimizer [A+B+C] → Output -->
|
||
<rect x="20" y="442" width="60" height="28" rx="6" fill="#334155" stroke="#64748b" stroke-width="1"/>
|
||
<text x="50" y="460" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8" text-anchor="middle">Model</text>
|
||
|
||
<line x1="80" y1="456" x2="100" y2="456" stroke="#475569" stroke-width="1.5" marker-end="url(#pa)"/>
|
||
|
||
<!-- Optimizer box -->
|
||
<rect x="108" y="438" width="280" height="36" rx="8" fill="#1e293b" stroke="#22c55e" stroke-width="2"/>
|
||
<text x="128" y="454" font-family="Segoe UI, Arial, sans-serif" font-size="11" fill="#22c55e" font-weight="700">Optimizer</text>
|
||
<text x="128" y="467" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#64748b">analyze + resolve + merge</text>
|
||
|
||
<!-- LoRA chips -->
|
||
<rect x="260" y="445" width="36" height="18" rx="4" fill="#f87171" opacity="0.2" stroke="#f87171" stroke-width="0.5"/>
|
||
<text x="278" y="458" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#f87171" text-anchor="middle">A</text>
|
||
<rect x="302" y="445" width="36" height="18" rx="4" fill="#c084fc" opacity="0.2" stroke="#c084fc" stroke-width="0.5"/>
|
||
<text x="320" y="458" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#c084fc" text-anchor="middle">B</text>
|
||
<rect x="344" y="445" width="36" height="18" rx="4" fill="#38bdf8" opacity="0.2" stroke="#38bdf8" stroke-width="0.5"/>
|
||
<text x="362" y="458" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#38bdf8" text-anchor="middle">C</text>
|
||
|
||
<line x1="388" y1="456" x2="420" y2="456" stroke="#22c55e" stroke-width="1.5" marker-end="url(#paG)"/>
|
||
|
||
<rect x="428" y="442" width="60" height="28" rx="6" fill="#22c55e" opacity="0.15" stroke="#22c55e" stroke-width="1.5"/>
|
||
<text x="458" y="460" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#22c55e" text-anchor="middle" font-weight="600">Output</text>
|
||
|
||
<!-- Balanced effect bar -->
|
||
<text x="20" y="496" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#64748b">Total effect:</text>
|
||
<rect x="100" y="488" width="420" height="12" rx="4" fill="#334155"/>
|
||
<rect x="100" y="488" width="200" height="12" rx="4" fill="#22c55e" opacity="0.5"/>
|
||
<line x1="300" y1="485" x2="300" y2="503" stroke="#f59e0b" stroke-width="1.5"/>
|
||
<text x="300" y="514" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#f59e0b" text-anchor="middle">1.0</text>
|
||
|
||
<!-- Solution cards: 2 columns -->
|
||
<!-- Card 1: Balanced -->
|
||
<rect x="20" y="526" width="270" height="130" rx="10" fill="#1e293b" stroke="#22c55e" stroke-width="1"/>
|
||
<text x="42" y="550" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#22c55e" font-weight="700">Auto-Balanced Strength</text>
|
||
<text x="42" y="568" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">Computes weight diffs and normalizes</text>
|
||
<text x="42" y="582" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">per group — stays within safe range.</text>
|
||
|
||
<!-- Visual: balanced bars -->
|
||
<rect x="42" y="596" width="230" height="7" rx="2" fill="#334155"/>
|
||
<rect x="42" y="596" width="85" height="7" rx="2" fill="#f87171" opacity="0.6"/>
|
||
<rect x="42" y="607" width="230" height="7" rx="2" fill="#334155"/>
|
||
<rect x="42" y="607" width="73" height="7" rx="2" fill="#c084fc" opacity="0.6"/>
|
||
<rect x="42" y="618" width="230" height="7" rx="2" fill="#334155"/>
|
||
<rect x="42" y="618" width="62" height="7" rx="2" fill="#38bdf8" opacity="0.6"/>
|
||
<rect x="42" y="631" width="230" height="9" rx="3" fill="#334155"/>
|
||
<rect x="42" y="631" width="170" height="9" rx="3" fill="#22c55e" opacity="0.4"/>
|
||
<text x="42" y="650" font-family="Segoe UI, Arial, sans-serif" font-size="8" fill="#22c55e">Combined — within range</text>
|
||
<line x1="210" y1="593" x2="210" y2="642" stroke="#f59e0b" stroke-width="1" stroke-dasharray="3,2"/>
|
||
|
||
<!-- Card 2: Resolved -->
|
||
<rect x="310" y="526" width="270" height="130" rx="10" fill="#1e293b" stroke="#22c55e" stroke-width="1"/>
|
||
<text x="332" y="550" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#22c55e" font-weight="700">Conflict Resolution</text>
|
||
<text x="332" y="568" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">TIES detects sign conflicts per weight</text>
|
||
<text x="332" y="582" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">and elects the dominant direction.</text>
|
||
|
||
<!-- Visual: conflict resolved -->
|
||
<rect x="332" y="598" width="65" height="16" rx="4" fill="#f87171" opacity="0.2" stroke="#f87171" stroke-width="0.5"/>
|
||
<text x="365" y="610" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#f87171" text-anchor="middle">A: +0.8</text>
|
||
<line x1="402" y1="606" x2="438" y2="606" stroke="#f87171" stroke-width="2.5"/>
|
||
<polygon points="438,602 448,606 438,610" fill="#f87171"/>
|
||
|
||
<rect x="332" y="620" width="65" height="16" rx="4" fill="#c084fc" opacity="0.1" stroke="#c084fc" stroke-width="0.5" stroke-dasharray="2,2"/>
|
||
<text x="365" y="632" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#c084fc" text-anchor="middle" opacity="0.4">B: −0.7</text>
|
||
<line x1="402" y1="628" x2="438" y2="628" stroke="#c084fc" stroke-width="1.5" opacity="0.3" stroke-dasharray="3,2"/>
|
||
|
||
<text x="465" y="614" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#64748b">=</text>
|
||
<rect x="480" y="602" width="44" height="12" rx="3" fill="#22c55e" opacity="0.5"/>
|
||
<text x="532" y="613" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#22c55e">+0.8</text>
|
||
<text x="480" y="645" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#64748b">Winner keeps strength</text>
|
||
|
||
<!-- Card 3: Clean Separation (centered) -->
|
||
<rect x="120" y="668" width="360" height="76" rx="10" fill="#1e293b" stroke="#22c55e" stroke-width="1"/>
|
||
<text x="142" y="690" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#22c55e" font-weight="700">Clean Separation</text>
|
||
<text x="142" y="708" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">All LoRAs merged in one pass at the weight level —</text>
|
||
<text x="142" y="722" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#94a3b8">no sequential contamination.</text>
|
||
|
||
<!-- Visual: clean circles -->
|
||
<circle cx="380" cy="710" r="14" fill="#f87171" opacity="0.15" stroke="#f87171" stroke-width="1.5"/>
|
||
<text x="380" y="713" font-family="Segoe UI, Arial, sans-serif" font-size="7" fill="#f87171" text-anchor="middle">Style</text>
|
||
<circle cx="416" cy="710" r="14" fill="#c084fc" opacity="0.15" stroke="#c084fc" stroke-width="1.5"/>
|
||
<text x="416" y="713" font-family="Segoe UI, Arial, sans-serif" font-size="7" fill="#c084fc" text-anchor="middle">Char</text>
|
||
<circle cx="452" cy="710" r="14" fill="#38bdf8" opacity="0.15" stroke="#38bdf8" stroke-width="1.5"/>
|
||
<text x="452" y="713" font-family="Segoe UI, Arial, sans-serif" font-size="7" fill="#38bdf8" text-anchor="middle">Pose</text>
|
||
</svg>
|