PVT,PVTv2

復(fù)現(xiàn)可能是坑的地方:https://hub.fastgit.org/whai362/PVT/issues/21

作者論文里說,mini-batch=128,用了8個(gè)GPU

這里 mini-batch 不等于 batchsize,也就是說,batch-size = 8x128

因此,設(shè)置你的學(xué)習(xí)率的時(shí)候,要相應(yīng)的線性縮放



PVT

摘要:雖然卷積神經(jīng)網(wǎng)絡(luò)(CNNs)在計(jì)算機(jī)視覺中取得了巨大的成功,但本文研究了一種簡單的骨干網(wǎng)絡(luò),它可以用于許多沒有卷積的密集預(yù)測任務(wù)。與最近提出的專門用于圖像分類的Transformer模型(如ViT)不同,我們提出了金字塔視覺Transformer(PVT),它克服了將Transformer移植到各種密集預(yù)測任務(wù)的困難。與現(xiàn)有技術(shù)相比,PVT具有若干優(yōu)點(diǎn):(1) 與通常具有低分辨率輸出以及高計(jì)算和存儲(chǔ)成本的ViT不同,PVT不僅可以在圖像的密集分區(qū)上訓(xùn)練以獲得高輸出分辨率,這對(duì)于密集預(yù)測非常重要,而且可以使用漸進(jìn)收縮金字塔來減少大特征圖的計(jì)算;(2) PVT繼承了CNN和Transformer的優(yōu)點(diǎn),通過簡單地替換CNN主干,使其成為各種視覺任務(wù)中的統(tǒng)一主干,而無需卷積;(3) 我們通過大量的實(shí)驗(yàn)驗(yàn)證了PVT的有效性,實(shí)驗(yàn)結(jié)果表明PVT可以提高許多下游任務(wù)的性能,如目標(biāo)檢測、語義和實(shí)例分割等。例如,在相當(dāng)數(shù)量的參數(shù)下,RetinaNet+PVT在COCO數(shù)據(jù)集上達(dá)到40.4ap,超過RetinaNet+ResNet50(36.3ap)4.1ap。我們希望PVT可以作為像素級(jí)預(yù)測的一個(gè)替代和有用的主干,并促進(jìn)未來的研究。代碼位于https://github.com/whai362/PVT

圖1:不同架構(gòu)的比較,其中“Conv”和“TF-E”分別表示卷積和變壓器編碼器(a) 研究表明,許多CNN骨干網(wǎng)采用金字塔結(jié)構(gòu)進(jìn)行密集的預(yù)測任務(wù),如目標(biāo)檢測(DET)、語義和實(shí)例分割(SEG)(b)表明最近提出的視覺變換器(ViT)[10]是一種專為圖像分類(CLS)設(shè)計(jì)的“柱狀”結(jié)構(gòu)(c) 通過引入CNNs的金字塔結(jié)構(gòu),我們提出了金字塔視覺變換器(PVT),它可以作為計(jì)算機(jī)視覺任務(wù)的多功能主干,拓寬了ViT的應(yīng)用范圍和影響。此外,我們的實(shí)驗(yàn)還表明,PVT可以很容易地與DETR結(jié)合,構(gòu)建一個(gè)端到端的目標(biāo)檢測系統(tǒng),而不需要卷積和手工制作的組件,如密集錨和非最大抑制(NMS)。

1.引言

卷積神經(jīng)網(wǎng)絡(luò)(CNN)在計(jì)算機(jī)視覺領(lǐng)域取得了顯著的成功,在幾乎所有的計(jì)算機(jī)視覺任務(wù)中都成為了一種通用且占主導(dǎo)地位的方法[9,28,11,63,41,15,56,36,14,27,7,21]。然而,這項(xiàng)工作是試圖探索新的無卷積的多功能骨干網(wǎng)絡(luò)。我們研究了一種超越CNN的替代模型,用于密集預(yù)測任務(wù),如目標(biāo)檢測、語義和實(shí)例分割,而不是圖像分類。

受Transformer[51]在自然語言處理(NLP)中的成功啟發(fā),許多研究人員正試圖探索Transformer在計(jì)算機(jī)視覺中的應(yīng)用。例如,一些著作[4、64、55、43、17]將視覺任務(wù)建模為具有可學(xué)習(xí)查詢的字典查找問題,并將Transformer解碼器用作CNN主干(如VGG[41]和ResNet[15])頂部的特定于任務(wù)的頭部。雖然一些現(xiàn)有技術(shù)已經(jīng)將注意模塊[53、35、61]并入CNNs,但據(jù)我們所知,探索干凈且無卷積的變壓器主干以解決計(jì)算機(jī)視覺中的密集預(yù)測任務(wù)的研究很少。

最近,Dosovitskiy等人[10]使用Transformer進(jìn)行圖像分類。這是一個(gè)有趣而有意義的嘗試,用一個(gè)無卷積的模型來代替CNN主干。如圖1(b)所示,ViT具有柱狀結(jié)構(gòu),其輸入為粗糙的圖像塊(即,用較大的塊大小分割圖像)。(注:由于計(jì)算資源的限制,ViT無法使用更細(xì)的圖像分塊(例如4×4)作為輸入,只能以粗塊(例如32×32)作為輸入,這導(dǎo)致其輸出是低分辨率的,即1/32尺寸。)盡管ViT適用于圖像分類,但直接適應(yīng)像素級(jí)的密集預(yù)測(如目標(biāo)檢測和分割)是一個(gè)挑戰(zhàn),因?yàn)椋?)其輸出特征圖只有一個(gè)低分辨率的單一尺度;(2)即使對(duì)于常見的輸入圖像大小(如:COCO檢測基準(zhǔn)中短邊長為800像素的圖像),其內(nèi)存占用和計(jì)算量也比較高。

為了彌補(bǔ)上述局限性,本文提出了一種基于變換器模型的無卷積主干網(wǎng)絡(luò),稱為金字塔視覺變換器(PVT),它可以作為多種下游任務(wù)的主干,包括圖像級(jí)預(yù)測和像素級(jí)密集預(yù)測。具體來說,如圖1(c)所示,與ViT不同,PVT通過(1)采用細(xì)粒度圖像塊(4 × 4 per patch)克服了傳統(tǒng)變壓器的困難,作為輸入學(xué)習(xí)高分辨率表示,這對(duì)于密集的預(yù)測任務(wù)是必不可少的,(2)在網(wǎng)絡(luò)深度增加時(shí)引入漸進(jìn)收縮金字塔以減少變換器的序列長度,顯著減少計(jì)算量,(3)采用空間收縮注意(SRA,spatial-reduction attention)層,進(jìn)一步降低學(xué)習(xí)高分辨率特征地圖的資源開銷。

總體而言,PVT具有以下優(yōu)點(diǎn)。首先,相對(duì)于傳統(tǒng)的CNN主干(見圖1(a))感受野隨著深度的增加而增加,PVT總是產(chǎn)生一個(gè)全局感受野(通過所有小patch之間的注意),它比CNN的局部感受野更適合檢測和分割。其次,與ViT(見圖1(b))相比,由于金字塔結(jié)構(gòu)的進(jìn)步,我們的方法更容易插入許多具有代表性的密集預(yù)測管道,例如RetinaNet[27]和Mask R-CNN。第三,利用PVT,我們可以將PVT與其他針對(duì)不同任務(wù)設(shè)計(jì)的Transformer解碼器相結(jié)合,構(gòu)建一個(gè)無卷積的流水線,例如PVT+DETR[4]用于目標(biāo)檢測。例如,據(jù)我們所知,我們的實(shí)驗(yàn)給出了第一個(gè)端到端的目標(biāo)檢測管道PVT+DETR,它完全沒有卷積。它在COCO val2017上達(dá)到34.7,優(yōu)于基于ResNet50的原始DETR。

