簡介#

圖像描述生成(Image Captioning) 是指為圖片自動產生準確描述文字的技術。主要應用場景包括:

  • 社群媒體平台: 自動建議圖片說明文字,為內容創作者節省時間
  • 線上零售: 為商品圖片產生描述,提升購物體驗
  • 內容審核: 透過生成描述文字,協助辨識並標記不適當(NSFW)內容
  • 推薦系統: 為新項目生成文字描述,藉此解決冷啟動問題(Cold-Start Problem),協助分類與推薦

Figure 1: Image captioning system suggests file names for an uploaded image

本章將設計一個能為圖片生成描述性文字的機器學習(ML)系統。

需求釐清#

以下是候選人與面試官之間的典型對話:

候選人: 圖片類型涵蓋一般日常照片與特定領域圖片(如醫學影像或技術圖表)。我可以聚焦於一般日常圖片嗎?

面試官: 可以。

候選人: 這個系統是否有特定的目標應用情境?

面試官: 我們的目標是在設計師上傳素材時,自動建議檔案名稱。

候選人: 既然圖像描述生成器用於素材命名建議,描述文字不應過長或過於詳細。這樣的假設合理嗎?

面試官: 合理。描述應簡短,但要有描述性且清晰。

候選人: 系統是否需要支援多語言,還是僅聚焦英文?

面試官: 僅聚焦英文。

候選人: 資料集的估計規模與多樣性如何?

面試官: 我們有一個包含 4 億組圖片—描述配對的大型資料集,以日常圖片為主。

候選人: 資料集中的描述是否全為英文?

面試官: 資料集未經預處理,可能包含不同語言的描述,部分描述可能有雜訊或不準確,某些圖片的描述也可能缺失。

候選人: 是否需要即時生成描述?

面試官: 系統應快速生成描述,但不要求即時。1–2 秒的延遲可以接受。

候選人: 當圖片內容模糊或焦點不明確時,系統應如何處理?

面試官: 這種情況下,系統應跳過描述建議。

候選人: 我假設系統應避免產生帶有偏見或冒犯性詞彙的描述。這個假設合理嗎?

面試官: 很好的觀點。確保系統公平且對使用者安全至關重要。

候選人: 典型的圖片尺寸為何?過小的圖片可能不夠清晰,導致描述不正確。

面試官: 假設系統僅為最低解析度 256 × 256 像素的圖片建議名稱。

將問題定義為機器學習任務#

定義系統的輸入與輸出#

  • 輸入: 一張圖片
  • 輸出: 準確描述圖片內容的文字

Figure 2: Input and output of an image captioning system

選擇適當的機器學習方法#

圖像描述生成需要視覺理解來處理輸入圖片、語言理解來產生描述,以及跨模態橋接的能力。這要求一個多模態系統(Multi-modal System)

常見的做法是使用編碼器-解碼器框架(Encoder-Decoder Framework),將圖片視為一種新「語言」——類似語言翻譯。兩個主要組件為:

  • 圖像編碼器(Image Encoder): 理解視覺內容,並將圖片編碼為低維表示
  • 文字解碼器(Text Decoder): 利用編碼後的視覺資訊產生描述文字

Figure 3: Image captioning components

除了編碼器-解碼器框架之外,還有多種圖像描述生成的方法。BLIP-2 [1]、BLIP-3 [2]、InternVL [3] 等模型提供了不同的技術與架構。詳情請參閱 [1] [2] [3]。

資料準備#

資料集包含 4 億組圖片與描述配對。然而,並非所有圖片或描述都適合用於訓練。

Figure 4: Example of image–caption dataset

描述文字準備#

原始描述通常含有雜訊且格式不一致。在描述準備階段,我們移除不適當的描述,並確保剩餘描述格式一致且已完成分詞(Tokenization):

  • 移除非英文描述: 因為本模型僅聚焦英文
  • 移除重複的圖片或描述: 使用感知雜湊(Perceptual Hashing)或圖片相似度模型(如 CLIP 圖像編碼器)辨識重複圖片;透過精確比對或語意相似度檢查(如 CLIP 文字編碼器)偵測重複描述。移除重複資料可防止模型對冗餘資料過度擬合(Overfitting)
  • 移除不相關描述: 使用預訓練(Pretrained)的視覺-語言模型(如 CLIP)評估圖片與描述的相關性。分數低於閾值(如 0.25)的配對將被移除。關於 CLIP 如何計算相關性,請參閱第 9 章
  • 摘要化過長描述: 使用過長描述訓練會導致輸出同樣冗長,不符合我們的使用情境。透過大型語言模型(如 Llama [4])將描述摘要為簡潔的版本
  • 正規化描述: 套用標準文字正規化——轉小寫、去除多餘空白——以維持一致性
  • 描述分詞: 使用子詞級(Subword-level)分詞演算法,如 Byte-Pair Encoding(BPE)[5]。關於文字分詞與 BPE 的詳細說明,請參閱第 2 章與第 3 章

