<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Vision on Tarragon</title><link>https://tarrragon.github.io/blog/tags/vision/</link><description>Recent content in Vision on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/vision/index.xml" rel="self" type="application/rss+xml"/><item><title>CLIP</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/clip/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/clip/</guid><description>&lt;p>CLIP（Contrastive Language-Image Pre-training、Radford et al., 2021）的核心概念是「&lt;strong>用 4 億組 (image, caption) 對、訓 image encoder 跟 text encoder、讓對應圖文的 embedding 在共享空間靠近&lt;/strong>」。CLIP 本身不是 VLM、但它的 image encoder 成為現代幾乎所有 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &amp;#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM&lt;/a> 的 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vision-encoder/" data-link-title="Vision Encoder" data-link-desc="VLM 內部負責把圖片轉成可進 Transformer 的向量序列的模組、ViT / CLIP encoder 為主流">vision encoder&lt;/a> 起點。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>CLIP 的訓練架構（簡化）：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">4 億組 (image, caption) 從網路爬：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl"> (photo of cat, &amp;#34;a fluffy orange cat sitting&amp;#34;)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> (screenshot of code, &amp;#34;Python error: NameError x undefined&amp;#34;)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">訓練：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> image → Image encoder（ViT-L/14）→ image_embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> caption → Text encoder（Transformer）→ text_embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> 正向對（matching image-caption）：embedding 應該相似
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> 負向對（同 batch 內其他不匹配）：embedding 應該遠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> [Contrastive learning](/llm/knowledge-cards/contrastive-learning/) loss&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>訓完後得到：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>共享 embedding 空間&lt;/strong>：圖跟文字 embedding 都在 768/1024 維空間、相似度比較有意義&lt;/li>
&lt;li>&lt;strong>Zero-shot classification 能力&lt;/strong>：給一張圖、給 100 個文字標籤、看哪個 embedding 最接近 → 不用 fine-tune 就能分類&lt;/li>
&lt;li>&lt;strong>Image search / 多模態 retrieval&lt;/strong>：text 跟 image 互查、是 multimodal RAG 基底&lt;/li>
&lt;/ol>
&lt;p>對 VLM 的影響：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">CLIP 訓出來後：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> image encoder 已經學會「把圖片變成有意義的 embedding」
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">VLM 訓練時：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> - 直接拿 CLIP 的 image encoder 當 vision encoder（凍住或一起 fine-tune）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl"> - 接上 LLM、用 image-text 任務資料訓 alignment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl"> - 不用從頭訓 vision encoder、省下大量 compute&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>跟 SigLIP 的關係：SigLIP（Zhai et al., 2023）是 Google 提出的 CLIP 變體、用 sigmoid loss 取代原本 InfoNCE、訓練更穩、品質略佳；Gemma 3 / Idefics 等用 SigLIP 而非原 CLIP。&lt;/p></description><content:encoded><![CDATA[<p>CLIP（Contrastive Language-Image Pre-training、Radford et al., 2021）的核心概念是「<strong>用 4 億組 (image, caption) 對、訓 image encoder 跟 text encoder、讓對應圖文的 embedding 在共享空間靠近</strong>」。CLIP 本身不是 VLM、但它的 image encoder 成為現代幾乎所有 <a href="/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM</a> 的 <a href="/blog/llm/knowledge-cards/vision-encoder/" data-link-title="Vision Encoder" data-link-desc="VLM 內部負責把圖片轉成可進 Transformer 的向量序列的模組、ViT / CLIP encoder 為主流">vision encoder</a> 起點。</p>
<h2 id="概念位置">概念位置</h2>
<p>CLIP 的訓練架構（簡化）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">4 億組 (image, caption) 從網路爬：
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  (photo of cat, &#34;a fluffy orange cat sitting&#34;)
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  (screenshot of code, &#34;Python error: NameError x undefined&#34;)
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  ...
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">訓練：
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  image → Image encoder（ViT-L/14）→ image_embedding
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  caption → Text encoder（Transformer）→ text_embedding
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl">  正向對（matching image-caption）：embedding 應該相似
</span></span><span class="line"><span class="ln">11</span><span class="cl">  負向對（同 batch 內其他不匹配）：embedding 應該遠
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl">  [Contrastive learning](/llm/knowledge-cards/contrastive-learning/) loss</span></span></code></pre></div><p>訓完後得到：</p>
<ol>
<li><strong>共享 embedding 空間</strong>：圖跟文字 embedding 都在 768/1024 維空間、相似度比較有意義</li>
<li><strong>Zero-shot classification 能力</strong>：給一張圖、給 100 個文字標籤、看哪個 embedding 最接近 → 不用 fine-tune 就能分類</li>
<li><strong>Image search / 多模態 retrieval</strong>：text 跟 image 互查、是 multimodal RAG 基底</li>
</ol>
<p>對 VLM 的影響：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">CLIP 訓出來後：
</span></span><span class="line"><span class="ln">2</span><span class="cl">  image encoder 已經學會「把圖片變成有意義的 embedding」
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl">VLM 訓練時：
</span></span><span class="line"><span class="ln">5</span><span class="cl">  - 直接拿 CLIP 的 image encoder 當 vision encoder（凍住或一起 fine-tune）
</span></span><span class="line"><span class="ln">6</span><span class="cl">  - 接上 LLM、用 image-text 任務資料訓 alignment
</span></span><span class="line"><span class="ln">7</span><span class="cl">  - 不用從頭訓 vision encoder、省下大量 compute</span></span></code></pre></div><p>跟 SigLIP 的關係：SigLIP（Zhai et al., 2023）是 Google 提出的 CLIP 變體、用 sigmoid loss 取代原本 InfoNCE、訓練更穩、品質略佳；Gemma 3 / Idefics 等用 SigLIP 而非原 CLIP。</p>
<h2 id="設計責任">設計責任</h2>
<p>讀 VLM paper / model card 看到「CLIP backbone」「SigLIP encoder」「OpenCLIP weights」就是這 family。寫 code 場景的判讀：</p>
<ol>
<li><strong>CLIP 本身不是 VLM</strong>：CLIP 只有 image-text 相似度、不能生文字回答；VLM 是「CLIP 的 image encoder + LLM + alignment training」</li>
<li><strong>不同 CLIP 變體影響 VLM 能力</strong>：CLIP ViT-L/14 是經典、SigLIP / DFN（Apple）等變體在某些任務更強</li>
<li><strong>Multimodal RAG 直接用 CLIP</strong>：純 image-text retrieval（如「找跟這張圖相似的 doc」）不需要完整 VLM、CLIP-like 模型就夠</li>
<li><strong>CLIP 用於 zero-shot 分類仍實用</strong>：給定固定的 class label set（如「截圖 / 設計稿 / 程式碼 / 文件」）、CLIP 能直接 zero-shot 分類、不需要訓 specific classifier</li>
</ol>
]]></content:encoded></item><item><title>Image Token</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/image-token/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/image-token/</guid><description>&lt;p>Image token（圖片 token）的核心概念是「&lt;strong>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &amp;#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM&lt;/a> 把圖片過 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vision-encoder/" data-link-title="Vision Encoder" data-link-desc="VLM 內部負責把圖片轉成可進 Transformer 的向量序列的模組、ViT / CLIP encoder 為主流">vision encoder&lt;/a> 後、產出的向量序列、在 Transformer 內跟 text &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/token/" data-link-title="Token" data-link-desc="LLM 處理文字時的最小單位：介於字元與單字之間">token&lt;/a> 同質處理&lt;/strong>」。理解這個概念能解釋為什麼「一張圖 = 幾百到幾千 token」、為什麼塞圖會吃掉 context budget、為什麼 VLM 推論比純文字 LLM 慢。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>從圖到 image token 的轉換：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">Input image: 1024×1024 RGB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> ↓ Patchify（切 14×14 patch、得 ~5000 個 patch）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> ↓ Vision encoder（ViT 處理每個 patch、產 768/1024 維向量）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl"> ↓ Optional: 2D position embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> ↓ Optional: pooling / merging（減少 token 數）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">Image tokens: ~500-2500 個（依模型設計）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl"> ↓ Projection（vision_dim → LLM hidden_dim、配合 LLM 內部維度）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl"> ↓ 跟 text token 串成單一 sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl"> ↓ Transformer 跟一般 token 一樣處理&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>主流 VLM 的單張圖 token 用量（粗略、依模型 / 解析度而變）：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>模型&lt;/th>
 &lt;th>預設輸入解析度&lt;/th>
 &lt;th>單張圖約用 token&lt;/th>
 &lt;th>Context 影響&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>GPT-4o vision&lt;/td>
 &lt;td>動態（最高 2048×768）&lt;/td>
 &lt;td>~85 - 1000+&lt;/td>
 &lt;td>高解析度模式消耗大&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Claude 3 vision&lt;/td>
 &lt;td>動態&lt;/td>
 &lt;td>~1000-1600&lt;/td>
 &lt;td>一張圖 ≈ 1.5K text token&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Qwen2.5-VL&lt;/td>
 &lt;td>動態、可調 min/max&lt;/td>
 &lt;td>~500 - 4000&lt;/td>
 &lt;td>設定 &lt;code>min_pixels&lt;/code> 控制下限&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Llama 3.2 Vision&lt;/td>
 &lt;td>固定（560×560）&lt;/td>
 &lt;td>~1600&lt;/td>
 &lt;td>多張圖直接乘&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Gemma 3 Vision&lt;/td>
 &lt;td>動態&lt;/td>
 &lt;td>~256 - 2000&lt;/td>
 &lt;td>多語 / 多解析度&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>事實查核註&lt;/strong>：上述 token 數量級依模型版本、推論配置（如「low / high detail」模式）變化、引用前以對應 model card 跟 API 文件為準。&lt;/p>&lt;/blockquote>