這項(xiàng)工作的主要貢獻(xiàn)如下。

?????我們提出了金字塔視覺轉(zhuǎn)換器(PVT),它是第一個(gè)為各種像素級(jí)密集預(yù)測任務(wù)設(shè)計(jì)的無卷積主干。結(jié)合PVT和DETR,我們可以建立一個(gè)端到端的目標(biāo)檢測系統(tǒng),不需要卷積和手工制作的組件,如密集錨和非最大抑制(NMS)。

?????我們克服了將Transformer移植到密集像素級(jí)預(yù)測時(shí)的許多困難,通過設(shè)計(jì)漸進(jìn)收縮金字塔和空間縮減注意(SRA),能夠減少使用Transformer的資源消耗,使PVT靈活地學(xué)習(xí)多尺度和高分辨率特征圖。

?????我們通過將PVT應(yīng)用于許多不同的任務(wù)(如圖像分類、目標(biāo)檢測和語義分割)來驗(yàn)證PVT,并將其與精心設(shè)計(jì)的Resnet[15]和ResNeXts[56]進(jìn)行比較。如圖2所示,與現(xiàn)有技術(shù)相比,具有不同參數(shù)數(shù)目的PVT能夠持續(xù)地改進(jìn)性能。例如,RetinaNet+PVTSmall在COCO val2017上達(dá)到40.4 AP,比RetinaNet+ResNet50高出4.1 AP(40.4 vs.36.3)。此外,RetinaNet+PVT-Large的AP值為42.6ap,比RetinaNet+ResNeXt101-64x4d的AP值高1.6倍,且參數(shù)個(gè)數(shù)減少了30%。

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

2.1. 計(jì)算機(jī)視覺中的卷積主干

卷積塊是深度神經(jīng)網(wǎng)絡(luò)在視覺識(shí)別中的重要組成部分。[23]中首次引入了標(biāo)準(zhǔn)和基本卷積塊來區(qū)分手寫數(shù)字。該區(qū)塊包含一定感受野的卷積核,捕捉有利的視覺環(huán)境。為了引入平移等價(jià)性,卷積核的權(quán)值在整個(gè)圖像空間中共享。隨著計(jì)算資源(例如,GPU)的快速發(fā)展,在大規(guī)模圖像分類數(shù)據(jù)集(例如,ImageNet[38])上成功訓(xùn)練幾個(gè)卷積塊[22,41]的堆棧成為可能。GoogLeNet[46]證明了包含多個(gè)核路徑的卷積算子可以獲得非常有競爭力的性能。在Inception系列[47,45]、ResNeXt[56]、DPN[8]、MixNet[52]和SKNet[24]中進(jìn)一步驗(yàn)證了多徑卷積塊的有效性。此外,ResNet[15]提出了卷積塊中的跳躍連接,這使得非常深的網(wǎng)絡(luò)成為可能,并在計(jì)算機(jī)視覺領(lǐng)域產(chǎn)生了令人印象深刻的影響。DenseNet[18]引入了密接拓?fù)洌鼘⒚總€(gè)卷積塊與其之前的塊連接起來。在最近的survey/review論文[20,40]中可以找到更新的進(jìn)展。

2.2. 密集預(yù)測任務(wù)

密集預(yù)測任務(wù)的目標(biāo)是對(duì)特征圖進(jìn)行像素級(jí)分類或回歸。目標(biāo)檢測和語義分割是兩個(gè)典型的密集預(yù)測任務(wù)。

目標(biāo)檢測。????在深度學(xué)習(xí)時(shí)代,CNN[23]已成為目標(biāo)檢測的主導(dǎo)框架,它包括單級(jí)探測器(如SSD[30]、RetinaNet[27]、FCOS[49]、GFL[25]、PolarMask[54]和OneNet[42])和多階段探測器(Faster?R-CNN[36]、Mask R-CNN[14]、Cascade?R-CNN[3]和Sparse R-CNN[44])。這些常用的目標(biāo)檢測器大多建立在高分辨率或多尺度特征圖上,以獲得良好的檢測性能。最近,DETR[4]和可變形DETR[64]結(jié)合CNN骨干網(wǎng)和變壓器解碼器,構(gòu)建了端到端對(duì)象檢測器。與以前基于CNN的探測器一樣,它們還需要高分辨率或多尺度特征圖來精確檢測目標(biāo)。

語義分割。? ? CNN在語義分割中也起著重要作用。在早期,F(xiàn)CN[31]引入了全卷積結(jié)構(gòu),以生成給定大小圖像的空間分割映射。之后,Noh等人[34]引入轉(zhuǎn)置卷積運(yùn)算,并在PASCAL VOC 2012數(shù)據(jù)集[39]上取得了令人印象深刻的性能。在FCN的啟發(fā)下,針對(duì)醫(yī)學(xué)圖像分割領(lǐng)域,提出了U-Net[37],它將相應(yīng)的低層和高層次特征圖之間的信息流連接起來,并實(shí)現(xiàn)了相同空間大小的圖像分割。為了探索更豐富的全局上下文表示,趙等人[62]在不同的池尺度上設(shè)計(jì)了金字塔池模塊,Kirillov等人[21]基于FPN[26]開發(fā)了一個(gè)稱為語義FPN的輕量級(jí)分割頭。DeepLab家族[6,29]在保持特征地圖分辨率的同時(shí),利用擴(kuò)張卷積來擴(kuò)大接收域。與目標(biāo)檢測方法類似,語義分割方法也依賴于高分辨率或多尺度特征映射。

2.3. 計(jì)算機(jī)視覺中的自注意力和Transformer

由于卷積濾波器的權(quán)值在訓(xùn)練后通常是固定的,因此對(duì)其動(dòng)態(tài)適應(yīng)輸入的變化是不靈活的。因此,人們提出了許多通過自注意操作來緩解這一問題的方法。非局部塊[53]試圖對(duì)空間和時(shí)間上的長距離依賴性進(jìn)行建模,這對(duì)于準(zhǔn)確的視頻分類是有益的。非局部算子雖然取得了成功,但其內(nèi)存和計(jì)算代價(jià)都很高。Criss-cross[19]通過僅通過criss-cross路徑生成稀疏注意圖,進(jìn)一步降低了復(fù)雜性。Ramachandran等人[35]提出獨(dú)立的自注意(Stand-Alone Self-Attention,SASA)是用局部自我注意單位來代替卷積層。AANet[2](Attention augmented convolutional networks)將自我注意和卷積運(yùn)算結(jié)合起來,獲得了競爭性的結(jié)果。DETR[4]利用Transformer解碼器將目標(biāo)檢測建模為具有可學(xué)習(xí)查詢的端到端字典查找問題,成功地消除了手工制作的過程,如非最大抑制(NMS)。基于DETR,可變形DETR[64]進(jìn)一步引入了可變形注意層,將注意力集中在一組稀疏的上下文元素上,從而獲得快速收斂和更好的性能。最近,Vision Transformer(ViT)[10]采用純Transformer[51]模型,通過將圖像處理為一系列patch來進(jìn)行圖像分類。DeiT[50]通過使用一種新的蒸餾方法進(jìn)一步擴(kuò)展了ViT。與以往的方法不同,本文嘗試將金字塔結(jié)構(gòu)引入到變壓器中,設(shè)計(jì)了一個(gè)純變壓器主干,用于密集預(yù)測任務(wù)。

