CLIP模型基本原理與實(shí)踐案例

本文首發(fā)于網(wǎng)站?機(jī)器翻譯學(xué)堂
轉(zhuǎn)載事宜請(qǐng)后臺(tái)詢問哦
譯者|呂傳昊
單位|東北大學(xué)自然語言處理實(shí)驗(yàn)室

引言
多模態(tài)機(jī)器學(xué)習(xí)日前正越來越受研究者們的關(guān)注,21年,“Learning Transferable Visual Models From Natural Language Supervision”論文中提出的CLIP模型擁有強(qiáng)大的特征抽取能力,為后續(xù)的很多科研工作都提供了啟發(fā)。時(shí)至今日,無論是傳統(tǒng)的視覺任務(wù),還是新穎的AI繪畫,我們都能看到CLIP模型的身影。那么,本期就和譯者一起來看一篇“CLIP from OpenAI: what is it and how you can try it out yourself”的博客,學(xué)習(xí)一下CLIP模型的基礎(chǔ)原理和使用方法,相信一定也會(huì)為你帶來靈感!
作者介紹
Vadim Frolov,2007年碩士畢業(yè)于俄羅斯圣彼得堡理工大學(xué),先后在Inmeta和Microsoft任職數(shù)據(jù)科學(xué)家。
譯者說
相信很多初次接觸一個(gè)陌生領(lǐng)域的同學(xué)一定有過和我一樣的困惑:“缺乏領(lǐng)域基礎(chǔ)知識(shí)背景,導(dǎo)致論文讀起來晦澀難懂”,“學(xué)習(xí)了模型理論后,不知去哪里尋找相關(guān)代碼進(jìn)行實(shí)踐,加強(qiáng)認(rèn)識(shí)”。譯者考慮到本文讀者更多的是NLP技術(shù)背景的學(xué)者和工程師,所以沒有死板地逐字翻譯。在文章的翻譯過程中,譯者添加了很多圖像領(lǐng)域的基礎(chǔ)知識(shí),并對(duì)一些專業(yè)術(shù)語做了更通俗、詳盡的解釋。在文章的最后,博客作者分享了使用CLIP模型的簡(jiǎn)單代碼,譯者也驗(yàn)證了代碼的有效性。如果讀者們對(duì)CLIP模型感興趣的話,在閱讀完本文后不妨實(shí)踐一下。
原博客譯文
在計(jì)算機(jī)視覺領(lǐng)域,神經(jīng)網(wǎng)絡(luò)(NN)模型在很多任務(wù)上都已經(jīng)取得了突出的表現(xiàn)。不過,這些模型往往沒有很好的泛化性能,這使得它很難被應(yīng)用在它沒有訓(xùn)練過的任務(wù)上。例如:一個(gè)在食物圖像數(shù)據(jù)上表現(xiàn)良好的模型很可能在衛(wèi)星圖像數(shù)據(jù)上表現(xiàn)不佳。
最近,Open AI提出了一個(gè)名為CLIP的模型并聲稱該模型可以大大縮小上述的這種差距。在Open AI撰寫的論文中,講述了該模型是如何以zero-shot(無樣本學(xué)習(xí),舉個(gè)簡(jiǎn)單例子:這種學(xué)習(xí)希望模型在食物圖像數(shù)據(jù)上進(jìn)行學(xué)習(xí),然后在衛(wèi)星圖像數(shù)據(jù)上依然有好的表現(xiàn))的方式應(yīng)用于各種類別的數(shù)據(jù)集。
本文,我將為大家解釋CLIP模型取得如此突破的關(guān)鍵思想,并向您展示使用該模型的代碼。
1.引言
當(dāng)訓(xùn)練一個(gè)傳統(tǒng)的圖像分類模型時(shí),我們所使用的數(shù)據(jù)集是一堆已被標(biāo)注具體類別的圖像。在這樣的一個(gè)數(shù)據(jù)集中,類別的數(shù)量是固定的,類別的內(nèi)容也是不可改變的。例如,你訓(xùn)練了一個(gè)神經(jīng)模型來區(qū)分貓和狗,那么你就不能使用該模型來區(qū)分貓和熊,也不能使用該模型來區(qū)分貓、狗、熊。如果你想賦予模型能識(shí)別新類別“熊”的能力,那么你必須在數(shù)據(jù)集中添加足夠量的標(biāo)注為熊的圖像,并重新訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型!
然而,如果有一個(gè)模型,它可以將圖像和任意的文本聯(lián)系起來,那么你只需要簡(jiǎn)單地提供包含新類別的文本描述就可以使用該模型來識(shí)別新類別。簡(jiǎn)單來說,如果模型預(yù)測(cè)出圖像和包含新類別的文本描述關(guān)聯(lián)程度很高,就說明該圖像是新類別;而如果關(guān)聯(lián)程度很低,就說明該圖像不是新類別。那么為了成功實(shí)現(xiàn)這樣的模型,神經(jīng)網(wǎng)絡(luò)模型必須有學(xué)習(xí)出良好視覺表示以及有效建模圖文匹配程度的能力。
2.CLIP是如何訓(xùn)練的
首先,讓我們考慮一下我們的問題范圍。為了將圖像和文本聯(lián)系起來,我們需要一個(gè)圖像-文本對(duì)數(shù)據(jù)集。CLIP的作者們?cè)谡撐闹刑岬剑麄儚幕ヂ?lián)網(wǎng)上收集了4億條圖文對(duì)數(shù)據(jù)集。按照過去的方法為了實(shí)現(xiàn)圖像分類,模型應(yīng)該將圖像作為輸入,并預(yù)測(cè)文本(類別)作為輸出。