&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>讀 VLM API / 推論 log 看到「image tokens used: 1247」「visual tokens: 580」就是這指標。寫 code 場景的判讀：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>多張截圖 = context 吃緊&lt;/strong>：一張 1500 token、丟 10 張就 15K、加上 prompt 跟回答、long context 模型才能 handle&lt;/li>
&lt;li>&lt;strong>同張圖、解析度模式影響成本&lt;/strong>：許多 API 提供 low / auto / high detail 模式、low detail 約 1/10 token；OCR 需要高解析、不細節辨識可選 low&lt;/li>
&lt;li>&lt;strong>本地 VLM 推論 prefill 慢&lt;/strong>：image token 多、prefill 階段（&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT&lt;/a>）對應變長、第一個字出來要等較久&lt;/li>
&lt;li>&lt;strong>API 計費通常 image token 跟 text token 同價&lt;/strong>：算成本看實際用了多少 image token、不要假設「一張圖 = 一個 token」&lt;/li>
&lt;li>&lt;strong>Image token 是消耗品、不是參數&lt;/strong>：跟模型內部權重不同、純粹是「這次 forward pass 的 input」&lt;/li>
&lt;/ol></description><content:encoded><![CDATA[<p>Image token（圖片 token）的核心概念是「<strong><a href="/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM</a> 把圖片過 <a href="/blog/llm/knowledge-cards/vision-encoder/" data-link-title="Vision Encoder" data-link-desc="VLM 內部負責把圖片轉成可進 Transformer 的向量序列的模組、ViT / CLIP encoder 為主流">vision encoder</a> 後、產出的向量序列、在 Transformer 內跟 text <a href="/blog/llm/knowledge-cards/token/" data-link-title="Token" data-link-desc="LLM 處理文字時的最小單位：介於字元與單字之間">token</a> 同質處理</strong>」。理解這個概念能解釋為什麼「一張圖 = 幾百到幾千 token」、為什麼塞圖會吃掉 context budget、為什麼 VLM 推論比純文字 LLM 慢。</p>
<h2 id="概念位置">概念位置</h2>
<p>從圖到 image token 的轉換：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">Input image: 1024×1024 RGB
</span></span><span class="line"><span class="ln">2</span><span class="cl">   ↓ Patchify（切 14×14 patch、得 ~5000 個 patch）
</span></span><span class="line"><span class="ln">3</span><span class="cl">   ↓ Vision encoder（ViT 處理每個 patch、產 768/1024 維向量）
</span></span><span class="line"><span class="ln">4</span><span class="cl">   ↓ Optional: 2D position embedding
</span></span><span class="line"><span class="ln">5</span><span class="cl">   ↓ Optional: pooling / merging（減少 token 數）
</span></span><span class="line"><span class="ln">6</span><span class="cl">Image tokens: ~500-2500 個（依模型設計）
</span></span><span class="line"><span class="ln">7</span><span class="cl">   ↓ Projection（vision_dim → LLM hidden_dim、配合 LLM 內部維度）
</span></span><span class="line"><span class="ln">8</span><span class="cl">   ↓ 跟 text token 串成單一 sequence
</span></span><span class="line"><span class="ln">9</span><span class="cl">   ↓ Transformer 跟一般 token 一樣處理</span></span></code></pre></div><p>主流 VLM 的單張圖 token 用量（粗略、依模型 / 解析度而變）：</p>
<table>
  <thead>
      <tr>
          <th>模型</th>
          <th>預設輸入解析度</th>
          <th>單張圖約用 token</th>
          <th>Context 影響</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GPT-4o vision</td>
          <td>動態（最高 2048×768）</td>
          <td>~85 - 1000+</td>
          <td>高解析度模式消耗大</td>
      </tr>
      <tr>
          <td>Claude 3 vision</td>
          <td>動態</td>
          <td>~1000-1600</td>
          <td>一張圖 ≈ 1.5K text token</td>
      </tr>
      <tr>
          <td>Qwen2.5-VL</td>
          <td>動態、可調 min/max</td>
          <td>~500 - 4000</td>
          <td>設定 <code>min_pixels</code> 控制下限</td>
      </tr>
      <tr>
          <td>Llama 3.2 Vision</td>
          <td>固定（560×560）</td>
          <td>~1600</td>
          <td>多張圖直接乘</td>
      </tr>
      <tr>
          <td>Gemma 3 Vision</td>
          <td>動態</td>
          <td>~256 - 2000</td>
          <td>多語 / 多解析度</td>
      </tr>
  </tbody>
</table>
<blockquote>
<p><strong>事實查核註</strong>：上述 token 數量級依模型版本、推論配置（如「low / high detail」模式）變化、引用前以對應 model card 跟 API 文件為準。</p></blockquote>
<h2 id="設計責任">設計責任</h2>
<p>讀 VLM API / 推論 log 看到「image tokens used: 1247」「visual tokens: 580」就是這指標。寫 code 場景的判讀：</p>
<ol>
<li><strong>多張截圖 = context 吃緊</strong>：一張 1500 token、丟 10 張就 15K、加上 prompt 跟回答、long context 模型才能 handle</li>
<li><strong>同張圖、解析度模式影響成本</strong>：許多 API 提供 low / auto / high detail 模式、low detail 約 1/10 token；OCR 需要高解析、不細節辨識可選 low</li>
<li><strong>本地 VLM 推論 prefill 慢</strong>：image token 多、prefill 階段（<a href="/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT</a>）對應變長、第一個字出來要等較久</li>
<li><strong>API 計費通常 image token 跟 text token 同價</strong>：算成本看實際用了多少 image token、不要假設「一張圖 = 一個 token」</li>
<li><strong>Image token 是消耗品、不是參數</strong>：跟模型內部權重不同、純粹是「這次 forward pass 的 input」</li>
</ol>
]]></content:encoded></item><item><title>Multimodal Fusion</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/multimodal-fusion/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/multimodal-fusion/</guid><description>&lt;p>Multimodal fusion（多模態融合）的核心概念是「&lt;strong>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &amp;#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM&lt;/a> 把 vision encoder 產出的 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/image-token/" data-link-title="Image Token" data-link-desc="VLM 把圖片轉成「對 Transformer 而言跟 text token 同質」的向量、計入 context window 預算">image token&lt;/a> 跟 text token 結合進 LLM 的設計方式&lt;/strong>」。三條主流路線：early fusion（image token 跟 text token 串成同 sequence）、cross-attention（separate stream、attention 跨流）、native multimodal（單一網路統一處理）。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>三種 fusion 方式的對比：&lt;/p>
&lt;h3 id="1-early-fusion最主流">1. Early Fusion（最主流）&lt;/h3>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">image → vision encoder → image tokens ─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> ├→ concat 成單一 sequence → 同 LLM Transformer 處理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">text → tokenizer → text tokens ────────┘&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>特性&lt;/strong>：image token 跟 text token 在同一個 token sequence、共用 LLM 的 attention / FFN&lt;/li>
&lt;li>&lt;strong>代表&lt;/strong>：LLaVA、Qwen2-VL、Llama 3.2 Vision、Pixtral、GPT-4V 多數變體&lt;/li>
&lt;li>&lt;strong>優點&lt;/strong>：實作簡單、可重用 LLM 的 weight、訓練資料效率高&lt;/li>
&lt;li>&lt;strong>缺點&lt;/strong>：image token 佔 context、長對話 / 多圖時 context budget 吃緊&lt;/li>
&lt;/ul>
&lt;h3 id="2-cross-attentionflamingo-style">2. Cross-Attention（Flamingo-style）&lt;/h3>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">image → vision encoder → image features ─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> │ Cross-attention 層
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">text → tokenizer → tokens → LLM Transformer ──┤ 插在每幾層 Transformer 之間
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl"> │ Image features 不進 LLM 主流
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">output ←─────────────────────────────────┘&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>特性&lt;/strong>：image features 不變成 LLM 的 token、透過額外的 cross-attention 層注入&lt;/li>
&lt;li>&lt;strong>代表&lt;/strong>：Flamingo（DeepMind）、Idefics（Hugging Face）、部分 video LLM&lt;/li>
&lt;li>&lt;strong>優點&lt;/strong>：text token sequence 不會被 image 撐大、長文字 + 多圖比較友善&lt;/li>
&lt;li>&lt;strong>缺點&lt;/strong>：架構複雜、訓練難、推論伺服器支援度差&lt;/li>
&lt;/ul>
&lt;h3 id="3-native-multimodalunified-token-space">3. Native Multimodal（unified token space）&lt;/h3>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">image → patchify → discrete image tokens（如 VQ-VAE 編碼）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">text → tokenizer → text tokens
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">兩者共用 vocab、同一個 Transformer 從頭訓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">（沒有「分開的 vision encoder」、modality 在 vocab level 統一）&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>特性&lt;/strong>：架構上「圖跟文字是同一種東西」、共用 vocab&lt;/li>
&lt;li>&lt;strong>代表&lt;/strong>：Chameleon（Meta 研究）、未來 trend&lt;/li>
&lt;li>&lt;strong>優點&lt;/strong>：理論最 clean、跨模態 generation 自然（生圖 + 生文都同個模型）&lt;/li>
&lt;li>&lt;strong>缺點&lt;/strong>：訓練極貴、目前研究階段為主、實用 VLM 仍以 early fusion 為主流&lt;/li>
&lt;/ul>
&lt;h2 id="主流選擇對比">主流選擇對比&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>路線&lt;/th>
 &lt;th>佔比（2026/5）&lt;/th>
 &lt;th>對 coding 場景的影響&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Early fusion&lt;/td>
 &lt;td>~85%&lt;/td>
 &lt;td>Image token 佔 context、要算清楚 context budget&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cross-attention&lt;/td>
 &lt;td>~10%&lt;/td>
 &lt;td>推論伺服器支援度差、本地跑選項少&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Native multimodal&lt;/td>
 &lt;td>&amp;lt; 5%&lt;/td>
 &lt;td>研究階段、現在不適合 production / 本地工作流&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>讀 VLM paper / blog 看到「early fusion」「LLaVA-style」「Flamingo-style」「cross-attention adapter」就是這分類。寫 code 場景的判讀：&lt;/p></description><content:encoded><![CDATA[<p>Multimodal fusion（多模態融合）的核心概念是「<strong><a href="/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM</a> 把 vision encoder 產出的 <a href="/blog/llm/knowledge-cards/image-token/" data-link-title="Image Token" data-link-desc="VLM 把圖片轉成「對 Transformer 而言跟 text token 同質」的向量、計入 context window 預算">image token</a> 跟 text token 結合進 LLM 的設計方式</strong>」。三條主流路線：early fusion（image token 跟 text token 串成同 sequence）、cross-attention（separate stream、attention 跨流）、native multimodal（單一網路統一處理）。</p>
<h2 id="概念位置">概念位置</h2>
<p>三種 fusion 方式的對比：</p>
<h3 id="1-early-fusion最主流">1. Early Fusion（最主流）</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">image → vision encoder → image tokens ─┐
</span></span><span class="line"><span class="ln">2</span><span class="cl">                                       ├→ concat 成單一 sequence → 同 LLM Transformer 處理
</span></span><span class="line"><span class="ln">3</span><span class="cl">text → tokenizer → text tokens ────────┘</span></span></code></pre></div><ul>
<li><strong>特性</strong>：image token 跟 text token 在同一個 token sequence、共用 LLM 的 attention / FFN</li>
<li><strong>代表</strong>：LLaVA、Qwen2-VL、Llama 3.2 Vision、Pixtral、GPT-4V 多數變體</li>
<li><strong>優點</strong>：實作簡單、可重用 LLM 的 weight、訓練資料效率高</li>
<li><strong>缺點</strong>：image token 佔 context、長對話 / 多圖時 context budget 吃緊</li>
</ul>
<h3 id="2-cross-attentionflamingo-style">2. Cross-Attention（Flamingo-style）</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">image → vision encoder → image features ─┐
</span></span><span class="line"><span class="ln">2</span><span class="cl">                                          │ Cross-attention 層
</span></span><span class="line"><span class="ln">3</span><span class="cl">text → tokenizer → tokens → LLM Transformer ──┤  插在每幾層 Transformer 之間
</span></span><span class="line"><span class="ln">4</span><span class="cl">                                          │ Image features 不進 LLM 主流
</span></span><span class="line"><span class="ln">5</span><span class="cl">output ←─────────────────────────────────┘</span></span></code></pre></div><ul>
<li><strong>特性</strong>：image features 不變成 LLM 的 token、透過額外的 cross-attention 層注入</li>
<li><strong>代表</strong>：Flamingo（DeepMind）、Idefics（Hugging Face）、部分 video LLM</li>
<li><strong>優點</strong>：text token sequence 不會被 image 撐大、長文字 + 多圖比較友善</li>
<li><strong>缺點</strong>：架構複雜、訓練難、推論伺服器支援度差</li>
</ul>
<h3 id="3-native-multimodalunified-token-space">3. Native Multimodal（unified token space）</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">image → patchify → discrete image tokens（如 VQ-VAE 編碼）
</span></span><span class="line"><span class="ln">2</span><span class="cl">text → tokenizer → text tokens
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl">兩者共用 vocab、同一個 Transformer 從頭訓
</span></span><span class="line"><span class="ln">5</span><span class="cl">（沒有「分開的 vision encoder」、modality 在 vocab level 統一）</span></span></code></pre></div><ul>
<li><strong>特性</strong>：架構上「圖跟文字是同一種東西」、共用 vocab</li>
<li><strong>代表</strong>：Chameleon（Meta 研究）、未來 trend</li>
<li><strong>優點</strong>：理論最 clean、跨模態 generation 自然（生圖 + 生文都同個模型）</li>
<li><strong>缺點</strong>：訓練極貴、目前研究階段為主、實用 VLM 仍以 early fusion 為主流</li>
</ul>
<h2 id="主流選擇對比">主流選擇對比</h2>
<table>
  <thead>
      <tr>
          <th>路線</th>
          <th>佔比（2026/5）</th>
          <th>對 coding 場景的影響</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Early fusion</td>
          <td>~85%</td>
          <td>Image token 佔 context、要算清楚 context budget</td>
      </tr>
      <tr>
          <td>Cross-attention</td>
          <td>~10%</td>
          <td>推論伺服器支援度差、本地跑選項少</td>
      </tr>
      <tr>
          <td>Native multimodal</td>
          <td>&lt; 5%</td>
          <td>研究階段、現在不適合 production / 本地工作流</td>
      </tr>
  </tbody>
</table>
<h2 id="設計責任">設計責任</h2>
<p>讀 VLM paper / blog 看到「early fusion」「LLaVA-style」「Flamingo-style」「cross-attention adapter」就是這分類。寫 code 場景的判讀：</p>
<ol>
<li><strong>本地跑 VLM 多半是 early fusion</strong>：選 Qwen2.5-VL / Llama 3.2 Vision / Gemma 3 Vision 都是這條路線、推論伺服器（llama.cpp、Ollama、LM Studio）都支援</li>
<li><strong>Cross-attention 模型本地跑可能撞牆</strong>：推論伺服器對 Idefics 等 cross-attention 模型支援度差、不一定能跑 GGUF</li>
<li><strong>理解 fusion 影響 token 估算</strong>：early fusion 下「image token = 真的進 context」、cross-attention 下不算進 context window 主流</li>
<li><strong>未來 trend 是 unified</strong>：但現在做 production / 本地工作流不必等、用 early fusion 主流模型即可</li>
</ol>
]]></content:encoded></item><item><title>Vision Encoder</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/vision-encoder/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/vision-encoder/</guid><description>&lt;p>Vision encoder（視覺編碼器）的核心概念是「&lt;strong>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &amp;#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM&lt;/a> 內部把圖片轉成向量序列的模組&lt;/strong>」。主流做法是「把圖片切成 patch、每個 patch 過 ViT（Vision Transformer）變一個向量」、再進入 LLM 的 Transformer 層。Vision encoder 通常用 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/clip/" data-link-title="CLIP" data-link-desc="OpenAI 2021 提出的 contrastive image-text pretraining、現代 VLM 的 vision encoder 大多衍生自它">CLIP&lt;/a> 預訓練的權重起始、再跟 LLM 一起 fine-tune。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>Vision encoder 在 VLM 中的位置：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">Input image（如 1024×1024 RGB）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> ↓ 切 patch（如 14×14 patch、每張圖 ~5000 個 patch）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> ↓ Vision encoder（ViT 或 CLIP image encoder）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">Image feature vectors（每個 patch 對應一個 768/1024 維向量）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> ↓ Projection layer（vision dim → LLM hidden dim）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">[Image tokens](/llm/knowledge-cards/image-token/)（變成 LLM 可吃的「視覺 token」）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">跟 text token 混合 → Transformer → output token&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>主流 vision encoder 設計：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>設計&lt;/th>
 &lt;th>機制&lt;/th>
 &lt;th>代表 VLM&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>CLIP ViT-L/14（或變體）&lt;/td>
 &lt;td>OpenAI CLIP 的 image encoder 直接用&lt;/td>
 &lt;td>LLaVA-1.5、Qwen2-VL、Pixtral&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>SigLIP&lt;/td>
 &lt;td>Google 的 sigmoid-loss CLIP 變體、訓得更穩&lt;/td>
 &lt;td>Gemma 3 Vision、Idefics2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>自訓 / 多解析度 ViT&lt;/td>
 &lt;td>從頭訓、支援動態解析度（不固定 224×224）&lt;/td>
 &lt;td>Qwen2.5-VL、GPT-4V&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Native multimodal（單一網路）&lt;/td>
 &lt;td>圖跟文字共用 Transformer、不分開 encoder&lt;/td>
 &lt;td>Chameleon（Meta 研究）&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Vision encoder 的關鍵設計取捨：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>解析度&lt;/strong>：固定（224×224 / 336×336）vs 動態（依輸入圖大小）&lt;/li>
