LeViT

LeViT: a Vision Transformer in ConvNet’s Clothing for Faster Inference

https://github.com/facebookresearch/LeViT

https://mp.weixin.qq.com/s/XPN_9w8doyAdGQJft6BR1Q

https://arxiv.org/abs/2104.01136v2

摘要:我們?cè)O(shè)計(jì)了一系列圖像分類(lèi)架構(gòu),優(yōu)化了在高速狀態(tài)下準(zhǔn)確度和效率之間的權(quán)衡。我們的工作利用了基于注意的架構(gòu)的最新發(fā)現(xiàn),這種架構(gòu)在高度并行處理硬件上具有競(jìng)爭(zhēng)力。我們回顧了卷積神經(jīng)網(wǎng)絡(luò)大量文獻(xiàn)中的原理,將其應(yīng)用于Transformer,特別是分辨率降低的激活圖。我們還介紹了注意力偏置,這是一種在視覺(jué)Transformer中整合位置信息的新方法。

因此,我們提出了LeVIT:一種用于快速推理圖像分類(lèi)的混合神經(jīng)網(wǎng)絡(luò)。我們考慮不同的硬件平臺(tái)上的不同的效率措施,以便最好地反映廣泛的應(yīng)用場(chǎng)景。我們的大量實(shí)驗(yàn)驗(yàn)證了我們的技術(shù)選擇,并表明它們適用于大多數(shù)架構(gòu)。總體而言,LeViT在速度/精度權(quán)衡方面明顯優(yōu)于現(xiàn)有的ConvNet和vision transformers。例如,在80%的ImageNet top-1精度下,LeViT比CPU上的EfficientNet快5倍

1????引言

Transformer神經(jīng)網(wǎng)絡(luò)最初用于自然語(yǔ)言處理應(yīng)用[1]。目前,它們?cè)谠擃I(lǐng)域的大多數(shù)應(yīng)用中占據(jù)主導(dǎo)地位。他們處理可變大小的token?嵌入序列,這些序列被饋送到殘差的架構(gòu)。該模型包括兩類(lèi)殘差塊:多層感知器(MLP)和原始類(lèi)型的層:自注意,它允許通過(guò)兩個(gè)線(xiàn)性函數(shù)組合輸入中的所有token對(duì)。這與僅限于固定大小鄰域的一維卷積方法形成對(duì)比。

最近,vision transformer(ViT)架構(gòu)[2]在與大規(guī)模數(shù)據(jù)集預(yù)訓(xùn)練的速度-精度權(quán)衡中獲得了最新的圖像分類(lèi)結(jié)果。僅在ImageNet[4]上訓(xùn)練ViT模型時(shí),數(shù)據(jù)高效圖像Transformer[3]獲得了具有競(jìng)爭(zhēng)力的性能。它還引入了適用于高通量推理的較小模型。

在本文中,我們探索了設(shè)計(jì)空間,以便在中小型架構(gòu)領(lǐng)域提供比ViT/DeiT模型更好的折衷方案。我們特別感興趣的是優(yōu)化性能-精度折衷,如圖1所示的Imagenet-1k-val的吞吐量(圖像/秒)性能[5]。

雖然許多工作[6、7、8、9、10]旨在減少分類(lèi)器和特征提取器的內(nèi)存占用,但推理速度同樣重要,高吞吐量對(duì)應(yīng)更好的能效。在這項(xiàng)工作中,我們的目標(biāo)是開(kāi)發(fā)一個(gè)基于Vision Transformer的模型系列,在GPU、常規(guī)Intel CPU和移動(dòng)設(shè)備中常見(jiàn)的ARM硬件等高并行架構(gòu)上具有更好的推理速度。我們的解決方案重新引入卷積組件,代替學(xué)習(xí)卷積特性的Transformer組件。特別是,我們將Transformer的統(tǒng)一結(jié)構(gòu)替換為具有池化的金字塔,類(lèi)似于LeNet[11]架構(gòu)。因此我們稱(chēng)之為L(zhǎng)eViT。

對(duì)于給定的計(jì)算復(fù)雜度,Transformer比卷積結(jié)構(gòu)更快,這有令人信服的原因。大多數(shù)硬件加速器(GPU、TPU)都經(jīng)過(guò)優(yōu)化以執(zhí)行大型矩陣乘法。在Transformer中,注意和MLP塊主要依賴(lài)于這些操作。相反,卷積需要復(fù)雜的數(shù)據(jù)訪問(wèn)模式,因此它們的操作通常受到IO限制。這些注意事項(xiàng)對(duì)于我們探索速度/精度權(quán)衡非常重要。

這篇論文的貢獻(xiàn)是使ViT模型在寬度和空間分辨率方面縮小的技術(shù):

?????多級(jí)Transformer結(jié)構(gòu),將注意力用作下采樣機(jī)制;

?????計(jì)算效率高的圖塊描述符(descriptor),可減少第一層中的特征數(shù)量;

?? ? 可學(xué)習(xí)的、每頭平移不變的注意偏差,取代ViT的位置嵌入;

?????重新設(shè)計(jì)的注意力MLP塊,在給定計(jì)算時(shí)間內(nèi)提高網(wǎng)絡(luò)容量。

2????相關(guān)工作