3.金字塔視覺變壓器(PVT)

3.1. 總體架構(gòu)

我們的目標(biāo)是將金字塔結(jié)構(gòu)引入到Transformer中,使它能夠?yàn)槊芗念A(yù)測任務(wù)(如目標(biāo)檢測和語義分割)生成多尺度的特征映射。PVT的概述如圖3所示。與CNN主干[15]類似,我們的方法有四個(gè)階段來生成不同尺度的特征圖。所有階段共享一個(gè)類似的架構(gòu),它由一個(gè)patch embedding layer和L_i個(gè)Transformer編碼器層組成。

圖3 ????PVT總體結(jié)構(gòu)。整個(gè)模型包括4個(gè)階段,每個(gè)階段包含一個(gè)patch embedding layer和Li個(gè)Transformer編碼器。四個(gè)階段的輸出分辨率從1/4尺寸逐步縮減至1/32層尺寸。

在第一階段,給定一個(gè)大小為H×W×3的輸入圖像,我們先把它分為\frac{HW}{4^2 } 的patches(像ResNet一樣,我們輸出特征的最大分辨率為1/4尺寸),每個(gè)塊(patch)的大小是4×4×3。然后,我們將展平的塊(flattened patches)輸入給線性投影,這樣就得到嵌入的塊(embedded patches),形狀為\frac{HW}{4^2 } \times C_{1} 。然后,embedded patches連同位置嵌入一起通過一個(gè)L_1層的變壓器編碼器,輸出被reshape為特征圖F_1,其形狀為\frac{H}{4 } \times \frac{W}{4 } \times C_{1} 。同樣地,使用來自前一階段的特征映射作為輸入,我們獲得以下特征映射F2、F3和F4,其相對(duì)于輸入圖像的步長為8、16和32像素。利用特征金字塔{F1,F(xiàn)2,F(xiàn)3,F(xiàn)4},我們的方法可以很容易地應(yīng)用于大多數(shù)下游任務(wù),包括圖像分類,目標(biāo)檢測和語義分割。

3.2. 變壓器特征金字塔

與CNN骨干網(wǎng)[15]使用卷積步長獲得多尺度特征圖不同,我們的PVT使用漸進(jìn)收縮策略progressive shrinking strategy通過patch embedding layers來控制特征圖的大小。

這里,我們將第i階段的patch size表示為P_i。在第i階段開始時(shí),我們首先將輸入的特征映射F_{i-1} \in R^{H_{i-1} \times W_{i-1}\times C_{i-1} }平均劃分為\frac{H_{i-1}W_{i-1}}{P_{i}^2 } 個(gè)patches,然后將每個(gè)patch展平,并線性投影為C_{i}維的嵌入。線性投影之后,?embedded patches的形狀可以看作為\frac{H_{i-1} }{P_{i}  } \times \frac{W_{i-1} }{P_{i} } \times C_{i} ,其高度和寬度小于輸入的P_i倍。

通過這種方法,我們可以靈活地調(diào)整每個(gè)階段特征圖的比例,從而可以為變壓器構(gòu)造一個(gè)特征金字塔。

3.3. 變壓器編碼器

對(duì)于階段i中的變壓器編碼器,其具有L_i個(gè)編碼器層,并且每個(gè)編碼器層由注意層和前饋層組成[51]。由于我們的方法需要處理高分辨率(例如,1/4尺寸)特征圖,我們提出了一種空間縮減注意(SRA)層來取代編碼器中傳統(tǒng)的多頭部注意(MHA)層[51]。

圖4:多頭注意力(MHA)與空間收縮注意力(SRA)。使用空間收縮操作,計(jì)算量和內(nèi)存占用可以大大減小,所以我們的SRA對(duì)高分辨率特征映射更加友好。

與MHA類似,SRA還接收一個(gè)查詢Q、一個(gè)鍵K和一個(gè)值V作為輸入,并輸出一個(gè)refined的特征。不同的是,我們的SRA在注意操作之前減小K和V的空間尺度,如圖4所示,這大大減少了計(jì)算/內(nèi)存開銷。第i階段SRA的詳細(xì)內(nèi)容可表述如下:

\mathrm{SRA}(Q,K,V)=\mathrm{Concat}({\mathrm{head}_0},... {\mathrm{head}_{N_{i} }})W^O ? ??(1)

{\mathrm{head}_j}={\mathrm{Attention}}(QW_{j}^Q,\mathrm{SR}(K)W_{j}^K,\mathrm{SR}(V)W_{j}^V)? ??(2)

其中W_{j}^Q\in R^{C_{i} \times d_{\mathrm{k}}  } W_{j}^K\in R^{C_{i} \times d_{\mathrm{head}}  } W_{j}^V\in R^{C_{i} \times d_{\mathrm{head}}  } W_{j}^O\in R^{h_{i} \times d_{\mathrm{head}}  } 是線性投影的參數(shù),N_{i} 是第i階段Transformer編碼器的頭數(shù)。因此,每個(gè)頭的維度d_{\mathrm{head}}等于\frac{C_{i} }{N_{i}} \mathrm{SR}(\cdot )是空間收縮操作,其定義為:

\mathrm{SR}(\mathrm{x} )=\mathrm{Norm}( \mathrm{Reshape}(\mathrm{x},R_{i}  )W^S  )? ??(3)

這里,R_{i} 表示第i階段注意力層的縮減比。\mathrm{Reshape}(\mathrm{x},R_{i}  )是reshape操作,將輸入\mathrm{x}\in R^{(H_{i} W_{i} )\times C_{i} }變形為尺寸是\frac{H_{i} W_{i} }{R_{i}^2 } \times ({R_{i}^2 } C_{i} )W^S \in R^{ ({R_{i}^2 } C_{i} )\times C_{i} }是線性投影,將輸入序列的維度縮減至C_{i} \mathrm{Norm}(\cdot )是layer normalization[1]。和Transformer[5]一樣,{\mathrm{Attention}}(\cdot )是注意力操作,計(jì)算為:

通過這些公式,我們可以看出我們的{\mathrm{Attention}}(\cdot )操作的計(jì)算量/內(nèi)存占用比MHA小的R_{i}^2 倍,因此它可以用有限的資源處理較大的輸入特征映射/序列。

3.4. 模型詳細(xì)信息

綜上所述,我們方法的超參數(shù)如下:

?????P_i:第i階段的patch size;

?????C_i:第i級(jí)輸出的通道數(shù);

?????L_i:第i階段的編碼器層數(shù);

?????R_i:第i階段SRA的縮減比;

?????N_i:第i階段SRA的頭數(shù);

?????E_i:第i階段前饋層[51]的膨脹率;

遵循ResNet[15]的設(shè)計(jì)規(guī)則,我們(1)在淺級(jí)使用小的輸出通道數(shù);(2)將主要計(jì)算資源集中在中間階段。