圖片準備#

並非所有圖片都適合訓練。我們移除可能影響訓練品質的圖片,並確保剩餘圖片格式一致:

  • 移除低解析度圖片: 移除解析度低於 256$\times$256 的配對,因為低解析度圖片可能無法提供足夠細節以生成準確描述
  • 正規化圖片: 將像素值縮放至正規化範圍(如 0 到 1),使訓練更穩定
  • 移除低品質圖片: 過濾模糊、過曝、曝光不足或有其他缺陷的圖片。圖片品質評估方法(如 LAION Aesthetics Predictor [6])可透過評估清晰度、對比度和光線來識別低品質圖片
  • 統一圖片尺寸: 將所有圖片調整為統一大小,因為 ML 模型需要固定尺寸的輸入。為保持長寬比,採用兩個步驟:
  1. 縮放(Resizing): 將較短邊縮放至目標大小。例如,若目標為 256$\times$256 而原始圖片為 512$\times$768,則縮放為 256$\times$384
  2. 中央裁切(Center-cropping): 將縮放後的圖片裁切至目標尺寸。以上例而言,將 256$\times$384 裁切為 256$\times$256

Figure 5: Resizing followed by center-cropping

模型開發#

架構#

我們將圖像描述生成定義為多模態語言生成任務:圖像編碼器處理輸入圖片,文字解碼器產生描述文字。

圖像編碼器#

圖像編碼器負責處理圖片並編碼其中的資訊。

單一 Token 與 Token 序列#

編碼器的輸出可以有兩種形式,各有不同的取捨:

Figure 6: Image encoder outputting single token vs. sequence of tokens

單一 Token —— 將整張圖片壓縮為一個向量:

  • 優點: 架構簡單、計算複雜度低、適合產生簡潔的高階描述
  • 缺點: 遺失局部細節與細微差異;描述傾向泛化,面對複雜圖片時表現不佳

Token 序列 —— 每個 Token 對應圖片中一個區塊(Patch):

  • 優點: 同時捕捉全域與局部特徵;與注意力機制(Attention Mechanism) 搭配良好,讓解碼器在生成過程中動態聚焦於不同區域
  • 缺點: 計算成本較高

Token 序列的方式通常能產生更準確、更詳細且更具上下文語境的描述。

基於 CNN 的編碼器#

卷積神經網路(Convolutional Neural Networks, CNNs) 透過卷積濾波器捕捉空間層次結構,偵測不同尺度的邊緣、紋理和物體等模式。

基於 CNN 的編碼器處理輸入圖片後輸出一個特徵向量網格。例如,輸入圖片經過 CNN 後產生大小為 3 × 3 × c 的特徵向量(其中 c 為通道數)。由於基於 Transformer 的文字解碼器需要特徵序列(即 9 × c),我們需要進行展平操作(Flattening),將 3 × 3 網格重新組織為序列格式。

Figure 7: A CNN-based image encoding

基於 Transformer 的編碼器#

Transformer 模型最初為 NLP 開發,後來成功應用於圖像編碼。基於 Transformer 的圖像編碼器包含三個組件:

  • 圖塊化(Patchify)
  • 位置編碼(Positional Encoding)
  • Transformer

Figure 8: Transformer-based image encoding

圖塊化(Patchify)#

由於 Transformer 處理的是序列,圖片必須先轉換為序列。此過程包含三個步驟:

  1. 將圖片分割為固定大小的圖塊(Patch)
  2. 將每個圖塊展平
  3. 對每個圖塊進行線性投影(Linear Projection)

例如,一張 256 × 256 的輸入圖片被分割為 64 × 64 的圖塊,這些圖塊被展平為大小為 4096 的向量,再透過線性投影轉為大小為 c 的嵌入向量(Embedding Vector)。