從LeNet[11]衍生出來(lái)的卷積網(wǎng)絡(luò)隨著時(shí)間的推移已經(jīng)發(fā)生了實(shí)質(zhì)性的演變[12,13,14,15,16,17]。最新的架構(gòu)系列側(cè)重于在效率和性能之間找到一個(gè)良好的平衡點(diǎn)[18,17,19]。例如,EfficientNet[17]家族是通過(guò)仔細(xì)設(shè)計(jì)單個(gè)組件,然后在FLOPs約束下搜索超參數(shù)而發(fā)現(xiàn)的。

Transformer。

Vaswani等人[1]首先為機(jī)器翻譯引入了transformer架構(gòu)。Transformer編碼器主要依賴(lài)于與前饋層結(jié)合的自注意操作,為學(xué)習(xí)長(zhǎng)距離依賴(lài)提供了一種強(qiáng)大而明確的方法。Transformer隨后被用于NLP任務(wù),在各種基準(zhǔn)上提供最先進(jìn)的性能[20,21]。已經(jīng)有很多嘗試將transformer架構(gòu)應(yīng)用于圖像[22,23],首先是將其應(yīng)用于像素。由于二次計(jì)算復(fù)雜性和注意機(jī)制涉及的參數(shù)數(shù)量,大多數(shù)作者[23,24]最初考慮的是小尺寸圖像,如CIFAR或Imagenet64[25]?;旌衔谋竞蛨D像嵌入已經(jīng)使用帶有檢測(cè)邊界框的Transformer作為輸入[26],即大部分圖像處理在卷積域中完成。

視覺(jué)Transformer(ViT)[2]。

有趣的是,這種Transformer架構(gòu)非常接近最初的NLP版本,沒(méi)有顯式卷積(只是將固定大小的圖像塊線(xiàn)性化為向量),但它在圖像分類(lèi)方面與最先進(jìn)的技術(shù)競(jìng)爭(zhēng)。ViT在JFT300M(非公開(kāi),盡管在Imagenet-21k上的訓(xùn)練也會(huì)產(chǎn)生有競(jìng)爭(zhēng)力的結(jié)果)等大型標(biāo)記數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練時(shí),可獲得良好的性能。

除了強(qiáng)大的數(shù)據(jù)增強(qiáng)外,這種預(yù)訓(xùn)練的必要性可歸因于Transformer的built-in結(jié)構(gòu)比卷積少,特別是它們沒(méi)有歸納偏置來(lái)聚焦附近的圖像元素。作者假設(shè)需要一個(gè)大而多樣的數(shù)據(jù)集來(lái)正則化訓(xùn)練。

在DeiT[3]中,對(duì)大型預(yù)訓(xùn)練數(shù)據(jù)集的需求被學(xué)生-教師設(shè)置和更強(qiáng)的數(shù)據(jù)增強(qiáng)和正則化所取代,如隨機(jī)深度[27]或重復(fù)擴(kuò)充[28,29]。教師是一個(gè)卷積神經(jīng)網(wǎng)絡(luò),“幫助”學(xué)生網(wǎng)絡(luò)獲得卷積的歸納偏差。此后,視覺(jué)Transformer已成功應(yīng)用于更廣泛的計(jì)算機(jī)視覺(jué)任務(wù),包括目標(biāo)檢測(cè)[30]、語(yǔ)義分割[31]和圖像檢索[32]。

位置編碼。

Transformer以一個(gè)集合作為輸入,因此對(duì)輸入的順序是不變的。然而,無(wú)論是在語(yǔ)言還是在圖像中,輸入都來(lái)自于一個(gè)順序很重要的結(jié)構(gòu)。原始Transformer[1]將絕對(duì)非參數(shù)位置編碼與輸入合并。其他作品已經(jīng)用參數(shù)編碼[33]取代了它們,或者采用了基于傅立葉的核化版本[22]。絕對(duì)位置編碼對(duì)輸入集強(qiáng)制執(zhí)行固定大小,但有些作品使用相對(duì)位置編碼[34],對(duì)token之間的相對(duì)位置進(jìn)行編碼。在我們的工作中,我們將這些顯式位置編碼替換為隱式編碼空間信息的位置偏差。

沿著其它機(jī)制的注意力。

有幾項(xiàng)工作包括了為視覺(jué)設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中的注意機(jī)制[35,36,37,38]。該機(jī)制用于按通道捕獲補(bǔ)充卷積層的交叉特征信息[39、40、41],選擇網(wǎng)絡(luò)不同分支中的路徑[42],或?qū)烧呓Y(jié)合起來(lái)[43]。例如,Hu等人[44]的SE網(wǎng)絡(luò)有一個(gè)類(lèi)似注意的模塊,用于模擬層特征之間的通道關(guān)系。Li等人[37]利用網(wǎng)絡(luò)分支之間的注意機(jī)制來(lái)適應(yīng)神經(jīng)元的感受野。

最近,Transformer的出v現(xiàn)導(dǎo)致了混合架構(gòu),受益于其他模塊。Bello[45]提出了一種帶有位置注意成分的近似內(nèi)容注意。Child等人[23]觀察到網(wǎng)絡(luò)中的許多早期層學(xué)習(xí)本地連接的模式,類(lèi)似于卷積。這表明,由transformers和convnets設(shè)計(jì)的混合架構(gòu)是一個(gè)引人注目的設(shè)計(jì)選擇。最近的一些作品為不同的任務(wù)探索了這一途徑[46,47]。在圖像分類(lèi)方面,最近與我們并行的一項(xiàng)工作是金字塔視覺(jué)Transformer(PVT)[48],其設(shè)計(jì)深受ResNet的啟發(fā)。它主要用于處理對(duì)象和實(shí)例分割任務(wù)。

