文章目錄
- 前言
- 1、出發點
- 2、方法
- 2.1.TextEncoder
- 2.2.ReparmVLPAN
- 2.3.輸出頭
- 3、實驗
- 3.1.數據集
- 3.2.LVIS測試集
- 總結
前言
?本文介紹一篇來自騰訊的開放詞匯檢測工作,發表自CVPR2024,論文鏈接,開源地址。
1、出發點
?GroundingDINO在開放詞匯檢測任務中大放異彩,因此本文希望在輕量化的YOLOv8上也搞一個輕量化的開放詞匯檢測算法。最終效果吧,是模型又快而且精度基本持平。
2、方法
?模型總體結構比較簡單,主體檢測網絡采用的是YOLOv8,為了實現開放詞匯檢測任務,將分類頭替換成“特征之間比對頭”,具體來說就是將檢測網絡每個anchor所對應的特征向量和文本嵌入向量做對比,計算相似性,進而實現開放詞匯檢測目的。
2.1.TextEncoder
?首先說下TextEncoder,在訓練階段,需要帶著龐大的TextEncoder,而在部署階段,則可以首先離線提取出文本的嵌入向量,這樣在部署階段就能省一個TextEncoder的計算量,使其更加輕量。
2.2.ReparmVLPAN
?在得到TextEmbedding和圖像特征向量C3-C5后,本文設計了一個VLPAN交互模塊,簡單來說:用圖像特征向量更新文本,在用文本更新圖像特征向量。當然,在部署階段,TextEmbedding也是可以被作為權重寫入到onnx里面的。
?本人不想在此過多介紹這個模塊,因為在實際應用中,建議還是用PAN比較好,因為這個模塊收益不多,而且若檢測的文本順序不同,會導致檢測結果不同。原因是Max-Sigmoid算子,讀者有興趣可自己check下。
2.3.輸出頭
?樣本分配策略是SIMOTA,跟v8一樣。檢測頭就是yolov8,每個anchor預測4個上下左右距離,損失用的是DFL Loss;而分類頭則是對比損失頭,最終輸出維度為: n u m _ a n c h o r ? 80 num\_anchor * 80 num_anchor?80,做二元交叉熵損失,即對應正樣本anchor為1,其余為0。
3、實驗
3.1.數據集
? 數據集采用O365+GoldG(GQA+Flickr)。
3.2.LVIS測試集
?沒啥可說的,FPS高,而且精度跟一系列開放詞匯檢測算法持平。但paper中指標跟git開源有出入,后續改進論文均以git為準。
總結
?總之是一篇不錯的輕量化OVD算法,算是挖了個新坑。每個模塊其實都有值得探索改進的空間,包括后來的YOLOE , YOLOUniOW等,后續會逐個介紹,包括這類算法的一些不足,敬請期待。