&lt;li>&lt;strong>參數量&lt;/strong>：vision encoder 0.3B-1B 是主流；太小辨識能力差、太大拖累整體推論速度&lt;/li>
&lt;li>&lt;strong>Pretrain 來源&lt;/strong>：用 CLIP / SigLIP 預訓練的權重起始、加上 multimodal fine-tune；少數從頭訓&lt;/li>
&lt;li>&lt;strong>跟 LLM 結合方式&lt;/strong>：見 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/multimodal-fusion/" data-link-title="Multimodal Fusion" data-link-desc="VLM 把 vision encoder 跟 LLM 結合的方式：early fusion / cross-attention / native multimodal 三條路線">multimodal fusion&lt;/a> 卡&lt;/li>
&lt;/ol>
&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>讀 VLM model card 看到「vision tower」「ViT backbone」「image encoder」就是這部分。寫 code 場景的判讀：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>解析度影響細節辨識&lt;/strong>：低解析度（224）對「截圖中的小字 / 細邊框」可能模糊、看不清；高解析度（1024+）能看清楚但 token 用量大&lt;/li>
&lt;li>&lt;strong>Token 用量估算&lt;/strong>：一張 1024×1024 圖經過 vision encoder 後、產出 ~500-2500 image tokens（依設計）、相當於一段中等長度的文字 prompt&lt;/li>
&lt;li>&lt;strong>動態解析度模型更實用&lt;/strong>：Qwen2.5-VL / GPT-4V 等支援動態解析度、不會把高清截圖縮成 224 失去細節&lt;/li>
&lt;li>&lt;strong>Vision encoder 不能單獨 fine-tune&lt;/strong>：通常跟 LLM 一起訓、單獨換 vision encoder 會破壞 alignment&lt;/li>
&lt;/ol></description><content:encoded><![CDATA[<p>Vision encoder（視覺編碼器）的核心概念是「<strong><a href="/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM</a> 內部把圖片轉成向量序列的模組</strong>」。主流做法是「把圖片切成 patch、每個 patch 過 ViT（Vision Transformer）變一個向量」、再進入 LLM 的 Transformer 層。Vision encoder 通常用 <a href="/blog/llm/knowledge-cards/clip/" data-link-title="CLIP" data-link-desc="OpenAI 2021 提出的 contrastive image-text pretraining、現代 VLM 的 vision encoder 大多衍生自它">CLIP</a> 預訓練的權重起始、再跟 LLM 一起 fine-tune。</p>
<h2 id="概念位置">概念位置</h2>
<p>Vision encoder 在 VLM 中的位置：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">Input image（如 1024×1024 RGB）
</span></span><span class="line"><span class="ln">2</span><span class="cl">   ↓ 切 patch（如 14×14 patch、每張圖 ~5000 個 patch）
</span></span><span class="line"><span class="ln">3</span><span class="cl">   ↓ Vision encoder（ViT 或 CLIP image encoder）
</span></span><span class="line"><span class="ln">4</span><span class="cl">Image feature vectors（每個 patch 對應一個 768/1024 維向量）
</span></span><span class="line"><span class="ln">5</span><span class="cl">   ↓ Projection layer（vision dim → LLM hidden dim）
</span></span><span class="line"><span class="ln">6</span><span class="cl">[Image tokens](/llm/knowledge-cards/image-token/)（變成 LLM 可吃的「視覺 token」）
</span></span><span class="line"><span class="ln">7</span><span class="cl">   ↓
</span></span><span class="line"><span class="ln">8</span><span class="cl">跟 text token 混合 → Transformer → output token</span></span></code></pre></div><p>主流 vision encoder 設計：</p>
<table>
  <thead>
      <tr>
          <th>設計</th>
          <th>機制</th>
          <th>代表 VLM</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>CLIP ViT-L/14（或變體）</td>
          <td>OpenAI CLIP 的 image encoder 直接用</td>
          <td>LLaVA-1.5、Qwen2-VL、Pixtral</td>
      </tr>
      <tr>
          <td>SigLIP</td>
          <td>Google 的 sigmoid-loss CLIP 變體、訓得更穩</td>
          <td>Gemma 3 Vision、Idefics2</td>
      </tr>
      <tr>
          <td>自訓 / 多解析度 ViT</td>
          <td>從頭訓、支援動態解析度（不固定 224×224）</td>
          <td>Qwen2.5-VL、GPT-4V</td>
      </tr>
      <tr>
          <td>Native multimodal（單一網路）</td>
          <td>圖跟文字共用 Transformer、不分開 encoder</td>
          <td>Chameleon（Meta 研究）</td>
      </tr>
  </tbody>
</table>
<p>Vision encoder 的關鍵設計取捨：</p>
<ol>
<li><strong>解析度</strong>：固定（224×224 / 336×336）vs 動態（依輸入圖大小）</li>
<li><strong>參數量</strong>：vision encoder 0.3B-1B 是主流；太小辨識能力差、太大拖累整體推論速度</li>
<li><strong>Pretrain 來源</strong>：用 CLIP / SigLIP 預訓練的權重起始、加上 multimodal fine-tune；少數從頭訓</li>
<li><strong>跟 LLM 結合方式</strong>：見 <a href="/blog/llm/knowledge-cards/multimodal-fusion/" data-link-title="Multimodal Fusion" data-link-desc="VLM 把 vision encoder 跟 LLM 結合的方式：early fusion / cross-attention / native multimodal 三條路線">multimodal fusion</a> 卡</li>
</ol>
<h2 id="設計責任">設計責任</h2>
<p>讀 VLM model card 看到「vision tower」「ViT backbone」「image encoder」就是這部分。寫 code 場景的判讀：</p>
<ol>
<li><strong>解析度影響細節辨識</strong>：低解析度（224）對「截圖中的小字 / 細邊框」可能模糊、看不清；高解析度（1024+）能看清楚但 token 用量大</li>
<li><strong>Token 用量估算</strong>：一張 1024×1024 圖經過 vision encoder 後、產出 ~500-2500 image tokens（依設計）、相當於一段中等長度的文字 prompt</li>
<li><strong>動態解析度模型更實用</strong>：Qwen2.5-VL / GPT-4V 等支援動態解析度、不會把高清截圖縮成 224 失去細節</li>
<li><strong>Vision encoder 不能單獨 fine-tune</strong>：通常跟 LLM 一起訓、單獨換 vision encoder 會破壞 alignment</li>
</ol>
]]></content:encoded></item><item><title>VLM（Vision-Language Model）</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/vlm/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/vlm/</guid><description>&lt;p>VLM（Vision-Language Model、視覺語言模型）的核心概念是「&lt;strong>同時接受圖片 + 文字輸入、產生文字輸出的 LLM 變體&lt;/strong>」。內部結構是「&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vision-encoder/" data-link-title="Vision Encoder" data-link-desc="VLM 內部負責把圖片轉成可進 Transformer 的向量序列的模組、ViT / CLIP encoder 為主流">vision encoder&lt;/a> 把圖片轉成 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/image-token/" data-link-title="Image Token" data-link-desc="VLM 把圖片轉成「對 Transformer 而言跟 text token 同質」的向量、計入 context window 預算">image token&lt;/a>、跟文字 token 一起進 Transformer」。寫 code 場景的 VLM 用途：看截圖 debug、看 mockup 寫前端 code、看 architecture 白板照片寫文件。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>VLM 跟純文字 LLM 的差異：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">純文字 LLM：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> text → tokenizer → token IDs → embedding → Transformer → output token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">VLM：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> text → tokenizer → text token IDs ─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl"> ├→ 統一 token sequence → Transformer → output token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl"> image → vision encoder → image tokens ─┘&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>主流 VLM family（2026/5）：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Family&lt;/th>
 &lt;th>商業 / 開源&lt;/th>
 &lt;th>本地可跑&lt;/th>
 &lt;th>Coding 場景強項&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>GPT-4o / GPT-5 vision&lt;/td>
 &lt;td>商業 API&lt;/td>
 &lt;td>不可&lt;/td>
 &lt;td>截圖理解、OCR、UI 推理&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Claude 3.7 / 4 Sonnet vision&lt;/td>
 &lt;td>商業 API&lt;/td>
 &lt;td>不可&lt;/td>
 &lt;td>截圖 debug、code from mockup&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Gemini 2.5 Pro vision&lt;/td>
 &lt;td>商業 API&lt;/td>
 &lt;td>不可&lt;/td>
 &lt;td>長視訊 / 多張圖&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Qwen2.5-VL / Qwen3-VL&lt;/strong>&lt;/td>
 &lt;td>開源&lt;/td>
 &lt;td>7B / 32B / 72B 可本地&lt;/td>
 &lt;td>中英 OCR、UI 元素辨識&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Llama 3.2 Vision&lt;/strong>&lt;/td>
 &lt;td>開源&lt;/td>
 &lt;td>11B / 90B&lt;/td>
 &lt;td>通用 vision、英文場景&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Gemma 3 Vision&lt;/strong>&lt;/td>
 &lt;td>開源&lt;/td>
 &lt;td>4B / 12B / 27B&lt;/td>
 &lt;td>多語、輕量本地&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>LLaVA / InternVL / Pixtral&lt;/td>
 &lt;td>開源&lt;/td>
 &lt;td>7B-34B&lt;/td>
 &lt;td>研究 / 特定 use case&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>事實查核註&lt;/strong>：主流 VLM family、本地可跑狀態、coding 場景強項在 2026/5 是估計、依模型更新跟推論伺服器支援度持續變化、引用前以對應 model card 跟 Hugging Face leaderboard 為準。&lt;/p>&lt;/blockquote>