與我們的工作同時(shí),Yuan等人[49]提出了Tokens-to-Tokens-ViT(T2T-ViT)模型。與PVT類(lèi)似,它的設(shè)計(jì)依賴(lài)于在每一層之后通過(guò)聚合相鄰的token來(lái)重新標(biāo)記輸出,這樣token的數(shù)量會(huì)逐漸減少。此外,Yuan等人[49]研究了CNN[44、50、51]中架構(gòu)設(shè)計(jì)選擇的集成,這可以提高視覺(jué)Transformer的性能和效率。正如我們將看到的,這些最新的方法沒(méi)有我們?cè)跍?zhǔn)確性和推理時(shí)間之間的權(quán)衡上的工作那么集中。他們?cè)谶@一平衡方面沒(méi)有競(jìng)爭(zhēng)力。

3????動(dòng)機(jī)

在本節(jié)中,我們將討論Transformer圖塊投影層的seemly卷積行為。然后,我們?cè)跇?biāo)準(zhǔn)卷積結(jié)構(gòu)(ResNet-50)上進(jìn)行Transformer(DeiTS)的“嫁接實(shí)驗(yàn)”。該分析得出的結(jié)論將激勵(lì)我們?cè)诘?節(jié)中進(jìn)行后續(xù)設(shè)計(jì)選擇。

3.1 ViT架構(gòu)中的卷積

ViT的patch extractor是一個(gè)16x16卷積,步幅為16。此外,圖塊提取器的輸出乘以可學(xué)習(xí)的權(quán)重,以形成第一層自注意的qkv嵌入,所以我們可以認(rèn)為這些也是輸入的卷積函數(shù)。像DeiT[3]和PVT[48]這樣的變體也是如此。在圖2中,我們將DeiT的注意力權(quán)重的第一層可視化,按注意力頭進(jìn)行分解。這比Dosovitskiy等人[2]描述的主成分更直接。人們可以觀察到卷積結(jié)構(gòu)固有的典型模式:注意力集中在特定的模式(低頻顏色/高頻灰度),這些模式類(lèi)似于Gabor濾波器。

在卷積mask有重疊(編者注:卷積核大小>滑動(dòng)步幅)的卷積中,卷積mask的空間平滑度來(lái)自重疊:附近的像素接收大致相同的梯度。對(duì)于ViT卷積,沒(méi)有重疊(編者注:ViT中,核=16,滑動(dòng)步幅=16)。平滑度mask可能是由數(shù)據(jù)增加引起的:當(dāng)圖像顯示兩次時(shí),稍微平移,相同的梯度通過(guò)每個(gè)濾波器,因此它學(xué)習(xí)這種空間平滑度。因此,盡管Transformer結(jié)構(gòu)中沒(méi)有“歸納偏置”,但訓(xùn)練確實(shí)產(chǎn)生了類(lèi)似于傳統(tǒng)卷積層的濾波器。

3.2????初步實(shí)驗(yàn):嫁接

ViT圖像分類(lèi)器[2]的作者嘗試將Transformer層堆疊在傳統(tǒng)的ResNet-50上。在這種情況下,ResNet充當(dāng)Transformer層的特征提取器,梯度可以通過(guò)兩個(gè)網(wǎng)絡(luò)傳播回來(lái)。然而,在他們的實(shí)驗(yàn)中,Transformer層數(shù)是固定的(例如,12層用于ViT-base)。

在本小節(jié)中,我們研究了在類(lèi)似計(jì)算預(yù)算下,將Transformer與卷積網(wǎng)絡(luò)混合的可能性:我們探討了在改變卷積階段數(shù)和Transformer層的數(shù)量時(shí)獲得的權(quán)衡。我們的目標(biāo)是在控制運(yùn)行時(shí)間時(shí)評(píng)估卷積和Transformer混合的變化。

嫁接。

嫁接結(jié)合了ResNet-50和DeiT-Small。這兩個(gè)網(wǎng)絡(luò)具有相似的運(yùn)行時(shí)。

我們裁剪了ResNet-50的上層,同樣減少了DeiT層的數(shù)量(同時(shí)保持Transformer和MLP塊的數(shù)量相同)。由于裁剪后的ResNet生成的激活映射比DeiT輸入的14×14激活映射更大,因此我們?cè)谒鼈冎g引入了一個(gè)池化層。在初步實(shí)驗(yàn)中,我們發(fā)現(xiàn)平均池的性能最好。在卷積層和Transformer層堆棧的接口處引入了位置嵌入和分類(lèi)標(biāo)記(classification token)。對(duì)于ResNet-50階段,我們使用ReLU激活單元[52]和批量標(biāo)準(zhǔn)化[53]。

結(jié)果。

表1總結(jié)了結(jié)果。嫁接的架構(gòu)比單獨(dú)使用DeiT和ResNet-50產(chǎn)生更好的結(jié)果。參數(shù)最少而模型最高的模型是具有兩個(gè)階段的ResNet50,因?yàn)樗鼪](méi)有包括計(jì)算量很大的卷積第三階段。請(qǐng)注意,在本實(shí)驗(yàn)中,訓(xùn)練過(guò)程類(lèi)似于DeiT:300時(shí)代,我們?cè)贗mageNet上測(cè)量top-1驗(yàn)證精度,并將速度作為一個(gè)GPU每秒可以處理的圖像數(shù)。

