Visual Prompt Tuning
參考文獻:Jia, M., Tang, L., Chen, B. C., Cardie, C., Belongie, S., Hariharan, B., & Lim, S. N. (2022). Visual prompt tuning. arXiv preprint arXiv:2203.12119.
pdf連接: https://arxiv.org/pdf/2203.12119.pdf
1.文章背景
?????? 對于大量的識別任務來說,最準確的結果是通過對在大量原始數據上預訓練的大型基礎模型進行調整獲得的,然而在實際中,使這些大型的模型去適應下游任務有其自身的挑戰。最有效的調整策略是使用端到端的方式對預訓練的模型進行微調。但是這種策略需要很大的存儲開銷,對于每一個下游任務,需要存儲一個單獨的模型參數的副本。這種方法是不可行的,特別是對于哪些基于transformer的結構,比如ViT-H有6億多的參數,ResNet-50有25M的參數。
?????? 一種流行的策略是微調參數的一個子集,例如classifier head或者是bias term。也有方法在模型的框架上添加額外的殘差塊。但是這些方法的性能都低于full fine-tuning。
?????? 受最近的在NLP領域的prompt技術的影響,本文提出新的有效的方法使得transformer模型適應下游任務,將其命名為VPT(Visual Prompt Tuning)。在下游任務訓練期間,該方法會凍結預訓練的transformer backbone,通過引入少量的特定于任務的可學習的參數到輸入空間來實現和full fine-tune相當甚至是超過全微調的性能。
2.方法
2.1 預備知識
一個圖像分為m個patch塊,每一個塊的維度為3*h*w,如下圖所示
定義image patch embedding集合Ei,作為輸入到第i+1層transformer層的輸入。
其中的xi為[cls] token的嵌入表示。
2.2 本文所提方法
本文提出了兩種VPT,分別是VPT-Shallow和VPT-Deep。
模型如下圖所示:
VPT-Shallow,prompts向量僅被插入到第一個Transformer Layer中。
P的形狀如下所示,是一個p*d的矩陣。
VPT-Deep,prompt向量被插入到每一個Transformer層的輸入空間中 。
P的形狀如下所示,是一個N*p*d的矩陣,其中N是Transformer的層數。
2.3 參數比較
ViT-Base有86M的參數,帶768。prompt長度為50的VPT-Shallow和VPT-Deep的參數量分別為50*768 = 0.038M和12*50*768 = 0.46M,分別占ViT-Base參數的0.04%和0.53%。
3.實驗
3.1 實驗設置
實驗模型
實驗用到的模型:ViT和Swin Transformer。兩個模型都是在ImageNet-21K上進行預訓練。
基線模型
(a)FULL:更新模型的所有參數和分類頭的參數
(b)更新分類頭的參數,分類頭有一下三種定義方式。
——LINEAR:使用線性層作為分類頭
——PARTIAL-k:微調模型主干的最后k層(包括分類頭的參數),其他層參數保持不變。
——MLP-k:使用一個具有k層的多層感知機作為分類頭
(c)更新模型主干參數的子集或者在微調期間為模型主干添加新的可以訓練的參數。需要更新的子集有以下三種定義:
——SIDETUNE:
——BIAS:僅僅微調預訓練主干的偏差項
——ADAPTER:在Transformer層內插入帶有殘差連接的MLP模塊。
下游任務
?????? FGVC,由5個細粒度的視覺分類任務組成,其中包括CUB-200-2011,NABird,Oxford Flowers, Stanford Dog和Stanford Cars。如果有數據集僅僅有訓練集和測試集,那么本文作者以9:1的比例對訓練集進行隨機劃分,劃分為訓練集和驗證集。使用驗證集來選擇超參數。
?????? VTAB-1k,由19個不同的視覺分類任務組成,這些任務被分為三組,Natural,該任務中的圖像由普通的相機獲得;Specialized,該任務中的圖像由專業的設備獲得,比如醫療和衛星圖像;Structured,該任務需要對圖像進行理解,比如物體計數。VTAB中的每一個任務都包含1000個訓練例子,對訓練集使用800-200的分割來確定超參數,最后在所有的訓練數據上評估。在test集上運行3次,求取平均值。
3.2 實驗結果
(1)在下游任務上使用不同的9種調整參數的方法的性能
Table 1展示在四個不同的下游任務組中,微調ViT-B/16的所取得的平均結果。
(2)6種訓練參數的方法分別使用不同大小的數據集微調模型,最終在測試集上的性能。
?????? 從上圖中可以發現,在低資源的場景下,VPT方法取得了最好的效果。隨著使用訓練數據規模的增大,VPT-DEEP的性能一直超越著全微調的性能。雖然在第三張圖中,Bias也比全微調的效果好,但是其性能低于VPT-DEEP的性能。
(3)在不同規模的骨干網絡上使用VPT,最終在測試集上的性能
?????? 從三個圖中可以發現,使用VPT-deep的方法,在Natural和Structured上的性能超越了FULL,在Specialized上取得了和FULL相當的效果(隨著模型規模的增大,VPT-deep相比較于FULL,這種優勢仍然存在,這點與NLP不同,在NLP領域中,在小模型上使用prompt的效果要低于FULL,但是隨著模型大小增大,使用prompt的性能逐漸追上FULL的性能)。但VPT-shallow在后兩個任務組中的性能低于微調。
3.3 消融實驗
(1)Prompt Location
?????? VPT和其他方法的不同在于將可學習的參數作為了Transformer Layer的輸入。對于將prompts插入在輸入的哪里,以及怎么插入,本文進行了實驗,實驗結果如下所示:
?????? Add的方式是給經過編碼后的每一個image patch embedding添加一個可以訓練的prompts,這種方式可以保證輸入到Transformer塊的長度和從嵌入層輸出來的長度一樣。盡管這種方式取得了和FULL相當的性能,但是低于在VPT-deep和shallow的性能。
?????? 不同于將prompts插入到第一層Transformer layer的潛在空間,一種做法是在嵌入層之前引入pixel-level的prompt,比如Prepend-pixel和Concat-channel。通過實驗結果發現,這兩種方式都導致了性能下降。觀察發現,在Transformers的潛在輸入空間,prompts更容易學習特定于任務的信號。
(2)prompt Length
?????? 相比于全微調,提示長度是一個額外增加的需要調整的超參數。為了便于和其他方法比較,本文也在其他方法上的額外超參數上使用了消融實驗,比如MLP的層數,ADAPTER的reduction rate(減少率)。實驗結果如下所示:
?????? 從上圖發現,對于不同的任務最佳的提示長度是不同的。橫坐標的意思是,可訓練的參數與模型主干參數的比值。
(3)Prompt Depth
?????? 在哪一層加以及怎樣加提示也是一個值得考慮的問題。使用兩種添加prompt的方法,分別從上往下和從下往上添加提示(模型從下往上依次是嵌入層,transformer第一層,第二層,第三層,…….)。通常上來說,VPT的性能與prompt depth是正相關的關系。同時,從實驗中也發現,使用從上往下的方式,效果往往要差,這意味著在Transformer更早層的提示比更后層提示更重要。
(4)Final Output
?????? ViT原始的設置是使用最終的[CLS]的embedding作為分類頭的輸入,這也是本篇文章ViT實驗的默認設置。本文探索了使用不同的embedding作為分類頭的輸入,所產生的效果。
?????? 使用所有Image Patch Embedding的平均作為分類頭的輸入取得了和默認設置相同的效果。如果池化的向量包括提示向量,那么最終的性能將會下降。
4.1 可視化
?????? 使用t-SNE對[CLS]的embedding進行可視化。使用的是VTAB的中三個任務,這三個任務分別屬于三個組別(Natural,specialized,structured)。可視化過程:將每一個測試例子的[cls]的embedding通過t-SNE進行可視化。如果模型的效果很好,那么對于屬于同一個類別的測試用例的[cls]的embedding,可視化后的結果應當在一個簇中,且簇與簇之間要可區分。
?????? 所有的圖都顯示,使用比全微調更少的參數,VPT-deep能夠得到線性可分離的表示。同時也觀察到,在transformer的每一層加入prompts,可以改善模型的性能。從第三個圖中可以發現,VPT-deep和FULL可以恢復任務的流形結構。
4.2 將VPT應用到更多的視覺任務上
?????? 本文將VPT用在語義分割任務中。語義分割模型由一個Transformer和一個標準的ConvNet head組成,使用ConvNet head來進行分割。實驗結果如下所示,Head ONLY是僅僅更新卷積頭的參數,BIAS是更新頭部參數和網絡主干的bias向量。雖然參數有效的方法不能夠和FULL進行比較,但是VPT取得了和Bias可比較的結果。
?????? 值得注意的是,VPT和一個全微調的使用卷積模型的最好的結果取得了可比較的效果。
4.3 在使用其他預訓練目標的預訓練模型上使用VPT
?????? 除了用標記數據預訓練的骨干,我們還用兩個自監督的目標進行實驗,MAE和MoCo v3。
?????? 上表是使用ViT-B在VTAB-1k上的結果。可以觀察到VPT的變體超越了LINEAR,但是和其他技術的比較卻不具有說服力。對于MAE來說,PARTIAL-1超越了其他參數有效的方法。在MoCP V3中,VPT不在保持著最好的性能,盡管VPT和其他的技術的結果性能仍然可以比較。這表明兩個自監督的ViT和使用監督的ViT有著根本的不同。為什么以及如何產生這些差異仍然是一個開放的問題。
總結
以上是生活随笔為你收集整理的Visual Prompt Tuning的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: anaconda prompt 闪退
- 下一篇: prompt命令 oracle,prom