ClipCap【用到Prefix Tuning】

任務(wù)

Image captioning,即看圖說話,對輸入圖像做有意義且有效的文字描述。應(yīng)用可以是:目標(biāo)檢測。

方法

ClipCap
  1. 使用CLIP的image encoder(凍結(jié))將圖片轉(zhuǎn)換為embedding;
  2. 將embedding和學(xué)習(xí)得到的常量輸入到mapping network(輕量,基于transformer),得到Prefix embedding;
  3. (推理時)將Prefix embedding輸入到語言模型(凍結(jié)的GPT2),得到Caption tokens。
    只有mapping network需要訓(xùn)練,一張1080使用300萬樣本訓(xùn)80小時即可。

訓(xùn)練

給定(image,caption)數(shù)據(jù)集合\{x^i, c^i\}^N_{i=1},我們的目標(biāo)是從沒見過的image生成有意義的caption(看成padding到定長的token序列c^i = c^i_1,\cdots,c^i_\mathcal{l})。訓(xùn)練目標(biāo):
\mathrm{max}_\theta\sum\limits^{N}_{i=1}{\text{log}\ p_\theta(c^i_1,\cdots,c^i_{l} |\ x^i)}
\theta是可訓(xùn)練的參數(shù)(mapping network的參數(shù))。
我們將圖片語義(由CLIP的image encoder提供語義豐富的embedding)這一condition作為caption的前綴。由于圖片語義已經(jīng)包含在了前綴中,我們可以使用自回歸語言模型,在不考慮未來token的情況下,預(yù)測下一個token。
所以訓(xùn)練目標(biāo)就是:
\mathrm{max}_\theta\sum\limits^{N}_{i=1}\sum\limits^{l}_{j=1}{\text{log}\ p_\theta(c^j_i|\ x^i, c^i_{1}, \cdots, c^i_{j-1})}
怎么把圖片語義轉(zhuǎn)化成前綴用作自回歸的condition呢?這里用到mapping network,它以\text{CLIP}(x^i)為輸入),輸出p_1^i, \cdots, p_k^ik個embedding vector),每個embedding vector和語言模型的token embedding形狀相同。
在訓(xùn)練中,我們拼接p_1^i, \cdots, p_k^ic^i_1,\cdots,c^i_{l}得到Z^i = p_1^i, \cdots, p_k^i, c^i_1,\cdots,c^i_{l}。損失函數(shù)用了二分類交叉熵:
\mathcal L_X = -\sum\limits^{N}_{i=1}\sum\limits^{l}_{j=1}{\text{log}\ p_\theta(c^j_i|\ p_1^i, \cdots, p_k^i, c^i_{1}, \cdots, c^i_{j-1})}

語言模型微調(diào)

訓(xùn)練中最大的挑戰(zhàn)在于,怎么互譯CLIP和語言模型的給出的表征。即便語義都很豐富,表征空間仍是不同的,并且訓(xùn)練數(shù)據(jù)集也會帶來差異。因此要在訓(xùn)練mapping network的同時對語言模型做微調(diào)。但微調(diào)會讓訓(xùn)練的參數(shù)量大大增加。所以作者參考Prefix Tuning設(shè)計了一個附加的量,而讓語言模型在訓(xùn)練中凍結(jié)。(作者還解釋了下為什么不對CLIP的image encoder做微調(diào),因為試了沒用)

Prefix Tuning還沒看完

。。。。。。。。。。。。。。。。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容