視覺編碼器:ViT、SigLIP 與 DINOv2 的選擇
從 ViT 的 patch 化革命,到 CLIP/SigLIP 的語言對齊,再到 DINOv2 的自監督細粒度理解,理解視覺編碼器的設計取捨與選擇框架。
視覺編碼器:ViT、SigLIP 與 DINOv2 的選擇
上一篇我們理解了多模態模型的三種架構:對比式、融合式、統一式。
無論哪一種架構,都有一個共同的起點:視覺編碼器。
它的職責是把一張圖片轉換成一組向量,讓後續的 Transformer 能像處理文字 token 一樣處理視覺資訊。
視覺編碼器的好壞,直接決定了模型能看到什麼、錯過什麼。
這一篇,我們要深入視覺編碼器的原理、不同模型的設計取捨,以及如何根據任務選擇合適的編碼器。
一、ViT:把圖片當成一句話
核心思想
Vision Transformer(ViT)的核心思想極其簡單:把圖片切成固定大小的 patch,每個 patch 當作一個「詞」,然後用 Transformer 處理。 ViT
這個想法來自 2020 年的論文 An Image is Worth 16x16 Words。在 ViT 之前,電腦視覺幾乎被卷積神經網路(CNN)統治。ViT 證明了純 Transformer 架構在視覺任務上也能達到甚至超越 CNN 的表現。
運作流程
1. 切塊(Patchify):
圖片 (224×224) → 切成 14×14 個 16×16 的 patch
2. 展平與投影(Flatten & Project):
每個 patch 展平成 768 維向量 (16×16×3) → 線性投影到 D 維
3. 加入位置編碼(Positional Encoding):
每個 patch 嵌入加上一個可學習的位置向量
4. Transformer 編碼:
送入標準 Transformer,用自注意力捕捉全局依賴
用數學表示,對於第 i 個 patch:
z_i^enc = z_i + e_i
其中 z_i 是 patch 的線性投影,e_i 是該位置的可學習位置編碼。
為什麼需要位置編碼?
Transformer 本身將輸入視為一個無序的集合。如果沒有位置編碼,模型無法知道哪個 patch 在圖片的左上角、哪個在右下角。位置編碼為每個 patch 添加了空間資訊,讓注意力機制能考慮 patch 之間的相對位置。
ViT 使用可學習的位置編碼(learnable positional embedding),位置向量在訓練過程中自動調整,以最大化任務表現。ViT
ViT 與 CNN 的差異
| 面向 | CNN | ViT |
|---|---|---|
| 歸納偏誤 | 平移等變性、局部性 | 較少 |
| 感受野 | 局部,逐層擴大 | 全局,第一層就能看到整張圖 |
| 資料需求 | 較少 | 較多 |
| 計算複雜度 | 與像素數成線性 | 與 patch 數成平方(自注意力) |
ViT 的核心優勢是全局注意力——第一個 Transformer 層就能建模任意兩個 patch 之間的關係,而 CNN 需要堆疊很多層才能達到同樣的全局感受野。ViT
二、CLIP 與 SigLIP:對比學習的視覺編碼器
CLIP 的貢獻
CLIP 首次將視覺編碼器和文字編碼器通過對比學習聯合訓練,讓圖像和文字在同一個向量空間中對齊。CLIP 使用約 4 億個圖文對進行訓練,以文字作為監督信號來編碼圖像。CLIP
CLIP 的視覺編碼器(通常是 ViT)因此學到了語意豐富的視覺表示,成為融合式架構(如 LLaVA)的默認選擇。LLaVA
CLIP 的對比學習目標是對稱的交叉熵損失。對於一個包含 N 個圖文對的批次,系統計算所有 N×N 組合的餘弦相似度,最大化 N 個正確配對的相似度,同時最小化 N²-N 個不正確配對的相似度。CLIP
SigLIP 的改進
SigLIP 用 Sigmoid 損失取代了 CLIP 的 Softmax 對比損失。SigLIP
CLIP 的 Softmax 需要跨樣本歸一化——每個圖像的損失取決於批次中所有其他圖像。SigLIP 將每個圖文對視為獨立的二分類問題,不需要跨樣本歸一化,訓練效率更高,更容易擴展到更大的批次。SigLIP
SigLIP 2:更強的視覺語言編碼器
2025 年 2 月,Google 發布了 SigLIP 2,在原始 SigLIP 的 Sigmoid 損失基礎上,加入了多個新的訓練目標。SigLIP 2
新增的訓練目標:
- 解碼器輔助目標:加入一個文字解碼器,預測整張圖片的描述、給定描述的邊界框座標、以及給定邊界框的區域描述。這讓視覺編碼器具備了位置感知能力。SigLIP 2
- 自蒸餾與遮罩預測:使用 Global-Local Loss 和 Masked Prediction Loss,透過自蒸餾改善細粒度局部語意。SigLIP 2
SigLIP 2 的優勢:
- 在所有模型規模上,零樣本分類、圖文檢索和 VLM 視覺表徵提取都優於原始 SigLIP。SigLIP 2
- 支援多語言。SigLIP 2
- 提供動態解析度(naflex)變體,適合對長寬比和解析度敏感的任務。SigLIP 2
- 已成為 Qwen3-VL 和 Gemma 3 的默認編碼器。SigLIP 2
SigLIP 2 的程式碼範例
import torch
from transformers import AutoProcessor, AutoModel
from PIL import Image
import requests
# 載入 SigLIP 2
model_name = "google/siglip2-so400m-patch14-384"
processor = AutoProcessor.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
# 準備輸入
image = Image.open(
requests.get("https://example.com/cat.jpg", stream=True).raw
)
text = "一隻貓坐在沙發上"
inputs = processor(
text=text,
images=image,
padding="max_length",
return_tensors="pt",
)
# 取得嵌入
with torch.no_grad():
outputs = model(**inputs)
# 圖像嵌入與文字嵌入
image_embeds = outputs.image_embeds
text_embeds = outputs.text_embeds
# 計算相似度
similarity = torch.nn.functional.cosine_similarity(
image_embeds, text_embeds
)
print(f"相似度:{similarity.item():.4f}")
三、DINOv2:自監督學習的視覺編碼器
核心思想
DINOv2 走了一條完全不同的路:不使用文字監督,純粹透過視覺自監督學習來訓練視覺編碼器。 DINOv2
它的核心假設是:視覺本身包含足夠的結構,不需要文字標註就能學到強大的視覺表示。
訓練方式
DINOv2 使用自蒸餾(self-distillation):一個「教師」網路和一個「學生」網路有相同的架構,學生網路試圖匹配教師網路的輸出。教師網路是學生網路參數的指數移動平均。DINOv2
訓練目標包括:
DINOv2 的技術貢獻還包括:使用自動化流程構建多樣化且經過策劃的圖像數據集,並訓練了一個 10 億參數的 ViT 模型,然後蒸餾成一系列較小的模型。DINOv2
DINOv2 的優勢
- 細粒度視覺理解:DINOv2 在需要精確空間理解的任務上表現出色——分割、深度估計、物體計數。它的 patch 層級特徵特別擅長捕捉局部細節,這與 CLIP/SigLIP 偏向全局語意理解的能力形成互補。DINOv2
- 無需文字監督:訓練資料只需要圖像,不需要圖文對。這讓它在某些領域(如醫學影像、顯微鏡圖像)特別有價值。
- 優異的擴展性:DINOv2 在多個基準測試上超越了 OpenCLIP 等現有通用視覺特徵提取器。DINOv2
DINOv2 的限制
DINOv2 的原始形式缺乏與語言的整合。它學到的是純視覺表示,無法直接與文字對齊。研究人員正在努力橋接這個差距——例如 Talk2DINO 透過學習映射函數,將 CLIP 的文字嵌入對齊到 DINOv2 的 patch 層級特徵,無需微調底層骨幹。Talk2DINO
四、視覺編碼器的選擇:直覺可能誤導你
一個令人意外的發現
2026 年 CVPR 的一篇論文系統性地研究了「什麼樣的視覺編碼器適合 VLM」,結論挑戰了常見的直覺:
選擇最大的模型,或零樣本準確率最高的模型,與最終 VLM 效能幾乎不相關。 GW-VLM
研究者在 18 到 19 個預訓練視覺編碼器上進行了全面實驗,發現模型大小和零樣本準確率與 VLM 最終效能之間只有弱到中等的相關性。真正具有預測力的是跨模態的結構相似性,可以用 Gromov-Wasserstein 距離來衡量。這個指標與 VLM 效能的相關性顯著更強,讓研究人員能在完整訓練之前就預測 VLM 效能。GW-VLM
這對選擇的啟示
| 常見直覺 | 實際情況 |
|---|---|
| 選最大的模型 | 大小與 VLM 效能相關性弱 GW-VLM |
| 選零樣本準確率最高的 | 零樣本準確率與 VLM 效能相關性弱 GW-VLM |
| 選最新的模型 | 新模型不一定適合你的任務 |
| 選大家都在用的 | 社群選擇有參考價值,但不一定最優 |
如何選擇:三個實用維度
維度一:任務類型
| 任務類型 | 推薦編碼器 | 原因 |
|---|---|---|
| 圖文檢索、分類 | SigLIP 2 | 對比學習訓練,語意對齊強 SigLIP 2 |
| 視覺問答、圖像描述 | SigLIP 2 或 CLIP | 語意豐富,與 LLM 對齊好 LLaVA |
| 空間理解、分割、計數 | DINOv2 | 細粒度局部特徵強 DINOv2 |
| 醫學影像、科學圖像 | DINOv2 | 無需文字監督,可領域自適應 DINOv2 |
| 需要兩者兼顧 | CLIP + DINOv2 集成 | 互補優勢 Cambrian-1 |
維度二:解析度需求
SigLIP 2 提供動態解析度(naflex)變體,適合對長寬比敏感的任務(如文檔理解、圖表分析)。SigLIP 2
固定解析度的編碼器(如標準 ViT 的 224×224)在處理非正方形圖片時可能需要裁切或填充,損失資訊。
維度三:計算預算
| 編碼器 | 典型大小 | 推理成本 |
|---|---|---|
| ViT-B/16 | 86M | 低 |
| ViT-L/14 | 304M | 中 |
| SigLIP 2 SO400M | 400M | 中 |
| DINOv2 ViT-g/14 | 1.1B | 高 |
Cambrian-1 的啟示
Cambrian-1 是一個以視覺為中心的 MLLM 研究專案,系統性地評估了 20 多種視覺編碼器組合。它的關鍵發現是:大多數 MLLM 幾乎沒有探索視覺端,而視覺編碼器的選擇和連接器設計對最終效能影響巨大。 Cambrian-1
Cambrian-1 的最佳結果來自互補視覺編碼器的集成:CLIP + DINOv2。CLIP 提供語意對齊,DINOv2 提供細粒度空間理解,兩者結合超過了任何單一編碼器。Cambrian-1
一個具體的比較實驗
LLaVA-OneVision-1.5 的研究比較了不同視覺編碼器在相同 VLM 框架下的表現。在 336 像素解析度下,RICE-ViT 在所有基準上都超過了 CLIP,在 InfoVQA 上提升 6.3%,在 OCRBench 上提升 5.0%。LLaVA-OneVision-1.5
這說明編碼器的選擇不是一成不變的。不同的訓練資料、訓練目標和模型規模會產生不同的最優選擇。
五、實作:如何接入視覺編碼器
以 SigLIP 2 為例,展示如何在 VLM 中接入視覺編碼器:
import torch
import torch.nn as nn
from transformers import AutoModel, AutoProcessor
class VisionEncoderWrapper(nn.Module):
"""視覺編碼器包裝器"""
def __init__(self, model_name: str = "google/siglip2-so400m-patch14-384"):
super().__init__()
self.encoder = AutoModel.from_pretrained(model_name)
self.processor = AutoProcessor.from_pretrained(model_name)
# 凍結視覺編碼器
for param in self.encoder.parameters():
param.requires_grad = False
def forward(self, images) -> torch.Tensor:
"""
將圖片編碼為視覺 token
Args:
images: PIL Image 列表或張量
Returns:
visual_tokens: (batch, num_patches, hidden_dim)
"""
# 處理輸入
inputs = self.processor(
images=images,
return_tensors="pt",
).to(self.encoder.device)
# 編碼
with torch.no_grad():
outputs = self.encoder(**inputs)
# 取 patch 層級的特徵(而非全局池化後的)
visual_tokens = outputs.last_hidden_state
return visual_tokens
class ProjectionLayer(nn.Module):
"""投影層:將視覺 token 投影到 LLM 的維度"""
def __init__(self, vision_dim: int, llm_dim: int):
super().__init__()
self.projection = nn.Sequential(
nn.Linear(vision_dim, llm_dim),
nn.GELU(),
nn.Linear(llm_dim, llm_dim),
)
def forward(self, visual_tokens: torch.Tensor) -> torch.Tensor:
return self.projection(visual_tokens)
# ========== 使用範例 ==========
vision_encoder = VisionEncoderWrapper()
projection = ProjectionLayer(
vision_dim=1152, # SigLIP 2 SO400M 的隱藏維度
llm_dim=4096, # 假設 LLM 的隱藏維度
)
# 編碼圖片
visual_tokens = vision_encoder(images)
print(f"視覺 token 形狀:{visual_tokens.shape}")
# torch.Size([1, 729, 1152]) # 729 個 patch
# 投影到 LLM 空間
projected = projection(visual_tokens)
print(f"投影後形狀:{projected.shape}")
# torch.Size([1, 729, 4096])
# 與文字 token 拼接
# text_tokens: (batch, text_len, llm_dim)
# combined = torch.cat([visual_tokens, text_tokens], dim=1)
六、小結
視覺編碼器是多模態模型的視覺入口。它的選擇直接決定了模型能看到什麼。
- ViT 是基礎架構,把圖片切成 patch,用 Transformer 處理。ViT
- CLIP 與 SigLIP 用對比學習讓視覺表示與語言對齊,適合需要語意理解的任務。CLIP SigLIP
- DINOv2 用自監督學習學到細粒度的視覺表示,適合需要空間理解的任務。DINOv2
選擇視覺編碼器時,最大的模型不一定最好,零樣本準確率最高的也不一定最適合你的 VLM。GW-VLM
跨模態的結構相似性才是關鍵因素。在實務中,CLIP + DINOv2 的集成往往能取得比單一編碼器更好的效果。Cambrian-1
下一篇,我們會深入跨模態對齊的技術細節,理解 CLIP 的對比學習是如何讓圖像和文字在同一個空間中相遇的。
下一篇預告
《跨模態對齊:CLIP 的對比學習與訊號》
我們會深入對比學習的數學原理、正負樣本的設計、溫度係數的作用、以及為什麼 CLIP 的對齊能力能遷移到如此多的下游任務。
參考文獻
- [ViT] Dosovitskiy, A., et al. “An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale.” ICLR, 2020. https://arxiv.org/abs/2010.11929
- [CLIP] Radford, A., et al. “Learning Transferable Visual Models From Natural Language Supervision.” ICML, 2021. https://arxiv.org/abs/2103.00020
- [SigLIP] Zhai, X., et al. “Sigmoid Loss for Language Image Pre-Training.” ICCV, 2023. https://arxiv.org/abs/2303.15343
- [SigLIP 2] Tschannen, M., et al. “SigLIP 2: Multilingual Vision-Language Encoders with Improved Semantic Understanding, Localization, and Dense Features.” 2025. https://arxiv.org/abs/2502.14786
- [DINOv2] Oquab, M., et al. “DINOv2: Learning Robust Visual Features without Supervision.” TMLR, 2024. https://arxiv.org/abs/2304.07193
- [Cambrian-1] Tong, S., et al. “Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs.” NeurIPS, 2024. https://arxiv.org/abs/2406.16860
- [GW-VLM] Li, M., et al. “Rethinking Model Selection in VLM Through the Lens of Gromov-Wasserstein Distance.” CVPR, 2026, pp. 17237-17247.
- [Talk2DINO] Barsellotti, L., et al. “Talking to DINO: Bridging Self-Supervised Vision Backbones with Language for Open-Vocabulary Segmentation.” arXiv:2411.19331, 2024. https://arxiv.org/abs/2411.19331
- [LLaVA] Liu, H., et al. “Visual Instruction Tuning.” NeurIPS, 2023. https://arxiv.org/abs/2304.08485
- [LLaVA-OneVision-1.5] “LLaVA-OneVision-1.5: Fully Open Framework for Democratized Multimodal Training.” 2025.