&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>讀 model card 看到「vision」「VL」「multimodal」「-VL」「visual」就是 VLM。寫 code 場景的判讀：&lt;/p></description><content:encoded><![CDATA[<p>VLM（Vision-Language Model、視覺語言模型）的核心概念是「<strong>同時接受圖片 + 文字輸入、產生文字輸出的 LLM 變體</strong>」。內部結構是「<a href="/blog/llm/knowledge-cards/vision-encoder/" data-link-title="Vision Encoder" data-link-desc="VLM 內部負責把圖片轉成可進 Transformer 的向量序列的模組、ViT / CLIP encoder 為主流">vision encoder</a> 把圖片轉成 <a href="/blog/llm/knowledge-cards/image-token/" data-link-title="Image Token" data-link-desc="VLM 把圖片轉成「對 Transformer 而言跟 text token 同質」的向量、計入 context window 預算">image token</a>、跟文字 token 一起進 Transformer」。寫 code 場景的 VLM 用途：看截圖 debug、看 mockup 寫前端 code、看 architecture 白板照片寫文件。</p>
<h2 id="概念位置">概念位置</h2>
<p>VLM 跟純文字 LLM 的差異：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">純文字 LLM：
</span></span><span class="line"><span class="ln">2</span><span class="cl">  text → tokenizer → token IDs → embedding → Transformer → output token
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl">VLM：
</span></span><span class="line"><span class="ln">5</span><span class="cl">  text → tokenizer → text token IDs ─┐
</span></span><span class="line"><span class="ln">6</span><span class="cl">                                     ├→ 統一 token sequence → Transformer → output token
</span></span><span class="line"><span class="ln">7</span><span class="cl">  image → vision encoder → image tokens ─┘</span></span></code></pre></div><p>主流 VLM family（2026/5）：</p>
<table>
  <thead>
      <tr>
          <th>Family</th>
          <th>商業 / 開源</th>
          <th>本地可跑</th>
          <th>Coding 場景強項</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GPT-4o / GPT-5 vision</td>
          <td>商業 API</td>
          <td>不可</td>
          <td>截圖理解、OCR、UI 推理</td>
      </tr>
      <tr>
          <td>Claude 3.7 / 4 Sonnet vision</td>
          <td>商業 API</td>
          <td>不可</td>
          <td>截圖 debug、code from mockup</td>
      </tr>
      <tr>
          <td>Gemini 2.5 Pro vision</td>
          <td>商業 API</td>
          <td>不可</td>
          <td>長視訊 / 多張圖</td>
      </tr>
      <tr>
          <td><strong>Qwen2.5-VL / Qwen3-VL</strong></td>
          <td>開源</td>
          <td>7B / 32B / 72B 可本地</td>
          <td>中英 OCR、UI 元素辨識</td>
      </tr>
      <tr>
          <td><strong>Llama 3.2 Vision</strong></td>
          <td>開源</td>
          <td>11B / 90B</td>
          <td>通用 vision、英文場景</td>
      </tr>
      <tr>
          <td><strong>Gemma 3 Vision</strong></td>
          <td>開源</td>
          <td>4B / 12B / 27B</td>
          <td>多語、輕量本地</td>
      </tr>
      <tr>
          <td>LLaVA / InternVL / Pixtral</td>
          <td>開源</td>
          <td>7B-34B</td>
          <td>研究 / 特定 use case</td>
      </tr>
  </tbody>
</table>
<blockquote>
<p><strong>事實查核註</strong>：主流 VLM family、本地可跑狀態、coding 場景強項在 2026/5 是估計、依模型更新跟推論伺服器支援度持續變化、引用前以對應 model card 跟 Hugging Face leaderboard 為準。</p></blockquote>
<h2 id="設計責任">設計責任</h2>
<p>讀 model card 看到「vision」「VL」「multimodal」「-VL」「visual」就是 VLM。寫 code 場景的判讀：</p>
<ol>
<li><strong>任務適合用 vision 才用</strong>：純文字描述夠清楚就別塞圖、image token 多、context 跟推論成本上升</li>
<li><strong>本地跑 VLM 比純文字 LLM 吃資源</strong>：vision encoder 通常 0.3-1B 參數、image 處理階段算力需求大、TTFT 變長</li>
<li><strong>OCR-heavy 任務不一定要 VLM</strong>：純 OCR（識別截圖中文字）用專門 OCR 工具（Tesseract / PaddleOCR）可能更穩、VLM 強項在「理解圖 + 推理」</li>
<li><strong>影片不是免費</strong>：「VLM 看影片」本質是抽 frames 變多張圖、token 用量爆炸、效益看任務</li>
</ol>
]]></content:encoded></item><item><title>4.15 Vision in coding workflow：本地 VLM 怎麼接寫 code</title><link>https://tarrragon.github.io/blog/llm/04-applications/vision-in-coding-workflow/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/04-applications/vision-in-coding-workflow/</guid><description>&lt;p>寫 code 工作流不只是文字進文字出 — 大量任務需要看圖：browser 截圖 debug UI、Figma mockup 寫前端、架構白板照片寫文件、log 截圖找 error。&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &amp;#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM&lt;/a>（Vision-Language Model）把這些任務從「人類用文字描述給 LLM」升級到「LLM 直接看圖理解」。本章把 vision 在 coding 場景的 use cases、本地 VLM 選型、跟雲端 VLM 的分工、IDE 整合現狀拆成可操作的判讀。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>本章 framing 重點&lt;/strong>：教材整體聲明過「不放多模態」、但 VLM 在 coding 工作流的 trigger 已經響（雲端 IDE 普遍整合、本地推論伺服器陸續支援）、重新評估後加入本章。本章聚焦「跨工具世代不變的原理 + 寫 code 場景特有的判讀」、避開「具體 IDE plugin API」這類易過時內容。&lt;/p>&lt;/blockquote>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;p>讀完本章後、你應該能：&lt;/p>
&lt;ol>
&lt;li>解釋 VLM 跟純文字 LLM 在 coding 場景的能力差異。&lt;/li>
&lt;li>看到截圖 / mockup / 設計稿時、判斷該用 VLM 還是純文字描述。&lt;/li>
&lt;li>對自己硬體預算選擇本地 VLM（Qwen2.5-VL / Llama 3.2 Vision / Gemma 3 Vision）。&lt;/li>
&lt;li>估算 VLM 推論的 context budget（image token + text token）。&lt;/li>
&lt;li>知道 IDE 整合 VLM 的現狀跟 trigger 訊號（什麼時候該升級到 vision-native workflow）。&lt;/li>
&lt;/ol>
&lt;h2 id="coding-場景的-vision-use-cases">Coding 場景的 vision use cases&lt;/h2>
&lt;p>寫 code 工作流中、有 vision 跟沒 vision 的差距：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>任務&lt;/th>
 &lt;th>沒 vision&lt;/th>
 &lt;th>有 vision&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>UI bug debug&lt;/td>
 &lt;td>人類手寫「按鈕對齊不對、應該 vertically centered」&lt;/td>
 &lt;td>截圖貼進來、VLM 看 layout 直接判讀&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Figma → React code&lt;/td>
 &lt;td>人類描述「navbar、3 col grid、卡片含 icon + text」&lt;/td>
 &lt;td>把 mockup 截圖貼進來、VLM 直接生對應 code&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Error dialog / stack trace 截圖&lt;/td>
 &lt;td>人類複製貼上完整 error message&lt;/td>
 &lt;td>截圖、VLM OCR + 理解 context&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>白板 / 紙上 architecture&lt;/td>
 &lt;td>人類重新描述「3 個 microservice、訊息經過 queue&amp;hellip;」&lt;/td>
 &lt;td>拍照、VLM 看圖生 mermaid 圖 / documentation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Browser DevTools 看 console&lt;/td>
 &lt;td>人類複製 log&lt;/td>
 &lt;td>截圖、VLM 看 stack trace + 周圍 panel context&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>跟設計師對齊 visual style&lt;/td>
 &lt;td>人類描述配色、字體&lt;/td>
 &lt;td>截圖比較、VLM 抓 RGB / 字體 hint&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Code screenshot 從別人帖文&lt;/td>
 &lt;td>人類重打&lt;/td>
 &lt;td>截圖、VLM OCR + 解讀&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>判讀反射：&lt;strong>任務需要看「整體 visual context」&lt;/strong>（如 layout 對齊、設計稿 → code）→ VLM 顯著贏；&lt;strong>純 OCR&lt;/strong>（只認字）→ 專門 OCR 工具（Tesseract / PaddleOCR）可能更穩。&lt;/p></description><content:encoded><![CDATA[<p>寫 code 工作流不只是文字進文字出 — 大量任務需要看圖：browser 截圖 debug UI、Figma mockup 寫前端、架構白板照片寫文件、log 截圖找 error。<a href="/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM</a>（Vision-Language Model）把這些任務從「人類用文字描述給 LLM」升級到「LLM 直接看圖理解」。本章把 vision 在 coding 場景的 use cases、本地 VLM 選型、跟雲端 VLM 的分工、IDE 整合現狀拆成可操作的判讀。</p>
<blockquote>
<p><strong>本章 framing 重點</strong>：教材整體聲明過「不放多模態」、但 VLM 在 coding 工作流的 trigger 已經響（雲端 IDE 普遍整合、本地推論伺服器陸續支援）、重新評估後加入本章。本章聚焦「跨工具世代不變的原理 + 寫 code 場景特有的判讀」、避開「具體 IDE plugin API」這類易過時內容。</p></blockquote>
<h2 id="本章目標">本章目標</h2>
<p>讀完本章後、你應該能：</p>
<ol>
<li>解釋 VLM 跟純文字 LLM 在 coding 場景的能力差異。</li>
<li>看到截圖 / mockup / 設計稿時、判斷該用 VLM 還是純文字描述。</li>
<li>對自己硬體預算選擇本地 VLM（Qwen2.5-VL / Llama 3.2 Vision / Gemma 3 Vision）。</li>
<li>估算 VLM 推論的 context budget（image token + text token）。</li>
<li>知道 IDE 整合 VLM 的現狀跟 trigger 訊號（什麼時候該升級到 vision-native workflow）。</li>
</ol>
<h2 id="coding-場景的-vision-use-cases">Coding 場景的 vision use cases</h2>
<p>寫 code 工作流中、有 vision 跟沒 vision 的差距：</p>
<table>
  <thead>
      <tr>
          <th>任務</th>
          <th>沒 vision</th>
          <th>有 vision</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>UI bug debug</td>
          <td>人類手寫「按鈕對齊不對、應該 vertically centered」</td>
          <td>截圖貼進來、VLM 看 layout 直接判讀</td>
      </tr>
      <tr>
          <td>Figma → React code</td>
          <td>人類描述「navbar、3 col grid、卡片含 icon + text」</td>
          <td>把 mockup 截圖貼進來、VLM 直接生對應 code</td>
      </tr>
      <tr>
          <td>Error dialog / stack trace 截圖</td>
          <td>人類複製貼上完整 error message</td>
          <td>截圖、VLM OCR + 理解 context</td>
      </tr>
      <tr>
          <td>白板 / 紙上 architecture</td>
          <td>人類重新描述「3 個 microservice、訊息經過 queue&hellip;」</td>
          <td>拍照、VLM 看圖生 mermaid 圖 / documentation</td>
      </tr>
      <tr>
          <td>Browser DevTools 看 console</td>
          <td>人類複製 log</td>
          <td>截圖、VLM 看 stack trace + 周圍 panel context</td>
      </tr>
      <tr>
          <td>跟設計師對齊 visual style</td>
          <td>人類描述配色、字體</td>
          <td>截圖比較、VLM 抓 RGB / 字體 hint</td>
      </tr>
      <tr>
          <td>Code screenshot 從別人帖文</td>
          <td>人類重打</td>
          <td>截圖、VLM OCR + 解讀</td>
      </tr>
  </tbody>
</table>
<p>判讀反射：<strong>任務需要看「整體 visual context」</strong>（如 layout 對齊、設計稿 → code）→ VLM 顯著贏；<strong>純 OCR</strong>（只認字）→ 專門 OCR 工具（Tesseract / PaddleOCR）可能更穩。</p>
<h2 id="vlm-在-coding-場景的失敗模式">VLM 在 coding 場景的失敗模式</h2>
<p>VLM 不是萬能、寫 code 場景的常見失敗：</p>
<ol>
<li><strong>看不清細節</strong>：低解析度模式下、截圖中的小字 / 細邊框 / 1px 對齊看不出來；要開高解析度模式 + 高 image token budget</li>
<li><strong>OCR 出錯</strong>：手寫字 / 模糊截圖 / 特殊字型上錯字、特別是中文 / 程式碼 special character</li>
<li><strong>空間關係推理弱</strong>：「左上角的按鈕」「flexbox 第二行第三個」這類描述、VLM 推理仍不穩</li>
<li><strong>DPI 跟縮放問題</strong>：Retina 截圖、放大縮小、subpixel 等情況、不同 VLM 結果差異大</li>
<li><strong>多張圖比較</strong>：比兩張截圖差異、VLM 容易遺漏細節；最好給明確指令「請對比 A、B 兩張圖的 X 元素」</li>
</ol>
<p>緩解：</p>
<ul>
<li>截圖前裁切到「跟問題相關的區域」、別整個螢幕丟</li>
<li>高細節任務開高解析度模式（API 的 <code>detail: high</code> 或本地 VLM 的 <code>min_pixels</code> 設高）</li>
<li>OCR-only 任務改用專門工具、不靠 VLM</li>
</ul>
<h2 id="本地-vlm-選型20265">本地 VLM 選型（2026/5）</h2>
<p>本地可跑的主流 VLM：</p>
<table>
  <thead>
      <tr>
          <th>模型</th>
          <th>大小</th>
          <th>Q4 量化後記憶體</th>
          <th>適合硬體</th>
          <th>Coding 場景強項</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Qwen2.5-VL-7B / Qwen3-VL-7B</strong></td>
          <td>7B（vision + LLM）</td>
          <td>~6 GB</td>
          <td>16GB+ Mac / 12GB+ VRAM</td>
          <td>中英 OCR、UI 元素辨識</td>
      </tr>
      <tr>
          <td><strong>Qwen2.5-VL-32B / 72B</strong></td>
          <td>32B / 72B</td>
          <td>~18 / 40 GB</td>
          <td>32GB+ Mac / 24GB+ VRAM</td>
          <td>強 reasoning、多圖比較</td>
      </tr>
      <tr>
          <td><strong>Llama 3.2 Vision-11B</strong></td>
          <td>11B</td>
          <td>~7 GB</td>
          <td>16GB+ Mac / 12GB+ VRAM</td>
          <td>英文場景、通用</td>
      </tr>
      <tr>
          <td><strong>Llama 3.2 Vision-90B</strong></td>
          <td>90B</td>
          <td>~50 GB</td>
          <td>64GB+ Mac / 多卡</td>
          <td>接近雲端品質、本地高端</td>
      </tr>
      <tr>
          <td><strong>Gemma 3 Vision-4B / 12B / 27B</strong></td>
          <td>4-27B</td>
          <td>~3-16 GB</td>
          <td>24GB+ Mac / 16GB+ VRAM</td>
          <td>多語、輕量本地</td>
      </tr>
      <tr>
          <td>Pixtral 12B / 124B</td>
          <td>12B / 124B</td>
          <td>~7 / 70 GB</td>
          <td>同上</td>
          <td>Mistral 系、研究 / 評估</td>
      </tr>
  </tbody>
</table>
<blockquote>
<p><strong>事實查核註</strong>：本地 VLM 的推論伺服器支援度（llama.cpp、Ollama、MLX）依模型 / 推論伺服器版本變動很快、引用前以對應 release notes 為準。2026/5 主流是 llama.cpp 對 Qwen2-VL / Llama 3.2 Vision / Gemma 3 Vision 支援度較好、其他模型可能要等。</p></blockquote>
<h3 id="硬體-vs-模型對照">硬體 vs 模型對照</h3>
<table>
  <thead>
      <tr>
          <th>硬體</th>
          <th>推薦 VLM</th>
          <th>預期體感</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>M4 Pro 24GB / 4090 16GB</td>
          <td>Qwen2.5-VL-7B / Llama 3.2 Vision-11B</td>
          <td>可用、品質中等、適合輕度 vision 工作</td>
      </tr>
      <tr>
          <td>M4 Pro 36GB / 5090 24GB</td>
          <td>Qwen2.5-VL-32B / Gemma 3 Vision-27B</td>
          <td>寬鬆、品質接近 2024 雲端中階</td>
      </tr>
      <tr>
          <td>M4 Max 48-64GB</td>
          <td>Qwen2.5-VL-32B / Llama 3.2 Vision-90B（Q4 緊）</td>
          <td>高品質、coding-vision 主力</td>
      </tr>
      <tr>
          <td>M4 Max 128GB / 多卡 PC</td>
          <td>Llama 3.2 Vision-90B / Qwen2.5-VL-72B</td>
          <td>接近雲端旗艦</td>
      </tr>
  </tbody>
</table>
<h3 id="跟純文字-llm-對照的記憶體成本">跟純文字 LLM 對照的記憶體成本</h3>
<table>
  <thead>
      <tr>
          <th>任務</th>
          <th>純文字 LLM</th>
          <th>VLM</th>
          <th>額外成本</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>模型本體</td>
          <td>18 GB（31B Q4）</td>
          <td>~25 GB（32B VLM Q4）</td>
          <td>+30-40% 給 vision encoder</td>
      </tr>
      <tr>
          <td>Context budget 影響</td>
          <td>純 text</td>
          <td>一張 1024×1024 圖 ≈ 1500-2500 <a href="/blog/llm/knowledge-cards/image-token/" data-link-title="Image Token" data-link-desc="VLM 把圖片轉成「對 Transformer 而言跟 text token 同質」的向量、計入 context window 預算">image tokens</a></td>
          <td>多張圖直接擠 context</td>
      </tr>
      <tr>
          <td>Prefill 時間（TTFT）</td>
          <td>視 prompt 長度</td>
          <td>圖處理階段顯著拉長 TTFT</td>
          <td>第一個字等較久</td>
      </tr>
      <tr>
          <td>Tokens/s 生成速度</td>
          <td>同模型大小</td>
          <td>比同規模純文字 LLM 慢 ~10-30%</td>
          <td>Vision encoder overhead</td>
      </tr>
  </tbody>
</table>
<h2 id="本地-vlm-vs-雲端-vlm-的分工">本地 VLM vs 雲端 VLM 的分工</h2>
<p>跟模組六的 <a href="/blog/llm/06-security/cross-cloud-local-data-boundary/" data-link-title="6.4 跨雲端 / 本地的資料邊界" data-link-desc="個人 dev 場景下混用雲端 LLM 跟本地 LLM 時的 prompt 洩漏點：Continue.dev 多 provider 設定、隱私資料流、按敏感度分流的判讀">跨雲端 / 本地資料邊界</a> 同邏輯、按任務分流：</p>
<table>
  <thead>
      <tr>
          <th>任務</th>
          <th>推薦</th>
          <th>理由</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>看 NDA / 機密 codebase 截圖</td>
          <td>本地 VLM（Qwen2.5-VL 7B+）</td>
          <td>截圖含敏感程式碼、不能送雲端</td>
      </tr>
      <tr>
          <td>看自家內部 UI debug</td>
          <td>本地 VLM</td>
          <td>UI 設計可能機密</td>
      </tr>
      <tr>
          <td>看公開 OSS 截圖</td>
          <td>雲端 VLM（Claude 4 / GPT-5 vision）</td>
          <td>雲端品質高、無隱私顧慮</td>
      </tr>
      <tr>
          <td>看 Figma mockup（高品質要求）</td>
          <td>雲端 VLM</td>
          <td>Figma → React code 雲端目前仍領先</td>
      </tr>
      <tr>
          <td>看自己 whiteboard 拍照</td>
          <td>本地 VLM</td>
          <td>個人 thinking 不送雲端</td>
      </tr>
      <tr>
          <td>看 Stack Overflow 截圖</td>
          <td>雲端 / 本地都行</td>
          <td>公開內容、看品質需求</td>
      </tr>
  </tbody>
</table>
<p>混用配置（同 <a href="/blog/llm/04-applications/long-context-engineering/" data-link-title="4.11 Long context engineering" data-link-desc="128K / 1M context 模型怎麼用：claimed vs effective context、lost-in-the-middle、context 設計策略、Long context vs RAG 取捨">4.11 long-context</a> 跟 <a href="/blog/llm/06-security/cross-cloud-local-data-boundary/" data-link-title="6.4 跨雲端 / 本地的資料邊界" data-link-desc="個人 dev 場景下混用雲端 LLM 跟本地 LLM 時的 prompt 洩漏點：Continue.dev 多 provider 設定、隱私資料流、按敏感度分流的判讀">6.4 cross-cloud</a> 推薦模式）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">Continue.dev config：
</span></span><span class="line"><span class="ln">2</span><span class="cl">  Local VLM（default for vision）：Qwen2.5-VL-32B
</span></span><span class="line"><span class="ln">3</span><span class="cl">    日常 vision 工作、敏感內容
</span></span><span class="line"><span class="ln">4</span><span class="cl">  Cloud VLM（manual switch）：Claude 4 vision
</span></span><span class="line"><span class="ln">5</span><span class="cl">    複雜 Figma → code、高品質要求
</span></span><span class="line"><span class="ln">6</span><span class="cl">
</span></span><span class="line"><span class="ln">7</span><span class="cl">Local text model：Qwen3-Coder-30B-Instruct
</span></span><span class="line"><span class="ln">8</span><span class="cl">  純文字 coding 任務</span></span></code></pre></div><h2 id="image-token-跟-context-budget">Image token 跟 context budget</h2>
<p>VLM 推論時、<a href="/blog/llm/knowledge-cards/image-token/" data-link-title="Image Token" data-link-desc="VLM 把圖片轉成「對 Transformer 而言跟 text token 同質」的向量、計入 context window 預算">image token</a> 跟 text token 共用同一個 context window。預算估算：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">一張 1024×1024 截圖：
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  低細節（low detail）：~85-256 image tokens
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  中等：~500-1000 image tokens
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  高細節（high detail）：~1500-3000 image tokens
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">VLM 對話的典型 context 構成：
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  System prompt：~500 token
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  之前對話歷史：~2000-5000 token
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  3 張截圖：~3000-6000 token
</span></span><span class="line"><span class="ln">10</span><span class="cl">  使用者當前 prompt：~200 token
</span></span><span class="line"><span class="ln">11</span><span class="cl">  → 合計 ~6K-12K input
</span></span><span class="line"><span class="ln">12</span><span class="cl">  → 加上 generated answer 跟 reasoning trace（若 VLM 也支援 reasoning）
</span></span><span class="line"><span class="ln">13</span><span class="cl">  → 16K context 模型開始吃緊</span></span></code></pre></div><p>實務建議：</p>
<ol>
<li><strong>VLM 工作流配 long context 模型</strong>：至少 32K context、64K 更好</li>
<li><strong>多輪對話控制歷史長度</strong>：每幾輪 trim 舊截圖、避免 context 爆</li>
<li><strong>裁切截圖、只貼相關區域</strong>：別把整個 4K 螢幕貼進來、跟問題相關的窗口就行</li>
<li><strong>看清楚 API 文件的 detail 模式</strong>：不需要看小字的任務用 low detail、省 token</li>
</ol>
<h2 id="ide-整合的現狀20265">IDE 整合的現狀（2026/5）</h2>
<table>
  <thead>
      <tr>
          <th>工具</th>
          <th>Vision 支援程度</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Claude Desktop</td>
          <td>完整、拖拉截圖進 chat</td>
      </tr>
      <tr>
          <td>Cursor</td>
          <td>完整、<code>@image</code> 或拖拉</td>
      </tr>
      <tr>
          <td>Continue.dev</td>
          <td>部分（依 provider 跟版本）、本地 VLM 仍演化中</td>
      </tr>
      <tr>
          <td>Aider</td>
          <td>CLI 支援 image input、本地 VLM 看 backend</td>
      </tr>
      <tr>
          <td>Ollama</td>
          <td>Vision 支援部分模型（如 llava、gemma3-vision）</td>
      </tr>
      <tr>
          <td>llama.cpp</td>
          <td>部分模型支援（依 release）</td>
      </tr>
      <tr>
          <td>LM Studio</td>
          <td>部分 GUI 支援</td>
      </tr>
  </tbody>
</table>
<blockquote>
<p><strong>事實查核註</strong>：IDE 跟推論伺服器對 VLM 的支援度 2026/5 仍在快速演化、引用前以各工具當前 release notes 為準。雲端 IDE（Cursor / Claude Code）的 vision 支援多半成熟、本地 IDE plugin + 本地 VLM 的組合仍在追趕。</p></blockquote>
<h3 id="trigger-訊號">Trigger 訊號</h3>
<p>判斷「該升級到 vision-native coding workflow」的訊號：</p>
<ol>
<li>Continue.dev / Ollama release notes 出現「first-class vision support」「image input now stable」</li>
<li>本地 VLM 在自己工作流的 use case（如 debug UI）品質追上 2024 年的 Claude 3 vision</li>
<li>同事 / 社群開始日常用截圖 + IDE 互動</li>
<li>自己工作流出現「人類花時間文字描述視覺問題給 LLM」的 friction</li>
</ol>
<p>任一觸發 → 開始 explore 本地 vision plugin、設配置。</p>
<h2 id="multimodal-rag-跟-vlm-的關係">Multimodal RAG 跟 VLM 的關係</h2>
<p><a href="/blog/llm/04-applications/rag-principles/" data-link-title="4.1 RAG 原理：retrieval &#43; augmentation 模式" data-link-desc="為什麼模型需要外掛知識、語意相似 vs 字面相似、chunking 的本質取捨、retrieval 失敗的根本原因">RAG</a> 章節覆蓋了 text-based retrieval。Multimodal RAG 加上 vision 維度：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">傳統 RAG：
</span></span><span class="line"><span class="ln">2</span><span class="cl">  text query → text embedding → 檢索 text docs
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl">Multimodal RAG：
</span></span><span class="line"><span class="ln">5</span><span class="cl">  text or image query → multimodal embedding → 檢索 text + image
</span></span><span class="line"><span class="ln">6</span><span class="cl">  例：「跟這張 UI 截圖相似的設計」、「跟這個 error 一樣的 issue ticket」</span></span></code></pre></div><p>Multimodal RAG 的 embedding 通常用 <a href="/blog/llm/knowledge-cards/clip/" data-link-title="CLIP" data-link-desc="OpenAI 2021 提出的 contrastive image-text pretraining、現代 VLM 的 vision encoder 大多衍生自它">CLIP</a>-style 模型（跟 <a href="/blog/llm/04-applications/embedding-model-internals/" data-link-title="4.12 Embedding model 內部：訓練、選型、in-domain fine-tune" data-link-desc="Embedding model 怎麼訓練（contrastive learning &#43; hard negative mining）、怎麼挑（MTEB / 大小 / domain）、何時該自己 fine-tune">4.12 embedding model internals</a> 介紹的 text-only embedding model 訓練 paradigm 同源、都用 contrastive learning、但同時 embed 圖跟文字到共享空間）。</p>
<p>寫 code 場景的潛在應用：</p>
<ul>
<li><strong>設計系統 RAG</strong>：把過去設計稿、UI screenshots 都 embed 起來、給新 task 截圖時 retrieve 相似 case</li>
<li><strong>Bug screenshot 知識庫</strong>：歷史 bug 截圖 + 解法 embed、給新 bug 截圖時找相似 case</li>
<li><strong>Architecture 圖譜</strong>：架構圖 retrieve、給新需求找對應的舊架構</li>
</ul>
<p>目前實用度比 text RAG 低、需要的 infrastructure（multimodal embedding service、image-friendly vector DB）尚不普及。</p>
<p>Tripwire（什麼時候值得評估 multimodal RAG）：</p>
<ol>
<li>推論伺服器（Ollama / llama.cpp）的 release notes 出現 first-class CLIP-style embedding 支援</li>
<li>Vector DB（Qdrant / Milvus / Weaviate）的 image embedding 索引從 experimental 變 stable</li>
<li>自己工作流累積 1000+ 截圖（設計稿 / UI bug / 架構圖）、且 text 描述 retrieval 已撞天花板</li>
<li>Team 開始把「跟 X 類似的舊 case」當常規查詢、不只是「找特定關鍵字」</li>
</ol>
<p>任一觸發 → 評估 multimodal RAG；都沒觸發 → 仍用 text RAG。</p>
<h2 id="不在本章內的主題">不在本章內的主題</h2>
<ol>
<li><strong>影片理解 / video LLM</strong>：寫 code 場景用得到的相對少（screen recording 倒是會用、但實作上多半切 keyframe 變多張圖）、見專門 video LLM 教材</li>
<li><strong>Vision-only model（不含語言）</strong>：OCR、object detection、image classification 等專門 vision 任務、用 specialised 工具更好</li>
<li><strong>生圖</strong>（Diffusion 等）：跟 VLM 完全不同 paradigm、見 <a href="/blog/llm/knowledge-cards/diffusion/" data-link-title="Diffusion" data-link-desc="產圖用的生成式 AI 架構：跟寫 code 用的 Transformer 是不同路線">Diffusion 卡片</a> 跟 ComfyUI 教材</li>
<li><strong>3D / point cloud</strong>：CAD / 3D 模型理解、目前 VLM 支援少、屬研究階段</li>
<li><strong>具體 IDE plugin 設定</strong>：Continue.dev 的 image upload UI、Ollama 的 vision API 細節等、隨版本變、見各工具當前文件</li>
</ol>
<h2 id="何時過時--何時不過時">何時過時 / 何時不過時</h2>
<p><strong>不會過時的部分</strong>：</p>
<ul>
<li>Coding 場景 vision 的 use case 分類（UI debug、mockup → code、OCR 等）</li>
<li>本地 vs 雲端的分流邏輯（沿用 cross-cloud-local-data-boundary 框架）</li>
<li>Image token 跟 context budget 的關係</li>
<li>VLM 的失敗模式分類（細節、OCR、空間推理、DPI）</li>
<li>Multimodal RAG 的概念框架</li>
</ul>
<p><strong>會變的部分</strong>：</p>
<ul>
<li>具體本地 VLM 模型（Qwen2.5-VL → 2.6 → &hellip;、Llama 3.2 → 4 → &hellip;）</li>
<li>推論伺服器對 VLM 的支援度（llama.cpp、Ollama、LM Studio 都在追）</li>
<li>IDE plugin 的 vision integration（Continue.dev、Cursor、Aider 都在演化）</li>
<li>Vision encoder 設計（CLIP → SigLIP → DFN → &hellip;）</li>
<li>雲端跟本地的品質差距（會持續縮小）</li>
</ul>
<h2 id="跟其他章節的關係">跟其他章節的關係</h2>
<p>本章是 <a href="/blog/llm/04-applications/rag-principles/" data-link-title="4.1 RAG 原理：retrieval &#43; augmentation 模式" data-link-desc="為什麼模型需要外掛知識、語意相似 vs 字面相似、chunking 的本質取捨、retrieval 失敗的根本原因">4.1 RAG</a> / <a href="/blog/llm/04-applications/tool-use-principles/" data-link-title="4.3 Tool use 原理：LLM 跟外部世界互動" data-link-desc="Structured output 是 LLM 跨入工程系統的橋、function calling 取捨、為什麼本地小模型 tool use 表現崩潰">4.3 Tool use</a> / <a href="/blog/llm/04-applications/embedding-model-internals/" data-link-title="4.12 Embedding model 內部：訓練、選型、in-domain fine-tune" data-link-desc="Embedding model 怎麼訓練（contrastive learning &#43; hard negative mining）、怎麼挑（MTEB / 大小 / domain）、何時該自己 fine-tune">4.12 embedding model</a> 在 vision 延伸的補完；隱私 / 跨雲端分流邏輯沿用 <a href="/blog/llm/06-security/cross-cloud-local-data-boundary/" data-link-title="6.4 跨雲端 / 本地的資料邊界" data-link-desc="個人 dev 場景下混用雲端 LLM 跟本地 LLM 時的 prompt 洩漏點：Continue.dev 多 provider 設定、隱私資料流、按敏感度分流的判讀">6.4</a>；本地 VLM 配 IDE 的 hands-on 屬於 <a href="/blog/llm/01-local-llm-services/hands-on/" data-link-title="Hands-on：本地 AI 工具實作筆記" data-link-desc="Ollama / ComfyUI / Whisper / Piper TTS：實際安裝、驗證、跑通的紀錄。隨工具版本演化、跟 1.x 原理章節互補。">模組一 hands-on</a> 範圍、視推論伺服器支援度成熟度補。</p>
]]></content:encoded></item></channel></rss>