官术网_书友最值得收藏!

1.3.2 ViT模型架構

ViT受Transformer模型在NLP領域的可擴展性啟發(fā),將一個標準的Transformer模型直接作用于圖像,盡量做最少的修改。這樣做的好處之一是可以開箱即用地使用Transformer模型在NLP領域的體系結構和高效實現。

為了解決序列太長的問題,如圖1-32所示,ViT將一個圖像切分成多個小的圖像塊(patch,或稱補丁),然后通過一個嵌入層對這些小塊進行線性投影,使一個小塊對應輸入序列中的一個元素,然后將其輸入Transformer的編碼器中。輸入圖像的分辨率為224×224像素,切分后的圖像小塊的分辨率為16×16像素,此時的序列長度為(224/16)×(224/16)=196,每個元素的維度就是16×16×3=768,這對于一般的機器來說是可以接受的訓練Transformer模型的長度。

切分這個操作可以通過卷積來實現,雖然原論文中并沒有這樣實現,但是通過卷積進行維度變換是一個很巧妙的操作。如上述,我們的目的是將一個224×224×3的矩陣變換成一個196×768的矩陣,那么可以通過對原圖進行卷積操作來實現,卷積核大小為16×16×3,步長為16,padding為0,經過卷積運算后,會得到維度為14×14×768的特征圖,然后按照前面兩個維度進行展開,就得到了196×768的矩陣。

在輸入Transformer模型之前,ViT借鑒了BERT的分類方法,在輸入序列的前面拼接了一個特殊的可以學習的詞元(CLS)來表示分類結果。之所以這樣做,是因為ViT只有編碼器而沒有解碼器,因此編碼器也要起到一定的解碼器輸出的作用,那么額外添加的這個詞元就可以理解為開啟解碼的標志,類似于標準的Transformer解碼器在對輸入進行嵌入時右移一位的操作。由于在計算注意力時是所有元素之間兩兩計算,因此這個特殊的詞元在訓練的過程中也能夠提取到圖像全局的特征。最終輸入Transformer模型的矩陣維度為(196+1)×768,而輸出時則通過切片操作將第一個CLS詞元取出,其維度是1×768,接著通過一個簡單的MLP頭進行分類即可。

圖1-32 ViT模型架構

在計算注意力分數時,輸入元素兩兩之間都需要進行計算,所以說得到的注意力矩陣并不存在順序問題。但是對于圖像來說,它是一個整體,切分后的圖像也是有位置信息的,并不能隨意組合。類似于NLP任務,ViT在對圖像進行分塊映射時,也加入了位置編碼(Position Embedding,或稱位置嵌入)。

最終ViT的模型結構如圖1-32所示,ViT中的編碼器層與Transformer中的編碼器層類似。分塊圖像的嵌入或者上一個編碼器層的輸出,首先會通過一個標準化層,然后通過一個多頭注意力層,在這之后會加入一個殘差連接,再通過一個標準化層和一個MLP層,最后再加入一次殘差連接。

在形式上,對于任意一個圖像,其中(HW)表示圖像的分辨率,C表示顏色通道的數量,首先需要將其切分成的圖像塊序列,其中(PP)表示圖像塊的分辨率,表示切分后圖像塊的個數。對于每個圖像塊,還需要通過線性變換將其轉換成向量的形式,并且拼接上表示分類的詞元,最后加上位置編碼,即

其中D表示向量維度。接下來就是L層編碼器操作,在每一層中,“標準化+多頭注意力+殘差連接”可以表示為

再經過“標準化+MLP+殘差連接”,表示為

經過多次編碼提取特征后,我們對最后一層的輸出進行切片,取第一個詞元的向量,再經過一次標準化后分類:

編碼器的每一層會重復L次,每次在注意力層都對輸入序列中的每個圖像塊進行上下文相關的特征編碼,捕獲圖像塊之間豐富的空間關系。在圖像上應用注意力機制使得ViT能夠整合整個圖像的信息,如圖1-33所示,根據多頭注意力權重計算圖像空間中信息整合的平均距離,類似于卷積神經網絡中的感受野大小。可以發(fā)現,在剛開始時,有的注意力頭之間的距離很近,而有的注意力頭之間的距離很遠,這說明一開始模型可以關注全局信息。隨著網絡深度的增加,多頭之間的距離在變大,這說明網絡已經不再通過鄰近像素點獲取特征,而是已經學習到了高層的語義信息。

圖1-33 ViT中多頭注意力權重對應的空間信息整合距離隨網絡深度變化示意

整體來看,ViT的模型架構也是相當簡潔的,它的特殊之處就在于把圖像處理為Transformer編碼器能夠接收的輸入序列。

主站蜘蛛池模板: 即墨市| 白山市| 湖州市| 阿拉善右旗| 双江| 横峰县| 酉阳| 抚州市| 南川市| 镇巴县| 历史| 漯河市| 许昌县| 金门县| 和龙市| 福建省| 绩溪县| 溧水县| 灵璧县| 栾城县| 崇信县| 贵阳市| 高要市| 开原市| 环江| 兴义市| 玉山县| 都兰县| 房山区| 铜梁县| 涿州市| 兴业县| 沈阳市| 工布江达县| 浦城县| 凭祥市| 稷山县| 都匀市| 稷山县| 湖口县| 屏山县|