我們?cè)趫D3中所示的一個(gè)有趣的觀察結(jié)果是,訓(xùn)練期間嫁接模型的收斂似乎類(lèi)似于早期時(shí)期的convnet,然后切換到類(lèi)似于DeiT-S的收斂速度。一個(gè)假設(shè)是卷積層由于其強(qiáng)烈的歸納偏置(明顯的平移不變性),有能力在前幾層更高效地學(xué)習(xí)到low-level信息的表示。它們快速依賴(lài)于有意義的圖塊嵌入,這可以解釋第一個(gè)epoch的更快收斂。

討論。

在運(yùn)行時(shí)控制的情況下,在Transformer下方插入卷積級(jí)似乎是有益的。對(duì)于嫁接架構(gòu)的最精確變體,大部分處理仍在Transformer堆棧中完成。因此,下一節(jié)的重點(diǎn)是降低Transformer的計(jì)算成本。為此,Transformer架構(gòu)需要與卷積階段更緊密地合并,而不僅僅是嫁接。

4? ? 模型

在本節(jié)中,我們將描述LeViT架構(gòu)的設(shè)計(jì)過(guò)程以及所采取的權(quán)衡。圖4總結(jié)了該架構(gòu)。

4.1 LeViT的設(shè)計(jì)原則

LeViT建立在ViT[2]架構(gòu)和DeiT[3]訓(xùn)練方法的基礎(chǔ)上。我們合并了被證明對(duì)卷積架構(gòu)有用的組件。第一步是獲得兼容的表示。不考慮分類(lèi)嵌入的作用,ViT是一個(gè)處理激活映射的層堆棧。實(shí)際上,中間的“token”嵌入可以看作是FCN架構(gòu)(BCHW格式)中的傳統(tǒng)C×H×W激活映射。因此,應(yīng)用于激活映射(池、卷積)的操作可以應(yīng)用于DeiT的中間表示。

在這項(xiàng)工作中,我們優(yōu)化了計(jì)算的架構(gòu),不一定要最小化參數(shù)的數(shù)量。使ResNet[14]系列比VGG網(wǎng)絡(luò)[13]更高效的設(shè)計(jì)決策之一是在其前兩個(gè)階段應(yīng)用強(qiáng)大的分辨率降低,且計(jì)算預(yù)算相對(duì)較小。當(dāng)激活映射到達(dá)ResNet的參數(shù)量很多的第三階段時(shí),其分辨率已經(jīng)縮小到足以將卷積應(yīng)用于小激活映射,從而降低了計(jì)算成本。

4.2 ????LeViT部件

圖塊嵌入(Patch embedding)。

第3節(jié)中的初步分析表明,當(dāng)對(duì)Transformer組的輸入應(yīng)用小型convnet時(shí),可以提高精度。

在LeViT中,我們選擇對(duì)輸入應(yīng)用4層3×3卷積(步幅2),以執(zhí)行分辨率降低。通道數(shù)為C=3、32、64、128、256。這減少了Transformer下層的激活映射輸入,而不會(huì)丟失顯著信息。LeViT-256的圖塊提取器將圖像形狀(3,224,224)轉(zhuǎn)換為(256、14、14),具有184 MFLOP。為了進(jìn)行比較,ResNet-18的前10層使用1042 MFLOP執(zhí)行相同的降維。

沒(méi)有分類(lèi)token。

為了使用BCHW張量格式,我們刪除了分類(lèi)標(biāo)記。與卷積網(wǎng)絡(luò)類(lèi)似,我們將其替換為最后一個(gè)激活映射上的平均池化,從而生成用于分類(lèi)器的嵌入。對(duì)于訓(xùn)練期間的蒸餾,我們?yōu)榉诸?lèi)和蒸餾任務(wù)分別訓(xùn)練頭。在測(cè)試時(shí),我們平均兩個(gè)頭的輸出。實(shí)際上,LeViT可以使用BNC或BCHW張量格式實(shí)現(xiàn),以更高效的為準(zhǔn)。

歸一化層和激活。

ViT架構(gòu)中的FC層相當(dāng)于1×1卷積。ViT在每個(gè)注意和MLP單元之前使用layer norm。對(duì)于LeViT,每次卷積后都會(huì)進(jìn)行batch nom。在[54]之后,與殘差連接相連的每個(gè)批標(biāo)準(zhǔn)化權(quán)重參數(shù)都初始化為零。batch nom可以與前面的卷積合并進(jìn)行推理,這是相對(duì)于layer norm的運(yùn)行時(shí)優(yōu)勢(shì)(例如,在EfficientNet B0上,此融合將GPU上的推理速度提高了一個(gè)因子2)。雖然DeiT使用GELU函數(shù),但LeViT的所有非線(xiàn)性激活都是Hardswish[19]。

多分辨率金字塔。

卷積架構(gòu)構(gòu)建為金字塔,其中激活映射的分辨率隨著處理期間通道數(shù)量的增加而降低。在第3節(jié)中,我們使用ResNet-50級(jí)對(duì)Transformer堆棧進(jìn)行預(yù)處理。

LeViT將ResNet階段集成到Transformer架構(gòu)中。在階段內(nèi)部,該架構(gòu)類(lèi)似于一個(gè)視覺(jué)Transformer:一個(gè)具有交替MLP和激活塊的殘差結(jié)構(gòu)。在下文中,我們回顧了與經(jīng)典設(shè)置相比,注意塊(圖5)的修改[1]。

下采樣。

