# [Transformer_CV] Vision Transformer(ViT)重點筆記 ###### tags: `Literature Reading` `Transformer` `ViT` `Vision Transformer` ### [AI / ML領域相關學習筆記入口頁面](https://hackmd.io/@YungHuiHsu/BySsb5dfp) --- ### 論文亮點 :::success 首度完全捨棄CNN,將transformer結構應用於CV領域的,後續ViT相關改進大抵基於這篇論文 ::: #### 原始論文:[An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://arxiv.org/abs/2010.11929) #### 模型主架構 ![](https://i.imgur.com/1PNfjqR.png =600x) - 圖1:模型概述。我們將圖像分割成固定大小的圖像塊(image patch/token),對每個圖像塊進行線性嵌入並添加位置資訊,並將得到的向量序列送入一個標準的Transformer編碼器。 - *為了進行分類,論文中使用標準的方法,在序列中加入一個額外的可學習的"分類標記 "到序列中。Transormer Encoder的圖示靈感來自於Vaswani等人(2017)。 - 相對於NLP領域的每個輸入單位使用的是Word Embedding,本篇論文提出了Patch Embedding作法,將影像切分為圖塊向量 #### ViT演算法 ![](https://i.imgur.com/dMU1tvL.png =600x) - Embedding : - 在把影像資料送入encoder前,需要先將其轉換為類似nlp模型中、類似sequence的形式 - Embedding - 形式如下:$z_0 = [x_{class}; x^1_pE;x^2_pE;... ;x^N_pE] + E_{pos}$ - 圖塊 ==$x^N_pE$== - $x ∈ R^{H×W ×C}$ - 把三維(H×W ×C)的圖塊,線性投影攤平為 N個($P^2.c$) X $D$的2維向量 - $N = HW/P$ - 類別 ==$x_{class} = z^0_0$== - Extra learnable [class] embedding - a learnable embedding to the sequence of embedded patches - 額外的可學習的類別嵌入,放置在序列最前端 - 與序列(sequence)中所有的patch(token)做矩陣運算,獲得與所有patch的相關性資訊 - 位置 ==$E_{pos}$== - 共享、可學習的1D權重,與所有的Patch Embedding相加 - standard learnable 1D position embeddings - Transormer Encoder - 包含兩個重要模組:==多頭注意力($MSA$)、全連接層($MLP$)== - Norm的位置與原版Transormer Encoder略有不同 - 內含Layernorm (LN) + 殘差跳接residual connections - MLP: two layers with a GELU - 最後的 ==$LN(z^0_L)$== - 來自於最後一層的類別向量$z^0_L$(shape: batch,N)。cls_token - 亦即匯聚了所有PATCH資訊的類別編碼 - 經過Layer Norm得到預測輸出 - (Global Ave Pooling):CNN #### 卷積網路與ViT模型的歸納偏差 Inductive Biases :::info - 什麼是Inductive Biases? - 歸納(Induction)指的是從觀察中尋找共同點、形成通用規則的過程;偏差(Bias)是指我們對模型的偏好 - 因此歸納偏差可以理解為,從現實生活中觀察到的現像中歸納出一定的規則(heuristics),然後對模型做一定程度的前提假設 - 在機器學習領域中,:pencil2:**對資料特性的假設**,用於引導模型學習特定的模式或結構 - 從機率角度來看 - 在機率論中,Inductive biases可以被看作是先驗知識(prior knowledge)對學習過程的影響。比如,在貝葉斯統計(Bayesian statistics)中,通常會有一個先驗分佈(prior distribution),這代表了對某事發生的初始信念 - 當新資料進來時,根據這些資料更新我們的信念,形成後驗分佈(posterior distribution)。Inductive biases就像這個先驗分佈,幫助模型在面對新資料時,能夠更有效地進行學習和預測 - 在統計模型中,像經典的ANOVA(變異數分析),常常會做出某些假設,比如資料遵循常態分佈。這些假設實際上就是一種inductive biases ::: - 在機器學習領域 1. **KNN(K-Nearest Neighbors)**: - 假設:資料的特徵空間中相鄰的樣本傾向於屬於同一類 - 即在特徵空間中距離接近的點具有相似的屬性或類別 2. **SVM(Support Vector Machines)**: - 假設:資料可以被分類器最大化類別邊界距離 - SVM傾向於找到一個最大化不同類別之間邊界的分類器 3. **CNN(Convolutional Neural Nkerneletworks)**: - 假設:圖像中相鄰的像素彼此相關,kernel參數共享則假設學習到的特徵在整個圖像中是通用的 - locality和spatial invariance: 即空間相近的pixel有關聯而遠的沒有 4. **RNN(Recurrent Neural Networks)**: - 假設:文字序列前後文之間有關聯性 - sequentiality和time invariance是RNN設計的關鍵,允許模型理解和預測序列數據中的時間關聯性 - Inductive Biase的作用 - 提升泛化能力:Inductive Biases:pencil2:**透過增加一定的偏差**,幫助模型不僅適用於訓練時的數據集,還能適應其他不同的資料分佈。這種泛化(generalization)能力對於模型處理新場景和數據至關重 - 防止過擬合::pencil2:**透過引入合理的假設和限制**,Inductive Biases減少了模型過度學習訓練數據中的雜訊,從而避免了過度擬合(overfitting)。這讓模型能更好地預測未知數據,而不僅僅是記住訓練 - 例如下圖中有6個點,要如何用具有通則性的模型(曲線)去預測它的分布位置 - 實線是加了一定約束條件的偏差才能使得曲線更為簡單、通用 ![](https://i.imgur.com/xuDv5y9.png =200x) - 參考資料 - [如何理解Inductive bias?](https://www.zhihu.com/question/264264203) :::spoiler >- 歸納(Induction)是自然科學中常用的兩大方法之一(歸納與演繹, induction and deduction),指的是從一些例子中尋找共性、泛化,形成一個比較通用的規則的過程;偏置(Bias)是指我們對模型的偏好。因此,歸納偏置可以理解為,從現實生活中觀察到的現像中歸納出一定的規則(heuristics),然後對模型做一定的約束,從而可以起到“模型選擇”的作用,即從假設空間中選擇出更符合現實規則的模型。其實,貝葉斯學習中的“先驗(Prior)”這個叫法,可能比“歸納偏置”更直觀一些。 >- 歸納偏置在機器學習中幾乎無處不可見。老生常談的“奧卡姆剃刀”原理,即希望學習到的模型複雜度更低,就是一種歸納偏置。另外,還可以看見一些更強的一些假設:KNN中假設特徵空間中相鄰的樣本傾向於屬於同一類;SVM中假設好的分類器應該最大化類別邊界距離;等等。 ::: - [归纳偏置和选择性偏差](https://www.cnblogs.com/Lee-yl/p/13272259.html) > - Inductive bias是關於目標函數的必要假設。 > - 在機器學習中,很多學習算法經常會對學習的問題做一些假設,這些假設就稱為歸納偏置(Inductive Bias)。 > - 歸納偏置的作用是使得學習器具有了泛化的功能。 ##### 原論文中關於CNN與ViT在卷積的歸納偏差 Convolutional Inductive Biases ###### inductive bias 原論文中的討論 :::spoiler p.4 > We note that Vision Transformer has much less image-specific inductive bias than CNNs. In CNNs, locality, two-dimensional neighborhood structure, and translation equivariance are baked into each layer throughout the whole model. In ViT, only MLP layers are local and translationally equivariant, while the self-attention layers are global. The two-dimensional neighborhood structure is used very sparingly: in the beginning of the model by cutting the image into patches and at fine-tuning time for adjusting the position embeddings for images of different resolution (as described below). Other than that, the position embeddings at initialization time carry no information about the 2D positions of the patches and all spatial relations between the patches have to be learned from scratch. ::: ###### 白話理解 - 與CNN相比,ViT模型對於圖像的特定歸納偏差/前提假設要小的多 - 在CNN的Inductive Biases可理解為locality(區域性)和spatial invariance(空間不變性) - locality - 即空間相近的像素關聯性相對遠距離的像素來的高, - spatial invariance - 空間不變性則可從kernel的權重共享來理解,在圖像中不同位置如果出現多個特徵,例如貓眼、鳥羽等,可以由同一個共享權重的kernal抓出 - 在ViT則缺乏這些假設,亦即ViT模型的自由度高出CNN很多 - 後來也有論文用數學推導,證實CNN的固定kernel可視為一種Transformer架構的特例( 參考來源待補) - ViT的self-attention矩陣運算可視為一種經由計算影像圖塊全局相關性後,由模型自行決定kernel尺寸的過程 ##### 關於CNN卷機操作的空間約束 - 卷積操作施加了兩個重要的空間約束,促進了視覺特徵的學習。 - 由於權重共享,從卷積層中提取的特徵具有平移不變性(Translation Invariance),它們對特徵的全局位置不敏感,相反,CNN對於特徵(紋理)是否存在較為敏感。 - 由於卷積操作單元的性質,從卷積層中提取的特徵是局部敏感的,每一個操作都只考慮到圖像的局部區域。 - 不過,卷積的歸納偏向,缺乏對圖像本身的全局理解。它們在提取視覺特徵方面很出色,但它們無法對它們之間的依賴關係進行建模。 - CNN善於捕捉局部特徵 ![](https://i.imgur.com/RJnKBHr.png =300x) [Is this the end for Convolutional Neural Networks?](https://towardsdatascience.com/is-this-the-end-for-convolutional-neural-networks-6f944dccc2e9) - 用ImageNet訓練的CNN模型更傾向於通過紋理分類圖像 - 大象的紋理+貓的輪廓。 ![](https://i.imgur.com/5yvFwCY.png =400x) [ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness](https://arxiv.org/abs/1811.12231) - ViT 和 ResNet 之間的主要區別之一是初始層的大視野。 - 各層視野域 ![](https://i.imgur.com/dhEY2p2.png =400x) - 參考資料 - [Vision Transformers和CNN看到的特征是相同的吗?](https://www.163.com/dy/article/GM3LQ15M0531D9VR.html) - [正面刚CNN,Transformer居然连犯错都像人类](https://www.qbitai.com/2022/01/32007.html) - [Transformers in Computer Vision: Farewell Convolutions!](https://towardsdatascience.com/transformers-in-computer-vision-farewell-convolutions-f083da6ef8ab) #### ViT (vision transformer)幾個特點 ##### 具有良好拓展性與計算效率優良 - 參數數量 ![](https://i.imgur.com/YM11mCy.png =300x) - Benchmark表現與計算效率 - 首個以純transformer架構取得優於CNN模型的表現 - 在表現相近/效能超越的情況下,佔用的計算資源(TPUv3 core days)大大減少 - ResNet152x4,在相同的JFT-300M資料集上預訓練) ![](https://i.imgur.com/pJngSDz.png =500x) ##### 性能受數據集大小影響 - 數據集大小對模型性能的影響。當預訓練數據集的大小較小時,ViT的表現並不好,當訓練數據充足時,它的表現優於以前的SOTA ![](https://i.imgur.com/ME7LZEm.png =500x) ##### 不同模型架構的效能與計算成本 ![](https://i.imgur.com/EmzNNrq.png =500x) - 以上實驗表明: - 純Transformer架構(ViT)在大小和計算規模上都比傳統的CNNs (ResNet BiT)更具效率和可擴充套件性 - 混合架構(CNNs + Transformer)在較小的模型尺寸下效能優於純Transformer,當模型尺寸較大時效能非常接近 #### ViT參考資料 - [[论文阅读] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://blog.csdn.net/qq_40714949/article/details/119150965) - 推薦學習資源 - 文章 - [Vision Transformer , Vision MLP 超详细解读 (原理分析+代码解读) (目录)](https://zhuanlan.zhihu.com/p/348593638) - [計算機視覺中的Transformer - 知乎](https://zhuanlan.zhihu.com/p/345557138) - 影片 - [李沐_ViT论文逐段精读【论文精读】](https://www.youtube.com/watch?v=FRFt3x0bO94&list=PLFXJ6jwg0qW-7UM8iUTj3qKqdhbQULP5I&index=9) - [AI Coffee Break with Letitia_Vision Transformers explained](https://www.youtube.com/playlist?list=PLpZBeKTZRGPMddKHcsJAOIghV8MwzwQV6) - [An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (Paper Explained)](https://www.youtube.com/watch?v=TrdevFK_am4) ### ViT家族與近期進展 #### [2101.01169 Transformers in Vision: A Survey](https://arxiv.org/abs/2101.01169) ![](https://i.imgur.com/P73jlcl.png =400x) 圖: 自注意力空間設計分類 > 卷積運算是計算機視覺中使用的傳統深度神經網絡的主力,它帶來了解決在例如高維度數據集ImageNet [52]上的複雜圖像識別任務 的突破。然而,卷積也有其缺點,例如,它在固定大小的窗口上運行,因此無法捕獲長距離依賴關係,例如給定視頻中空間和時間域中像素之間的任意關係。此外,卷積濾波器權重在訓練後保持固定,因此操作無法動態適應輸入的任何變化。在本節中,我們回顧了通過使用自註意力操作和 Transformer 網絡(一種特定形式的自注意力)來緩解傳統深度神經網絡中上述問題的方法。 #### [2111.06091 A Survey of Visual Transformers](https://arxiv.org/abs/2111.06091) - [中國科學院等發佈最新Transformer綜述](https://new.qq.com/omn/20211126/20211126A04PKT00.html) > Transformer 是如何打通語言和視覺的? > > ...因此,將 Transformer 用到視覺任務中的關鍵是建立圖像到矢量的轉換,並保持圖像的特點。例如,ViT[27]藉助強鬆弛條件將圖像轉換爲包含多個低水平信息的 patch 嵌入,Early Conv. [50] 和 CoAtNet [37] 利用卷積提取高級信息,同時降低 patch 的冗餘特徵。 > > 從卷積的角度來看,其歸納偏置主要表現爲局部性、平移不變性、權重共享和稀疏連接。這類簡單的卷積核可以有效地執行模板匹配,但由於歸納偏置強,其上界要低於 Transformer。 > > ... > > 從 Transformer 的角度來看,Dong 等人證明,當在沒有短連接或 FFN 的深層上訓練時,自注意力層表現出強大的「token uniformity」歸納偏置。結果表明,Transformer 由兩個關鍵部分組成:一個聚合 token 之間關係的自注意力層;一個提取輸入特徵的 position-wise FFN。雖然 Transformer 具有強大的全局建模能力,卷積可以有效地處理低級特徵[37],[50],增強 Transformer 的局部性[45],[70],並通過填充(padding)來附加位置特徵 ![](https://i.imgur.com/Dv3SxlS.png =500x) - Vision Transformer_架構分類 ![](https://i.imgur.com/8Vko8dg.png) - Vision Transformer_嵌入分類 > Transformer 模型利用可学习嵌入来执行不同的视觉任务。从监督任务的视角来看,这些嵌入可以被分为类 token、对象、查询和掩码嵌入。 #### 學習資源 - [关于Vision Transformer (ViT),你想知道的都在这里了!ViT近期进展整理](https://www.bilibili.com/video/BV1MK4y1Z7fb?spm_id_from=333.999.0.0) - [影片大綱]() ![](https://hackmd.io/_uploads/rkaOdkWx9.png =700x) ## Deep Learning相關筆記 ### Self-supervised Learning - [[Self-supervised] Self-supervised Learning 與 Vision Transformer重點筆記與近期發展](https://hackmd.io/7t35ALztT56STzItxo3UiA) - [[Time Series] - TS2Vec(Towards Universal Representation of Time Series) 論文筆記](https://hackmd.io/OE9u1T9ETbSdiSzM1eMkqA) ### Object Detection - [[Object Detection_YOLO] YOLOv7 論文筆記](https://hackmd.io/xhLeIsoSToW0jL61QRWDcQ) ### ViT與Transformer相關 - [[Transformer_CV] Vision Transformer(ViT)重點筆記](https://hackmd.io/tMw0oZM6T860zHJ2jkmLAA) - [[Transformer] Self-Attention與Transformer](https://hackmd.io/fmJx3K4ySAO-zA0GEr0Clw) - [[Explainable AI] Transformer Interpretability Beyond Attention Visualization。Transformer可解釋性與視覺化](https://hackmd.io/SdKCrj2RTySHxLevJkIrZQ) - [[Transformer_CV] Masked Autoencoders(MAE)論文筆記](https://hackmd.io/lTqNcOmQQLiwzkAwVySh8Q) ### Autoencoder相關 - [[Autoencoder] Variational Sparse Coding (VSC)論文筆記](https://hackmd.io/MXxa8zesRhym4ahu7OJEfQ) - [[Transformer_CV] Masked Autoencoders(MAE)論文筆記](https://hackmd.io/lTqNcOmQQLiwzkAwVySh8Q)