CLIP論文分享

論文題目Learning Transferable Visual Models From Natural Language Supervision
譯為 從自然語言監(jiān)督中學習可轉移的視覺模型
CLIP? = Constractive Language Image Pretraining

摘要
最先進的計算機視覺系統被訓練來預測一組固定的預定對象類別。這種受限制的監(jiān)督形式限制了它們的通用性和可用性,因為需要額外的標記數據來指定任何其他視覺概念。直接從原始文本中學習圖像是一種很有前途的選擇,因為它利用了更廣泛的監(jiān)督來源。
?
關鍵點1:怎么理解額外的標記數據導致了受限制的監(jiān)督形式,從而限制了通用性和可用性?
比如做ImageNet分類,它本身自己就是1000個類,如果你扔進ImageNet訓練之后,去做預測,最后固定的全連接softmax分類頭只能預測出這個圖片是這1000個類的概率,如果你想讓他去識別第1001個類,這是做不到的。這就限制了監(jiān)督訓練的通用性和可用性,難道你想要弄一個新的類別,就要重新標注一下,重新去訓練一個新的模型嗎?
?
關鍵點2:怎么理解從原始文本中學習圖像就能有更廣泛的監(jiān)督來源?
關鍵點在于圖像文本對,自然世界中有很多文本,這些文本都用來描述一些物體,比如你去旅游發(fā)一個朋友圈配圖配文,這樣子就形成了圖像文本對。因此我們去做圖像任務的時候,可以利用這個文本去輔助監(jiān)督,這個文本特征就是監(jiān)督來源。監(jiān)督的來源是一段文本,而不是一個標注的label,這樣就更加廣泛,不僅僅限于1000個類別了。
我們證明了預測哪個文本與哪個圖像相匹配的簡單pretrain任務是一種有效且可擴展的方法,可以在從互聯網收集的4億對(圖像,文本)數據集上從頭開始學習SOTA圖像表示。在pretrain之后,使用自然語言來參考學習到的視覺概念(或描述新的概念),從而實現模型向下游任務的zero-shot轉移。我們通過對30多個不同的現有計算機視覺數據集進行benchmark測試來研究這種方法的性能,這些數據集涵蓋了OCR、視頻中的動作識別、地理定位和許多類型的細粒度對象分類等任務。
關鍵點1:爬了一個4億對的圖像文本對去做預訓練?
自監(jiān)督模式的訓練,想要取得好效果,必須是大力出奇跡,所以有money is all you need的說法。
?
關鍵點2:怎么理解模型向下游任務的zero-shot轉移
zero-shot:預訓練之后,不做finetune或linear probe,謂之零樣本,直接做預測
few-shot:與訓練之后,使用少量樣本做finetune,一般會凍結backbone(這種叫l(wèi)inear probe),只訓練最后的全連接softmax分類頭,謂之少樣本,最后做預測
所以CLIP在做完使用圖像文本對在4億數據集上的預訓練后,可以直接用在下游任務上,不需要做任何使用樣本的finetune或者linear probe,就能取得很好的效果,所以說遷移性好。
該模型不平凡地轉移到大多數任務,并且通常與完全監(jiān)督的baseline競爭,而不需要任何數據集特定的訓練。例如,我們在ImageNet zero-shot上匹配原始ResNet-50的精度,而不需要使用它所訓練的128萬個訓練樣本中的任何一個。
?
這個結果在當時看來是非常炸裂的。

引言
NLP領域的自監(jiān)督范式:開山鼻祖BERT,使用掩碼訓練(完形填空)的方式完成對于backbone的自監(jiān)督的訓練。這種訓練方式是文本進,文本出,可以訓練出很好的backbone,backbone能夠自動幫你抽取文本特征,與下游任務是無關的。所以當時OpenAI自己最牛的模型是GPT3,能幫你做各種任務,比如寫郵件、寫小說和寫新聞等等。
(還有一種是與BERT不同的自回歸的訓練方式)
這說明:NLP這套框架證實自監(jiān)督不使用人工標注的數據比使用更好
?
CV領域:仍然會用ImageNet預訓練(監(jiān)督范式)一下。
在CLIP之前,有三個同一領域的希望使用文本信號去訓練視覺模型的工作:
VirTex(自回歸預訓練)、ICMLM(完形填空)、ConVirt(與CLIP很類似)
但他們的規(guī)模、數據集、算力都沒有CLIP大,所以還是大力出奇跡
CLIP = 大數據集(4億) + 大模型 + 大算力 + 圖像文本對的對比學習
圖像文本對的工作模型采用的是ConVirt的簡化版本,但就是效果好到懷疑人生。