在LeViT階段之間,收縮注意塊(shrink attention block)減小激活圖的大小:在Q變換之前應(yīng)用下采樣,然后傳播到軟激活的輸出。這將大小為(C,H,W)的輸入張量映射為大小為(C’,H/2,W/2)C’>C的輸出張量。由于尺度的變化,使用此注意塊時(shí)沒(méi)有殘差連接。為了防止信息丟失,將注意頭的數(shù)量定為C/D。

用注意偏置取代位置嵌入

Transformer結(jié)構(gòu)中的位置嵌入是一個(gè)位置相關(guān)的可訓(xùn)練參數(shù)向量,在將標(biāo)記嵌入輸入Transformer塊之前添加到標(biāo)記嵌入中。如果不存在,則Transformer輸出將獨(dú)立于輸入標(biāo)記的排列。位置嵌入的燒蝕導(dǎo)致分類(lèi)精度急劇下降[55]。

然而,位置嵌入僅包含在注意塊序列的輸入上。因此,由于位置編碼對(duì)于更高的層也很重要,因此它很可能保留在中間表示中,并且不必要地使用表示容量。

因此,我們的目標(biāo)是在每個(gè)注意塊中提供位置信息,并在注意機(jī)制中顯式地注入相對(duì)位置信息:我們只需在注意映射中添加注意偏差。一個(gè)注意力頭h\in [N]中,兩個(gè)像素(x,y)\in [H]\times  [W](x’,y’)\in [H]\times  [W]之間的標(biāo)量注意力值計(jì)算為:

A_{(x,y),(x’,y’)}^h = Q_{(x,y),:} \bullet K_{(x’,y’),:} +B_{\vert x-x’\vert ,\vert y-y’ \vert }^h? ??(1)

第一個(gè)項(xiàng)是經(jīng)典注意。第二個(gè)是平移不變的注意力偏置。對(duì)應(yīng)于不同的像素偏移,每個(gè)頭有H\times W個(gè)參數(shù)。將差異x-x’y-y’對(duì)稱(chēng)化鼓勵(lì)模型使用翻轉(zhuǎn)不變性進(jìn)行訓(xùn)練。

更小的鍵

偏置項(xiàng)減少了對(duì)鍵進(jìn)行位置信息編碼的壓力,因此我們減小了鍵矩陣相對(duì)于值矩陣的大小。如果鍵的維度是D∈\left\{  {16,32}\right\} ,那么值V的維度是2D。限制鍵的維度可以減少計(jì)算key productQK^T所需的時(shí)間。

對(duì)于沒(méi)有殘差連接的下采樣層,我們將V的維度設(shè)置為4D,以防止信息丟失。

注意激活。

在使用常規(guī)的線(xiàn)性投影組合不同頭的輸出之前,我們對(duì)乘積A^hV使用Hardwish激活函數(shù)。這類(lèi)似于ResNet瓶頸殘差塊,即V是1×1卷積的輸出,A^hV對(duì)應(yīng)于空間卷積,投影是另一個(gè)1×1卷積。

減少M(fèi)LP塊。

ViT中的MLP殘差塊是一個(gè)線(xiàn)性層,它將嵌入維度增加了因子4,接著應(yīng)用非線(xiàn)性,然后再使用另一個(gè)非線(xiàn)性將維度縮減回原來(lái)大小。對(duì)于vision架構(gòu),MLP在運(yùn)行時(shí)和參數(shù)方面通常比注意塊更昂貴。對(duì)于LeViT,“MLP”是一個(gè)1×1卷積,然后是通常的批量歸一化。為了降低該階段的計(jì)算成本,我們將卷積的展開(kāi)因子從4減少到2。一個(gè)設(shè)計(jì)目標(biāo)是注意塊和MLP塊消耗大約相同數(shù)量的FLOPs。

4.3 LeViT系列模型

LeViT模型可以通過(guò)改變計(jì)算階段的大小來(lái)產(chǎn)生一系列速度-精度權(quán)衡。我們通過(guò)輸入到第一個(gè)Transformer的通道數(shù)來(lái)識(shí)別它們,例如,LeViT-256在Transformer級(jí)的輸入上有256個(gè)通道。表2顯示了如何為我們?cè)诒疚闹性u(píng)估的模型設(shè)計(jì)階段。

表2:LeViT模型。每個(gè)階段由若干對(duì)注意塊和MLP塊組成。N:頭數(shù),C:通道數(shù)量,DQK運(yùn)算符的輸出維數(shù)。將階段分開(kāi)的是收縮注意塊,其值C、C’分別取自上面和下面的行。概率為p的Drop path應(yīng)用于每個(gè)殘差連接。步幅為2的塊中的N值為C/D,以彌補(bǔ)殘差連接的不足。每個(gè)注意塊后面都有一個(gè)擴(kuò)展因子為2的MLP






5個(gè)實(shí)驗(yàn)

5.1實(shí)驗(yàn)背景

數(shù)據(jù)集和評(píng)估。

我們?cè)谧罱咏覀兊姆椒ǖ腄eiT工作上模擬我們的實(shí)驗(yàn)。它建立在Pytork[56]和Timm庫(kù)[57]的基礎(chǔ)上。我們?cè)贗mageNet-2012數(shù)據(jù)集上進(jìn)行訓(xùn)練,并對(duì)其驗(yàn)證集進(jìn)行評(píng)估。我們不會(huì)在這項(xiàng)工作中使用更多的訓(xùn)練數(shù)據(jù)。

資源消耗。

普遍接受的推斷速度度量單位是乘加運(yùn)算(又稱(chēng)觸發(fā)器),因?yàn)楦↑c(diǎn)矩陣乘法和卷積可以表示為乘加運(yùn)算。