為了提供討論的實(shí)例,我們在表1中描述了一系列不同規(guī)模的PVT模型,即PVT-Tiny、-Small、-Medium和-Large。在具體的下游任務(wù)中使用這些模型的更多細(xì)節(jié)將在第4節(jié)中介紹。

表1:PVT系列的詳細(xì)設(shè)置。設(shè)計(jì)遵循ResNet的兩條規(guī)則[15]:(1) 隨著網(wǎng)絡(luò)深度的增加,通道數(shù)逐漸增大,輸出分辨率逐漸減小;(2) 主要的計(jì)算資源集中在第3階段。

3.5. 討論

與我們的方法最相關(guān)的工作是ViT[10]。在這里我們詳細(xì)討論了它們之間的關(guān)系和區(qū)別。

PVT和ViT都是無卷積運(yùn)算的純變壓器模型。它們之間的主要區(qū)別是金字塔結(jié)構(gòu)。與傳統(tǒng)的變壓器[51]類似,ViT的輸出序列長度與輸入序列長度相同,這意味著ViT的輸出是單尺度的(見圖1(b))。此外,由于資源有限,ViT的輸出是粗粒度的(例如,the patch size is 16 or 32 pixels),因此其輸出分辨率相對(duì)較低(例如,1/16尺寸或1/32尺寸)。因此,在需要高分辨率或多尺度特征圖的密集預(yù)測任務(wù)中,很難直接應(yīng)用ViT。

我們的PVT通過引入一個(gè)漸進(jìn)收縮金字塔打破了變壓器的常規(guī)。它可以像傳統(tǒng)的CNN主干一樣生成多尺度特征圖。此外,我們還設(shè)計(jì)了一個(gè)簡單而有效的注意層SRA,用于處理高分辨率的特征映射,減少計(jì)算/內(nèi)存開銷。得益于上述設(shè)計(jì),我們的方法比ViT具有以下優(yōu)點(diǎn):1)更靈活,在不同階段可以生成不同尺度、不同通道的特征圖;2) 在大多數(shù)下游任務(wù)模型中,可以很容易地并入和起作用;3) 更友好的計(jì)算/內(nèi)存可以處理更高分辨率的特征圖。

4.應(yīng)用于下游任務(wù)

4.1. 圖像級(jí)預(yù)測

圖像分類是圖像級(jí)預(yù)測中最具代表性的任務(wù)。繼ViT[10]和DeiT[50]之后,我們在最后一個(gè)階段的輸入中添加一個(gè)可學(xué)習(xí)的分類令牌(a learnable classification token),然后使用一個(gè)全連接的層在分類令牌的頂部進(jìn)行分類。

4.2. 像素級(jí)密集預(yù)測

除了圖像級(jí)預(yù)測之外,在下游任務(wù)中還經(jīng)常看到需要在特征圖上執(zhí)行像素級(jí)分類或回歸的密集預(yù)測。在這里,我們討論兩個(gè)典型的任務(wù),即目標(biāo)檢測和語義分割。

目標(biāo)檢測。? ? 我們將我們的PVT模型應(yīng)用于兩種具有代表性的目標(biāo)檢測方法,即RetinaNet[27]和Mask R-CNN[14]。RetinaNet是一種應(yīng)用廣泛的單級(jí)檢測器,Mask R-CNN是主流的兩級(jí)實(shí)例分割框架之一。具體實(shí)現(xiàn)細(xì)節(jié)如下:(1)與ResNet一樣,我們直接使用輸出特征金字塔{F1,F(xiàn)2,F(xiàn)3,F(xiàn)4}作為FPN的輸入[26],然后將細(xì)化后的特征映射反饋給后續(xù)檢測或?qū)嵗指铑^(2) 在目標(biāo)檢測中,輸入可以是任意形狀,因此在ImageNet上預(yù)訓(xùn)練的位置嵌入可能不再有意義。因此,我們根據(jù)輸入圖像對(duì)預(yù)先訓(xùn)練好的位置嵌入進(jìn)行雙線性插值(3) 在檢測模型的訓(xùn)練過程中,PVT中的所有層都不會(huì)被凍結(jié)。

語義分割。????我們選擇語義FPN[21]作為基線,這是一種簡單的分割方法,無需特殊操作(例如,擴(kuò)展卷積)。因此,用它作為基線可以很好地檢驗(yàn)主干的原始有效性。與目標(biāo)檢測中的實(shí)現(xiàn)類似,我們將特征金字塔直接輸入到語義FPN中,并使用雙線性插值來調(diào)整預(yù)訓(xùn)練位置嵌入的大小。

5.實(shí)驗(yàn)

我們將PVT與兩個(gè)最具代表性的CNN主干進(jìn)行比較,即ResNet[15]和ResNeXt[56],這兩個(gè)主干被廣泛用于許多下游任務(wù)的基準(zhǔn)測試。

5.1. 圖像分類

實(shí)驗(yàn)設(shè)置。? ? 我們在ImageNet數(shù)據(jù)集上進(jìn)行了圖像分類實(shí)驗(yàn)。ImageNet 2012數(shù)據(jù)集[38]包含128萬個(gè)訓(xùn)練圖像和50K個(gè)驗(yàn)證圖像,1000個(gè)類別。我們在訓(xùn)練集中訓(xùn)練模型,并在驗(yàn)證集中報(bào)告top-1 error。為了公平比較,我們按照DeiT[50]執(zhí)行random-size cropping至224×224,隨機(jī)水平翻轉(zhuǎn)[46],和mixup數(shù)據(jù)增強(qiáng)[59]。在訓(xùn)練期間使用標(biāo)簽平滑正則化[47]。我們默認(rèn)使用AdamW[33],動(dòng)量為0.9,最小批量為128,權(quán)重衰減為5× 10^{?2}。初始學(xué)習(xí)速率設(shè)置為1× 10^{?3},余弦衰減[32]。所有模型都在8個(gè)V100 gpu上從頭開始訓(xùn)練300個(gè)epoch。為了進(jìn)行基準(zhǔn)測試,我們在驗(yàn)證集上應(yīng)用中心裁剪,裁剪至224×224像素。

結(jié)果。? ? 在表2中,我們發(fā)現(xiàn)在相同的參數(shù)數(shù)目和計(jì)算預(yù)算下,我們的PVT模型優(yōu)于傳統(tǒng)的CNN主干。例如,當(dāng)GFLOPs大致相似時(shí),PVT Small的top-1誤差達(dá)到20.2,比ResNet50[15](21.5)高1.3。同時(shí),在類似或相對(duì)較低的復(fù)雜度下,我們的PVT系列存檔性能與最近提出的基于變壓器的模型(如ViT[10]和DeiT[50])相當(dāng)(即18.2對(duì)18.3)。這個(gè)結(jié)果在預(yù)期之內(nèi),因?yàn)榻鹱炙Y(jié)構(gòu)可能有利于密集的預(yù)測任務(wù),但是它給圖像分類帶來的收益是有限的。

注意,ViT和DeiT可能有局限性,因?yàn)樗鼈兪菍iT為分類任務(wù)設(shè)計(jì)的,這不適用于通常需要有效特征金字塔的密集預(yù)測任務(wù)。

5.2. 目標(biāo)檢測

