ViT 對比 swin Transformer 2021-05-18

ViT

AN IMAGE IS WORTH 16X16 WORDS:
TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
https://arxiv.org/pdf/2010.11929.pdf
這篇工作Vision Transformer基于NLP領(lǐng)域中大放異彩的Transformer模型來處理視覺領(lǐng)域的任務(wù)。作者將二維的圖像數(shù)據(jù)用一個簡單的方式轉(zhuǎn)換為和Transformer中處理的句子序列差不多的形式瞧挤, 然后使用 Transformer編碼器來提取特征瘩扼。

Multi-head self-Attention 多頭注意力機(jī)制

Transformer的論文叫Attention is all you need, 現(xiàn)在在深度學(xué)習(xí)領(lǐng)域中提到Attention可能大家都會想到Transformer的self-Attention自注意力捣郊,其實注意力機(jī)制剛開始是應(yīng)用于循環(huán)神經(jīng)網(wǎng)絡(luò)中的瞄摊,self-Attention可以看成是一個更通用的版本疹瘦。Attention本來是在Encoder-Decoder框架中關(guān)乎中間的隱藏狀態(tài)的這么一個函數(shù)财骨。 而self-Attention無所謂隱藏狀態(tài)漓滔,只關(guān)注輸入序列中向量之間的依賴關(guān)系氛魁。Transformer給出了一個非常簡潔的公式 暮顺。


三個矩陣:Q: Query 查詢,K:Key 鍵秀存, V:Value 值捶码。 d_k 是key的dimension維度進(jìn)行一個縮放用來穩(wěn)定訓(xùn)練。

看到softmax就知道是在求概率或链,V代表的是數(shù)值惫恼,QK代表一個查字典的操作。但是這樣還是很抽象澳盐,要理解的話得把矩陣拆成向量才行祈纯。這里推薦一篇可視化Transformer的博客。https://jalammar.github.io/illustrated-transformer/

這里的q,k,v就是代表向量了叼耙,對于輸入序列中的每個token腕窥,它對應(yīng)的q會去查詢所有其他token的key,得到一個可以理解為關(guān)聯(lián)程度的分?jǐn)?shù)筛婉,轉(zhuǎn)化為概率再對每個token的Value根據(jù)關(guān)聯(lián)程度進(jìn)行一個權(quán)重簇爆。 最終結(jié)果和所有token的value都有關(guān)系,但是注意力會集中在關(guān)聯(lián)程度大的value上面。

我的理解就是把原向量進(jìn)行三次編碼入蛆,然后在計算attention結(jié)果的時候响蓉,一個編碼只和自己有關(guān),代表該token的特征哨毁,另外兩個用來和序列中其他向量的編碼進(jìn)行匹配枫甲,得到當(dāng)前向量與其他向量之間的關(guān)聯(lián)程度。

卷積在視覺中占主流的原因很重要的原因是局部感受野扼褪,另外卷積的形式一坨一坨的很契合對圖片數(shù)據(jù)的處理言秸。但是拨黔,卷積的感受野是受限的糖权,要多層抽象才能得到一個比較大的感受野初坠。而自注意力我覺得可以理解為在輸入的全局中有選擇的進(jìn)行權(quán)重。這個過程進(jìn)行多次凳枝,就是多頭自注意力機(jī)制。

把圖片當(dāng)作單詞處理

最終的編碼就長成這個樣子:


一張圖片的embedding

對應(yīng):


Embedding
  1. 圖片轉(zhuǎn)化為序列數(shù)據(jù) \mathbf {x}_p^iE
    將圖片拆分為多個patch跋核,每個壓扁的 \mathbf {x}_p^i 通過線性變換E岖瑰, 得到一個固定長度的特征向量,參考NLP中的習(xí)慣稱為token砂代。這個token的長度D文中使用了768蹋订,1024,1280對應(yīng)三個尺寸的模型ViT-Base刻伊,Large以及Huge露戒。

  2. class token \mathbf {x}_{\mathbf {class}}
    另外每個序列的開頭還會加上一個class token,最終用來分類的是class token 對應(yīng)的特征向量捶箱。這個token的參數(shù)是可學(xué)習(xí)的智什,會和序列中所有其他patch所生成的token一樣,正常進(jìn)行查詢匹配的注意力操作丁屎,我的理解是它起到了一個類似總結(jié)的作用荠锭。代碼中可以看到,最終通過MLP的要么是只取class token的結(jié)果晨川,或者也可以使用對所有token在每個位置取平均值的方法证九。但是論文好像沒有解釋取平均值會怎么樣,有了解的同學(xué)歡迎補(bǔ)充共虑。