但是,某些操作,尤其是非線(xiàn)性激活,不執(zhí)行乘加操作。在觸發(fā)器計(jì)數(shù)(或計(jì)數(shù)為單個(gè)觸發(fā)器)中,它們通常被忽略,因?yàn)榧俣ㄋ鼈兊某杀究梢院雎?,即高階矩陣乘法和卷積的成本。然而,對(duì)于少數(shù)通道,像GELU這樣復(fù)雜激活的運(yùn)行時(shí)間與卷積的運(yùn)行時(shí)間相當(dāng)。此外,根據(jù)所使用的硬件和API,使用相同數(shù)量的觸發(fā)器的操作效率可能會(huì)有所不同。

因此,我們還報(bào)告了參考硬件上的原始計(jì)時(shí),如最近的論文[2,58]。Transformer的效率幾乎完全依賴(lài)于大降維矩陣乘法。

硬件。

在這項(xiàng)工作中,我們?cè)赑yTorch中運(yùn)行所有實(shí)驗(yàn),因此我們依賴(lài)于該API中可用的優(yōu)化。為了獲得更多的客觀計(jì)時(shí),我們?cè)谌齻€(gè)不同的硬件平臺(tái)上計(jì)時(shí)推斷,每個(gè)平臺(tái)對(duì)應(yīng)一個(gè)用例:

?一個(gè)16GB NVIDIA Volta GPU(峰值性能為12 TFLOP/s)。這是一個(gè)典型的訓(xùn)練加速器。

?2.0GHz的Intel Xeon 6138 CPU。這是數(shù)據(jù)中心中的典型服務(wù)器,對(duì)傳入圖像流執(zhí)行特征提取。PyTorch使用MKL和AVX2指令(16個(gè)矢量寄存器,每個(gè)256位)對(duì)此配置進(jìn)行了優(yōu)化。

?ARM重力2 CPU(亞馬遜C6g實(shí)例)。對(duì)于移動(dòng)電話(huà)和其他邊緣設(shè)備正在運(yùn)行的處理器類(lèi)型來(lái)說(shuō),它是一個(gè)很好的模型。Gravion2有32個(gè)內(nèi)核,支持帶有32個(gè)128位向量寄存器(NEON)的NEON向量指令集。

在GPU上,我們?cè)诖髨D像批上運(yùn)行計(jì)時(shí),因?yàn)檫@對(duì)應(yīng)于典型的用例;在DeiT之后,我們使用適合內(nèi)存的兩個(gè)batchsize的最大功率。在CPU平臺(tái)上,我們?cè)趩蝹€(gè)線(xiàn)程中測(cè)量推斷時(shí)間,模擬多個(gè)線(xiàn)程處理單獨(dú)的輸入圖像流的設(shè)置。

很難分離硬件和軟件的影響,因此我們使用標(biāo)準(zhǔn)PyTorch工具(justin time編譯器,不同的優(yōu)化配置文件)試驗(yàn)了幾種優(yōu)化網(wǎng)絡(luò)的方法。

5.2訓(xùn)練LeViT

我們使用32個(gè)GPU,在3到5天內(nèi)完成1000次訓(xùn)練。這比卷積網(wǎng)絡(luò)的常規(guī)計(jì)劃要多,但視覺(jué)Transformer需要長(zhǎng)時(shí)間的訓(xùn)練,例如,1000個(gè)歷元的訓(xùn)練DeiT在300個(gè)歷元中提高了2個(gè)top-1精度點(diǎn)。為了使訓(xùn)練正規(guī)化,我們使用蒸餾驅(qū)動(dòng)訓(xùn)練,類(lèi)似于DeiT。這意味著LeViT使用兩個(gè)具有交叉熵?fù)p失的分類(lèi)頭進(jìn)行訓(xùn)練。第一個(gè)負(fù)責(zé)人接受groundtruth課程的監(jiān)督,第二個(gè)負(fù)責(zé)人接受ImageNet上訓(xùn)練的RegNetY-16GF[18]模型的監(jiān)督。事實(shí)上,LeViT的訓(xùn)練時(shí)間主要取決于教師的推理時(shí)間。

5.3速度-精度權(quán)衡

表3顯示了我們通過(guò)LeViT獲得的速度精度折衷,圖1中繪制了一些顯著的數(shù)字。我們將其與最新技術(shù)中的兩種競(jìng)爭(zhēng)性架構(gòu)進(jìn)行比較:作為強(qiáng)卷積基線(xiàn)的效率網(wǎng)[17],以及類(lèi)似地,作為強(qiáng)僅Transformer架構(gòu)的效率網(wǎng)[3]。這兩條基線(xiàn)都在以下條件下進(jìn)行訓(xùn)練,以最大限度地提高其準(zhǔn)確性。例如,我們將其與1000個(gè)時(shí)代訓(xùn)練的神進(jìn)行比較。

在操作點(diǎn)的范圍內(nèi),我們認(rèn)為,LeVIT架構(gòu)遠(yuǎn)遠(yuǎn)優(yōu)于Transformer和卷積變體。LeViT-384在精確度上與Deit不相上下,但使用了一半的失敗次數(shù)。差距擴(kuò)大,以獲得更快的操作點(diǎn):LeViT-128S與DeiT Tiny不相上下,使用的觸發(fā)器數(shù)量減少了4倍。

