圖片進模型前該做什麼:解析度、格式與 token 成本
同一張圖,處理方式不同,成本可以差三倍。這篇講清楚前處理的取捨。
視覺模型把圖片切成區塊再編碼,圖片越大、token 越多、越貴也越慢。多數應用送進去的解析度都遠超過實際需要。
先問:模型需要看清楚什麼
- 判斷場景或物件 → 短邊 512 像素通常就夠。
- 讀取大字標題 → 短邊 768 到 1024。
- 讀取密集小字或表格 → 需要高解析度,或改用切塊策略。
切塊比整張放大有效
一張 A4 掃描件整張送進去,文字會糊成一片。比較好的做法是先偵測版面區塊,再把每個區塊各自裁切送入。成本更低、辨識更準。
from PIL import Image
def prep(path, max_side=1024):
im = Image.open(path).convert('RGB')
w, h = im.size
scale = min(1.0, max_side / max(w, h)) # 只縮不放
if scale < 1.0:
im = im.resize((int(w*scale), int(h*scale)), Image.LANCZOS)
return im三個實用細節
- 只縮不放:放大不會增加資訊,只增加成本。
- 統一轉 RGB:PNG 的透明通道在部分模型上會變成黑色區塊。
- 修正 EXIF 方向:手機拍的照片常常是躺著的,模型不會自動轉正。
估算成本
多數視覺模型的 token 數大致與像素數成正比。把解析度砍一半,token 數約降到四分之一。在批次處理大量圖片時,這個差距非常可觀。
先用一小批樣本測試「最低可用解析度」。從 512 開始往上加,直到準確率不再提升,那就是你的設定值。