Figure 9: Patchification process

位置編碼(Positional Encoding)#

位置編碼為每個圖塊指派位置資訊,標示其在原始圖片中的位置。兩個關鍵設計選擇如下:

1D 與 2D 位置編碼:

  • 1D: 將一個整數(在展平序列中的位置)映射為 c 維向量。實作簡單,但可能無法充分捕捉二維空間關係
  • 2D: 將兩個整數(列與行的位置)映射為 c 維向量。更適合圖片,因為能保留空間結構

Figure 10: 1D vs. 2D positional encoding

可學習與固定位置編碼:

  • 可學習(Learnable): 模型在訓練過程中透過神經網路學習位置編碼
  • 固定(Fixed): 由固定函數決定,如正弦-餘弦函數(詳見第 2 章)

1D 與 2D、可學習與固定位置編碼之間沒有絕對的最佳選擇。Vision Transformer(ViT)[7] 使用可學習的 1D 位置編碼,但實務上會針對特定任務測試不同組合以找出最佳方案。

選擇圖像編碼器架構#
  • CNN 擅長捕捉局部模式,但難以處理遠距離區域之間的長距離依賴關係
  • Transformer 透過自注意力機制(Self-Attention)同時捕捉局部與全域關係,適合需要細緻且具上下文感知能力的任務

基於以上原因,我們參照 ViT [7],選擇基於 Transformer 的架構作為圖像編碼器。

文字解碼器#

文字解碼器負責生成描述文字。純解碼器 Transformer(Decoder-only Transformer) 是文字生成的標準選擇。它接收對應於輸入圖片的向量序列,逐一 Token 地產生描述。

Figure 11: Providing image as a sequence of embeddings

訓練#

我們採用兩階段訓練策略:

第一階段:無監督預訓練(Unsupervised Pretraining)#

文字解碼器(純解碼器 Transformer)在通用資料上進行訓練,建立對語言結構的廣泛理解以及連貫文字生成的能力。這些基礎知識對後續的微調(Finetuning)至關重要。

預訓練的計算成本非常高。實務中常使用既有的預訓練模型(如 GPT-2 [8] 或 Llama [4])來跳過此階段。同樣地,圖像編碼器可使用預訓練的視覺模型(如 CLIP [9] 或 ViT [7])。

第二階段:監督式微調(Supervised Finetuning)#

圖像編碼器與文字解碼器在 4 億組圖片—描述配對上共同訓練:

  • 圖像編碼器提升其有效編碼圖片資訊的能力
  • 文字解碼器學習理解圖片嵌入序列並生成描述文字
機器學習目標與損失函數#

與前幾章一致,我們使用下一個 Token 預測(Next-token Prediction) 作為 ML 目標,並採用交叉熵損失(Cross-Entropy Loss)[10] 來引導訓練。

Figure 12: Loss calculation over the predicted probabilities

取樣(Sampling)#

在取樣階段,描述文字的 Token 逐一生成。

Figure 13: Generating a caption given an input image

我們為圖像描述系統選擇束搜尋(Beam Search),原因如下:

  • 品質: 束搜尋通常能產生更高品質的描述,這對於準確描述圖片內容至關重要
  • 一致性: 其確定性特質確保模型對同一張圖片始終產生相同的描述
  • 連貫性: 束搜尋產生連貫的描述,避免突然的主題切換或矛盾,例如「A person is walking house」或「A dog is reading a person」

評估#

離線評估指標#

在離線評估中,我們透過比較生成描述與參考(正確)描述,在驗證資料集上評估模型效能。

驗證資料#

驗證資料包含訓練時未見過的樣本。每個樣本包含一張圖片以及由多位人類標註者撰寫的一組參考描述。每張圖片有多個參考描述對訓練和評估均有益處:

  • 穩健訓練: 不同人對同一張圖片的描述方式不同;多個參考讓模型學習多樣化的表達
  • 全面評估: 將生成的描述與多個參考比對,能得到更公正的評估結果

Figure 14: An example of validation data

常見指標#

離線評估常用的指標包括:

  • BLEU
  • ROUGE
  • METEOR
  • CIDEr

前三者已在第 3 章詳細介紹。這裡聚焦於專為圖像描述設計的 CIDEr

