新智元報道 【新智元導(dǎo)讀】開源模型OpenCLIP達(dá)成ImageNet里程碑成就!![]() ![]() ![]() 模型地址:https:///laion/CLIP-ViT-bigG-14-laion2B-39B-b160k ![]()
Zero-shot能力 ![]()
CLIP為何能Zero-Shot 對比語言-圖像預(yù)訓(xùn)練(CLIP, Contrastive Language-Image Pretraining)是 OpenAI 于2021年發(fā)布的一個主要基于Transformer的模型。 CLIP 由兩個模型組成,一個Transformer編碼器用于將文本轉(zhuǎn)換為embedding,以及一個視覺Transformer(ViT)用于對圖像進(jìn)行編碼。
CLIP內(nèi)的文本和圖像模型在預(yù)訓(xùn)練期間都進(jìn)行了優(yōu)化,以在向量空間中對齊相似的文本和圖像。在訓(xùn)練過程中,將數(shù)據(jù)中的圖像-文本對在向量空間中將輸出向量推得更近,同時分離不屬于一對的圖像、文本向量。
CLIP與一般的分類模型之間有幾個區(qū)別: 首先,OpenAI 使用從互聯(lián)網(wǎng)上爬取下來的包含4億文本-圖像對的超大規(guī)模數(shù)據(jù)集進(jìn)行訓(xùn)練,其好處在于: 1. CLIP的訓(xùn)練只需要「圖像-文本對」而不需要特定的類標(biāo)簽,而這種類型的數(shù)據(jù)在當(dāng)今以社交媒體為中心的網(wǎng)絡(luò)世界中非常豐富。 2. 大型數(shù)據(jù)集意味著 CLIP 可以對圖像中的通用文本概念進(jìn)行理解的能力。 3. 文本描述(text descriptor)中往往包含圖像中的各種特征,而不只是一個類別特征,也就是說可以建立一個更全面的圖像和文本表征。 上述優(yōu)勢也是CLIP其建立Zero-shot能力的關(guān)鍵因素,論文的作者還對比了在ImageNet上專門訓(xùn)練的 ResNet-101模型和 CLIP模型,將其應(yīng)用于從ImageNet 派生的其他數(shù)據(jù)集,下圖為性能對比。
可以看到,盡管 ResNet-101是在ImageNet上進(jìn)行訓(xùn)練的,但它在相似數(shù)據(jù)集上的性能要比 CLIP 在相同任務(wù)上的性能差得多。 在將 ResNet 模型應(yīng)用于其他領(lǐng)域時,一個常用的方法是「linear probe」(線性探測),即將ResNet模型最后幾層所學(xué)到的特性輸入到一個線性分類器中,然后針對特定的數(shù)據(jù)集進(jìn)行微調(diào)。 在CLIP論文中,線性探測ResNet-50與zero-shot的CLIP 進(jìn)行了對比,結(jié)論是在相同的場景中,zero-shot CLIP 在多個任務(wù)中的性能都優(yōu)于在ResNet-50中的線性探測。
不過值得注意的是,當(dāng)給定更多的訓(xùn)練樣本時,Zero-shot并沒有優(yōu)于線性探測。
用CLIP做Zero-shot分類 從上面的描述中可以知道,圖像和文本編碼器可以創(chuàng)建一個512維的向量,將輸入的圖像和文本輸入映射到相同的向量空間。 用CLIP做Zero-shot分類也就是把類別信息放入到文本句子中。 舉個例子,輸入一張圖像,想要判斷其類別為汽車、鳥還是貓,就可以創(chuàng)建三個文本串來表示類別: T1代表車:a photo of a car T2代表鳥:a photo of a bird T3代表貓:a photo of a cat 將類別描述輸入到文本編碼器中,就可以得到可以代表類別的向量。 假設(shè)輸入的是一張貓的照片,用 ViT 模型對其進(jìn)行編碼獲取圖像向量后,將其與類別向量計算余弦距離作為相似度,如果與T3的相似度最高,就代表圖像的類別屬于貓。
可以看到,類別標(biāo)簽并不是一個簡單的詞,而是基于模板「a photo of a {label}」的格式重新改寫為一個句子,從而可以擴(kuò)展到不受訓(xùn)練限制的類別預(yù)測。 實驗中,使用該prompt模板在ImageNet的分類準(zhǔn)確性上提高了1.3個百分點(diǎn),但prompt模板并不總是能提高性能,在實際使用中需要根據(jù)不同的數(shù)據(jù)集進(jìn)行測試。
Python實現(xiàn) 想要快速使用CLIP做zero-shot分類也十分容易,作者選取了Hugging Face中的frgfm/imagenette數(shù)據(jù)集作為演示,該數(shù)據(jù)集包含10個標(biāo)簽,且全部保存為整數(shù)值。
使用 CLIP進(jìn)行分類,需要將整數(shù)值標(biāo)簽轉(zhuǎn)換為對應(yīng)的文本內(nèi)容。
在直接將標(biāo)簽和照片進(jìn)行相似度計算前,需要初始化 CLIP模型,可以使用通過 Hugging Face transformers找到的 CLIP 實現(xiàn)。
文本transformer無法直接讀取文本,而是需要一組稱為token ID(或input _ IDs)的整數(shù)值,其中每個唯一的整數(shù)表示一個word或sub-word(即token)。
將轉(zhuǎn)換后的tensor輸入到文本transformer中可以獲取標(biāo)簽的文本embedding
注意,目前CLIP輸出的向量還沒有經(jīng)過歸一化(normalize),點(diǎn)乘后獲取的相似性結(jié)果是不準(zhǔn)確的。
下面就可以選擇一個數(shù)據(jù)集中的圖像作測試,經(jīng)過相同的處理過程后獲取到圖像向量。
將圖像轉(zhuǎn)換為尺寸為(1, 3, 224, 224)向量后,輸入到模型中即可獲得embedding
下一步就是計算圖像embedding和數(shù)據(jù)集中的十個標(biāo)簽文本embedding之間的點(diǎn)積相似度,得分最高的即是預(yù)測的類別。
模型給出的結(jié)果為cassette player(盒式磁帶播放器),在整個數(shù)據(jù)集再重復(fù)運(yùn)行一遍后,可以得到準(zhǔn)確率為98.7%
除了Zero-shot分類,多模態(tài)搜索、目標(biāo)檢測、 生成式模型如OpenAI 的 Dall-E 和 Stable disusion,CLIP打開了計算機(jī)視覺的新大門。 |
|
|