實(shí)驗(yàn)設(shè)置。????我們在具有挑戰(zhàn)性的COCO基準(zhǔn)上進(jìn)行目標(biāo)檢測實(shí)驗(yàn)[28]。所有模型都在COCO train2017上接受培訓(xùn)(~118k圖像),并在val2017(5k圖像)上進(jìn)行評(píng)估。我們在兩個(gè)標(biāo)準(zhǔn)的檢測器上評(píng)估我們的PVT主干:RetinaNet[27]和Mask R-CNN[14]。在訓(xùn)練過程中,我們首先使用ImageNet上預(yù)先訓(xùn)練好的權(quán)值來初始化主干,然后使用Xavier[13]來初始化新添加的層。我們的模型在8個(gè)V100 gpu上以16的批量大小進(jìn)行訓(xùn)練,并通過AdamW[33]進(jìn)行優(yōu)化,初始學(xué)習(xí)率為1×10?4.按照常見的設(shè)置[27,14,5],所有檢測模型,我們采用1× 或3× 的訓(xùn)練計(jì)劃(即12或36個(gè)epoch)。訓(xùn)練圖像被調(diào)整到短邊為800像素,而長邊不超過1333像素。使用3×? 訓(xùn)練計(jì)劃中,我們還隨機(jī)調(diào)整輸入圖像的短邊長在[640,800]范圍內(nèi)。在測試階段,輸入圖像的短邊固定為800像素。

結(jié)果。????如表3所示,使用RetinaNet進(jìn)行目標(biāo)檢測時(shí),我們發(fā)現(xiàn)當(dāng)參數(shù)數(shù)目相當(dāng)時(shí),PVT變體顯著優(yōu)于其對(duì)應(yīng)變體,這表明我們的PVT可以作為CNN主干的一個(gè)很好的目標(biāo)檢測替代品。例如,使用1× 訓(xùn)練計(jì)劃中,RetinaNet+PVT-Tiny比RetinaNet+ResNet18[15]高4.9ap(36.7比31.8)。此外,3× 訓(xùn)練計(jì)劃和多尺度訓(xùn)練,RetinaNet+PVT-Large-達(dá)到 43.4ap,超過RetinaNet+ResNeXt101-64x4d[56]41.8ap,而我們的參數(shù)數(shù)減少了30%(71.1M比95.5M)。

在使用Mask R-CNN的實(shí)例分割實(shí)驗(yàn)中也發(fā)現(xiàn)了類似的結(jié)果,如表4所示× 訓(xùn)練計(jì)劃中,Mask R-CNN+PVT-Tiny達(dá)到35.1 Mask AP(APm),比Mask R-CNN+ResNet18高3.9 APm,甚至比Mask R-CNN+ResNet50高0.7 APm。用Mask-RCNN+PVT-Large得到的最佳APm為40.7,比基于ResNeXt101-64x4d的模型高1.0apm。

5.3. 語義分割

實(shí)驗(yàn)設(shè)置。????我們選擇了ADE20K[63],這是一個(gè)具有挑戰(zhàn)性的場景分析基準(zhǔn),用于語義分割。ADE20K包含150個(gè)細(xì)粒度語義類別,其中分別有20210、2000和3352個(gè)圖像用于訓(xùn)練、驗(yàn)證和測試。我們將PVT主干應(yīng)用于Semantic FPN[21](Panoptic feature pyramid networks),這是一種沒有擴(kuò)展卷積的簡單分割方法[57],以此來評(píng)估我們的PVT主干。在訓(xùn)練階段,主干用ImageNet上預(yù)先訓(xùn)練的權(quán)重初始化[9],其他新添加的層用Xavier初始化[13]。我們使用AdamW[33]優(yōu)化模型,初始學(xué)習(xí)率為1e-4。按照常見設(shè)置[21,6],我們在4個(gè)V100 gpu上訓(xùn)練80k迭代的模型,批量大小為16。學(xué)習(xí)率按polynomial衰減規(guī)律衰減,冪為0.9。我們隨機(jī)調(diào)整訓(xùn)練圖像的大小并將其裁剪為512× 512并在測試期間將圖像縮放到短邊長為512。

結(jié)果。????如表5所示,在不同的參數(shù)尺度下,我們的PVT始終優(yōu)于ResNet[15]和ResNeXt[56],使用語義FPN進(jìn)行語義分割。例如,在參數(shù)數(shù)目幾乎相同的情況下,我們的PVT Tiny/Small/Medium至少比ResNet-18/50/101高出280萬。此外,盡管我們的Semantic FPN+PVT Large的參數(shù)數(shù)目比Semantic FPN+ResNeXt101-64x4d的參數(shù)數(shù)目低了20%,但mIoU仍然高出1.9(42.1比40.2),這表明對(duì)于語義分段來說,我們的PVT可以提取比CNN更好的特征,這得益于全局注意機(jī)制。

5.4. 純變壓器密集預(yù)測

我們在DETR[4]上用PVT代替ResNet50進(jìn)行檢測,Trans2Seg[55]進(jìn)行分割,構(gòu)建了純變壓器密集預(yù)測管道。實(shí)驗(yàn)結(jié)果表明,完全無卷積變換在目標(biāo)檢測和語義分割方面都有很好的效果。

PVT+DETR? ? 我們將我們的PVT與DETR[4]相結(jié)合,建立了一個(gè)用于目標(biāo)檢測的純變壓器模型,DETR具有基于變壓器的檢測頭。我們在COCO train2017上培訓(xùn)了50個(gè)epoch的模型,初始學(xué)習(xí)率為1× 10?4.在第33個(gè)時(shí)期,學(xué)習(xí)率除以10。我們使用隨機(jī)翻轉(zhuǎn)和隨機(jī)縮放作為數(shù)據(jù)擴(kuò)充。所有其他實(shí)驗(yàn)設(shè)置與Sec5.2相同。 如表6所示,COCO val2017的PVT+DETR為34.7 AP,比ResNet50+DETR高出2.4 AP(34.7 vs.32.3)。

PVT+Trans2Seg? ? 我們將我們的PVT與Trans2Seg[55]相結(jié)合,建立了一個(gè)用于語義分割的純Transformer模型,Trans2Seg是一個(gè)基于Transformer解碼器的分割頭。根據(jù)第5.3節(jié)的實(shí)驗(yàn)設(shè)置。我們在ADE20K[63]數(shù)據(jù)集上進(jìn)行了40k迭代訓(xùn)練、單尺度測試的實(shí)驗(yàn),并與ResNet50+Trans2Seg、DeeplabV3+dilation 8(d8)和16(d16)進(jìn)行了比較,如表7所示。

我們發(fā)現(xiàn)PVT Small+Trans2Seg達(dá)到42.6mIoU,優(yōu)于ResNet50-d8+DeeplabV3+(41.5)。注意,ResNet50-d8+DeeplabV3+具有120.5gflops,這是由于擴(kuò)展卷積的高計(jì)算成本,而我們的PVT Small+Trans2Seg只有31.6gflops。PVTSmall+Trans2Seg的性能也優(yōu)于ResNet50-d16+Trans2Seg(31.6G的Flops比79.3 GFLOPs,42.6mIoU 比39.7 mIoU,只有40%的GFLOPs,mIoU高2.9)。

5.5. 燒蝕研究

實(shí)驗(yàn)設(shè)置。? ? 我們對(duì)ImageNet[9]和COCO[28]數(shù)據(jù)集進(jìn)行消融研究。ImageNet上的實(shí)驗(yàn)設(shè)置與Sec5.1.中的設(shè)置相同。在COCO數(shù)據(jù)集上,所有模型都使用1×? 訓(xùn)練時(shí)間表(即12個(gè)時(shí)期)和其他實(shí)驗(yàn)設(shè)置遵循第5.2.?節(jié)中的設(shè)置。

