自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

OpenAI CLIP模型袖珍版,24MB實現(xiàn)文本圖像匹配,iPhone上可運行

新聞 人工智能
來自 PicCollage 公司的研究者最近進行了縮小 CLIP 模型尺寸的研究,并取得了出色的效果。

 OpenAI 的 CLIP 模型在匹配圖像與文本類別方面非常強大,但原始 CLIP 模型是在 4 億多個圖像 - 文本對上訓(xùn)練的,耗費了相當(dāng)大的算力。來自 PicCollage 公司的研究者最近進行了縮小 CLIP 模型尺寸的研究,并取得了出色的效果。

今年 1 月初,OpenAI 打破了自然語言與視覺的次元壁,接連推出了兩個連接文本與圖像的神經(jīng)網(wǎng)絡(luò) DALL·E 和 CLIP,后者能夠完成圖像與文本類別的匹配。CLIP 能夠可靠地執(zhí)行一系列視覺識別任務(wù),給出一組以語言形式表述的類別,它即能夠立即將一張圖像與其中某個類別進行匹配,而且不像標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)那樣需要針對這些類別的特定數(shù)據(jù)進行微調(diào)。

OpenAI CLIP模型袖珍版,24MB實現(xiàn)文本圖像匹配,iPhone上可運行

CLIP 模型的一些效果示例。圖源:OpenAI

之后,OpenAI 更是在 CLIP 模型中發(fā)現(xiàn)了多模態(tài)神經(jīng)元。這類神經(jīng)元能夠?qū)σ晕谋?、符號或概念形式呈現(xiàn)的相同概念作出反應(yīng),例如「Spider-Man」神經(jīng)元(類似 Halle Berry 神經(jīng)元)能夠?qū)χ┲雸D像、文本「spider」的圖像和漫畫人物「蜘蛛俠」做出響應(yīng)。

雖然 CLIP 模型在匹配圖像與文本類別方面非常強大,但它是在 4 億多個圖像 - 文本對上訓(xùn)練的,使用了很大的算力,需要 256 個 GPU 訓(xùn)練兩周。這對于普通開發(fā)者來說是無法想象的。因此,是否有可能縮小 CLIP 模型的尺寸,并且不減弱其性能呢?

最近,PicCollage 公司的研究者對這一課題展開了研究,他們在自己的內(nèi)容產(chǎn)品上對 CLIP 模型的性能進行了測試,并且獲得了滿意的效果。不過很快發(fā)現(xiàn)了 CLIP 模型的一個奇怪點:在搜索查詢中優(yōu)先考慮文本相似度而不是語義相似度。他們想要解決 CLIP 模型過分重視文本相似度的問題,以此獲得更相關(guān)的搜索結(jié)果。

除此之外,研究者還想縮小 CLIP 模型的尺寸并探索在 IOS 設(shè)備上部署的可能性。他們使用模型蒸餾的方法來縮小 CLIP 的尺寸,350MB 的原始模型(可稱為 teacher 模型)蒸餾后降為 48MB(student 模型),精度為 FP32。并且,在單個 P100 GPU 上訓(xùn)練了數(shù)周后,他們將 48MB 大小的 student 模型轉(zhuǎn)換成了 CoreML 格式,并再次得到了 24MB 大小的模型,精度為 FP16,性能變化幾乎可以忽略不計。研究者表示,蒸餾后的模型可以在 iPhone 等 IOS 設(shè)備上運行

接下來詳細解讀研究者的探索過程。

在圖像中過分強調(diào)文本

讓我們用一個簡單的設(shè)置來演示這一問題,考慮三張圖片:

  • 一張帶有「Cat」這個詞的圖片;
  • 一張帶有「Gat」這個詞的圖片;
  • 一張帶有貓的圖片。
OpenAI CLIP模型袖珍版,24MB實現(xiàn)文本圖像匹配,iPhone上可運行
[[418218]]

假設(shè)你正在搜索「cat」這一單詞,CLIP 將把這一文本轉(zhuǎn)換為向量,即 text_vector,上面三張圖像向量的 text_vector 余弦相似度如下所示:

OpenAI CLIP模型袖珍版,24MB實現(xiàn)文本圖像匹配,iPhone上可運行

我們可以得出搜索詞和圖像之間的相似性可以通過兩種方式來表達「相似」:

  • 圖像包含與搜索詞相似的文本:即文本相似;
  • 圖像和搜索詞語義相似:即語義相似。

在構(gòu)建搜索功能時,研究者可能更喜歡語義相似性而不是文本相似性。研究人員發(fā)現(xiàn) CLIP 傾向于給文本相似的圖像更高的分?jǐn)?shù)。

