Vision-Language Models (VLM): ViT, Projectors, LLaVA 2-Stage & DeepSeek-Janus Pro

EN
This technical guide is also available in Chinese.


🌐 查看中文版本 / Read in Chinese →

🌐 Vision-Language Models (VLM): ViT, Projectors, LLaVA 2-Stage & DeepSeek-Janus Pro

Core Executive Summary: Vision-Language Models (VLMs) empower LLMs to perceive visual scenes. Rather than training multimodal models from scratch, VLMs utilize cross-modal projectors to map visual patch embeddings from pre-trained Vision Encoders (ViTs) into the text embedding space of LLMs. This guide dissects VLM tripartite stacks, LLaVA 2-stage training, AnyRes dynamic resolution, and DeepSeek-Janus Pro decoupled architectures.


💡 Interactive Mermaid Architecture Flowchart

graph TD
    subgraph A["1. Visual Encoding"]
        A1["Input Image (H x W x C)"]
        A2["Vision Encoder (ViT / CLIP / EVA-CLIP)"]
        A3["Visual Tokens: H/16 x W/16 Grid -> Shape (N_v, D_v)"]
        A1 --> A2 --> A3
    end

    subgraph B["2. Cross-Modal Projection"]
        B1["Linear Projection (LLaVA-1.0): W * X_v -> (N_v, D_text)"]
        B2["2-Layer MLP (LLaVA-1.5): GELU(W1 * X_v) * W2 -> Non-linear alignment"]
        B3["Q-Former (BLIP-2): 32 Learnable Queries Cross-Attention compression"]
        B4["Perceiver Resampler (Flamingo): Samples fixed K visual tokens"]
        B3 --> B5["Projected Visual Tokens (N_v_compressed, D_text)"]
        B1 --> B5
        B2 --> B5
        B4 --> B5
    end

    subgraph C["3. Concatenation & LLM Inference"]
        C1["Text Prompt Tokens (N_t, D_text)"]
        C2["Concat [Visual Tokens ; Text Tokens] -> Sequence Length (N_v + N_t)"]
        C3["Autoregressive LLM (LLaMA / Qwen / Vicuna)"]
        C4["Output Text Response"]
        C1 --> C2
        B5 --> C2
        C2 --> C3 --> C4
    end

    subgraph D["4. Janus Pro Innovation"]
        D1["Understanding Path: SigLIP Visual Encoder"]
        D2["Generation Path: VQ Tokenizer + Decoupled Generation Head"]
        D3["Unified LLM Backbone: Eliminates task interference"]
        D1 --> D3
        D2 --> D3
    end

    A --> B --> C --> D

💡 Classic Interview Followups & Core Cheatsheet

  • Key Topic 1: Compare 4 cross-modal projectors (Linear, MLP, Q-Former, Perceiver Resampler) in parameter size and token compression.
  • Standard Answer: Linear (fast, zero compression), 2-Layer MLP (non-linear, zero compression, optimal instruction following), Q-Former (compresses visual tokens to fixed 32/64 tokens), Perceiver Resampler (cross-attention resampling).

💡 Intuition: The projector is the interpreter translating visual-token language into LLM language. Linear does word-by-word translation (all information, but verbose); Q-Former summarizes “the gist in one sentence” (32 tokens, saving context at the cost of detail).

ADVERTISEMENT · 赞助推荐

🎤 Interview answer: Conclusion: Linear/MLP keep every token with zero compression; Q-Former/Perceiver compress to a fixed 32/64. Why: Q-Former cross-attends learnable queries with visual features — an information bottleneck that buys context efficiency. Example: a 336×336 image yields 576 patch tokens; Linear sends all 576 into the LLM while Q-Former squeezes them into 32 — an 18× saving in KV cache for long conversations, but fine-grained OCR grounding suffers.

  • Key Topic 2: Explain LLaVA 2-stage training: Why must Stage 1 freeze ViT & LLM while only tuning the Projector?
  • Standard Answer: Stage 1 aligns representations using 595K image-caption pairs. Freezing ViT and LLM prevents unaligned random gradients from corrupting LLM language priors. Stage 2 performs visual instruction tuning by fine-tuning LLM + Projector.