金字塔結(jié)構(gòu)。????金字塔結(jié)構(gòu)是應(yīng)用于密集預(yù)測任務(wù)的關(guān)鍵。以前的ViT是一個(gè)列式框架,其輸出是單尺度的。它提出了一個(gè)問題,當(dāng)使用粗糙的圖像補(bǔ)丁(例如,32×32 per patch)作為輸入,輸出特征圖的分辨率較低,導(dǎo)致檢測性能較差(COCO val2017上為31.7 AP),如表8所示。當(dāng)使用細(xì)粒度圖像塊(例如,4×4 per patch)作為輸入,ViT將耗盡GPU內(nèi)存(例如32G)。不同的是,我們的方法通過一個(gè)漸進(jìn)收縮金字塔來避免這個(gè)問題。該方法可以處理淺部高分辨率特征圖和深部低分辨率特征圖。因此,我們的方法在COCO val2017上獲得了40.4的有希望的AP,比ViT Small/32高8.7 AP(40.4比31.7)。

更深與更寬。????CNN主干是應(yīng)該更深入還是更廣泛的問題已經(jīng)在以前的工作中進(jìn)行了廣泛的討論[15,58]。在這里,我們在我們的PVT中探索這個(gè)問題。為了公平比較,我們將PVT Small的隱藏維度{C1,C2,C3,C4}乘以比例因子1.4,使其具有與深度模型(即PVT Medium)等價(jià)的參數(shù)數(shù)。如表9所示,在ImageNet和COCO上,deep模型(即PVT-Medium)始終優(yōu)于wide模型(即PVT-Small-wide)。因此,在PVT的設(shè)計(jì)中,更深的設(shè)計(jì)比更寬的設(shè)計(jì)更有效。基于這一觀察結(jié)果,在表1中,我們通過增加模型深度開發(fā)了不同尺度的PVT模型。

預(yù)訓(xùn)練的權(quán)重。????大多數(shù)密集的預(yù)測模型(例如RetinaNet[27])依賴于主干,其權(quán)重是在ImageNet上預(yù)先訓(xùn)練的。我們在PVT中也討論了這個(gè)問題。在圖5的頂部,我們繪制了RetinaNet-PVT-Small使用(紅色曲線)和不使用(藍(lán)色曲線)預(yù)訓(xùn)練權(quán)重的驗(yàn)證AP曲線。我們發(fā)現(xiàn),使用預(yù)訓(xùn)練具有更好的收斂性,在1×訓(xùn)練長度下,兩者區(qū)別達(dá)到13.8;在3×訓(xùn)練長度和多尺度訓(xùn)練下,兩者區(qū)別達(dá)到8.4。因此,與基于CNN的模型一樣,預(yù)訓(xùn)練權(quán)重也可以幫助基于PVT的模型更快更好地收斂。此外,在圖5的底部,我們還看到基于PVT的模型(紅色曲線)的收斂速度比基于ResNet的模型(綠色曲線)更快。

計(jì)算成本。????隨著輸入尺寸的增加,我們方法的GFLOPs增長率大于ResNet[15],但小于ViT[10],如圖6所示,這意味著我們的PVT更適合中等分辨率輸入的任務(wù)(例如,較短的尺寸不超過800像素)。在COCO上,輸入圖像的短邊是800像素。在這種情況下,基于PVT Small的RetinaNet的推理速度比基于ResNet50的推理速度慢,如表10所示。

解決這一問題的直接方法是縮小輸入規(guī)模。當(dāng)將輸入圖像的短邊縮小到640像素時(shí),基于PVT Small的模型比基于ResNet50的模型運(yùn)行得更快,但是我們的AP高出2.4(38.7比36.3)。另一個(gè)可能的解決方案是開發(fā)一種新的具有較低計(jì)算復(fù)雜度的視覺任務(wù)的自注意層。這是一個(gè)值得探索的方向,今后我們將繼續(xù)努力。

6.結(jié)論和今后的工作

在本文中,我們介紹了PVT,一個(gè)純變壓器骨干密集的預(yù)測任務(wù),如目標(biāo)檢測和語義分割。為了在有限的計(jì)算/存儲(chǔ)資源下獲得多尺度特征圖,我們設(shè)計(jì)了一個(gè)漸進(jìn)收縮金字塔和一個(gè)空間縮減注意層。在目標(biāo)檢測和語義分割基準(zhǔn)上的大量實(shí)驗(yàn)驗(yàn)證了我們的PVT比設(shè)計(jì)良好的CNN主干在同等數(shù)量的參數(shù)下更強(qiáng)大。

盡管PVT可以作為CNN主干網(wǎng)的替代方案(如ResNet、ResNeXt),但仍有一些特定的模塊和操作是為CNN設(shè)計(jì)的,但在本研究中沒有考慮,如SE[16]、SK[24]、擴(kuò)展卷積[57]和NAS[48]。此外,經(jīng)過多年的快速發(fā)展,有許多精心設(shè)計(jì)的CNN主干網(wǎng),如Res2Net[12]、EfficientNet[48]和ResNeSt[60]。相反,基于變壓器的計(jì)算機(jī)視覺模型還處于發(fā)展的初級(jí)階段。因此,我們相信未來還有許多潛在的技術(shù)有待探索。我們希望我們的方法可以作為一個(gè)良好的起點(diǎn)。



PVT2

摘要:計(jì)算機(jī)視覺領(lǐng)域的變壓器最近取得了令人鼓舞的進(jìn)展。本文對(duì)原有的金字塔視覺變換器(PVTv1)進(jìn)行了改進(jìn),增加了三種改進(jìn)設(shè)計(jì),包括:(1)重疊塊嵌入;(2)卷積前饋網(wǎng)絡(luò);(3)線性復(fù)雜度注意層

通過這些簡單的修改,我們的PVTv2在分類、檢測和分割方面顯著地改進(jìn)了PVTv1。此外,PVTv2實(shí)現(xiàn)了比最近的工作,包括Swin變壓器更好的性能。我們希望這項(xiàng)工作將使最先進(jìn)的視覺變壓器的研究更容易。代碼位于https://github.com/whai362/PVT

1.引言

最近對(duì)視覺變換器的研究主要集中在主干網(wǎng)絡(luò)[7,29,31,32,21,34,9,4]上,這些主干網(wǎng)絡(luò)是為圖像分類,目標(biāo)檢測,實(shí)例和語義分割等下游視覺任務(wù)而設(shè)計(jì)的。迄今為止,已經(jīng)取得了一些有希望的成果。例如,Vision Transformer(ViT)[7]首先證明了一個(gè)純變壓器可以在圖像分類中保存最先進(jìn)的性能。金字塔視覺變換器(PVT)[31]表明,在一些檢測和分割任務(wù)中,純變換器主干也可以超過CNN。之后,Swin-Transformer[21]、CoaT[34]、LeViT[9]和Twins[4]進(jìn)一步改進(jìn)了Transformer主干的分類、檢測和分割性能。