解決方案在圖像中過分強調(diào)文本

假設(shè)在共享向量空間中存在一個方向,其中圖像的「文本,textness」屬性變化很大,而其他(語義)屬性保持不變。如果我們可以找到這個方向,就可以使用一個向量指向該方向,并將其添加到所有的圖像向量(或文本向量),然后對它們進行歸一化并計算余弦相似度,我們稱這個向量為 textness_bias 向量。

換句話說,在進行下面操作之前:

  1. image_vectors /= np.linalg.norm(image_vectors, axis=-1, keepdims=True) 
  2. cosine_similarities = text_vector @ image_vectors 

我們需要先進行如下操作:

  1. # add bias to the image vectors 
  2. image_vectors += scale * textness_bias 
  3. # or add bias to the text vector 
  4. text_vector += scale * textness_bias 

下一個問題是如何找到 textess_bias 向量?這里有兩種不同的方法,可以得到相似的答案。如下是第二種方法:

  1. Reducing “textness”: training a small model with no hidden layer 
  2. We created a dataset of images with and without text in them. The idea was to train a model and then use the weights of the model as an indicator of textness bias: 
  3. class Model(nn.Module): 
  4.     def __init__(self, dim=512): 
  5.         super(Model, self).__init__() 
  6.         self.linear = nn.Linear(dim, 2
  7. def forward(self, x): 
  8.         return self.linear(x) 
  9. model = Model() 
  10. Then we used the weight vector responsible for predicting the positive label as the textness bias. Another interesting finding was that adding the bias to the text vector was much more effective than adding it to the image vectors. 
  11. textness_bias = model.linear.weight[1
  12. text_vector += scale * textness_bias 
  13. The bigger the scale, the more emphasis CLIP puts on textual similarity. Let's take a look at some of the results. 
  14. Results of controlling textual similarity in search 
  15. For every search term, we varied the value of scale sequentially like so: -2, -1012. For each value of scale, we stored the top ten results in a single row. Thus for each search term, we got a grid of images where each row corresponded to a value of scale and contained top ten results for that scale. Notice how the preference for textual similarity increases as we go from top row to bottom row: 

減少「文本」:訓(xùn)練一個沒有隱藏層的小模型

創(chuàng)建一個包含和不包含文本的圖像數(shù)據(jù)集,實現(xiàn)思想是訓(xùn)練一個模型,然后使用模型權(quán)重作為 textness bias 指示器:

  1. class Model(nn.Module): 
  2.     def __init__(self, dim=512): 
  3.         super(Model, self).__init__() 
  4.         self.linear = nn.Linear(dim, 2
  5. def forward(self, x): 
  6.         return self.linear(x) 
  7. model = Model() 

然后使用權(quán)重向量預(yù)測正標(biāo)簽,作為 textness bias,同時還可以發(fā)現(xiàn)將偏差添加到文本向量比將其添加到圖像向量更有效。

  1. textness_bias = model.linear.weight[1
  2. text_vector += scale * textness_bias 

scale 越大,CLIP 就會更加強調(diào)文本相似性,讓我們來看看一些結(jié)果。

在搜索中控制文本相似性的結(jié)果

對于每個搜索詞,我們依次改變 scale 的值如下:-2, -1, 0, 1, 2。對于每個 scale 值,我們將 top10 結(jié)果存儲在一行中。因此,對于每個搜索項可以得到一個圖像網(wǎng)格,其中每一行對應(yīng)一個 scale 值,并包含該 scale 值的 top10 結(jié)果。

OpenAI CLIP模型袖珍版,24MB實現(xiàn)文本圖像匹配,iPhone上可運行

ViT 的模型蒸餾

CLIP 具備強大的功能,下一步研究者決定使用模型蒸餾來減小其大小。該任務(wù)包含一些細節(jié):

使用蒸餾的方法:CLIP 模型實際上是具有一組不相交參數(shù)的兩個模型:ViT(將圖像轉(zhuǎn)換為向量)和 Transformer(將文本轉(zhuǎn)換為向量)。我們決定對 ViT 模型(~350MB,F(xiàn)P32 精度)進行模型蒸餾。student ViT 模型的大小決定為小于 50MB。

student 模型:原始 ViT 模型是由一個名為 VisualTransformer 的類定義的。該模型依照如下代碼創(chuàng)建:

  1. teacher_clip = VisualTransformer(input_resolution=224,patch_size=32,width=768,layers=12,heads=12,output_dim=512

為了創(chuàng)建 student 模型,該研究將寬度和層數(shù)減少了兩倍。由于不確定 head 的數(shù)量,該研究定義了兩個版本——一個與 teacher 模型的 head 數(shù)量相同,另一個版本的 head 數(shù)量是 teacher 模型的兩倍。這是為了了解增加 head 對模型的性能有什么影響。

  1. student_clip_12_heads = VisualTransformer(input_resolution=224,patch_size=32,width=768//2,layers=12//2,heads=12,output_dim=512)student_clip_24_heads = VisualTransformer(input_resolution=224,patch_size=32,width=768//2,layers=12//2,heads=24,output_dim=512) 

該研究首先訓(xùn)練 student_clip_12_heads。

  • 用于訓(xùn)練的數(shù)據(jù):該研究首先以從多種來源獲取的約 200000 張圖像的數(shù)據(jù)集開始訓(xùn)練。大約 10 個 epoch 之后,一旦開始看到一些有希望的結(jié)果,訓(xùn)練數(shù)據(jù)集就增加到 800000 多張圖像。
  • 使用的損失函數(shù):KLD + L1 損失的總和用于訓(xùn)練模型。對于前十個 epoch,溫度(temperature)設(shè)置為 4,然后降低到 2。

訓(xùn)練完 student_clip_12_heads,該研究微調(diào)了 student_clip_24_heads 上的權(quán)重。該研究面臨的一項主要挑戰(zhàn)是收集數(shù)據(jù)以涵蓋各種圖像。原始 CLIP 是在 4 億張圖像上訓(xùn)練的。雖然收集如此大規(guī)模的圖像是不切實際的,但該研究專注于從標(biāo)準(zhǔn)開源數(shù)據(jù)集收集圖像。為了規(guī)避對大量圖像的需求,該研究還嘗試使用 Zero Shot 蒸餾,但沒有奏效。

CLIP 中蒸餾 ViT 模型的結(jié)果

該研究使用 COCO 測試數(shù)據(jù)集通過查看每個搜索詞的前 20 個結(jié)果來查看蒸餾 CLIP 模型的性能,還根據(jù)原始 CLIP 和蒸餾 CLIP 的前 N 個結(jié)果評估了均值平均精度 (MAP),每個搜索詞的 N 的范圍從 10 到 20。該研究發(fā)現(xiàn)對于每一個 N 值,MAP 大約為 0.012。如此低的值表明原始 CLIP 和蒸餾 CLIP 的結(jié)果不會有很多共同的結(jié)果。雖然這聽起來令人沮喪,但蒸餾 CLIP 模型的結(jié)果看起來非常有希望。盡管兩種模型都給出了語義上有意義的結(jié)果,但快速瀏覽兩種模型的前 20 個結(jié)果可以找到 MAP 值很低的原因。

teacher 模型中「bird」一詞的結(jié)果:

OpenAI CLIP模型袖珍版,24MB實現(xiàn)文本圖像匹配,iPhone上可運行

student 模型中「bird」一詞的結(jié)果:

OpenAI CLIP模型袖珍版,24MB實現(xiàn)文本圖像匹配,iPhone上可運行

如上兩圖所示,盡管兩個模型幾乎沒有產(chǎn)生相同的結(jié)果,但每個模型的結(jié)果都有意義。

 

責(zé)任編輯:張燕妮 來源: 機器之心Pro
相關(guān)推薦

2024-03-22 15:08:47

CLIP機器學(xué)習(xí)人工智能

2023-09-12 13:59:41

OpenAI數(shù)據(jù)集

2023-01-02 13:12:07

模型圖像

2010-04-23 12:25:49

2022-06-06 14:29:20

圖像模型任務(wù)

2024-09-14 15:19:11

2024-05-15 08:42:19

Phi-3LLM機器學(xué)習(xí)

2022-12-05 10:08:59

2019-09-20 13:34:35

蘇寧文本匹配自然語言

2024-09-26 16:51:23

2024-11-21 13:02:42

2023-01-03 13:06:38

模型訓(xùn)練

2022-05-17 14:48:29

iPhone惡意軟件網(wǎng)絡(luò)攻擊

2011-08-18 15:40:20

iPhone文本切頁

2024-02-29 12:23:54

AI數(shù)據(jù)

2023-09-06 12:57:11

AI訓(xùn)練

2010-09-29 16:20:06

J2MEWeb服務(wù)API

2012-04-26 13:36:30

iPhone運行程序

2009-04-24 08:45:26

微軟Windows 7操作系統(tǒng)

2021-02-25 15:43:43

AI 數(shù)據(jù)人工智能
點贊
收藏

51CTO技術(shù)棧公眾號