微調微軟 Florence-2 於 DocVQA

TL;DR

Microsoft 的 Florence-2 是一個緊湊的視覺語言模型(0.2B 與 0.7B 參數),可有效微調以應對諸如文件視覺問答(DocVQA)等專門任務。Hugging Face 示範了在 DocVQA 資料集上進行七個 epoch 的微調,使驗證集的 Levenshtein 相似度分數從 0 提升至 57.0。

Florence-2 架構與預訓練

Florence-2 將所有電腦視覺任務視為序列對序列(sequence-to-sequence)問題,接受影像與文字輸入,產生文字與位置標記作為輸出。模型使用 DaViT 視覺編碼器產生視覺嵌入,並使用 BERT 產生文字與位置嵌入,這些嵌入再由標準的編碼器-解碼器 Transformer 架構處理。

Florence-2 的效能不僅僅依賴於架構,而是受益於在 FLD-5B 資料集上的預訓練。此自動化資料集包含超過 50 億筆標註——包括框框、遮罩、說明文字與定位——遍及 1.26 億張影像。

為視覺問答(VQA)調整 Florence-2

雖然原始的 Florence-2 模型支援說明生成、目標偵測與 OCR,但未隨模型一起發布原生的 VQA 功能。最初嘗試使用未支援的提示詞,如 <VQA><vqa><Visual question answering>,得到的結果無法使用,且 region-to-description 的提示也未完全符合 VQA 的需求。

若要啟用 VQA,必須在特定資料集上進行微調。Hugging Face 使用 DocVQA 資料集,並在每個問題前加上 <DocVQA> 前綴以引導模型。

微調效能與基準測試

在 DocVQA 資料集上微調 Florence-2 後,效能顯著提升。以 Levenshtein 相似度作為指標,模型的驗證分數從 0(微調前)提升至七個 epoch 後的 57.0。

訓練配置

實驗在不同資源層級下進行,以測試模型的多樣性:

  • Low Resource(低資源): 在 Colab 使用單一 A100 GPU,批次大小為 6(或使用 T4 GPU,批次大小為 1),且凍結視覺編碼器。
  • High Resource(高資源): 在 8 台 H100 GPU 的叢集上,以批次大小 64 微調整個模型。此過程約耗時 70 分鐘。

在所有配置中,發現 1e-6 的小學習率最為有效;較大的學習率會導致訓練集快速過擬合。

實作細節

要實作此微調流程,會使用 transformers 套件中的 AutoModelForCausalLMAutoProcessor 類別。由於 Florence-2 使用自訂程式碼,載入時必須傳入 trust_remote_code=True

主要程式碼元件

  • Dataset Class(資料集類別): 使用自訂的 DocVQADataset 類別,在問題前加上 <DocVQA> 前綴,並將影像轉換為 RGB。
  • Data Collator(資料整理器): 實作 collate_fn,利用 processor 將文字與影像處理成張量。
  • Optimization(最佳化): 訓練迴圈使用 AdamW 優化器與線性學習率排程器。

結論

Florence-2 體積小(0.2B 與 0.7B 參數),非常適合部署於邊緣裝置或具成本效益的生產環境。透過微調將模型適應新任務的能力,使其能超越即時可用的功能,處理如文件理解等專門領域。

Sources