💡 Intuition: Stage 1 is “learn to translate first, talk later”: the ViT and LLM already speak their native languages fluently — fine-tuning both at once breaks both. Train only the interpreter (projector) to align visual words with the text space, then let the LLM learn conversation in Stage 2.

🎤 Interview answer: Conclusion: Stage 1 freezes both towers and trains only the projector (595K caption pairs); Stage 2 freezes the ViT and fine-tunes LLM + projector (150K instructions). Why: it stops unaligned random gradients from destroying pretrained weights — align first, then instruct. Example: LLaVA-1.5 uses a 2-layer MLP projector; after Stage 1 the VQA groundwork is laid, and after Stage 2 end-to-end metrics jump to the 80s — the alignment stage is make-or-break.

  • Key Topic 3: How to handle token explosion under high-resolution image inputs? Explain AnyRes / LLaVA-NeXT dynamic patching.
  • Standard Answer: AnyRes slices high-resolution images into a $2 times 2$ grid of sub-patches plus a global downsampled overview image, feeding each through ViT and concatenating features.

💡 Intuition: Shrinking a hi-res image to one small picture hides small text; cutting every patch directly explodes token count. The compromise: keep one global thumbnail plus 2×2/3×3 sub-images inspected separately — global context and OCR detail both survive.

🎤 Interview answer: Conclusion: AnyRes dynamic patching = global thumbnail + 2×2/3×3 sub-patches, each through the ViT, then concatenated. Why: the global view keeps semantics and the sub-patches keep OCR detail — two complementary feature streams. Example: a 1024×1024 image cut at 14×14 patches explodes to ~5400 tokens; AnyRes stays within 1000–2500 tokens with one thumbnail plus 4–9 sub-patches, while OCR accuracy improves notably (LLaVA-NeXT).

  • Key Topic 4: How does DeepSeek-Janus Pro eliminate understanding vs generation representation conflict in unified autoregressive models?
  • Standard Answer: Understanding requires high-level semantic abstraction (SigLIP), while generation requires low-level pixel reconstruction (VQ-Tokenizer). Janus Pro decouples the encoding pathways while sharing a unified LLM backbone.

💡 Intuition: Understanding needs to “grasp the meaning” (high-level semantics), generation needs to “paint the right pixels” (low-level detail). Forcing one feature stream to do both is like making the same person a theater critic and a photographer — Janus splits the jobs while sharing one brain (the LLM backbone).

🎤 Interview answer: Conclusion: Janus Pro decouples a SigLIP path (understanding) from a VQ-tokenizer path (generation) onto a shared LLM backbone. Why: separating high-level semantics from low-level reconstruction removes the representation conflict. Example: Janus-Pro-7B beats DALL-E 3 at text-to-image and beats LLaVA at understanding — one 7B model doing both tasks, with decoupling as the core reason.

  • Key Topic 5: How is the LLaVA-Instruct-150K dataset generated using GPT-4 text prompts?
  • Standard Answer: Feeds image bounding box coordinates and captions into GPT-4 text prompts to synthesize multi-turn conversations, detailed descriptions, and complex reasoning QA.

💡 Intuition: Use a language teacher to write vision exam questions: convert each image into text (bboxes + captions), feed it to GPT-4, and have it role-play a questioner producing three question types — conversation, description, reasoning — 150K training samples generated in one pass.

🎤 Interview answer: Conclusion: LLaVA-Instruct-150K is synthesized by GPT-4 from bbox + caption text inputs into three instruction types. Why: a strong text-only LLM understands structured visual descriptions and generates multi-turn QA. Example: each COCO image yields ~3 dialogue turns + 1 detailed description + reasoning questions — 150K samples covering 83K images, launching the “LLM-synthesized multimodal instruction data” paradigm.


📚 Section 1: VLM Projector Comparison Matrix

📖 How to read this table: Three key contrasts — output visual tokens ($N_v$ as-is vs fixed 32/64), spatial preservation (100% vs partial loss), and compute cost. “Detail or context efficiency?” is the first question of projector selection.