CIDEr#

CIDEr [11] 是一個基於共識的指標,用於評估生成描述與一組參考描述之間的相似度。它對同時與多個參考相似的描述給予較高分數,而非僅與單一參考相似。對單一樣本,CIDEr 的計算分為三個步驟:

步驟一:使用 TF-IDF 表示描述#

將生成描述與每個參考描述轉換為數值表示,使用的是詞頻-逆文件頻率(Term Frequency–Inverse Document Frequency, TF-IDF)。TF-IDF 透過考量詞彙在文件中的出現頻率以及在整個語料庫中的稀有程度,來評估該詞的重要性。更多 TF-IDF 資訊請參閱 [12][13]。

Figure 15: TF-IDF converting captions to numerical representations

步驟二:計算相似度#

計算生成描述與每個參考描述之 TF-IDF 表示之間的餘弦相似度(Cosine Similarity)。分數越接近 1 表示越相似;越接近 0 表示越不相似。

Figure 16: Calculation of cosine similarity between generated and reference captions

步驟三:彙總相似度分數#

對所有參考描述的餘弦相似度取平均:

$C I D E R_i=\frac{0.688+0.257+0.766}{3}=0.570$

最終的 CIDEr 分數是驗證資料集中所有樣本的平均值,提供一個衡量整體效能的單一指標。

CIDEr 的優缺點#

優點:

  • 基於共識: 獎勵同時與多個參考相似的描述,評估更可靠
  • 對重要詞彙敏感: TF-IDF 對獨特詞彙賦予更高權重,確保分數反映詞彙重要性
  • 對描述變化具穩健性: 基於多個參考計算,能包容不同的表達方式

缺點:

  • 計算複雜度高: 在大型資料集上計算 TF-IDF 表示的成本較高
  • 對參考品質敏感: 品質不佳或多樣性低的參考會導致評估結果產生誤導
  • 懲罰新穎但準確的描述: 未出現在參考集中的創意表達可能被扣分
  • 缺乏語意理解: TF-IDF 衡量的是文字相似度而非語意相似度。例如,「Coffee on top of the table」和「Table on top of the coffee」的 TF-IDF 表示相似,但語意截然不同

線上評估指標#

線上評估指標通常不是圖像描述系統的主要關注點,原因有二:

  • 圖像描述系統通常是更大系統的一部分,難以獨立收集使用者互動資料
  • 收集使用者對描述品質的回饋需要主觀判斷,不同使用者之間存在差異

標準的離線指標仍是評估系統的主要方法。在描述品質直接影響使用者體驗的情境下,互動指標與使用者回饋可提供額外的洞察。

整體機器學習系統設計#

建構圖像描述系統不僅需要訓練好的模型,還需要多個組件協同運作。

Figure 17: Image captioning overall design

圖片預處理#

將輸入圖片準備為模型可接受格式的初始步驟:

  • 將圖片縮放至標準大小
  • 轉換為一致的格式
  • 標準化像素值

這確保輸入圖片與模型預期的格式一致。

描述生成器#

核心組件,根據處理後的圖片產生描述。它與訓練好的模型互動,並使用束搜尋(Beam Search) 生成連貫的描述。

若生成描述的累積機率低於預定義的信心閾值(Confidence Threshold),系統將停用命名建議功能。這可防止系統為模糊圖片產生不相關的描述。

後處理#

後處理組件確保公平性與安全性:

  • 辨識帶有偏見的詞彙或短語,並以中性替代詞取代
  • 檢查是否包含冒犯性詞彙,若有則停用命名建議服務

其他討論主題#

若面試提前結束,可考慮討論以下主題:

  • 將圖像描述生成器擴展至其他任務,如視覺問答(Visual Question Answering, VQA)[14]
  • 調整模型以描述不同領域的圖片 [15]
  • 使用多語言資料集與跨語言遷移學習(Cross-lingual Transfer Learning)生成多語言描述 [16]
  • 在邊緣裝置(Edge Devices)上優化描述生成的技術 [17]
  • 生成並排序多個合理描述,根據相關性選擇最佳結果 [18]
  • BLIP-2 與 BLIP-3 方法的細節,以及改善描述品質的額外損失函數(Loss Function)[1] [2]

摘要#

Image represents a mind map summarizing the design of a Generative AI system for image captioning.