目錄
目錄
1. 背景
2. 方法
2.1 怎么把2D圖像變成1D序列輸入到transformer中
像素?
先提取特征圖?
打成多個(gè)patch
2.2 transformer和卷積網(wǎng)絡(luò)比較
2.3 結(jié)構(gòu)
2.4 cls Vs 全局平均池化
2.5 位置編碼
3 實(shí)驗(yàn)
1. 背景
VIT是基于transformer的在圖像分類(lèi)大放異彩的變體,transformer是VIT的親爹,可以和resnet相媲美
VIT指出混合卷積網(wǎng)絡(luò)是不必要的,純transformer的結(jié)構(gòu)也可以在圖像分類(lèi)里面取得特別好的結(jié)果
開(kāi)啟了一個(gè)新的天地
2. 方法
2.1 怎么把2D圖像變成1D序列輸入到transformer中
但想要在視覺(jué)領(lǐng)域遷移應(yīng)用transformer,一個(gè)最重要的問(wèn)題是怎么去把2D圖像變成1D序列輸入到transformer中
回憶一下transformer,他本質(zhì)是對(duì)輸入的序列元素之間做互動(dòng),得到注意力圖,然后利用自注意力圖去做加權(quán)平均輸出
因?yàn)閮蓛啥家龌?dòng),所以這個(gè)計(jì)算復(fù)雜度是很大的,
而硬件能計(jì)算的序列長(zhǎng)度大概是幾百幾千。比如在經(jīng)典自然語(yǔ)言的transformer Bert中是512長(zhǎng)度。
像素?
所以如果我們直接把圖像里的每一個(gè)像素點(diǎn)當(dāng)作一個(gè)序列元素的話,會(huì)導(dǎo)致序列特別長(zhǎng),比如一張224*224=50176的序列長(zhǎng)度,是Bert的500倍。
先提取特征圖?
之前也有一些在CV領(lǐng)域的transformer工作,但他們?yōu)榱私档瓦@種復(fù)雜度,是引入了卷積等操作提取特征圖,再把特征圖拉長(zhǎng)為序列輸入,或者只在圖片的一小片區(qū)域做自注意力。
但是作者覺(jué)得NLP在自然領(lǐng)域的可擴(kuò)展性很強(qiáng),他們也想在CV領(lǐng)域做同樣的事情,想盡可能少的改動(dòng)網(wǎng)絡(luò)結(jié)構(gòu),但是老問(wèn)題回來(lái)了,序列太長(zhǎng)怎么辦?
打成多個(gè)patch
把一個(gè)圖片打成很多個(gè)patch
比如對(duì)于一張圖片224*224 打成16 * 16大小的patch,每一個(gè)patch展成序列的長(zhǎng)度就是196 ,把他當(dāng)作一個(gè)單詞,作為序列的元素輸入transformer
2.2 transformer和卷積網(wǎng)絡(luò)比較
transformer和卷積網(wǎng)絡(luò)相比,缺少一定的歸納偏置,一種先驗(yàn)知識(shí)
(1)locality 假設(shè)相鄰區(qū)域會(huì)有相鄰特征,靠的越近的東西相關(guān)性越強(qiáng)
(2)平移不變性。無(wú)論是先做平移還是先做卷積都是一樣的。
所以有了這兩個(gè)假設(shè),我們可以把卷積核看作一個(gè)模板,不管一個(gè)物體移到哪里,遇到同樣的卷積核都會(huì)有相同的輸出。
有了先驗(yàn)信息,卷積網(wǎng)絡(luò)就需要較少的數(shù)據(jù)去學(xué)習(xí)。但是transformer沒(méi)有這樣的先驗(yàn)信息,所以就需要更大的數(shù)據(jù)集才能達(dá)到比較好的效果
總結(jié)來(lái)看
transformer需要較大的數(shù)據(jù)集,才能取得和CNN相媲美的結(jié)果
2.3 結(jié)構(gòu)
借鑒Bert的輸出,VIT加一個(gè)特殊cls Token 和其他的patch做交互進(jìn)而輸出分類(lèi)信息,我們相信cls Token可以學(xué)習(xí)到整張圖片的信息,可以看做一個(gè)整體特征,因而我們只需要根據(jù)cls Token的信息 做最后的Mlp輸出即可
我們舉一個(gè)例子,把VIT的前向過(guò)程走一編
(1)假設(shè)我們輸入圖片X維度為 224×224×3 (長(zhǎng),寬,通道)
(2)將一張圖片打成多個(gè)圖像塊(patch)
如果我們使用16×16的圖像塊大?。╬atch_size),可以得到多少圖像塊呢?
?
意味著有196個(gè)圖像塊,也就是196個(gè)token
此時(shí)每一個(gè)token維度 16×16×3=768
到此我們就把原來(lái)的一張圖片 224×224×3 變成了 196×768了
(3)經(jīng)過(guò)線性投射層
輸入維度是(2)中我們算出來(lái)的768
輸出維度可以調(diào)整,論文中還是768
所以最后經(jīng)過(guò)線性投射層投射之后輸出還是為196×768
(4)和特殊cls token合并
合并后輸出為197×768
(5)加上位置編碼信息
直接加
輸出還是為197×768
2.4 cls Vs 全局平均池化
不一定非得用這里的cls Token,也可以做全局平均池化
但是得好好調(diào)參,否則全局平均池化效果就不如cls Token
2.5 位置編碼
位置編碼可以是1d 的
也可以是2d的
或者是相對(duì)位置編碼
在本篇文章差異不大
讀完這篇文章,應(yīng)該明白
?
transformer對(duì)比卷積的優(yōu)勢(shì),劣勢(shì)?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-670174.html
VIT結(jié)構(gòu)中,如果輸入圖像是224*224,打成16 *16的patch,頭個(gè)數(shù)12,分析他每一層的形狀是什么樣子的?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-670174.html
3 實(shí)驗(yàn)
灰色的線條是Resnet 從下到上有一個(gè)范圍
如Resnet50到Resnet152這樣一個(gè)范圍
彩色的圓點(diǎn)是VIT
從左到右數(shù)據(jù)集依次增大
在數(shù)據(jù)集較小的情況下卷積Resnet要優(yōu)于vit 中等數(shù)據(jù)集情況下,Renet和vit差不多,大規(guī)模數(shù)據(jù)集vit更好
讀完這篇文章,應(yīng)該明白
transformer對(duì)比卷積的優(yōu)勢(shì),劣勢(shì)?
VIT結(jié)構(gòu)中,如果輸入圖像是224*224,打成16 *16的patch,頭個(gè)數(shù)12,分析他每一層的形狀是什么樣子的?
到了這里,關(guān)于VIT 論文精讀 | transformer架構(gòu)引入CV的開(kāi)創(chuàng)性工作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!