運(yùn)行時(shí)度量密切跟蹤這些趨勢(shì)。例如,LeViT-192和LeViT-256的精度與EfficientNet B2和B3大致相同,但在CPU上分別快5倍和7倍。在ARM平臺(tái)上,float32操作的優(yōu)化程度不如Intel。然而,速度-精度的權(quán)衡仍然對(duì)LeViT有利。

5.4與最新技術(shù)的比較

表4報(bào)告了其他基于Transformer的架構(gòu)的結(jié)果,以與LeViT進(jìn)行比較(表3)。由于我們的方法專(zhuān)門(mén)用于高通量模式,因此我們不包括非常大和緩慢的模型[61,62]。

我們?cè)贔LOPs精度權(quán)衡方面進(jìn)行了比較,因?yàn)槠渌ぷ鞫际亲钚碌?,不一定提供參考模型,我們可以根?jù)這些模型對(duì)推斷進(jìn)行計(jì)時(shí)。所有Token-to-Token ViT[49]變型比LeViT-384多5倍的觸發(fā)器,比LeViT的精度更高的參數(shù)。瓶頸Transformer[46]和“視覺(jué)Transformer”[47](不要與ViT混淆)都是通用架構(gòu),也可用于檢測(cè)和對(duì)象分割。在相當(dāng)?shù)木认?,兩者都比LeViT-192慢5倍左右。金字塔視覺(jué)Transformer[48]也是如此(表中未報(bào)告),但其設(shè)計(jì)目標(biāo)不同。與這些架構(gòu)相比,LeViT的優(yōu)勢(shì)在于它受益于類(lèi)似于DeiT的蒸餾,這使得它在僅在ImageNet上進(jìn)行訓(xùn)練時(shí)更加準(zhǔn)確。與LeViT相近的兩種架構(gòu)是基于池的vision transformer(PiT)[59]和CvT[60],ViT的變體具有金字塔結(jié)構(gòu)。PiT是最有希望的一種,它包含了許多DeiT的優(yōu)化成分,但仍然比LeViT慢1.2到2.4倍。

交互評(píng)估。

在表3中,我們?cè)u(píng)估了替代測(cè)試集、Imagenet Real[63]和Imagenet V2匹配頻率[64]上的LeViT。這兩個(gè)數(shù)據(jù)集使用與ImageNet相同的類(lèi)集和訓(xùn)練集。Imagenet Real重新評(píng)估了標(biāo)簽,每個(gè)圖像可能有幾個(gè)類(lèi)別。Imagenet-V2(在我們的例子中是匹配頻率)使用不同的測(cè)試集。測(cè)量?jī)烧叩男阅芤则?yàn)證hyperparameters調(diào)整沒(méi)有導(dǎo)致過(guò)擬合到ImageNet的驗(yàn)證集是很有趣的。因此,對(duì)于在ImageNet驗(yàn)證中具有同等精度的模型,我們?cè)谔娲鷾y(cè)試集上測(cè)量分類(lèi)性能。LeViT-256和EfficientNet B3:LeViT變體在-Real上獲得相同的分?jǐn)?shù),但在-V2上稍差(-0.6)。LeViT-384和DeiT Small:LeViT在-Real(-0.2)和-V2(-0.4)上稍差。盡管在這些評(píng)估中,LeViT的準(zhǔn)確度相對(duì)較低,但與EfficientNet和DeiT相比,速度-準(zhǔn)確度權(quán)衡仍然成立。

5.5燒蝕

為了評(píng)估LeViT的性能,我們使用默認(rèn)設(shè)置進(jìn)行實(shí)驗(yàn),并一次替換一個(gè)參數(shù)。我們訓(xùn)練LeViT-128S模型和許多變體,以評(píng)估與ViT/DeiT相關(guān)的設(shè)計(jì)變更。實(shí)驗(yàn)只進(jìn)行了100次訓(xùn)練,以擴(kuò)大差異并縮短訓(xùn)練時(shí)間。對(duì)于更大的模型和更長(zhǎng)的訓(xùn)練計(jì)劃,結(jié)論仍然存在。我們一次更換一個(gè)組件,當(dāng)網(wǎng)絡(luò)需要返工時(shí),我們確保觸發(fā)器計(jì)數(shù)保持大致相同(詳見(jiàn)附錄a.2)。表5顯示,所有更改都會(huì)降低精度:

A1-

沒(méi)有金字塔形狀的燒蝕會(huì)直接堆積注意力和MLP(像DeiT)。然而,為了保持觸發(fā)器計(jì)數(shù)與基線(xiàn)相似,網(wǎng)絡(luò)寬度減小,導(dǎo)致網(wǎng)絡(luò)具有少量參數(shù),導(dǎo)致最終精度非常低。這表明LeViT中分辨率的降低是控制計(jì)算復(fù)雜度的主要工具。

A2-

沒(méi)有PatchConv:我們用一個(gè)大小為16的卷積來(lái)移除四個(gè)預(yù)處理卷積。這對(duì)參數(shù)的數(shù)量幾乎沒(méi)有影響,但觸發(fā)器的數(shù)量減少了10%。這對(duì)準(zhǔn)確性有很大的負(fù)面影響。這可以解釋?zhuān)驗(yàn)樵诘腿萘繀^(qū)域,卷積是壓縮3·162=768維圖塊輸入的有效方法。

A3-

在沒(méi)有BatchNorm的情況下,我們將BatchNorm替換為在ViT/DeiT架構(gòu)中使用的預(yù)激活的LayerNorm。這稍微減慢了模型的速度,因?yàn)樾枰跍y(cè)試時(shí)計(jì)算批次統(tǒng)計(jì)數(shù)據(jù)。刪除BatchNorm也會(huì)刪除殘差連接的零初始化,這會(huì)中斷訓(xùn)練。

