YOLO-World: Real-Time Open-Vocabulary Object Detection 介紹
Yolo-World 結合 Grounding、Region-Text Matching 與對比學習,突破開放詞彙檢測限制,讓模型精準定位沒見過的類別
CVPR2024
前言
傳統想要訓練物件模型需要以下三個步驟
- 準備一個大資料集
- 定義好要標註幾個類別,並且標註這些資料
- 訓練模型
訓練出的模型在與相同 domain 的資料上表現會不錯。例如,大資料集來自室內環境,模型就擅長辨識室內資料;若來自室外環境,則對室外資料較熟悉,分數也較高
但缺點顯而易見:若需要偵測資料集中未涵蓋的內容,則需重新標記數據,而當應用場域中出現與訓練集差異較大的物件時,偵測效果也會大幅下降
因此,我們需要一個理想的物件偵測模型,既能在原本的資料 domain 中表現出色,又能輕鬆應對新的偵測需求。當有新物件需要偵測時,只需輸入物件名稱,即便是不同 domain 的圖片,模型也能順利產出結果,甚至能作為標註新資料集、生成 pseudo label 的工具
而能夠勝任這樣任務的模型,我們稱他為 Open-Vocabulary Object Detector,以下要介紹的 YOLO-World 就是屬於這個類別
Introduction
這篇論文專注於提升 開放詞彙物件檢測 (OVOD) 的能力,提出了一種結合多來源監督學習與Region-Text Matching (RTM) 的新方法。通過整合物件偵測數據、語義 grounding 數據、圖文匹配數據,模型能同時學習物件定位與跨模態對齊
此外,加入 Text Contrastive Head (TCH),進一步增強區域級別的語義對比學習,解決了現有方法在泛化到未見類別時定位不準確的挑戰。相較於 CLIP 等模型,這一方法在物件檢測和語義對齊上均實現了更高的準確率與泛化能力
CLIP (Radford et al., 2021): CLIP 將圖像與文本進行全局對齊,實現了開放詞彙的跨模態學習,但缺乏對區域級別細粒度語義的精準捕捉,難以應用於物件檢測任務,下面會介紹
GLIP (Li et al., 2022): 將 grounding 任務與物件檢測結合,提升了圖像-文本對齊能力,但其多數方法依賴標記精確的框資料,對無框的圖文數據利用不足,影響泛化性
Method
以下是 YOLO-World 的模型架構圖,雖然看起來很複雜,但我們可以先簡單切成 Backbone、Neck 和 Head 三個部分,底下會分開講解各個部分
Backbone
當訓練模型時,一開始會輸入一段文字,這些文字會被 Text Encoder 轉換成跟圖片高度相關的向量,這裡牽扯到另外一篇論文 CLIP
CLIP
CLIP 是 OpenAI 訓練的模型,目的在於把自然語言的詞向量跟圖片的特徵向量匹配在一起,如此模型就可以了解一段文字或是名詞在圖片上的意義,也可以增加模型的泛用性
底下圖片顯示,雖然 CLIP 和 ResNet101 在 ImageNet 上面有相同的準確度,但如果把測試圖片換成其他資料集內的圖片(換 domain),只在 ImageNet 上訓練的 ResNet101 會開始無法分辨這些物件,但經過文字圖片匹配訓練的 CLIP 可以在不同 domain 上都有不錯的辨識率
CLIP 有強大的文字理解力可以從下面的範例觀察出來
可以看得出上面四張圖片都是不同領域的照片,但 CLIP 依然能夠分辨出這些圖片屬於哪一種文字類別
Image feature extractor
在圖片特徵萃取的架構中,採用 Yolov8 darknet backbone 來找出圖片的特徵,並且由 Yolov8 的 neck 中接出三個大小不同的特徵,當成下一層模型的輸入
Neck
Neck 架構中主要想要做到 text 特徵和 image 特徵的混合,作者提出了下圖的結構
1. 框架概述
- 作者提出這個架構希望做到圖像與文字的交互特徵學習
2. 上下文特徵結構(C3, C4, C5)
- 這邊的 C3、C4、C5 是剛才從 Yolov8 neck 節取出來的三層特徵,這些特徵會通過 T-CSP Layer 和 I-Pooling Attention 進行逐層處理
3. T-CSP Layer
- 第一階段的 T-CSP Layer 希望把 text 的特徵融合進圖像特徵中,使用 CSP 這個方法可以有效降低參數量,後面的文字特徵 W 跟輸入圖片特徵 X 加在一起後,經過一些操作如下圖,最後再跟 X ⊙ is the matrix multiplication with reshape or transpose 得到圖片輸出特徵 X'
4. I-Pooling Attention
- 這一層是為了把前面圖片的特徵融合到 text 的特徵中,操作步驟如下圖
5. Top-down and bottom-up
- 第一組 T-CSP Layer and I-Pooling Attention 是把低階特徵融合進高階特徵中,第二組則是相反,把高階特徵融合到低階特徵中,在 neck 中是很常見的一種方法
6. 輸出結果(P3, P4, P5)
- 最後輸出特徵 P3、P4、P5,代表不同層次的特徵融合結果
Head
這邊的 head 又分成兩個,一個是要跟文字做匹配的 Text constrative head,另一個是常見的 bounding box head
Text constrative head and Region-Text Matching
訓練時我們會得到描述該物件的 text 所得到的特徵 Image-aware Embeddings,這個特徵來自剛才的文字融合圖像所得到的特徵,文字特徵必須要跟匹配物件的位置所得到的圖像特徵越相近越好,代表這段文字在影像上看起來就要長這樣,用以下公式得到要與該文字匹配的影像特徵
- k 代表第幾的物件,j 代表第幾的文字
- ek 第 k 的物件的圖片特徵,wj 代表第 j 個文字特徵
- skj 代表 k 和 j 的特徵差異
- α 和 β 是一個可學習的放大和平移參數
其實上述公式就是在計算 cosine similarity
Box head
預測出物件的中心點以及他的寬高
Loss
Loss 是由前面的 constrative head 匹配產生的 constrative loss 加上 bounding box IOU loss 和 distributed focal loss for bounding box regression,λI 是一個係數,當輸入的圖片是來自 detection的 ground truth,λI 設定為 1,如果圖片來自 image-text 的資料就設定為 0,因為作者任為來自 image-text 的框框是不準確的,這些大致標記的框框會讓模型學壞
Dataset
Object365
- 365 classes
- 600K images
- 10M bounding boxes
LVIS
- 1203 classes
- Train: 100k images
- Val: 20k images
- Minival: 5k images
GQA
- 110k images
- 22M question and answer about images
Flickr
- 有分成 8k 和 30k
- 每一張圖片都有相對應的文字敘述
Experiments
Zero-shot Evaluation on LVIS
以下是跟當時的 sate-of-the-art 模型互相比較,作者很用心地把所有模型的 pre-trained data 都盡量對齊,比較起來才公平。值得注意的是 YOLO-World 比知名的 Grounding DINO 的 AP 還要高,速度也比他快了至少 34 倍,以下數據皆是跑在 NVIDIA V100 GPU 的結果
訓練時候使用的數據集,GQA 和 Flickr 以下統稱 GoldG,CC3M 是作者自行pseudo label 出的資料
不同的 pre-train dataset 加進去訓練的結果,混合一點 pseudo label 對綜合 AP 很有幫助
比較使用 Vision-Language Path Aggregation Network 的結果。T→I and I→T denote the Text-guided CSPLayers and Image-Pooling Attention,可以發現當使用 GQA pre-train 時,使用作者提出的架構效果會更好
Text encoder 分別使用 BERT-base 和 CLIP-base 的比較,也同時比較訓練時是否 freeze 參數
下圖是把 Yolo-world 用 COCO train2017 訓練後,再用 COCO val2017 驗證精準度,可以看到即使完全沒看過訓練集的 zero shot 最高也有 45.1 的 AP,而經過妥善訓練後,精準度比起 Yolo 模型也絲毫不遜色
下面比較個模型在 LVIS-base 上面後也在 LVIS 測試集上測試,第一區的模型跟 Yolo-World 一樣屬於 Open-Vocabulary Detector,第二區的 Yolov8 使用整個 LVIS 訓練,即便如此他們的精準度也都沒贏過本篇論文
我猜測由於 LVIS 的類別實在太多,對用在特定任務偵測的 Yolov8 架構應該吃不消,這裡除了 Yolov8 外,其他模型都多了一個 text embeddings 來幫助他們找尋畫面中的物件
除了可以預測 bounding box 之外,只要把 head 換成 segmentation head,就可以執行語意分割的任務,也有其他人把 Yolo-World 接上 EfficientSAM 達到更精準的 SAM 效果
Visualization
測試模型是否能夠成功匹配文字和圖片中的物件
不單單是一個名詞,使用一些單字去補充說明這些名詞,模型也能捕捉到正確的物件
Conclusion
Yolo-World Open-Vocabulary Detector 在 inference 上很好玩,使用者要先輸入要偵測的物件,模型才會依照輸入的文字找到對應的物件,其他的物件都不會找出來,互動性很高
這種模型可以擔任新資料集中標註者的腳色,想要製作一個資料集最麻煩的就是標記,比如說要標記街景,KITTI 的街景和台灣的差很多,用在 KITTI 上訓練的模型來標記台灣街景,會漏掉很多物件,加上如果想要新增資料集中想要標記的物件類別,Open-Vocabulary Detector 只需要給定新的文字重新掃描一遍就好
還有另一個值得注意的點,就是眾多模型在比較 zero shot 偵測時,精準度高的模型不一定在模型本質上比較厲害,而是取決於 pre-training data 的數量,另一篇論文 Grounding DINO 1.5 Pro,在 LVIS zero shot 精準度爆打現有的模型,但他的 pre-training data 與眾不同,無法確定他的本質是否真的比較進步
Code
作者提供開源的程式碼,而且還有轉換成 onnx 的範例跟各種已經訓練好的權重,相當用心
除了程式碼外,還有提供線上就可以跑得範例,在 Hugging Face 上,只要提供圖片和自己輸入名詞 prompt 就可開始運作