如下圖所示,對(duì)于預(yù)測(cè)出來的文本有多種不同的表示方法:

第一種是用正確的語序來預(yù)測(cè)文本,即分類器必須輸出this is a photo of a cat這樣的句子。第二種是根據(jù)詞典來預(yù)測(cè)文本,即不考慮單詞的順序,那么如果分類器預(yù)測(cè)的結(jié)果為photo或者cat,它們都是正確的。Open AI在詞典方法上做了改進(jìn),并且結(jié)果顯示在ImageNet數(shù)據(jù)集的準(zhǔn)確率結(jié)果上,CLIP以zero-shot的方式僅需1/4的數(shù)據(jù)就可以達(dá)到與以前的方法相媲美的性能。
CLIP對(duì)問題進(jìn)行了重新的定義并使用對(duì)比預(yù)訓(xùn)練的方式,不再預(yù)測(cè)文本標(biāo)簽,取而代之的是預(yù)測(cè)圖像與文本相匹配的可能性大小。

以一個(gè)batch size為N的輸入為例,首先,N張圖像和N個(gè)文本分別被各自模態(tài)的Encoder編碼成高維向量。然后,用它們的向量表示建立一個(gè)相似度矩陣(圖中,I*T表示兩模態(tài)向量的內(nèi)積)。值得注意的是,在訓(xùn)練過程中,矩陣對(duì)角線上的內(nèi)積是匹配圖文的內(nèi)積(即當(dāng)前batch內(nèi),文本T1和圖像I1是匹配的圖文對(duì),而文本T1和圖像I2是不匹配的圖文對(duì))。我們知道內(nèi)積越大,相似度越高,因此匹配的圖文對(duì)的相似度(內(nèi)積)必須高于同一行/列中其他圖文對(duì)的相似度(內(nèi)積)才合理。于是,訓(xùn)練的目標(biāo)可以看作是在進(jìn)行對(duì)比,對(duì)比的目的是使同一行/列中匹配圖文的內(nèi)積盡可能大,不匹配圖文的內(nèi)積盡可能小。我們也可以用更通俗的方式來理解:每一行都是一個(gè)分類任務(wù),給定一個(gè)輸入圖像I,預(yù)測(cè)匹配的那個(gè)文本是誰。同理,每一列都是一個(gè)分類任務(wù):給定輸入文本T,預(yù)測(cè)匹配的那張圖像是誰。在訓(xùn)練期間,Open AI使用了非常大規(guī)模的batch size(32768),這可以充分發(fā)揮這種對(duì)比訓(xùn)練的潛力。
在推理過程中,使用者可以按照prompt(提示詞)的格式自定義新文本。將新文本和圖像送入CLIP模型后,通過內(nèi)積值的大小來判斷新文本和圖像是否是匹配的。如下圖所示,提示詞是a photo of a {object}.,我們只需要將我們想判斷的類別跟{object}進(jìn)行替換即可。例如,我想判斷這個(gè)圖片是不是狗,我的新文本就是a photo of a dog。