Projector Type Mapping Mechanism Output Visual Tokens Compute Cost Spatial Preservation Model Representative
Linear Projection $W cdot X_v$ $N_v$ (uncompressed, ~256-576) Minimal 100% LLaVA-1.0, PaLI
2-Layer MLP $W_2 cdot text{GELU}(W_1 X_v)$ $N_v$ (uncompressed) Low 100% LLaVA-1.5, LLaVA-NeXT
Q-Former Learnable Queries Cross-Attn Fixed $K$ (e.g. 32/64) Medium Partial loss BLIP-2, InstructBLIP
Perceiver Resampler Fixed Queries Cross-Attn Fixed $K$ (e.g. 64) Medium Partial loss Flamingo, IDEFICS
Janus Decoupled SigLIP + VQ Codebook Decoupled dynamic paths Medium-High Dual-path optimal DeepSeek-Janus Pro

⚡ Section 2: VLM Projector Formula

In plain words: visual tokens are up-projected by $W_1$, passed through GELU for nonlinearity, then mapped by $W_2$ into the LLM’s embedding dimension — two linear layers with an activation in between are the interpreter’s entire structure.

2-Layer MLP Projector:
$$X_{text{text_space}} = text{GELU}(X_{text{vision}} W_1 + b_1) W_2 + b_2$$

💡 Intuition: A single linear layer can only do “scale + rotate” alignment; GELU lets the mapping bend, adding expressive power — switching LLaVA-1.5 from Linear to MLP is one of its biggest accuracy gains.

🎤 Interview answer: Conclusion: the 2-layer MLP (1024→2048→4096) is the LLaVA-1.5 standard projector. Why: $W_1$ up-projects, GELU adds nonlinearity, $W_2$ maps back to the LLM dimension while keeping every token. Example: 576 visual tokens of dim 1024 → 576 tokens of dim 4096 — roughly 10.5M parameters, only ~0.15% of a 7B model, yet the alignment impact is significant.


🐍 Section 3: Pure Numpy Handwritten VLM Projector Operator

import numpy as np

def pure_numpy_vlm_mlp_projector(visual_tokens: np.ndarray, W1: np.ndarray, b1: np.ndarray, W2: np.ndarray, b2: np.ndarray) -> np.ndarray:
    h1 = visual_tokens @ W1 + b1
    gelu = lambda x: 0.5 * x * (1.0 + np.tanh(np.sqrt(2.0 / np.pi) * (x + 0.044715 * np.power(x, 3))))
    return gelu(h1) @ W2 + b2

if __name__ == "__main__":
    v_tokens = np.random.randn(576, 1024)
    W1 = np.random.randn(1024, 2048) * 0.02
    b1 = np.zeros(2048)
    W2 = np.random.randn(2048, 4096) * 0.02
    b2 = np.zeros(4096)
    out = pure_numpy_vlm_mlp_projector(v_tokens, W1, b1, W2, b2)
    print("✅ VLM MLP Projector Output Shape:", out.shape)

💡 Intuition: The code is a literal translation of the formula: two linear transforms with GELU in between; shapes go (576,1024)→(576,2048)→(576,4096), each visual token “translated” into the LLM’s word space.

🎤 Interview answer: Conclusion: MLP Projector = $X cdot W_1 + b_1 to text{GELU} to cdot W_2 + b_2$. Why: nonlinear alignment lets visual features embed into the text semantic stream. Example: 576×1024 in, 576×4096 out — a negligible fraction of a 7B LLM’s inference cost. The projector is cheap; the bottleneck is the ViT and the LLM.


🚀 Key Takeaways & Best Practices

  1. Projector Choice: Use 2-Layer MLP for OCR/grounding accuracy; use Q-Former for long-context conversation efficiency.
  2. Stage 1 Safeguard: Freeze LLM during Stage 1 alignment to protect pre-trained text knowledge.
  3. Unified Multimodal: Prefer DeepSeek-Janus Pro decoupled encoders for combined understanding and generation.

🧠 深入探索 TalentMe 全景技术图谱与备考路线

本文选自 TalentMe AI 技术专栏与高维职业罗盘。支持双模态 Obsidian 本地私域同步、艾宾浩斯智能复习与 IDE 内嵌 AI 导师模拟面试。

👉 访问 TalentMe 技术专栏 →


Discover more from AirSOTA – Air School Of Thoughts AtoZ

Subscribe to get the latest posts sent to your email.