#https://github.com/lucidrains/vit-pytorch/blob/4f3dbd003f004569a916f964caaaf7b9a0a28017/vit_pytorch/vit.py
 def forward(self, img):
        x = self.to_patch_embedding(img)
        b, n, _ = x.shape

        cls_tokens = repeat(self.cls_token, '() n d -> b n d', b = b)
        x = torch.cat((cls_tokens, x), dim=1)
        x += self.pos_embedding[:, :(n + 1)]
        x = self.dropout(x)

        x = self.transformer(x)

        x = x.mean(dim = 1) if self.pool == 'mean' else x[:, 0] # (只使用 class token)

        x = self.to_latent(x)
        return self.mlp_head(x)
  1. 位置編碼 E_{pos}
    雖然注意力可以捕捉到token和token之間的依賴關(guān)系愧怜,但是token的位置信息卻無處可尋。也就是說看蚜,無論這些patch如何排序叫搁,得到的結(jié)果都是一樣的。NLP領(lǐng)域中有非常多的解決方案,ViT使用的是可學(xué)習(xí)的位置編碼渴逻,和class token 與 patch的線性變換相加得到最終編碼疾党。也許也可以用拼接,不過原Transformer中沒有提到惨奕,另外Transformer中使用的是固定的編碼雪位。 總之,就是無論哪個序列梨撞,讓序列中同一位置的token附帶上一模一樣的信息就可以了雹洗。ViT附錄D3中有不同位置編碼方式的對比實驗結(jié)果,如果沒有考慮位置信息卧波,那么結(jié)果很差时肿,而使用不同位置編碼的結(jié)果其實差距不大。
    不同編碼的對比試驗港粱,編碼方法可以去參看原文

既然已經(jīng)通過上面的處理把圖片的輸入轉(zhuǎn)化為Tranformer處理單詞序列的形式了螃成,那么接下來直接通過多頭注意力機(jī)制多次處理,最終得到的結(jié)果是和圖片中每個patch都相關(guān)的特征查坪。就相當(dāng)于替代卷積層完成了特征提取得到 z_l寸宏。

MSA: 多頭注意力機(jī)制, MLP多層感知機(jī)

實驗

不用卷積運(yùn)算偿曙,訓(xùn)練需要的計算資源要少很多氮凝。
ViT 如果用大量數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練,那么效果會很好望忆。
ViT 模型更大對比同量級state-of-the-art表現(xiàn)更好罩阵。


訓(xùn)練得到的當(dāng)前patch的位置編碼,和其他所有位置編碼的余弦相似度炭臭,也就是做點積再除以模的積

swinTransformer

https://arxiv.org/pdf/2103.14030.pdf

先看之前的ViT永脓,特征圖始終是比較低的像素,而Swin Transformer剛開始把原圖分成比較多的小窗口鞋仍,然后在下一個階段把鄰近的小窗口融合成大窗口常摧。雖然patch的數(shù)量始終保持4*4,但是patch的分辨率是從高到底變化的威创。

swin Transformer結(jié)構(gòu)
另外落午,某一層的窗口分界處是另一層一個窗口的中心。這個設(shè)計很好理解肚豺,對比實驗證明也是有效的溃斋。
其中W-MSA和 SW-MSA代表對不同分區(qū)的patch使用多頭注意力機(jī)制

position bias in self-attention head

不同于ViT中在輸入序列中加上一個絕對的位置編碼,swinTransformer使用的是相對位置偏置吸申,加在attention內(nèi)部的查詢操作里梗劫。論文做了實驗享甸,如果同時使用兩種方法,表現(xiàn)會反而下降梳侨。

在原自注意力機(jī)制的基礎(chǔ)上蛉威,加了一個偏置B,這個表示的是patch的相對位置走哺,如果在此基礎(chǔ)上再疊加一個絕對位置偏置蚯嫌,表現(xiàn)會反而下降
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丙躏,隨后出現(xiàn)的幾起案子择示,更是在濱河造成了極大的恐慌,老刑警劉巖晒旅,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栅盲,死亡現(xiàn)場離奇詭異,居然都是意外死亡废恋,警方通過查閱死者的電腦和手機(jī)剪菱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拴签,“玉大人,你說我怎么就攤上這事旗们◎玖ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵上渴,是天一觀的道長岸梨。 經(jīng)常有香客問我,道長稠氮,這世上最難降的妖魔是什么曹阔? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮隔披,結(jié)果婚禮上赃份,老公的妹妹穿的比我還像新娘。我一直安慰自己奢米,他們只是感情好抓韩,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鬓长,像睡著了一般谒拴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涉波,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天英上,我揣著相機(jī)與錄音炭序,去河邊找鬼。 笑死苍日,一個胖子當(dāng)著我的面吹牛惭聂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播易遣,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼彼妻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豆茫?” 一聲冷哼從身側(cè)響起侨歉,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揩魂,沒想到半個月后幽邓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡火脉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年牵舵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倦挂。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡畸颅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出方援,到底是詐尸還是另有隱情没炒,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布犯戏,位于F島的核電站送火,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏先匪。R本人自食惡果不足惜种吸,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呀非。 院中可真熱鬧坚俗,春花似錦、人聲如沸岸裙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哥桥。三九已至辙浑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拟糕,已是汗流浹背判呕。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工倦踢, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侠草。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓辱挥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親边涕。 傳聞我的和親對象是個殘疾皇子晤碘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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