經(jīng)典的分類訓(xùn)練只關(guān)心模型是否可以正確預(yù)測(cè)圖像的分類標(biāo)簽。如果模型預(yù)測(cè)成功了狗,那么它不在乎圖像是一張狗的照片,還是一張狗的素描。而CLIP模型在大規(guī)模數(shù)據(jù)集上完成的訓(xùn)練,這使得CLIP模型還學(xué)習(xí)到了圖像的各方面信息。
例如,CLIP模型對(duì)用于圖像描述的單詞很敏感。文本“a photo of a bird”、“a photo of a bird siting near bird feeder”或“an image of a bird”與相同的圖像匹配產(chǎn)生的概率是不同的。

3. 在真實(shí)項(xiàng)目場(chǎng)景中的CLIP
為了說明CLIP模型的潛力,我想展示一個(gè)真實(shí)的工程項(xiàng)目用例。這是我為客戶所做的一個(gè)項(xiàng)目,一個(gè)圖像相似度搜索引擎。在這個(gè)項(xiàng)目中,用戶向模型提交一個(gè)圖像,返回一個(gè)與所提交圖像在視覺上相似的圖像集合。在實(shí)際的使用過程中,用戶提交的圖像主要是PDF文檔的頁面,往往單獨(dú)或混合包含著文本、表格、嵌入的照片、空頁面、模式、圖表和技術(shù)圖紙。而用戶想搜索到的圖像只能是技術(shù)圖紙。
以下是幾個(gè)技術(shù)圖紙示例:

正所謂細(xì)節(jié)決定成敗,在這個(gè)實(shí)例中,我們觀測(cè)到每個(gè)圖像的右下角都包含一個(gè)文本信息塊。而且,所有來自相同單位的技術(shù)圖紙都包含一個(gè)非常相似的文本塊。因此,我們可以基于這個(gè)文本塊來建模神經(jīng)網(wǎng)絡(luò)模型以實(shí)現(xiàn)圖像搜索引擎。
我們首先使用SimCLR方法對(duì)ResNet-18模型進(jìn)行訓(xùn)練。SimCLR是一種自監(jiān)督的對(duì)比學(xué)習(xí)方法,可以在沒有圖像標(biāo)簽的情況下學(xué)習(xí)到良好的視覺表示。我們可以將視覺表示用于圖像相似度判斷,如果兩個(gè)圖像的視覺表示相似度高就可以說明這兩個(gè)圖像是相似。在這個(gè)項(xiàng)目中,ResNet-18模型在100K張圖像上進(jìn)行了訓(xùn)練。其中50%是技術(shù)圖紙,剩下50%是其他各種類型的圖像。
接下來,我將CLIP模型與SimCLR方法訓(xùn)練的ResNet-18模型進(jìn)行了對(duì)比。我發(fā)現(xiàn),CLIP模型以zero-shot方式得到的圖像特征與專門在技術(shù)圖紙數(shù)據(jù)上訓(xùn)練的ResNet-18模型得到的圖像特征是有可媲美的表現(xiàn)的??紤]到技術(shù)圖紙不是公開可用的數(shù)據(jù)集,這確實(shí)令人驚訝。我甚至無法解釋為什么CLIP模型能夠在技術(shù)圖紙上表現(xiàn)得如此出色,難道這些技術(shù)圖紙是訓(xùn)練數(shù)據(jù)集的一部分?
同時(shí),這還展示了另一個(gè)結(jié)果:CLIP模型雖然沒有以圖像相似性來訓(xùn)練,但是它學(xué)習(xí)到得圖像特征完全可以用于圖像相似性匹配場(chǎng)景。
4.?CLIP目前的不足
CLIP模型的作者對(duì)模型局限性持開放態(tài)度。CLIP模型在更抽象或更系統(tǒng)的任務(wù)(如計(jì)算物體數(shù)量)和更復(fù)雜的任務(wù)(如估計(jì)物體之間的相對(duì)距離上)都很吃力。在這樣的數(shù)據(jù)集上,CLIP模型只比隨機(jī)猜測(cè)略勝一籌。CLIP模型也在非常細(xì)粒度的分類任務(wù)上表現(xiàn)不佳,比如區(qū)分汽車型號(hào)、飛行器種類、花卉種類。
CLIP模型還存在著非常依賴訓(xùn)練數(shù)據(jù)量,訓(xùn)練成本昂貴的問題。如果預(yù)訓(xùn)練的CLIP模型對(duì)您所要解決的任務(wù)不起作用,那么訓(xùn)練您自己的CLIP模型幾乎是不可行的。
雖然CLIP模型有非常好的泛化性能,可以很好地推廣到許多圖像分布上,但它仍然不能推廣到真正的非分布數(shù)據(jù)。例如,CLIP模型以zero-shot的方式在MNIST數(shù)據(jù)集上的準(zhǔn)確率為88%,一個(gè)簡(jiǎn)單的Logistic回歸方法就可以優(yōu)于CLIP模型。
最后,CLIP模型的分類器可能對(duì)文本描述中的措辭很敏感,這需要使用者反復(fù)試驗(yàn),確定具體任務(wù)下表現(xiàn)良好的文本描述。
5. 結(jié)論
CLIP模型的訓(xùn)練方式打破了傳統(tǒng)分類器的界限,并且預(yù)訓(xùn)練的CLIP模型可以在不需要額外訓(xùn)練集的情況下,以良好的性能完成各種計(jì)算機(jī)視覺任務(wù)(如分類、圖像特征利用)。正如我在上述真實(shí)項(xiàng)目示例中所展示的,預(yù)訓(xùn)練的CLIP模型可以無需額外訓(xùn)練,可以快速幫助我們搭建項(xiàng)目。這個(gè)開發(fā)在數(shù)據(jù)科學(xué)工具中會(huì)非常受歡迎。
如果您覺得CLIP模型很有趣,我強(qiáng)烈建議您閱讀原始論文,其中作者進(jìn)行了許多不同的實(shí)驗(yàn),并展示了CLIP模型如何在廣泛的數(shù)據(jù)集上執(zhí)行zero-shot分類。
6.?如何嘗試CLIP模型?
我準(zhǔn)備了一個(gè)Colab筆記本,展示了如何使用CLIP。在那里,你不僅會(huì)發(fā)現(xiàn)基本的程序代碼,還會(huì)發(fā)現(xiàn)一些關(guān)于文本描述如何影響結(jié)果的見解。請(qǐng)一定要去看看!
這篇筆記本用了3個(gè)人的16張肖像照片來測(cè)試看看CLIP模型能不能區(qū)分這些人。當(dāng)然,CLIP模型有這個(gè)能力!但是,正如CLIP模型的作者們?cè)谒麄兊恼撐闹兄赋龅哪菢?,在?dāng)前的開發(fā)狀態(tài)下,CLIP模型可能不是執(zhí)行此類任務(wù)的最佳候選,但它是查看模型如何工作,擴(kuò)展思路的好選擇。
原文鏈接:
https://inmeta.medium.com/clip-from-openai-what-is-it-and-how-you-can-try-it-out-yourself-6f9a870efe00

hi,這里是小牛翻譯~
想要看到更多我們的文章,可以關(guān)注下
機(jī)器翻譯學(xué)堂(公號(hào)或網(wǎng)站)
筆芯~

往期精彩文章