這項(xiàng)工作的目的是在PVTv1框架的基礎(chǔ)上建立更強(qiáng)大、更可行的基線。我們報(bào)告了三個(gè)改進(jìn)的設(shè)計(jì),即(1)重疊補(bǔ)丁嵌入,(2)卷積前饋網(wǎng)絡(luò)和(3)線性復(fù)雜度注意層,與PVTv1框架正交,當(dāng)與PVT結(jié)合使用時(shí),它們可以帶來更好的圖像分類、目標(biāo)檢測、實(shí)例和語義分割性能。具體來說,PVTv2-B5(注釋:PVTv2有6個(gè)不同大小型號(hào),從B0到B5)在ImageNet上產(chǎn)生83.8%的top-1錯(cuò)誤,這明顯優(yōu)于Swin-B[21]和Twins-SVT-L[4],而PVTv2-B5的參數(shù)和gflop較少。此外,GFL[17](Generalized focal loss)與PVT-B2在COCO val2017上的記錄值為50.2 AP,比與SWN-T[21]的記錄值高2.6 AP,比與ResNet50[12]的記錄值高5.7 AP。希望這些改進(jìn)后的基線能為未來視覺轉(zhuǎn)換器的研究提供參考。

2.相關(guān)工作

變壓器主干。????ViT[7]將每個(gè)圖像視為一系列具有固定長度的 tokens (patches),然后將它們饋送到多個(gè)Transformer層進(jìn)行分類。這是第一個(gè)證明在訓(xùn)練數(shù)據(jù)足夠的情況下(例如ImageNet22k[6],JFT-300M),純變壓器也可以在圖像分類中保存最新性能的工作。DeiT[29]進(jìn)一步探索了一種數(shù)據(jù)高效的ViT訓(xùn)練策略和蒸餾方法。

為了提高圖像分類的性能,最近的一些方法對(duì)ViT進(jìn)行了定制的修改。T2T ViT[35]將重疊滑動(dòng)窗口內(nèi)的令牌逐步連接成一個(gè)令牌。TNT[10]利用內(nèi)部和外部變換塊分別生成像素嵌入和塊嵌入(pixel embeddings and patch embeddings)。CPVT[5]用條件位置編碼(conditional position encodings)代替了ViT中嵌入的固定大小的位置編碼,使得處理任意分辨率的圖像更容易。CrossViT[2]通過雙分支變壓器處理不同大小的圖像塊。LocalViT[18]將深度卷積合并到視覺變換器中,以改善特征的局部連續(xù)性。

為了適應(yīng)密集的預(yù)測任務(wù),如目標(biāo)檢測、實(shí)例和語義分割,也有一些方法[31、21、32、34、9、4]將CNNs中的金字塔結(jié)構(gòu)引入到變壓器主干的設(shè)計(jì)中。PVTv1是第一個(gè)金字塔結(jié)構(gòu)變換器,它提出了一個(gè)具有四個(gè)階段的層次變換器,表明一個(gè)純變換器主干可以像CNN主干一樣通用,在檢測和分割任務(wù)中表現(xiàn)更好。在那之后,[21,32,34,9,4]進(jìn)行了改進(jìn),增強(qiáng)了特征的局部連續(xù)性,消除了固定大小的位置嵌入。例如,Swin Transformer[21]用相對(duì)位置偏置代替了固定大小的位置嵌入,并限制了移動(dòng)窗口內(nèi)的自注意。CvT[32]、CoaT[34]和LeViT[9]將類似卷積的運(yùn)算引入到視覺變壓器中。Twins[4]將局部注意和全局注意機(jī)制結(jié)合起來,以獲得更強(qiáng)的特征表示。

3.改進(jìn)的金字塔視覺變換器

PVTv1的限制。? ? (1) 與ViT[7]類似,PVTv1[31]將圖像視為一系列不重疊的patch,這在一定程度上喪失了圖像的局部連續(xù)性(2) PVTv1中的位置編碼是固定大小的,這對(duì)于處理任意大小的圖像是不靈活的(3)當(dāng)處理高分辨率輸入(例如,短邊為800像素)時(shí),PVTv1的計(jì)算復(fù)雜度相對(duì)較大。這些問題限制了PVTv1在視覺任務(wù)上的性能。

為了解決這些問題,我們提出了PVTv2,它通過以下設(shè)計(jì)改進(jìn)了PVTv1:

重疊補(bǔ)丁嵌入(Overlapping Patch Embedding)。????我們利用重疊補(bǔ)丁嵌入來標(biāo)記圖像。如圖1(a)所示,我們放大了patch window,使相鄰窗口重疊一半的面積,并用零填充特征圖以保持分辨率。在這項(xiàng)工作中,我們使用帶零填充的卷積來實(shí)現(xiàn)Overlapping Patch Embedding。具體來說,給定一個(gè)輸入形狀為h\times w\times c,我們將其輸入給一個(gè)卷積,卷積步幅為S,核大小為2S-1,填充大小為S-1,核數(shù)為c’。輸出形狀為\frac{h}{S} \times \frac{w}{S} \times c’

有卷積的前饋。????受[16,5,18]的啟發(fā),我們?nèi)サ袅斯潭ù笮〉奈恢镁幋a[7],并在PVT中引入了零填充位置編碼。如圖1(b)所示,我們在前饋網(wǎng)絡(luò)中第一個(gè)全連接(FC)層和GELU[14]之間添加一個(gè)3×3深度卷積,其padding size為1。

線性空間收縮注意力。????為了進(jìn)一步降低PVT的計(jì)算成本,我們提出了線性空間縮減注意(SRA),如圖2所示。與SRA不同的是,線性SRA像卷積層一樣具有線性計(jì)算和存儲(chǔ)成本。具體來說,給定一個(gè)大小為h×w×c的輸入,SRA和線性SRA的復(fù)雜性為:

\Omega ( \mathrm{SRA})=\frac{2h^2 w^2 c}{R^2 } +hwc^2 R^2? ??(1)

\Omega (\mathrm{LinearSRA})=2hwP^2 c? ??(2)

其中R是SRA的空間壓縮比[31]。P是線性SRA的池大小(pooling size),默認(rèn)設(shè)置為7。

圖2 PVTv1中的SRA和PVTv2中的LinearSRA

結(jié)合這三種改進(jìn),PVTv2可以(1)獲得更多的圖像和特征圖的局部連續(xù)性(2) 靈活處理變量分辨率輸入(3) 享受和CNN一樣的線性復(fù)雜度。

4? PVTv2系列細(xì)節(jié)

我們通過改變超參數(shù)將PVTv2從B0擴(kuò)展到B5。具體如下:

?????S_i:第i階段重疊斑塊嵌入的步幅the stride of the overlapping patch embedding;

?????C_i:第i級(jí)輸出的通道數(shù);

?????L_i:第i階段的編碼器層數(shù);

?????R_i:第i階段SRA的收縮比;

?????P_i:第i階段線性SRA的自適應(yīng)平均池大小adaptive average pooling size;

?????N_i:第i階段高效自注意的頭數(shù);

?????E_i:第i階段前饋層的膨脹率[30];

表1顯示了PVTv2系列的詳細(xì)信息。我們的設(shè)計(jì)遵循ResNet的原則[13](1) 隨著層深的增加,通道維數(shù)增加,空間分辨率減小(2)階段3分配給大部分計(jì)算成本。

5.實(shí)驗(yàn)

5.1. 圖像分類

