久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Vision Transformer 必讀系列之圖像分類綜述(一): 概述

     新用戶0118F7lQ 2022-03-17

    號外號外!awesome-vit 上新啦

    歡迎大家 Star Star Star ~

    https://github.com/open-mmlab/awesome-vit

    點擊閱讀原文可直達


    前言

    隨著 Vision Transformer 不斷刷新各個領域的 SOTA,其優(yōu)異的性能和廣闊的發(fā)展前景使其得到了越來越多的關注。前段時間 OpenMMLab 也進行專項開發(fā),對各個算法庫進行了一致性支持,具體可見:
    https://zhuanlan.zhihu.com/p/403661977

    鑒于大家對 Vision Transformer 如此關注,我們特推出了 Vision Transformer 必讀系列文章,希望可以給大家?guī)硪欢ǖ乃伎己蛦l(fā)。

    按目前規(guī)劃,該系列將覆蓋圖像分類、目標檢測和語義分割三大方向,共計約5篇文章。后續(xù)還將對某篇或者某類主流算法結合 OpenMMLab 開源庫的具體實現(xiàn)進行更加深入的解讀,歡迎大家持續(xù)關注。

    不僅如此,我們還特意新開了一個開源庫,所有關于 Vision Transformer 相關的資料都會在這里持續(xù)更新,大家也可以在這里直接獲取相關源文件。邀請大家共同來改進和維護,如果覺得算法庫對你有幫助,歡迎 Star ,感謝支持~

    (網址: https://github.com/open-mmlab/awesome-vit 

    本文是圖像分類方向的開篇,將對 Transformer 和 Vision Transformer (ViT) 進行解讀,同時還將對 ViT 后續(xù)發(fā)展進行系統(tǒng)性概述,方便大家把握方向,是本系列文章的重點內容 (由于圖像分類內容眾多,本文僅僅是全局概述,不涉及思維導圖中每篇論文,具體分析在系列二和系列三中描述)。

    需要強調的是 MMClassification 框架中已經復現(xiàn)了 ViT 和 TnT 等視覺 Transformer 算法,并且也在不斷地完善,有興趣的朋友可以 Star,感謝支持~

    (網址: https://github.com/open-mmlab/mmclassification 

    ViT 進展匯總思維導圖如下圖所示:

    圖片
    文末點擊閱讀原文,前往 awesome-vit 開源庫下載高清源文件

    接下來就讓我們進入正文吧~

    1. Transformer 和 Vision Transformer 
         簡要說明

    Transformer 結構是 Google 在 2017 年為解決機器翻譯任務(例如英文翻譯為中文)而提出,從題目 Attention is All You Need 中可以看出主要是靠 Attention 注意力機制,其最大特點是拋棄了傳統(tǒng)的 CNN 和 RNN,整個網絡結構完全是由 Attention 機制組成。為此需要先解釋何為注意力機制,然后再分析模型結構。

    Attention 注意力機制不是啥新鮮概念,視覺算法中早已廣泛應用,典型的如 SENet。

    SeNet 網址:

    https:///abs/1709.01507


    圖片

    利用 Squeeze-and-Excitation 模塊計算注意力權重概率分布,然后作用于特征圖上實現(xiàn)對每個通道重加權功能。

    人生來就有 Attention 注意力機制,看任何畫面,我們會自動聚焦到特定位置特定物體上。對于輸入給網絡的任何模態(tài),不管是圖像、文本、點云還是其他,我們都希望網絡通過訓練能夠自動聚焦到有意義的位置,例如圖像分類和檢測任務,網絡通過訓練能夠自動聚焦到待分類物體和待檢測物體上。一個典型的 Transformer 結構如下所示:

    圖片
    本圖來自文章 A Survey of Visual Transformers
    網址:https:///abs/2111.06091

    通常來說,標準的 Transformer 包括 6 個編碼器和 6 個解碼器串行

    - 編碼器內部接收源翻譯輸入序列,通過自注意力模塊提取必備特征,通過前向網絡對特征進行進一步抽象。

    - 解碼器端輸入包括兩個部分:一是目標翻譯序列經過自注意力模塊提取的特征,二是編碼器提取的全局特征。這兩個輸入特征向量會進行交叉注意力計算,抽取有利于目標序列分類的特征,然后通過前向網絡對特征進行進一步抽象。

    - 堆疊多個編碼器和解碼器,下一個編解碼器接收來自上一個編解碼的輸出,構成串行結構不斷抽取,最后利用解碼器輸出進行分類即可。

    圖片分類中通常不需要解碼器模塊,所以我們只需要關注編碼器部分,其中主要是位置編碼模塊 Positional Encoding、多頭自注意力模塊 Muti-Head Attention、前向網絡模塊 Feed Forward 以及必要的 Norm、Dropout 和殘差模塊。

    - 位置編碼模塊 Positional Encoding 用于給輸入的序列增加額外的位置信息。

    - 多頭自注意力模塊 Muti-Head Attention 用于計算全局空間注意力。

    - 前向網絡模塊 Feed Forward 用于對通道維度信息進行混合。

    - 必要的 Norm、Dropout 和殘差模塊提供了更好的收斂速度和性能。

    ViT 是第一次成功將 Transformer 引入到視覺領域的嘗試,開辟了視覺 Transformer 先河。其結構圖如下所示:

    圖片

    其做法非常簡單,簡要概況為:

    - 將圖片分成無重疊的固定大小 Patch (例如 16 x 16),然后將每個 Patch 拉成一維向量, n 個 Patch 相當于 NLP 中的輸入序列長度(假設輸入圖片是 224 x 224,每個 patch 大小是 16 x 16,則 n 是 196),而一維向量長度等價于詞向量編碼長度(假設圖片通道是 3 , 則每個序列的向量長度是 768 )。

    - 考慮到一維向量維度較大,需要將拉伸后的 Patch 序列經過線性投影 (nn.Linear) 壓縮維度,同時也可以實現(xiàn)特征變換功能,這兩個步驟可以稱為圖片 Token 化過程 (Patch Embedding)。

    - 為了方便后續(xù)分類,作者還額外引入一個可學習的 Class Token,該 Token 插入到圖片 token 化后所得序列的開始位置。

    - 將上述序列加上可學習的位置編碼輸入到 N 個串行的 Transformer 編碼器中進行全局注意力計算和特征提取,其中內部的多頭自注意模塊用于進行 Patch 間或者序列間特征提取,而后面的 Feed Forward (Linear+ GELU+Dropout+ Linear+ Dropout) 模塊對每個 Patch 或者序列進行特征變換。

    - 將最后一個 Transformer 編碼器輸出序列的第 0 位置( Class Token 位置對應輸出)提取出來,后面接 MLP 分類后,然后正常分類即可。

    ViT 證明純 Transformer 也可以取得非常好的效果,相比 CNN 在數(shù)據(jù)量越大的情況下優(yōu)勢更加明顯,但是 ViT 也存在如下問題:

    - 不采用超大的 JFT-300M 數(shù)據(jù)集進行預訓練,則效果無法和 CNN 媲美,原因應該是 Transformer 天然的全局注意力計算,沒有 CNN 這種 Inductive Bias 能力,需要大數(shù)據(jù)才能發(fā)揮其最大潛力。

    - ViT 無法直接適用于不同尺寸圖片輸入,因為 Patch 大小是固定的,當圖片大小改變時,序列長度就會改變,位置編碼就無法直接適用了,ViT 解決辦法是通過插值,這種做法一般會造成性能損失,需要通過 Finetune 模型來解決,有點麻煩。

    - 因為其直筒輸出結構,無法直接應用于下游密集任務。

    上述僅僅是對 Transformer 和 ViT 進行簡要分析,在下一篇文章中會進行更加細致的解釋。

    2. 全局概述

    簡單來說,可以分成 3 大塊以及 1 個額外部分,ViT 發(fā)展可以分成三個大方向:

    - Attention-based, 這類算法是目前主流研究改進方向,包括了 Transformer 中最核心的自注意力模塊。

    - MLP-based,這類算法不需要核心的自注意力模塊,而是簡單的通過 MLP 代替,也可以取得類似效果。

    - ConvMixer-based,這類算既不需要自注意力模塊,也不是單純依靠 MLP,而是內部混合了部分 Conv 算子來實現(xiàn)類似功能。

    除了三個大方向,從其他視角出發(fā),又包括一個額外的重要部分:General architecture analysis,在這三類算法基礎上也有很多學者在探討整個 Transformer 架構,其站在一個更高的維度分析問題,不局限于是否包括自注意力模塊,屬于整體性分析。

    注意:本文為概述性總結,所以不會對思維導圖中包括的每篇論文進行分析,其具體分析會在后續(xù)綜述文章中詳細說明。


    Attention-based


    Attention-based 是指改進論文中依然包括 Transformer 所提的 Attention 模塊,可以認為 Attention 是核心。結構圖如下所示:

    圖片

    從 ViT 出發(fā),可以分成兩個部分:

    - 訓練策略方面改進
    - 模型方面改進

    訓練策略方面改進

    如果說 ViT 開創(chuàng)了 Transformer 在視覺任務上面的先河,那么 DeiT 的出現(xiàn)則解決了 ViT 中最重要的問題:如果不采用超大的 JFT-300M 數(shù)據(jù)集進行預訓練,則效果無法和 CNN 媲美。DeiT 核心是引入蒸餾手段加上更強的 Aug 和更優(yōu)異的超參設置。其蒸餾的核心做法如下所示:

    圖片

    額外引入一個蒸餾 Token 用于蒸餾學習,通過大量實驗,作者總結了如下結論:

    - 蒸餾做法確實有效,且 Hard 蒸餾方式效果會更好,泛化性能也不錯。

    - 使用 RegNet 作為教師網絡可以取得更好的性能表現(xiàn),也就是說相比 Transformer,采用卷積類型的教師網絡效果會更好。

    除了上述蒸餾策略,還需要特別注意 DeiT 引入了非常多的 Aug 并且提供了一套更加優(yōu)異的超參,這套參數(shù)也是后續(xù)大部分分類模型直接使用的訓練參數(shù),非常值得學習,如下圖:

    圖片

    DeiT 不是唯一一個解決 ViT 需要大數(shù)據(jù)量問題的算法,典型的還有 Token Labeling,其在 ViT 的 Class Token 監(jiān)督學習基礎上,還對編碼器輸出的每個序列進行額外監(jiān)督,相當于將圖片分類任務轉化為多個輸出 Token 識別問題,并為每個輸入 Patch 的預測 Token 分配由算法自動生成的基于特定位置的監(jiān)督信號,簡要圖如下所示:

    圖片

    從上圖可以看出,相比 ViT 額外多了輸出 Token 的監(jiān)督過程,這些監(jiān)督可以當做中間監(jiān)督,監(jiān)督信息是通過 EfficientNet 或者 NFNet ( F6 86.3% Top-1 accuracy) 這類高性能網絡對訓練圖片提前生成的顯著圖,最終實驗結果表明,性能比 DeiT 更優(yōu)異,而且由于這種密集監(jiān)督任務,對于下游密集預測任務泛化性也更好。

    模型方面改進

    模型改進方面按照模塊分成 6 個部分:

    - Token 模塊,即如何將 Image 轉 Token 以及 Token 如何傳遞給下一個模塊
    - 位置編碼模塊
    - 注意力模塊,這里一般都是自注意力模塊
    - Fead Forward (FFN) 模塊
    - Norm 模塊位置
    - 分類預測模塊

    Token 模塊

    Token 模塊包括兩個部分:

    - Image to Token 模塊:即如何將圖片轉化為 Token,一般來說分成有重疊和無重疊的 Patch Embedding 模塊。

    - Token to Token 模塊:即如何在多個 Transformer 編碼器間傳遞 Token,通常也可以分成固定窗口 Token 化過程和動態(tài)窗口 Token 化兩個過程。

    圖片

    (1) Image to Token

    ViT 和目前主流模型例如 PVT 和 Swin Transformer 等都是采用了非重疊 Patch Embedding,即將圖片切分為不重疊的塊,每個塊單獨進行 Embedding,最終輸出 token 序列。

    重疊 Patch Embedding 和非重疊 Patch Embedding 的主要差異在于窗口是否有重疊,直接將非重疊  Patch Embedding 通過修改 Unfold 或者 Conv 參數(shù)來實現(xiàn)重疊  Patch Embedding 功能的典型算法包括 T2T-ViT  和 PVTv2,這兩個算法的出發(fā)點都是非重疊 Patch Embedding 可以加強圖片 Patch 之間的連續(xù)性,不至于出現(xiàn)信息斷層,性能應該會比重疊 Patch Embedding 高。

    參考 ResNet 等網絡的重疊漸進下采樣策略,也有很多學者考慮引入 Conv Stem 結構來代替重疊 Patch Embedding,典型的如 Early Convolutions Help Transformers See Better 和 Token Learner 的作者,特別是 Early Convolutions Help Transformers See Better 的作者,他從優(yōu)化穩(wěn)定性角度入手,進行了深度分析,通過大量的實驗驗證了上述做法的有效性。作者指出 Patch Embedding 之所以不穩(wěn)定,是因為該模塊是用一個大型卷積核以及步長等于卷積核的卷積層來實現(xiàn)的,往往這個卷積核大小為 16*16,這樣的卷積核參數(shù)量很大,而且隨機性很高,從某種程度上造成了 Transformer 的不穩(wěn)定,如果用多個小的卷積來代替則可以有效緩解。

    Early Convolutions Help Transformers See Better 鏈接:

    https:///abs/2106.14881


    圖片

    (2)  Token to Token

    大部分模型的 Token to Token 方案和 Image to Token 做法相同,但是也有些算法進行了相應改造。經過整理,將其分成兩種做法:

    - 固定窗口 Token 化

    - 動態(tài)窗口 Token 化

    固定窗口是指 Token 化過程是固定或者預定義的規(guī)則,典型的重疊和非重疊  Patch Embedding  就是固定窗口,因為其窗口劃分都是提前訂好的規(guī)則,不會隨著輸入圖片的不同而不同,而動態(tài)窗口是指窗口劃分和輸入圖片語義相關,不同圖片不一樣,是一個動態(tài)過程,動態(tài)窗口 Token 化過程典型代表是 PS-ViT 和 TokenLearner。

    PS-ViT 作者認為 ViT 采用固定窗口劃分機制,然后對每個窗口進行 Token 化,這種做法首先不夠靈活,而且因為圖片本身就是密集像素,冗余度非常高,采用固定劃分方法對于分類來說可能就某幾個窗口內的 Token 實際上才是有意義的,假設物體居中,那么物體四周的 Token 可能是沒有作用的,只會增加無效計算而已。基于此,作者設計了一個自適應采樣的 Token 機制,不再是固定的窗口采樣,而是先初始化固定采樣點,如下圖紅色點所示,然后通過 refine 機制不斷調整這些采樣點位置,最終得到的采樣點所對應的 Token 就是最有代表力的。其完整分類網絡結構圖如下所示:

    圖片

    基于類似出發(fā)點,TokenLearner 提出可以基于空間注意力自適應地學習出更具有代表性的 token,從而可以將 ViT 的 1024 個 token 縮減到 8-16 個 token,計算量減少了一倍,性能依然可以保持一致。

    圖片

    位置編碼模塊

    圖片

    位置編碼模塊是為 Transformer 模塊提供 Patch 和 Patch 之間的相對關系,非常關鍵。按照是否顯式的設置位置編碼向量,可以分成:

    - 顯式位置編碼,其中可以分成絕對位置編碼和相對位置編碼。

    - 隱式位置編碼,即不再直接設置絕對和相對位置編碼,而是基于圖片語義利用模型自動生成能夠區(qū)分位置信息的編碼向量。

    其中顯式位置編碼,可以分成絕對位置編碼和相對位置編碼,并且每一種位置編碼原則上都可以分成固定編碼和可學習位置編碼兩種,而隱式位置編碼是基于圖片語義利用模型自動生成能夠區(qū)分位置信息的編碼向量,一般來說隱式位置編碼對于圖片長度改變場景更加有效,因為其是自適應圖片語義而生成。

    在論文 How much position information do convolutional neural networks encode? 中已經證明 CNN 不僅可以編碼位置信息,而且越深的層所包含的位置信息越多,而位置信息是通過 zero-padding 透露的。既然 Conv 自帶位置信息,那么可以利用這個特性來隱式的編碼位置向量。大部分算法都直接借鑒了這一結論來增強位置編碼,典型代表有 CPVT、PVTv2 和 CSWin Transformer  等。

    基于此,CPVT 作者認為在視覺任務中一個好的位置編碼應滿足如下條件:

    - 模型應該具有 permutation-variant 和 translation-equivariance 特性,即對位置敏感但同時具有平移不變性

    - 能夠自然地處理變長的圖片序列

    - 能夠一定程度上編碼絕對位置信息

    基于這三個原則,CPVT 引入了一個帶有 zero-padding 的卷積 ( kernel size k ≥ 3) 來隱式地編碼位置信息,并提出了 Positional Encoding Generator (PEG) 模塊,如下所示:

    圖片

    算法的整體結構圖如下所示:

    圖片

    除了上述分析的加法隱式位置編碼改進, ResT 提出了另一個非常相似的,但是是乘法的改進策略,結構圖如下所示:

    圖片

    對 Patch Embedding 后的序列應用先恢復空間結構,然后應用一個 3×3 depth-wise padding 1的卷積來提供位置注意力信息,然后通過 sigmoid 操作變成注意力權重和原始輸入相乘。

    自注意力模塊

    Transformer 的最核心模塊是自注意力模塊,也就是我們常說的多頭注意力模塊,如下圖所示:

    圖片

    注意力機制的最大優(yōu)勢是沒有任何先驗偏置,只要輸入足夠的數(shù)據(jù)就可以利用全局注意力學到泛化性能不錯的特征。當數(shù)據(jù)量足夠大的時候,注意力機制是 Transformer 模型的最大優(yōu)勢,但是一旦數(shù)據(jù)量不夠就會變成逆勢,后續(xù)很多算法改進方向都是希望能夠引入部分先驗偏置輔助模塊,在減少對數(shù)據(jù)量依賴的情況下加快收斂,并進一步提升性能。同時注意力機制還有一個比較大的缺點:因為其全局注意力計算,當輸入高分辨率圖時候計算量非常巨大,這也是目前一大改進方向。

    簡單總結,可以將目前自注意力模塊分成 2 個大方向:

    - 僅僅包括全局注意力,例如 ViT、PVT 等

    - 引入額外的局部注意力,例如 Swin Transformer

    圖片

    (1) 僅僅包括全局注意力

    標準的多頭注意力就是典型的空間全局注意力模塊,當輸入圖片比較大的時候,會導致序列個數(shù)非常多,此時注意力計算就會消耗大量計算量和顯存。以常規(guī)的 COCO 目標檢測下游任務為例,輸入圖片大小一般是 800x1333,此時 Transformer 中的自注意力模塊計算量和內存占用會難以承受。其改進方向可以歸納為兩類:減少全局注意力計算量以及采用廣義線性注意力計算方式。

    全局注意力計算量主要體現(xiàn)在 QK 矩陣相似性計算和輸出經過 Softmax 后和 V 相乘部分,想減少這部分計算量,那自然可以采用如下策略:

    - 降低 KV 維度,QK 計算量和 Softmax 后和 V 相乘部分計算量自然會減少,典型的如 PVT。

    - 減低 QKV 維度,主要如果 Q 長度下降了,那么代表序列輸出長度改變了,在減少計算量的同時也實現(xiàn)了下采樣功能,典型的如 MViT。

    PVT 核心是通過 Spatial Reduction 模塊縮減 KV 的輸入序列長度,KV 是空間圖片轉化為 Token 后的序列,可以考慮先還原出空間結構,然后通過卷積縮減維度,再次轉化為序列結構,最后再算注意力,如下圖所示:

    圖片

    MViT 是為視頻任務所設計,其核心思想和 PVT 類似。

    圖片

    其在縮減 KV 空間尺寸的同時,也縮減了 Q 的尺寸,這意味著同時進行了輸出下采樣功能,而且后續(xù)提出的 Imporved MViT 在不同的下游任務提升也顯著。

    (2) 引入額外的局部注意力

    局部注意力是指僅僅計算局部窗口的注意力,而并非全局,可以有效地減少計算量。需要特別注意的是:

    - 引入局部窗口注意力后依然要提供跨窗口信息交互模塊,不可能只存在局部注意力模塊,因為這樣就沒有局部窗口間的信息交互,性能會出現(xiàn)不同程度的下降,也不符合 Transformer 設計思想( Patch 內和 Patch 間信息交互),這個跨窗口信息模塊可以是全局注意力模塊,也可以是任何可以實現(xiàn)這個功能的模塊。

    - 局部窗口計算模式和引入卷積局部歸納偏置增強的劃分依據(jù)是其核心出發(fā)點和作用,而不是從是否包括 Conv 模塊來區(qū)分。

    引入額外局部注意力的典型代表是 Swin Transformer。其將自注意力計算過程限制在每個提前劃分的窗口內部,稱為窗口注意力 Window based Self-Attention (W-MSA),相比全局計算自注意力,明顯可以減少計算量,但是這種做法沒法讓不同窗口進行交互,此時就退化成了 CNN,所以作者又提出移位窗口注意力模塊 Shifted window based  Self-Attention (SW-MSA),示意圖如下所示,具體是將窗口進行右下移位,此時窗口數(shù)和窗口的空間切分方式就不一樣了,然后將 W-MSA 和 SW-MSA 在不同 stage 之間交替使用,即可實現(xiàn)窗口內局部注意力計算和跨窗口的局部注意力計算,同時其要求 stage 個數(shù)必須是偶數(shù)。

    圖片

    Swin Transformer 算法在解決圖片尺度增加帶來的巨大計算量問題上有不錯的解決方案,但是 SW-MSA 這個結構被后續(xù)諸多文章吐槽,主要包括:

    - 為了能夠高效計算,SW-MSA 實現(xiàn)過于復雜
    - SW-MSA 對 CPU 設備不友好,難以部署
    - 或許有更簡單更優(yōu)雅的跨窗口交互機制

    基于這三個問題,后續(xù)學者提出了大量的針對性改進,可以歸納為:

    - 拋棄 SW-MSA,依然需要全局注意力計算模塊,意思是不再需要  SW-MSA,跨窗口交互功能由全局注意力計算模塊代替,當然這個全局注意力模塊是帶有減少計算量功能的,典型的如 Twin 和 Imporved MViT。

    - 拋棄 SW-MSA,跨窗口信息交互由特定模塊提供,這個特定模塊就是改進論文所提出的模塊,典型的如 Shuffle Transformer 和 MSG-Transformer 等。

    - CSWin Transformer 提出一種新的十字形局部窗口劃分方式,具備跨窗口局部注意力計算能力,而不再需要分成 W-MSA 和 SW-MSA 兩個模塊,性能優(yōu)于 Swin Transformer。

    從引入 Conv 歸納偏置角度,也有不少高效的改進,典型的例如 ViTAE 和 ELSA: Enhanced Local Self-Attention for Vision Transformer 。

    ViTAE 包括兩個核心模塊:Reduction Cell (RC) 和 Normal Cell (NC)。RC 用于對輸入圖像進行下采樣并將其嵌入到具有豐富多尺度上下文的 token 中,而 NC 旨在對 token 序列中的局部性和全局依賴性進行聯(lián)合建模,可以看到這兩種類型的結構共享一個簡單的基本結構。

    對于 RC 模塊,分成兩個分支,第一條分支首先將特征圖輸入到不同空洞率并行的卷積中,提取多尺度特征的同時也減少分辨率,輸出特征圖拼接+ GeLU 激活,然后輸入到注意力模塊中,第二條分支是純粹的 Conv 局部特征提取,用于加強局部歸納偏置,兩個分支內容相加,然后輸入到 FFN 模塊中。

    對于 NC 模塊,類似分成兩個分支,第一條是注意力分支,第二條是 Conv 局部特征提取,用于加強局部歸納偏置,兩個分支內容相加,然后輸入到 FFN 模塊中。

    圖片

    而 ELSA 基于一個現(xiàn)狀:Swin Transformer 種所提的局部自注意力(LSA)的性能與卷積不相上下,甚至不如動態(tài)過濾器。如果是這樣,那么 LSA 的重要性就值得懷疑了。

    圖片

    作者以 Swin Tiny 版本為例,將其中的局部窗口注意力模塊 LSA 替換為 DW Conv、decoupled dynamic filter (DDF),從上圖可以看出 DWConv 和 DDF 性能都比 LSA 強的,特別是 DW Conv,在參數(shù)量和 FLOPs 更小的情況下性能會比 Swin Transformer 高。

    作者試圖從兩個角度來統(tǒng)一分析 LSA、DWConv 和 DDF,分別是通道數(shù)設置和空間處理方式 spatial processing,并進行了詳細的對比分析,基于最終發(fā)現(xiàn)提出了改進的增強型 LSA 模塊。

    FFN 模塊

    FFN 模塊比較簡單,主要是進行通道維度的特征變換,主要改進是在引入 Conv 增強局部信息特征信息提取方面。

    圖片

    如下 (b) 和 (c) 所示,引入 1 x 1 卷積和帶 padding 的 3 x 3 DW 卷積來增強局部特征提取能力,實驗結果能夠帶來不少的性能提升。

    圖片

    Norm 位置改動

    Norm 通常是 Layer Norm,按照該模型放在自注意力和 FFN 模塊的前面還是后面,可以分成 pre norm 和 post norm 方式,至于應該選擇 pre norm 還是 post norm,可能需要根據(jù)實驗來選擇。

    圖片

    分類預測模塊

    在 ViT 中通過追加額外一個 Class Token,將該 Token 對應的編碼器輸出輸入到 MLP 分類頭(實際上是一個線性投影層)進行分類。為何不能和我們常規(guī)的圖像分類一樣,直接聚合所有特征,而需要單獨引入一個  Class Token ?這個問題自然有人進一步探索,經過簡單總結,可以歸納為如下結構圖:

    圖片

    其他

    目前,其他包括兩個內容部分,如下圖所示:

    圖片

    主要探討如何輸出多尺度特征圖以及如何訓練更深的 Transformer。

    (1) 如何輸出多尺度特征圖

    在 CNN 時代的各種下游任務例如目標檢測、語義分割中已經被廣泛證明多分辨率多尺度特征非常重要,不同尺度特征可以提供不同的感受野,適合提取不同物體尺度的特征,然而 ViT 僅僅是為圖像分類而設計,無法很好地應用于下游任務,這嚴重制約了視覺 Transformer 的廣泛應用,故迫切需要一種能夠類似 ResNet 在不同 stage 輸出不同尺度的金字塔特征做法。

    ViT 要輸出多尺度特征圖,最常見做法是 Patch Merging,其含義是對不同窗口的 Patch 進行合并,在目前主流的 PVT、Twins、Swin Transformer 和 ResT 中都有廣泛的應用,以 PVT 為例詳細說明,結構圖如下所示:

    圖片

    假設圖片大小是 (H, W, 3),暫時不考慮 batch。

    - 考慮將圖片切割為 HW/(4X4) 個塊,每個塊像素大小是 4x4x3, 此處 stride=4。

    - 將每個 4x4x3 像素塊展開,變成一維向量,然后經過線性投影層,輸出維度變成 C1,此時特征圖 shape 是 (HW/(4X4), C1) 即每個像素塊現(xiàn)在變成了長度為 C1 的向量,這兩個步驟合并稱為 Patch Embedding。

    - 將上一步輸出序列和位置編碼相加,輸入到編碼器中,輸出序列長度不變。

    - 將這個輸出序列恢復成空間結構,其 shape 是 (H/4, W/4, C1),此時特征圖相比原始圖片就下采樣了 4x4 倍。

    - 在下一個 stage 中改變 stride 數(shù)目,然后重復 1-4 步驟就又可以縮減對應 sxs 倍,假設設置 4 個 stage 的 stride 為 [4, 2, 2, 2],那么 4 個 stage 輸出的 stride 就是 [4, 8, 16, 32],這個就和 ResNet 輸出 stride 完全對齊。

    除了上述這種相對樸素的做法,還有一些其他做法。例如 MViT ,其不存在專門的 Patch Merging 模塊,而是在注意力模塊中同時嵌入下采樣功能,如下所示:

    圖片

    只要在每個 stage 中改進 Pool 模塊的 stride 就可以控制實現(xiàn) ResNet 一樣的多尺度輸出,從而實現(xiàn)多分辨率金字塔特征輸出。

    (2) 如何訓練更深的 Transformer

    前述諸多論文都是在 6 層編碼器的 Transformer 中進行改進,不過也有學者探討如何訓練更深的 Transformer,典型算法是 CaiT 和 DeepViT。

    在 CaiT 算法中,作者從 Transformer 架構和優(yōu)化關系會相互影響相互作用的角度出發(fā)進行探討,而 DeepViT 不一樣,他通過分析得出深層 Transformer 性能飽和的原因是:注意力崩塌,即深層的Transformer 學到的 attention 非常相似,這意味著隨著 ViT 的層次加深,self-attention 模塊在生成不同注意力以捕獲多樣性特征方面變得低效。

    CaiT 主要從架構細節(jié)著手

    提出 LayerScale,更合理的 Norm 策略使深層 Transformer 易于收斂,并提高精度。

    提出 class-attention layers,class token 和 patch embedding 在最后融合,并且通過 CA 模塊來更加高效地將patch embedding 信息融合到 class embedding 中,從而提升性能。

    圖片

    DeepViT 從注意力崩塌方面著手,提出了 Re-Attention 層來增加注意力層的多樣性。

    圖片

    其結構圖如下右圖所示:

    圖片

    CaiT 和 DeepViT 都是關注深層 Transformer 出現(xiàn)的過早飽和問題,不過關注的地方不一樣,解決辦法也完全不同,但是效果類似,這或許說明還有很大的改進空間。

    MLP-based


    圖片

    在視覺 Transformer 大行其道碾壓萬物的同時,也有人在嘗試非注意力的 Transformer 架構(如果沒有注意力模塊,那還能稱為 Transformer 嗎)。相比 Attention-based 結構,MLP-based 顧名思義就是不需要注意力了,將 Transformer 內部的注意力計算模塊簡單替換為 MLP 全連接結構,也可以達到同樣性能。典型代表是 MLP-Mixer 和后續(xù)的 ResMLP。

    圖片

    Mixer Layer 中整體結構和 Transformer 編碼器類似,只不過內部不存在自注意力模塊,而是使用兩個不同類型的 MLP 代替,其分別是 channel-mixing MLPs 和 token-mixing MLPs,channel-mixing MLPs 用于在通道 C 方向特征混合,從上圖中的 Channels (每個通道顏色一樣)變成了 Patches (每個通道顏色不一樣)可以明顯看出其做法,而 token-mixing MLPs 用于在不同 patch 塊間進行特征混合,其作用于 patch 方向。

    ConvMixer-based


    圖片

    ConvMixer 的含義是:

    - 不包括自注意力層

    - 不包括 Spatial Mixer MLP 層

    - 包括 Channel Mixer 層,這個層可以是 1x1 的點卷積,或者 MLP 層

    因為 Channel Mixer MLP 層和 1x1 卷積完全等價,所以這里所說的 ConvMixer-based 是強調 Spatial Mixer 層模塊可以替換為 DW 卷積。

    ConvMixer-based 的典型代表是 ConvMixer,其結構圖如下所示:

    圖片

    從 MLP-based 和 ConvMixer-based 中可以看出:ViT 這種架構的成功不在于是使用了自注意力模塊還是 Spatial Mixer MLP,只要有相應的代替結構性能其實都差不多,我們可能要關注整個 Transformer 架構而不僅僅是注意力等模塊,后續(xù)很多論文也慢慢發(fā)現(xiàn)了這點。

    通用架構分析


    前面所提出的 MLP-Mixer 和 ResMLP 已經證明了 ViT 成功的關鍵可能并不是注意力機制,而是來自其他地方或者說整體架構。基于這個出發(fā)點,有大量學者對整個架構進行深入研究,試圖從更高維度的角度來理解 Transformer,如下所示:

    圖片

    其核心觀點和 ResMLP 一致,即 Transformer 模型中自注意力模塊不是最核心的(并不是說可以直接去掉),Transformer 的成功來源其整體架構,同時可以將 Transformer 的 Attention 模塊和 ResMLP 的 Spatial MLP 層統(tǒng)稱為 Token Mixer,進而提出了 MetaFormer 通用結構,Meta 的含義代表 Token Mixer 是一種統(tǒng)稱,只要能夠實現(xiàn) Token Mixer 功能的模型都屬于 MetaFormer 范疇,例如你也可以將 Token Mixer 換成 3x3 DW 卷積。為了驗證這個架構的可行性,作者將  Token Mixer 替換為最簡單的無參數(shù)的 Pooling 算子,發(fā)現(xiàn)效果也是類似的。

    如果說 MetaFormer 還有 Transformer 的影子,那么 ConvNeXt 就是一個更徹底的去 Transformer 的例子了。其核心出發(fā)點是純粹的 Conv 堆疊性能能不能超過 Transformer。ConvNeXt 對 Swin Transformer 進行了逐模塊分解,并且將其應用于 ResNet 上,通過不斷對比兩者差異,作者將 ResNet 改造為 ConvNeXt,性能最終超越 Swin Transformer,證明了純粹的 Conv 堆疊性能能夠超過 Transformer,這也間接說明 Transformer 架構和優(yōu)化策略的優(yōu)異性,而不是所謂的 Attention。

    圖片

    3. 總結

    ViT 的核心在于 Attention,但是整個架構也包括多個組件,每個組件都比較關鍵,有諸多學者對多個組件進行了改進。我們可以簡單將 ViT 結構分成 6 個部分:

    1.Token 模塊,其中可以分成 Image to Token 模塊 和 Token to Token 模塊, Image to Token 將圖片轉化為 Token,通常可以分成非重疊 Patch Embedding 和重疊 Patch Embedding,而  Token to Token 用于各個 Transformer 模塊間傳遞 Token,大部分方案都和 Image to Token 做法一樣即 Patch Embedding,后續(xù)也有論文提出動態(tài)窗口劃分方式,本質上是利用了圖片級別的語義自動生成最有代表性的采樣窗口。

    2.位置編碼模塊,其中可以分成顯式位置編碼和隱式位置編碼,顯式位置編碼表示需要手動設置位置編碼,包括絕對位置編碼和相對位置編碼,而隱式位置編碼一般是指的利用網絡生成自適應內容的位置編碼向量,其提出的主要目的是為了解決顯式位置編碼中所遇到的當圖片尺寸變化時候位置編碼插值帶來的性能下降的問題。

    3.注意力模塊,早期的自注意力模塊都是全局注意力,計算量巨大,因此在圖片領域會針對性設計減少全局注意力,典型做法是降低 KV 空間維度,但是這種做法沒有解決根本問題,因此 Swin Transformer 中提出了局部窗口自注意力層,自注意力計算僅僅在每個窗口內單獨計算,不再存在上述問題。

    4. FFN 模塊,其改進方向大部分是引入 DW 卷積增強局部特征提取能力,實驗也證明了其高效性。

    5. Normalization 模塊位置,一般是 pre norm。

    6. 分類預測模塊,通常有兩種做法,額外引入 Class Token 和采用常規(guī)分類做法引入全局池化模塊進行信息聚合。

    隨著研究的不斷深入,大家發(fā)現(xiàn) Attention 可能不是最重要的,進而提出了 MLP-based 和 ConvMixer-based 類算法,這些算法都是為了說明自注意力模塊可以采用 MLP 或者 Conv 層代替,這說明 Transformer 的成功可能來自整個架構設計。

    MetaFormer,An Empirical Study of CNN, Transformer, and MLP 和 Demystifying Local Vision Transformer 等論文都進一步詳細說明和驗證了上面的說法,并都提出了自己各自的看法。

    從視覺 Transformer 進展來看,目前 CNN 和 Transformer 的邊界已經越來越模糊了,相互可以等價替換,也可以相互增強,特別是 ConvNeXt 的提出更是驗證了這一點。

    下一篇文章會對 Attention-based 進行更加全面深入的總結。敬請期待~

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章

      主站蜘蛛池模板: 97欧美精品系列一区二区| 亚洲偷自拍国综合| 国产AV影片麻豆精品传媒| 男女18禁啪啪无遮挡激烈| 亚洲AV中文无码乱人伦在线观看| 久久99国产精品尤物| 狠狠五月深爱婷婷网| 再深点灬舒服灬太大了网站| 在国产线视频A在线视频| 日产精品99久久久久久| 国产不卡一区二区在线| 军人妓女院BD高清片| 激情综合色综合啪啪开心| A毛片毛片看免费| 国自产偷精品不卡在线| 国产成人午夜精品影院| 久久国产精品波多野结衣AV | 亚洲一区成人av在线| 亚洲爆乳少妇无码激情| 精品一区二区三区不卡| 亚洲欧美日韩中文字幕一区二区三区 | 国产成人AV国语在线观看| 无码国内精品久久人妻| 伊人成伊人成综合网222| 国产一区二区三区不卡在线看| 波多野结衣久久一区二区| 国产在线观看播放av| 中文字幕AV无码一二三区电影| 无套内谢少妇一二三四| 亚洲欧洲中文日韩久久AV乱码| AV极品无码专区亚洲AV| 日韩国产精品无码一区二区三区| 亚洲毛片不卡AV在线播放一区| 欧美福利电影A在线播放| 国产精品国产三级国产试看 | 日本亲近相奷中文字幕| 亚洲处破女AV日韩精品| 好吊妞人成视频在线观看| 国产成人精品视频不卡| 性刺激的欧美三级视频中文字幕 | 亚洲自偷自拍另类小说|