方法
核心:用文本當作訓練的信號來訓練視覺模型,不需要人工標注(下載圖像文本對),簡單
單模態(tài):MoCo SimCLR MAE等還是學習視覺特征,沒有文本引導,下游任務還是finetune
多模態(tài)的對比學習:文本+視覺極具潛力
關鍵點1:清洗了一個巨大的干凈的數據集 WIT(四億圖像文本對)
關鍵點2:提高訓練效率,不能直接做預測(訓練一個圖像encoder如ResNet,一個文本encoder如Transformer,然后利用圖像encoder去預測文本標簽),原因是一張圖片可以有很多描述。所以去做了一個對比學習的任務,只需要去判斷這個圖像和文本是不是配對的就行。

模型核心點就是,把文本特征和圖像特征的cosine similarity當作是否配對的結果


一些訓練細節(jié):
1 數據集太大了,模型太大了,不會overfit,所以壓根不做數據增強的tricks
2 用的線性投射層,而不是非線性,懶得用了,效果差不多,但在一般視覺用非線性多且好
3 對比學習的temperature參數,本來是很重要的,但這里直接調成learnable weight被優(yōu)化了
?
模型的選擇上,文本模型用Transformer,視覺模型可以用ViT或者ResNet,這里2.4節(jié)用了很多訓練的tricks。
訓練上:常規(guī)的模型選擇和計算量調優(yōu),Adam,Batch32768,混精度
“工程細節(jié)大于模型創(chuàng)新”

實驗
zero-shot的原因:原來的自監(jiān)督對比學習都是為了去學習一種泛化能力較好的特征,來應用到下游任務去做微調。但下游任務會有很多問題,比如下游任務的數據不好收集或者是特征遷移的問題,所以想要訓練一個直接zero-shot的模型,直接用,別做微調了。
?
推理過程:用prompt engineer,把原來的圖片的標簽變成一個句子,然后這個句子經過text encoder得到一系列特征(與類別數相同),對應的圖片經過image encoder得到一系列特征,最后兩個特征進行余弦相似度計算,然后softmax,最高的那個就是最后的結果。
上面的prompt template是a photo of a {}
Prompt engineering:避免歧義和與NLP那邊保持一致,避免distribution gap(分布誤差)
Prompt ensembling:多用提示的模板prompt template,然后綜合一下選最高的
這個就是咒語



結果大部分都好,特別是普通物體數據集
一些難的任務就不太好,需要去做few-shot,因為本身人自己沒有專業(yè)知識也很難做好






局限
1.???? 還是沒有SOTA(跟領域最好的,包括有監(jiān)督)
2.???? 某些數據集不好,有bias
3.???? MNIST很差,因為4億里沒有
4.???? 雖然 CLIP 可以做 zero-shot 的分類任務,但它還是在你給定的這些類別中去做選擇
5.???? 4億還是太夸張了,自監(jiān)督和偽標簽
6.???? 調參和tricks還是用了很多
7.???? 通過自然語言引導圖像分類器是一種靈活和通用的接口,但它有自己的局限性。 許多復雜的任務和視覺概念可能很難僅僅通過文本來指導,即使用語言也無法描述。
8.???? 實驗還是在監(jiān)督的數據集做,對于zero-shot來說還是不好
9.???? 政治、性別、宗教
10.? 當從 zero-shot 轉換到設置 few-shot 時,當 one-shot、two-shot、four-shot 時反而不如 zero-shot,不提供訓練樣本時反而比提供少量訓練樣本時差了,這與人類的表現明顯不同,人類的表現顯示了從 zero-shot 到 one-shot 大幅增加。今后需要開展工作,讓 CLIP 既在 zero-shot 表現很好,也能在 few-shot 表現很好。