A4-

從RegNetY-16GF教師模型中刪除硬蒸餾的使用會(huì)降低性能,如DeiT所示。

A5-

無(wú)注意偏差燒蝕將注意偏差組件替換為T(mén)ransformer堆棧(如DeiT)輸入上添加的經(jīng)典位置嵌入。讓每一個(gè)注意力集中的人學(xué)習(xí)一種獨(dú)立的偏見(jiàn)似乎是有用的。

A6-

我們使用DeiT樣式塊,即Q、K和V都具有尺寸D=C/N,MLP塊具有膨脹系數(shù)4。

A7-

除了softmax非線(xiàn)性之外,LeViT還增加了額外的Hardswish非線(xiàn)性。除去它,無(wú)注意激活消融會(huì)降低性能,表明額外的非線(xiàn)性有助于學(xué)習(xí)分類(lèi)類(lèi)別邊界。

6結(jié)論

本文介紹了LeViT,一種受卷積方法啟發(fā)的Transformer結(jié)構(gòu)。LeViT的準(zhǔn)確性主要源于DeiT中的訓(xùn)練技術(shù)。它的速度來(lái)自一系列精心控制的設(shè)計(jì)選擇。與其他用于數(shù)據(jù)中心或移動(dòng)電話(huà)特征提取的高效神經(jīng)網(wǎng)絡(luò)相比,LeViT在可比精度下的速度快1.5到5倍。因此,據(jù)我們所知,它在高速領(lǐng)域的精確性和精確性之間的權(quán)衡方面開(kāi)創(chuàng)了一種新的技術(shù)狀態(tài)。相應(yīng)的PyTorch代碼和型號(hào)可在https://github.com/ facebookresearch/LeViT

在本附錄中,我們報(bào)告了更多細(xì)節(jié)和結(jié)果。附錄A詳細(xì)說(shuō)明了組成塊的時(shí)間安排,并提供了有關(guān)消融的更多細(xì)節(jié)。我們?cè)诟戒汢中提供了注意力偏差的可視化。

附錄

詳細(xì)分析

A.1分組計(jì)時(shí)

在本節(jié)中,我們將從詳細(xì)的運(yùn)行時(shí)分析的角度比較DeiT和LeViT塊之間的設(shè)計(jì)差異。我們?cè)谘a(bǔ)充表6中并排測(cè)量其組成部分的運(yùn)行時(shí)間。對(duì)于DeiT Tiny,我們將GELU激活替換為Hardswish,否則它將主宰運(yùn)行時(shí)。

對(duì)于DeiT,我們考慮了一個(gè)從DeiT極小的街區(qū)。對(duì)于LeViT,我們考慮從LeVIT256的第一階段的塊。雖然LeViT寬33%(C=256 vs C=192),但兩者都以14×14的分辨率運(yùn)行,運(yùn)行時(shí)間也相當(dāng)。請(qǐng)注意,階段1是LeViT-256最昂貴的部分。在第2和第3階段,由于分辨率降低,成本較低(參見(jiàn)主要論文的圖4)。

LeViT計(jì)算注意力QKT的時(shí)間較少,但在隨后的矩陣積AV上花費(fèi)的時(shí)間較多。盡管具有更大的塊寬度C,LeViT在MLP組件上花費(fèi)的時(shí)間更少,因?yàn)閿U(kuò)展因子從4降低到2。

A.2關(guān)于我們消融的更多細(xì)節(jié)

在這里,我們?cè)谥饕撐牡牡?.6節(jié)和表4中給出了燒蝕實(shí)驗(yàn)的更多細(xì)節(jié)。

A1–沒(méi)有金字塔形狀。

我們測(cè)試了LeViT金字塔結(jié)構(gòu)的效果,我們用分辨率為14×14的深度為11的單級(jí)替換了三級(jí)。

為了保持觸發(fā)器計(jì)數(shù),我們?nèi)=19,N=3,C=2=114。

A6–無(wú)更寬的擋塊。

與DeiT相比,LeViT塊相對(duì)較寬,具有較小的鍵數(shù)和MLP擴(kuò)展因子。為了測(cè)試這一變化,我們修改了LeViT-128S,使其具有更傳統(tǒng)的塊,同時(shí)保留了觸發(fā)器的數(shù)量。因此,對(duì)于這三個(gè)階段,我們?nèi),K,V的維數(shù)D=30,C=ND=120,180,240。與DeiT一樣,MLP膨脹比為4。在子采樣層中,我們分別使用N=4C/D=16和24。

視覺(jué)化:注意偏差

注意偏差映射自Eqn。本文中的1只是二維地圖。因此,我們可以將它們可視化,見(jiàn)圖6。它們可以被解讀為處于某個(gè)相對(duì)位置的兩個(gè)像素之間的注意量。偏置的最低值足夠低(-20)以抑制兩個(gè)像素之間的注意,因?yàn)樗鼈儽惠斎氲絪oftmax。我們可以觀察到,一些頭部是相當(dāng)均勻的,而其他頭部則專(zhuān)注于附近的像素(例如,大多數(shù)注意力縮小的頭部)。一些是明顯定向的,例如,階段2/塊1的頭1和4分別處理垂直和水平相鄰的像素。第2級(jí)塊4的頭1具有特定的周期2模式,這可能是由于其輸出被饋送到下一個(gè)收縮塊中的子采樣濾波器。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容