設(shè)置。????圖像分類實(shí)驗(yàn)在ImageNet-1K數(shù)據(jù)集[25]上進(jìn)行,該數(shù)據(jù)集包含128萬個(gè)訓(xùn)練圖像和50K個(gè)驗(yàn)證圖像,1000個(gè)類別。所有模型都在訓(xùn)練集上訓(xùn)練以進(jìn)行公平比較,并在驗(yàn)證集中報(bào)告top-1 error。我們遵循DeiT[29],并應(yīng)用隨機(jī)裁剪、隨機(jī)水平翻轉(zhuǎn)[27]、標(biāo)簽平滑正則化[28]、混合[36]和隨機(jī)擦除[38]作為數(shù)據(jù)增強(qiáng)。在訓(xùn)練期間,我們使用AdamW[23],動(dòng)量為0.9,mini批量為128,權(quán)重衰減為5× 10?2。初始學(xué)習(xí)速率設(shè)置為1× 10?3,余弦衰減[22]。所有模型都在8個(gè)V100 gpu上從頭開始訓(xùn)練300個(gè)時(shí)代。我們對(duì)基準(zhǔn)測試的驗(yàn)證集應(yīng)用中心裁剪至224×224。

結(jié)果。????在表2中,我們看到PVTv2是ImageNet-1K分類的最新方法。與PVT相比,PVTv2具有相似的FLOPs和參數(shù),但圖像分類精度有很大提高。例如,PVTv2-B1比PVTv1-Tiny高3.6%,PVTv2-B4比PVT-Large高1.9%。與最近的同類產(chǎn)品相比,PVTv2系列在精度和型號(hào)尺寸方面也有很大的優(yōu)勢。例如,PVTv2-B5達(dá)到83.8%的ImageNet top-1精度,比Swin Transformer[21]和Twins[4]高0.5%,而我們的參數(shù)和Flops更少。

5.2. 目標(biāo)檢測

設(shè)置。? ? 目標(biāo)檢測實(shí)驗(yàn)是在具有挑戰(zhàn)性的COCO基準(zhǔn)上進(jìn)行的[20]。所有模型都在COCO train2017(118k圖片)上接受培訓(xùn),并在val2017(5k圖片)上接受評(píng)估。我們驗(yàn)證了PVTv2主干在主流探測器上的有效性,包括RetinaNet[19]、Mask R-CNN[11]、Cascade Mask?R-CNN[1]、ATSS[37]、GFL[17]和 Sparse R-CNN[26]。在訓(xùn)練之前,我們使用ImageNet上預(yù)訓(xùn)練的權(quán)值來初始化主干,并使用Xavier[8]來初始化新添加的層。我們在8個(gè)v100gpu上訓(xùn)練批量為16的所有模型,并采用AdamW[23],初始學(xué)習(xí)率為1× 10?4作為優(yōu)化器。按照慣例[19,11,3],我們采用1× 或3× 所有檢測模型的訓(xùn)練計(jì)劃(即12或36個(gè)周期)。調(diào)整訓(xùn)練圖像的大小,使其短邊為800像素,而長邊不超過1333像素。當(dāng)使用3× 在訓(xùn)練計(jì)劃中,我們在[640,800]的范圍內(nèi)隨機(jī)調(diào)整輸入圖像的短邊大小。在測試階段,輸入圖像的短邊固定為800像素。

結(jié)果。????如表3所示,在模型尺寸相似的單級(jí)和兩級(jí)目標(biāo)探測器上,PVTv2顯著優(yōu)于PVTv1。例如,PVTv2-B4在RetinaNet[19]的基礎(chǔ)上達(dá)到了46.1 AP,在R-CNN的基礎(chǔ)上達(dá)到47.5 APb[11],分別比PVTv1模型增加了3.5 AP和3 AP^b。

為了公平比較PVTv2和Swin Trans-former[21],我們保持所有設(shè)置不變,包括ImageNet-1K預(yù)訓(xùn)練和COCO微調(diào)策略。我們在四種最先進(jìn)的探測器上評(píng)估了Swin變壓器和PVTv2,包括Cascade?R-CNN[1]、ATSS[37]、GFL[17]和Sparse?R-CNN[26]。在所有的檢測器中,PVTv2比Swin-Transformer獲得了更好的AP,顯示了其更好的特征表示能力。例如,在ATSS上,PVTv2與Swin-T具有相似的參數(shù)和FLOPs,但是PVTv2達(dá)到49.9ap,比Swin-T高2.7。我們的PVTv2-Li可以大大減少計(jì)算量,從258GFlops縮減至到194GFlops,同時(shí)只犧牲一點(diǎn)性能。

編者注:

訓(xùn)練檢測模型踩坑記:

1. mmcv的安裝版本:

https://blog.csdn.net/jizhidexiaoming/article/details/108837584

https://hub.fastgit.org/open-mmlab/mmcv? ? (一定要點(diǎn)進(jìn)去看看,不要瞎填空,否則有的組合沒有,導(dǎo)致安裝報(bào)錯(cuò)一片紅)

2. 自己設(shè)計(jì)的模型沒有注冊:

https://hub.fastgit.org/whai362/PVT/issues/36

3. 自己設(shè)計(jì)的模型的num_classes=1000,與coco數(shù)據(jù)集的不匹配:

把自己設(shè)計(jì)的主干的.py文件復(fù)制粘貼過去的時(shí)候,要把self.num_classes那行注釋掉,把self.head注釋掉, 把def forward_features()和def forward()中相應(yīng)的該注釋掉的注釋掉(即不計(jì)算分類頭的部分)

4.?[Errno 2] No such file or directory: '/....../train2017/000000575652.jpg'

別人的:https://zhuanlan.zhihu.com/p/70878433

冷靜,不一定是數(shù)據(jù)集下載錯(cuò)的原因

coco官網(wǎng):https://cocodataset.org/#home

https://zhuanlan.zhihu.com/p/29393415

coco訓(xùn)練集的說明:https://blog.csdn.net/qq_37643960/article/details/103466904

這里也有下載鏈接:https://blog.csdn.net/qq_41185868/article/details/82939959

經(jīng)過驗(yàn)證,上面那個(gè)鏈接下載的數(shù)據(jù)集是沒問題的

5.[W reducer.cpp:346] Warning: Grad strides do not match bucket view strides. This may indicate grad was not created according to the gradient layout contract, or that the param's strides changed since DDP was constructed. This is not an error, but may impair performance.

grad.sizes() = [1024, 1, 3, 3], strides() = [9, 1, 3, 1]

bucket_view.sizes() = [1024, 1, 3, 3], strides() = [9, 9, 3, 1] (function operator())

沒找到哪一句導(dǎo)致這個(gè)問題。把模型里所有.view換成.reshape,在所有transpose后面接.contiguous(),問題解決。

6. 從第一次迭代開始,出現(xiàn) loss_cls: nan, loss_bbox: nan, loss: nan

是在ImageNet上預(yù)訓(xùn)練權(quán)重未成功加載導(dǎo)致nan。不知道m(xù)mdet是怎么加載的。手動(dòng)再加載一下,問題解決。

co

? ? PVTv2的語義分割結(jié)果(在arxiv論文里沒有更新,但是前幾天有開源):https://github.com/whai362/PVTv2-Seg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,327評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,996評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,316評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,406評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,128評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,524評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,576評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,759評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,310評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,065評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,249評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,821評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,479評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,909評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,140評(píng)論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,984評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,228評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容