大家好,我是捲了又沒卷,薛定諤的卷的AI演演算法工程師「陳城南」~ 擔任某大廠的演演算法工程師,帶來最新的前沿AI知識和工具,歡迎大家交流~
繼MetaAI 的 SAM後,OPPO 研究院釋出識別一切模型(Recognize Anything Model,RAM):
無論是從論文內容、原始碼git或者Demo,都不難看出 RAM 其實是一個增強型的 Tag2Text,RAM中提到的識別,本質上是圖片標記任務(image tagging),而 Tag2Text 也是作者團隊提出的可應用於 image tagging 任務的大模型預訓練框架。
圖片識別:給一個圖片,旨在通過識別給定影象的多個標籤來提供語意標籤,可以理解為給出多個tags用來形容這個圖,包括目標(object)、場景(scene)、屬性(attribute)和行為(action),是一個多標籤分類(multi-label classification)。
分割一切模型(SAM)[12]的Zero Shot能力很強,但其只有定位能力(location),沒有識別能力(SAM只能給出分割Mask,沒法指定該Mask的類別)。因此RAM旨在於提供強大的識別能力(包含Zero Shot的識別能力)。作者也將RAM和定位模型(SAM、Grounding-DINO)進行了結合,具體在
由於RAM的很大工作都是基於Tag2Text,所以在介紹RAM前我需要先介紹Tag2Text,瞭解Tag2Text論文的朋友可以直接看RAM。
Tag2Text是一種視覺語言預訓練(Vision Language Pretrain, VLP)框架。在該框架中,作者通過對視覺語言模型(Vision-Language Models)引入圖片標記(images tagging)任務來指導模型學習更好的視覺-語言特徵。圖片標記,類似於給一個圖片打個多個與圖片有關的label,有點像多label分類。
如上圖所示,之前的Tagging方法(OSCAR [32]、VIVO [21]、VinVL [61])遵循的是基於檢測器的正規化。通過使用目標 tags 作為錨點來簡化圖片和文字之間的語意對其。這些方法通過一個檢測器來提取圖片特徵,並送進多模態互動模組中進行學習。這種情況下檢測器引數都是凍住的(如果梯度優化檢測效能就會驟降),所以檢測器不能優化,導致檢測器效能會制約視覺-語言特徵的學習。
作者提出了用 圖片標記 來作為 視覺語音預訓練的多工,有兩個關鍵問題:資料和網路結構。
引入了圖片標記(image tagging)就需要構造圖片中的tags 作為 label 用於訓練。因為 image-text-pair資料很豐富,所以作者對image-text-pair進行自動化文字語意解析,從而從text中獲取圖片的tags。這樣,影象tags能提供了影象和文字之間更好的橋樑,因為解析的標記類別更加多樣化,同時比目標檢測的object更豐富,有例如場景、屬性、動作等。
從Text挖掘Tags來構建資料,包含2個關鍵:
解析獲取Tags:利用解析器[58]來識別Text中的實體(head+modifier)和關係,然後對映出tags:Head->目標(object)和場景(scene),modifier->attribute,relationship->action;
篩選有效Tags:得到解析後的Tags集合,按照Tags的頻率將其排序,只取前5000個最高頻的進行人工篩序,最後保留了3429個tag類別作為需要的有效Tags;
如下圖,包含3個分支:Tagging, Generation, Alignment,為不同的任務分支,訓練後分別可以用於不同的子任務。比如下圖右邊的:多標籤識別(就是tagging),Image Caption生成,Visual QA 和 Image-Text 檢索,這幾個子任務。
Image Tagging:用了Query2Label[35]中的多label分類transformer decoder(用法如下圖,都是DETR的思路),同時為了避免解析的tags中有某些對應圖片tag的缺失、正負樣本的不平衡,使用了Asymmetirc Loss(ASL)[44]。
Image-Tag-Text Generation:用了NLP中標準的transformer的encoder-decoder框架,tags/text 都經過 tokennizer + embeding matrix 對映為 embeding,然後 tags embeding(隨機亂序,防止順序影響學習)與 image embedding(features) 一起送入 encoder,再經過decoder解碼。輸出與text embedding進行loss計算。相當於用 tag 指導 image 生成 text;
Image-Text Alignment:用了BLIP[29] 中 Encoder 結構(如下),image embedding 與 text embeding送入encoder,用粗粒度的 Image-Text Contrastive(ITC) Loss 和 細粒度的 Image-Text Matching(ITM) Loss 分別進行監督。
如圖,SAM結構上與 Tag2Text 相似,Tag2Text 有3個分支,tagging,generation 和 alignment;SAM 只保留了 Tagging 和 Generation 兩個,其中 Tagging 分支用來多tags推理,完成識別任務;Generation用來做 image caption任務;Tag2Text 中的alignment是做 Visual-Language Features學習的,在這裡被移除了。
Image Encoder 使用 Swin,
訓練時,Tagging分支和Generation分支都用 解析的Tags作為label;
測試時,Tagging會輸出Tags,用於Generation的Caption任務生成最終的Text;
綜合起來,SAM在網路上基本和Tag2Text一致,多了一點區別在和圖中的CLIP有關,具體在開放詞彙識別這一節。
開放詞彙識別
受[23, 28]的啟發,作者把每個Tag進行prompt ensembling[22] 擴充,然後送入訓好的CLIP Text Encoder得到其對應的文字標籤查詢(Textual label queries,其實就是 promopt + tag 的 embedding),作者認為這些 queries 比可學習的引數有更強的語意性和上下文資訊。然後將這些Label Queris送進Tagging Decoder用image features進行Cross Attention。
不做Tag prompt擴充的話,tag太短了,送入模型得到的embedding會比較差;
另外作者還用CLIP的Image Encoder對SAM的圖片feature進行蒸餾(因為CLIP的image和text特徵是對齊的),這樣SAM模型在沒見過的類別也會有更好的特徵生成。
所以綜合來看,SAM和Tag2Text在網路框架上的區別,基本也就在這個CLIP的額外使用上。
在 Tag2Text 中作者利用 image-text-pair 的 text 進行解析,得到 tags,然後利用高頻排序進行篩選,取了前5k的。頻率越高越重要。
SAM中則進一步擴大了資料量,同時頻率篩選擴大到top-10k。還有一系列擴巨量資料量的方法,直接翻譯下摘要大家可以看看,資料這部分就不贅述了,細節大家看看原文吧:
標籤系統:我們首先建立一個通用和統一的標籤系統。我們結合了來自流行學術資料集(分類、檢測和分割)以及商業標記產品(谷歌、微軟、蘋果)的類別。我們的標籤系統是通過將所有公共標籤與文字中的公共標籤合併而獲得的,從而覆蓋了大多數公共標籤,數量適中,為 6,449。剩餘的開放詞彙標籤可以通過開放集識別來識別。
資料集:如何用標籤系統自動標註大規模影象是另一個挑戰[30]。從 CLIP [22] 和 ALIGN [11] 中汲取靈感,它們大規模利用公開可用的影象文字對來訓練強大的視覺模型,我們採用類似的資料集進行影象標記。為了利用這些大規模影象文字資料進行標記,按照[9、10],我們解析文字並通過自動文字語意解析獲得影象標籤。這個過程使我們能夠根據影象文字對獲得各種各樣的無註釋影象標籤。
資料引擎:然而,來自網路的影象文字對本質上是嘈雜的,通常包含缺失或不正確的標籤。為了提高註釋的質量,我們設計了一個標記資料引擎。在解決丟失的標籤時,我們利用現有模型生成額外的標籤。對於不正確的標籤,我們首先定位與影象中不同標籤對應的特定區域。隨後,我們採用區域聚類技術來識別和消除同一類中的異常值。此外,我們過濾掉在整個影象及其相應區域之間表現出相反預測的標籤,確保更清晰和更準確的註釋。
因為RAM在分類、檢測、分割等資料集都有覆蓋,同時也有seen資料(訓練資料中有的)和unseen資料(訓練中沒有的)的識別能力,所以作者做了一個圖,體現不同識別方法的識別範圍(Recognition Scope),RAM-unseen是紅色,因為RAM有開集識別能力,所以是最大的。
PS:這都不是六邊形戰士了,直接畫了個圓,這圖太唬人了
PS+:我第一眼以為是 performance 比較,看論文才發現是 scope 比較;
除了資料、模型,作者還有一些模型效率上的優化。
最後看看實驗部分,綠色為監督訓練,藍色是Zero-shot,黃色是無監督。