初識 CV Transformer 之Vision Transformer (ViT)

進階媛小吳 2021-08-15 21:13:10 阅读数:49

本文一共[544]字,预计阅读时长:1分钟~
cv transformer vision transformer vit

沒有征服不了的高山

0 回顧

Attention Is All You Need

RNN、LSTM時序網絡,存在一定的問題:1.記憶長度有限,像RNN記憶時序比較短,後面就提出了LSTM;2.無法並行化,即只有計算完t0時刻才能計算t1時刻,計算效率比較低。

Google提出了Transformer,在理論上不受硬件的限制,記憶長度可以無限長,並且可以並行化。

Embedding層有什麼用?

Eembedding層, Keras中文文檔中對嵌入層 Embedding的介紹除了一句 “嵌入層將正整數(下標)轉換為具有固定大小的向量”之外就不願做過多的解釋。那麼我們為什麼要使用嵌入層 Embedding呢? 主要有這兩大原因:

1、使用One-hot方法編碼的向量會很高維也很稀疏。假設我們在做自然語言處理(NLP)中遇到了一個包含2000個詞的字典,當使用One-hot編碼時,每一個詞會被一個包含2000個整數的向量來錶示,其中1999個數字是0,如果字典再大一點,這種方法的計算效率會大打折扣。

2、訓練神經網絡的過程中,每個嵌入的向量都會得到更新。通過上面的圖片我們就會發現在多維空間中詞與詞之間有多少相似性,這使我們能可視化的了解詞語之間的關系,不僅僅是詞語,任何能通過嵌入層 Embedding 轉換成向量的內容都可以這樣做。

上面說的概念可能還有些不清楚,那我們就舉個例子看看嵌入層Embedding對下面的句子怎麼處理的。Embedding的概念來自於word embeddings,如果您有興趣閱讀更多內容,可以查詢word2vec。

圖片來自:A Survey on Visual Transformer

1 前言

論文題目:An Image is Worth 16x16 Words:Transformers for Image Recognition

研究背景

Transformer提出後在NLP領域中取得了極好的效果,其全Attention的結構,不僅增强了特征提取能力,還保持了並行計算的特點,可以又快又好的完成NLP領域內幾乎所有任務,極大地推動自然語言處理的發展。

雖然Transformer很强,但在其在計算機視覺領域的應用還非常有限。在此之前只有目標檢測(Objectdetection)中的DETR大規模使用了Transformer,其他領域很少,而純Transformer結構的網絡則是沒有。

下圖是該方向論文必出現的圖:

Transformer的優勢

1、並行計算;

2、全局視野;

3、靈活的堆疊能力;

研究成果及意義

ViT和ResNet Baseline取得了不相上下的結果

JFT:穀歌閉源數據集,規模是ImageNet的30倍左右

ViT-H/14:ViT-Huge模型,輸入序列14x14

ViT的曆史意義:展示了在計算機視覺中使用純Transformer結構的可能。

   圖片→Backbone(CNNs)→Transformer→結果

   圖片→Transformer→結果

2 論文算法模型總覽

一切的開端:Self-Attention

Attention是什麼?以機器翻譯為例。

每次輸出只與輸入的某幾個詞有關,關系深,權重大,關系淺,權重小。

Attention Mechanism

Attention的本質:加權平均

Attention的計算:實際上就是相似度計算

Self-Attention怎麼計算?

Self Attention 計算:實際上是在進行相似度計算,計算每個q分別和每個k的相似度

公式:

Q,K,V是什麼?

Query:查詢,詢問;

Key:鍵值,關鍵詞;

Value:價值,數值。

點積為什麼可以衡量q與k的相似度?

公式:q1·k1= |q1| x |k1| x cos

            q1·k2= |q1| x |k2| x cos

Attention計算

假設的input是x1-x4,是一個sequence,每一個input (vector)先乘以矩陣W得到embedding,即向量a1-a4。接著這個embedding進入self-attention層,每一個向量a1-a4分別乘上3個不同的transformation matrix Wq,Wk,Wv,以向量a1為例,分別得到3個不同的向量q1,k1,v1;接下來使用每個query q去對每個key k做attention,attention就是做點積,匹配這2個向量有多接近,然後除以q和k的維度的開平方。

MultiHead Attention

ViT結構

受NLP中Transformer擴展成功的啟發,我們嘗試將一個標准的Transformer直接應用於圖像,並盡可能少地進行修改。為此,我們將圖像分割成補丁,並將這些補丁的線性嵌入序列作為轉化器的一個輸入。圖像斑塊的處理方式與NLP應用中的記號(單詞)相同。我們以監督的方式訓練圖像分類的模型。

1、將圖像切分轉化為序列化數據:原本HxWxC維的圖片被轉化為N個 D維的向量(或者一個NxD維的二維矩陣);

2、Position Embedding:采用position embedding(紫色框) + patch embedding(粉色框)方式來結合position信息;

3、Learnable Embedding:Xclass(帶星號的粉色框)是可學習的vector,這個token沒有語義信息(即在句子中與任何的詞無關,在圖像中與任何的patch無關),它與圖片label有關,經過encoder得到的結果使得整體錶示偏向於這個指定embedding的信息;

4、Transformer Encoder:將前面得到的Z0作為transformer的初始輸入,transformer encoder是由多個MSA和MLP塊交替組成的,每次在MSA和MLP前都要進行LN歸一化。

比特置編碼 Positional Encoding

為什麼要比特置編碼?

圖像切分重排(由二維變一維)後失去了比特置/空間信息,並且Transformer的內部運算是空間信息無關的,所以需要把比特置信息編碼重新傳進網絡;

ViT使用了一個可學習的vector(Xclass)來編碼,編碼vector和patch vector直接相加組成輸入;

為什麼直接相加,而不是concat?

因為相加是concat的一種特例

相加形式:W(I+P)=WI+WP

concat形式:

當W1=W2時,兩式內涵一致

BN和LN的區別

為什麼采用LN?

LN其實就是在每個樣本上都計算均值和方差,將輸入數據轉化成均值為0,方差為1的數據。而不采用BN是因為,Batch Normalization的處理對象是對一批樣本,是對這批樣本的同一維度特征做歸一化,Layer Normalization 的處理對象是單個樣本,是對這單個樣本的所有維度特征做歸一化,而此處輸入的N+1個序列,每個序列的長度可能是不同的。

3 實驗結果分析

先在大數據集上預訓練,然後到小數據集上Fine Tune

遷移過去後,需要把原本的MLP Head換掉,換成對應類別數的FC層,處理不同尺寸輸入的時候需要對Positional Encoding的結果進行插值

在中等規模的數據集上(例如ImageNet),transformer模型的錶現不如ResNets;

而當數據集的規模擴大,transformer模型的效果接近或者超過了目前的一些SOTA(state of the art)結果。

BiT : 一個大ResNet進行監督+遷移學習的模型

Noisy Student:一個半監督學習的EfficientNet-L2

ViT-H/14:ViT-Huge模型,輸入序列14x14

Attention距離和網絡層數的關系。Attention的距離可以等價為Conv中的感受野大小,層數越深,Attention跨越的距離越遠,但是在最底層,也有的head可以覆蓋到很遠的距離。這說明Transformer可以進行Global信息整合。

版权声明:本文为[進階媛小吳]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815211248034Y.html