復現(xiàn)可能是坑的地方:https://hub.fastgit.org/whai362/PVT/issues/21
作者論文里說聊倔,mini-batch=128见妒,用了8個GPU
這里 mini-batch 不等于 batchsize须揣,也就是說耻卡,batch-size = 8x128
因此卵酪,設置你的學習率的時候,要相應的線性縮放
摘要:雖然卷積神經(jīng)網(wǎng)絡(CNNs)在計算機視覺中取得了巨大的成功,但本文研究了一種簡單的骨干網(wǎng)絡最铁,它可以用于許多沒有卷積的密集預測任務冷尉。與最近提出的專門用于圖像分類的Transformer模型(如ViT)不同,我們提出了金字塔視覺Transformer(PVT)雾棺,它克服了將Transformer移植到各種密集預測任務的困難捌浩。與現(xiàn)有技術(shù)相比尸饺,PVT具有若干優(yōu)點:(1) 與通常具有低分辨率輸出以及高計算和存儲成本的ViT不同螟碎,PVT不僅可以在圖像的密集分區(qū)上訓練以獲得高輸出分辨率抚芦,這對于密集預測非常重要尔崔,而且可以使用漸進收縮金字塔來減少大特征圖的計算季春;(2) PVT繼承了CNN和Transformer的優(yōu)點载弄,通過簡單地替換CNN主干惫叛,使其成為各種視覺任務中的統(tǒng)一主干嘉涌,而無需卷積;(3) 我們通過大量的實驗驗證了PVT的有效性警医,實驗結(jié)果表明PVT可以提高許多下游任務的性能侈玄,如目標檢測拗馒、語義和實例分割等。例如挥等,在相當數(shù)量的參數(shù)下肝劲,RetinaNet+PVT在COCO數(shù)據(jù)集上達到40.4ap辞槐,超過RetinaNet+ResNet50(36.3ap)4.1ap。我們希望PVT可以作為像素級預測的一個替代和有用的主干鹿榜,并促進未來的研究舱殿。代碼位于https://github.com/whai362/PVT
1.引言
卷積神經(jīng)網(wǎng)絡(CNN)在計算機視覺領域取得了顯著的成功,在幾乎所有的計算機視覺任務中都成為了一種通用且占主導地位的方法[9供汛,28雀久,11,63越庇,41,15搬味,56,36,14强戴,27,7道媚,21]。然而镀脂,這項工作是試圖探索新的無卷積的多功能骨干網(wǎng)絡钞馁。我們研究了一種超越CNN的替代模型,用于密集預測任務,如目標檢測绩鸣、語義和實例分割,而不是圖像分類捡多。
受Transformer[51]在自然語言處理(NLP)中的成功啟發(fā),許多研究人員正試圖探索Transformer在計算機視覺中的應用。例如榜掌,一些著作[4、64熟菲、55允蚣、43森渐、17]將視覺任務建模為具有可學習查詢的字典查找問題,并將Transformer解碼器用作CNN主干(如VGG[41]和ResNet[15])頂部的特定于任務的頭部耐齐。雖然一些現(xiàn)有技術(shù)已經(jīng)將注意模塊[53、35、61]并入CNNs喜命,但據(jù)我們所知,探索干凈且無卷積的變壓器主干以解決計算機視覺中的密集預測任務的研究很少。
最近二庵,Dosovitskiy等人[10]使用Transformer進行圖像分類。這是一個有趣而有意義的嘗試,用一個無卷積的模型來代替CNN主干攀涵。如圖1(b)所示,ViT具有柱狀結(jié)構(gòu)炉媒,其輸入為粗糙的圖像塊(即,用較大的塊大小分割圖像)。(注:由于計算資源的限制蜗元,ViT無法使用更細的圖像分塊(例如4×4)作為輸入,只能以粗塊(例如32×32)作為輸入,這導致其輸出是低分辨率的,即1/32尺寸芯杀。)盡管ViT適用于圖像分類,但直接適應像素級的密集預測(如目標檢測和分割)是一個挑戰(zhàn),因為(1)其輸出特征圖只有一個低分辨率的單一尺度太援;(2)即使對于常見的輸入圖像大凶笄弧(如:COCO檢測基準中短邊長為800像素的圖像)振亮,其內(nèi)存占用和計算量也比較高。
為了彌補上述局限性,本文提出了一種基于變換器模型的無卷積主干網(wǎng)絡星瘾,稱為金字塔視覺變換器(PVT)盒齿,它可以作為多種下游任務的主干翎承,包括圖像級預測和像素級密集預測。具體來說,如圖1(c)所示,與ViT不同誊酌,PVT通過(1)采用細粒度圖像塊(4 × 4 per patch)克服了傳統(tǒng)變壓器的困難瘟仿,作為輸入學習高分辨率表示驹止,這對于密集的預測任務是必不可少的衣洁,(2)在網(wǎng)絡深度增加時引入漸進收縮金字塔以減少變換器的序列長度撤卢,顯著減少計算量拷邢,(3)采用空間收縮注意(SRA,spatial-reduction attention)層,進一步降低學習高分辨率特征地圖的資源開銷集灌。
總體而言悔雹,PVT具有以下優(yōu)點。首先欣喧,相對于傳統(tǒng)的CNN主干(見圖1(a))感受野隨著深度的增加而增加驯鳖,PVT總是產(chǎn)生一個全局感受野(通過所有小patch之間的注意),它比CNN的局部感受野更適合檢測和分割删咱。其次严望,與ViT(見圖1(b))相比,由于金字塔結(jié)構(gòu)的進步台腥,我們的方法更容易插入許多具有代表性的密集預測管道俱济,例如RetinaNet[27]和Mask R-CNN。第三邀跃,利用PVT,我們可以將PVT與其他針對不同任務設計的Transformer解碼器相結(jié)合,構(gòu)建一個無卷積的流水線墓拜,例如PVT+DETR[4]用于目標檢測鞍泉。例如,據(jù)我們所知肮帐,我們的實驗給出了第一個端到端的目標檢測管道PVT+DETR咖驮,它完全沒有卷積边器。它在COCO val2017上達到34.7,優(yōu)于基于ResNet50的原始DETR托修。
這項工作的主要貢獻如下忘巧。
?????我們提出了金字塔視覺轉(zhuǎn)換器(PVT),它是第一個為各種像素級密集預測任務設計的無卷積主干睦刃。結(jié)合PVT和DETR砚嘴,我們可以建立一個端到端的目標檢測系統(tǒng),不需要卷積和手工制作的組件涩拙,如密集錨和非最大抑制(NMS)际长。
?????我們克服了將Transformer移植到密集像素級預測時的許多困難,通過設計漸進收縮金字塔和空間縮減注意(SRA)吃环,能夠減少使用Transformer的資源消耗,使PVT靈活地學習多尺度和高分辨率特征圖洋幻。
?????我們通過將PVT應用于許多不同的任務(如圖像分類郁轻、目標檢測和語義分割)來驗證PVT,并將其與精心設計的Resnet[15]和ResNeXts[56]進行比較文留。如圖2所示好唯,與現(xiàn)有技術(shù)相比,具有不同參數(shù)數(shù)目的PVT能夠持續(xù)地改進性能燥翅。例如骑篙,RetinaNet+PVTSmall在COCO val2017上達到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ù)個數(shù)減少了30%杨名。
2.????相關(guān)工作
2.1. 計算機視覺中的卷積主干
卷積塊是深度神經(jīng)網(wǎng)絡在視覺識別中的重要組成部分。[23]中首次引入了標準和基本卷積塊來區(qū)分手寫數(shù)字猖毫。該區(qū)塊包含一定感受野的卷積核台谍,捕捉有利的視覺環(huán)境。為了引入平移等價性吁断,卷積核的權(quán)值在整個圖像空間中共享趁蕊。隨著計算資源(例如,GPU)的快速發(fā)展仔役,在大規(guī)模圖像分類數(shù)據(jù)集(例如掷伙,ImageNet[38])上成功訓練幾個卷積塊[22,41]的堆棧成為可能又兵。GoogLeNet[46]證明了包含多個核路徑的卷積算子可以獲得非常有競爭力的性能炎咖。在Inception系列[47,45]、ResNeXt[56]、DPN[8]乘盼、MixNet[52]和SKNet[24]中進一步驗證了多徑卷積塊的有效性升熊。此外,ResNet[15]提出了卷積塊中的跳躍連接绸栅,這使得非常深的網(wǎng)絡成為可能级野,并在計算機視覺領域產(chǎn)生了令人印象深刻的影響。DenseNet[18]引入了密接拓撲粹胯,它將每個卷積塊與其之前的塊連接起來蓖柔。在最近的survey/review論文[20,40]中可以找到更新的進展。
2.2. 密集預測任務
密集預測任務的目標是對特征圖進行像素級分類或回歸风纠。目標檢測和語義分割是兩個典型的密集預測任務况鸣。
目標檢測。????在深度學習時代竹观,CNN[23]已成為目標檢測的主導框架镐捧,它包括單級探測器(如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])。這些常用的目標檢測器大多建立在高分辨率或多尺度特征圖上拗窃,以獲得良好的檢測性能瞎领。最近,DETR[4]和可變形DETR[64]結(jié)合CNN骨干網(wǎng)和變壓器解碼器随夸,構(gòu)建了端到端對象檢測器默刚。與以前基于CNN的探測器一樣,它們還需要高分辨率或多尺度特征圖來精確檢測目標逃魄。
語義分割荤西。? ? CNN在語義分割中也起著重要作用。在早期伍俘,F(xiàn)CN[31]引入了全卷積結(jié)構(gòu)邪锌,以生成給定大小圖像的空間分割映射。之后癌瘾,Noh等人[34]引入轉(zhuǎn)置卷積運算觅丰,并在PASCAL VOC 2012數(shù)據(jù)集[39]上取得了令人印象深刻的性能。在FCN的啟發(fā)下妨退,針對醫(yī)學圖像分割領域妇萄,提出了U-Net[37]蜕企,它將相應的低層和高層次特征圖之間的信息流連接起來,并實現(xiàn)了相同空間大小的圖像分割冠句。為了探索更豐富的全局上下文表示轻掩,趙等人[62]在不同的池尺度上設計了金字塔池模塊,Kirillov等人[21]基于FPN[26]開發(fā)了一個稱為語義FPN的輕量級分割頭懦底。DeepLab家族[6唇牧,29]在保持特征地圖分辨率的同時,利用擴張卷積來擴大接收域聚唐。與目標檢測方法類似丐重,語義分割方法也依賴于高分辨率或多尺度特征映射。
2.3. 計算機視覺中的自注意力和Transformer
由于卷積濾波器的權(quán)值在訓練后通常是固定的杆查,因此對其動態(tài)適應輸入的變化是不靈活的扮惦。因此,人們提出了許多通過自注意操作來緩解這一問題的方法亲桦。非局部塊[53]試圖對空間和時間上的長距離依賴性進行建模崖蜜,這對于準確的視頻分類是有益的。非局部算子雖然取得了成功烙肺,但其內(nèi)存和計算代價都很高纳猪。Criss-cross[19]通過僅通過criss-cross路徑生成稀疏注意圖氧卧,進一步降低了復雜性桃笙。Ramachandran等人[35]提出獨立的自注意(Stand-Alone Self-Attention,SASA)是用局部自我注意單位來代替卷積層沙绝。AANet[2](Attention augmented convolutional networks)將自我注意和卷積運算結(jié)合起來搏明,獲得了競爭性的結(jié)果。DETR[4]利用Transformer解碼器將目標檢測建模為具有可學習查詢的端到端字典查找問題闪檬,成功地消除了手工制作的過程星著,如非最大抑制(NMS)〈置酰基于DETR虚循,可變形DETR[64]進一步引入了可變形注意層,將注意力集中在一組稀疏的上下文元素上样傍,從而獲得快速收斂和更好的性能横缔。最近,Vision Transformer(ViT)[10]采用純Transformer[51]模型衫哥,通過將圖像處理為一系列patch來進行圖像分類茎刚。DeiT[50]通過使用一種新的蒸餾方法進一步擴展了ViT。與以往的方法不同撤逢,本文嘗試將金字塔結(jié)構(gòu)引入到變壓器中膛锭,設計了一個純變壓器主干粮坞,用于密集預測任務。
3.金字塔視覺變壓器(PVT)
3.1. 總體架構(gòu)
我們的目標是將金字塔結(jié)構(gòu)引入到Transformer中初狰,使它能夠為密集的預測任務(如目標檢測和語義分割)生成多尺度的特征映射莫杈。PVT的概述如圖3所示。與CNN主干[15]類似跷究,我們的方法有四個階段來生成不同尺度的特征圖姓迅。所有階段共享一個類似的架構(gòu),它由一個patch embedding layer和個Transformer編碼器層組成俊马。
在第一階段,給定一個大小為H×W×3的輸入圖像艘儒,我們先把它分為的patches(像ResNet一樣聋伦,我們輸出特征的最大分辨率為1/4尺寸),每個塊(patch)的大小是4×4×3界睁。然后觉增,我們將展平的塊(flattened patches)輸入給線性投影,這樣就得到嵌入的塊(embedded patches)翻斟,形狀為逾礁。然后,embedded patches連同位置嵌入一起通過一個層的變壓器編碼器访惜,輸出被reshape為特征圖嘹履,其形狀為。同樣地债热,使用來自前一階段的特征映射作為輸入砾嫉,我們獲得以下特征映射F2、F3和F4窒篱,其相對于輸入圖像的步長為8焕刮、16和32像素。利用特征金字塔{F1墙杯,F(xiàn)2配并,F(xiàn)3,F(xiàn)4}霍转,我們的方法可以很容易地應用于大多數(shù)下游任務荐绝,包括圖像分類,目標檢測和語義分割避消。
3.2. 變壓器特征金字塔
與CNN骨干網(wǎng)[15]使用卷積步長獲得多尺度特征圖不同低滩,我們的PVT使用漸進收縮策略progressive shrinking strategy通過patch embedding layers來控制特征圖的大小召夹。
這里,我們將第階段的patch size表示為恕沫。在第階段開始時监憎,我們首先將輸入的特征映射平均劃分為個patches,然后將每個patch展平婶溯,并線性投影為維的嵌入鲸阔。線性投影之后,?embedded patches的形狀可以看作為迄委,其高度和寬度小于輸入的倍褐筛。
通過這種方法,我們可以靈活地調(diào)整每個階段特征圖的比例叙身,從而可以為變壓器構(gòu)造一個特征金字塔渔扎。
3.3. 變壓器編碼器
對于階段中的變壓器編碼器,其具有個編碼器層信轿,并且每個編碼器層由注意層和前饋層組成[51]晃痴。由于我們的方法需要處理高分辨率(例如,1/4尺寸)特征圖财忽,我們提出了一種空間縮減注意(SRA)層來取代編碼器中傳統(tǒng)的多頭部注意(MHA)層[51]倘核。
與MHA類似祖凫,SRA還接收一個查詢Q琼蚯、一個鍵K和一個值V作為輸入酬凳,并輸出一個refined的特征惠况。不同的是,我們的SRA在注意操作之前減小K和V的空間尺度宁仔,如圖4所示稠屠,這大大減少了計算/內(nèi)存開銷。第階段SRA的詳細內(nèi)容可表述如下:
? ??
? ??
其中翎苫,权埠,,是線性投影的參數(shù)煎谍,是第階段Transformer編碼器的頭數(shù)攘蔽。因此,每個頭的維度等于呐粘。是空間收縮操作满俗,其定義為:
? ??
這里转捕,表示第階段注意力層的縮減比。是reshape操作唆垃,將輸入變形為尺寸是五芝。是線性投影,將輸入序列的維度縮減至辕万。是layer normalization[1]枢步。和Transformer[5]一樣,是注意力操作渐尿,計算為:
通過這些公式醉途,我們可以看出我們的操作的計算量/內(nèi)存占用比MHA小的倍,因此它可以用有限的資源處理較大的輸入特征映射/序列砖茸。
3.4. 模型詳細信息
綜上所述结蟋,我們方法的超參數(shù)如下:
?????:第階段的patch size;
?????:第級輸出的通道數(shù)渔彰;
?????:第階段的編碼器層數(shù)嵌屎;
?????:第階段SRA的縮減比;
?????:第階段SRA的頭數(shù)恍涂;
?????:第階段前饋層[51]的膨脹率宝惰;
遵循ResNet[15]的設計規(guī)則,我們(1)在淺級使用小的輸出通道數(shù)再沧;(2)將主要計算資源集中在中間階段尼夺。
為了提供討論的實例,我們在表1中描述了一系列不同規(guī)模的PVT模型炒瘸,即PVT-Tiny淤堵、-Small、-Medium和-Large顷扩。在具體的下游任務中使用這些模型的更多細節(jié)將在第4節(jié)中介紹拐邪。
3.5. 討論
與我們的方法最相關(guān)的工作是ViT[10]。在這里我們詳細討論了它們之間的關(guān)系和區(qū)別犀农。
PVT和ViT都是無卷積運算的純變壓器模型惰赋。它們之間的主要區(qū)別是金字塔結(jié)構(gòu)。與傳統(tǒng)的變壓器[51]類似呵哨,ViT的輸出序列長度與輸入序列長度相同赁濒,這意味著ViT的輸出是單尺度的(見圖1(b))贵扰。此外,由于資源有限流部,ViT的輸出是粗粒度的(例如戚绕,the patch size is 16 or 32 pixels),因此其輸出分辨率相對較低(例如枝冀,1/16尺寸或1/32尺寸)舞丛。因此,在需要高分辨率或多尺度特征圖的密集預測任務中果漾,很難直接應用ViT球切。
我們的PVT通過引入一個漸進收縮金字塔打破了變壓器的常規(guī)。它可以像傳統(tǒng)的CNN主干一樣生成多尺度特征圖绒障。此外吨凑,我們還設計了一個簡單而有效的注意層SRA,用于處理高分辨率的特征映射户辱,減少計算/內(nèi)存開銷鸵钝。得益于上述設計,我們的方法比ViT具有以下優(yōu)點:1)更靈活庐镐,在不同階段可以生成不同尺度恩商、不同通道的特征圖;2) 在大多數(shù)下游任務模型中必逆,可以很容易地并入和起作用怠堪;3) 更友好的計算/內(nèi)存可以處理更高分辨率的特征圖。
4.應用于下游任務
4.1. 圖像級預測
圖像分類是圖像級預測中最具代表性的任務名眉。繼ViT[10]和DeiT[50]之后粟矿,我們在最后一個階段的輸入中添加一個可學習的分類令牌(a learnable classification token),然后使用一個全連接的層在分類令牌的頂部進行分類损拢。
4.2. 像素級密集預測
除了圖像級預測之外陌粹,在下游任務中還經(jīng)常看到需要在特征圖上執(zhí)行像素級分類或回歸的密集預測探橱。在這里申屹,我們討論兩個典型的任務绘证,即目標檢測和語義分割隧膏。
目標檢測。? ? 我們將我們的PVT模型應用于兩種具有代表性的目標檢測方法嚷那,即RetinaNet[27]和Mask R-CNN[14]胞枕。RetinaNet是一種應用廣泛的單級檢測器,Mask R-CNN是主流的兩級實例分割框架之一魏宽。具體實現(xiàn)細節(jié)如下:(1)與ResNet一樣腐泻,我們直接使用輸出特征金字塔{F1决乎,F(xiàn)2,F(xiàn)3派桩,F(xiàn)4}作為FPN的輸入[26]构诚,然后將細化后的特征映射反饋給后續(xù)檢測或?qū)嵗指铑^(2) 在目標檢測中,輸入可以是任意形狀铆惑,因此在ImageNet上預訓練的位置嵌入可能不再有意義范嘱。因此,我們根據(jù)輸入圖像對預先訓練好的位置嵌入進行雙線性插值(3) 在檢測模型的訓練過程中员魏,PVT中的所有層都不會被凍結(jié)丑蛤。
語義分割。????我們選擇語義FPN[21]作為基線撕阎,這是一種簡單的分割方法受裹,無需特殊操作(例如,擴展卷積)虏束。因此棉饶,用它作為基線可以很好地檢驗主干的原始有效性。與目標檢測中的實現(xiàn)類似镇匀,我們將特征金字塔直接輸入到語義FPN中砰盐,并使用雙線性插值來調(diào)整預訓練位置嵌入的大小。
5.實驗
我們將PVT與兩個最具代表性的CNN主干進行比較坑律,即ResNet[15]和ResNeXt[56]岩梳,這兩個主干被廣泛用于許多下游任務的基準測試。
5.1. 圖像分類
實驗設置晃择。? ? 我們在ImageNet數(shù)據(jù)集上進行了圖像分類實驗冀值。ImageNet 2012數(shù)據(jù)集[38]包含128萬個訓練圖像和50K個驗證圖像,1000個類別宫屠。我們在訓練集中訓練模型列疗,并在驗證集中報告top-1 error。為了公平比較浪蹂,我們按照DeiT[50]執(zhí)行random-size cropping至224×224抵栈,隨機水平翻轉(zhuǎn)[46],和mixup數(shù)據(jù)增強[59]坤次。在訓練期間使用標簽平滑正則化[47]古劲。我們默認使用AdamW[33],動量為0.9缰猴,最小批量為128产艾,權(quán)重衰減為。初始學習速率設置為,余弦衰減[32]闷堡。所有模型都在8個V100 gpu上從頭開始訓練300個epoch隘膘。為了進行基準測試,我們在驗證集上應用中心裁剪杠览,裁剪至224×224像素弯菊。
結(jié)果。? ? 在表2中踱阿,我們發(fā)現(xiàn)在相同的參數(shù)數(shù)目和計算預算下误续,我們的PVT模型優(yōu)于傳統(tǒng)的CNN主干。例如扫茅,當GFLOPs大致相似時蹋嵌,PVT Small的top-1誤差達到20.2,比ResNet50[15](21.5)高1.3葫隙。同時栽烂,在類似或相對較低的復雜度下,我們的PVT系列存檔性能與最近提出的基于變壓器的模型(如ViT[10]和DeiT[50])相當(即18.2對18.3)恋脚。這個結(jié)果在預期之內(nèi)腺办,因為金字塔結(jié)構(gòu)可能有利于密集的預測任務,但是它給圖像分類帶來的收益是有限的糟描。
注意怀喉,ViT和DeiT可能有局限性,因為它們是專門為分類任務設計的船响,這不適用于通常需要有效特征金字塔的密集預測任務躬拢。
5.2. 目標檢測
實驗設置。????我們在具有挑戰(zhàn)性的COCO基準上進行目標檢測實驗[28]见间。所有模型都在COCO train2017上接受培訓(~118k圖像)聊闯,并在val2017(5k圖像)上進行評估。我們在兩個標準的檢測器上評估我們的PVT主干:RetinaNet[27]和Mask R-CNN[14]米诉。在訓練過程中菱蔬,我們首先使用ImageNet上預先訓練好的權(quán)值來初始化主干,然后使用Xavier[13]來初始化新添加的層史侣。我們的模型在8個V100 gpu上以16的批量大小進行訓練拴泌,并通過AdamW[33]進行優(yōu)化,初始學習率為1×10?4.按照常見的設置[27惊橱,14蚪腐,5],所有檢測模型李皇,我們采用1× 或3× 的訓練計劃(即12或36個epoch)削茁。訓練圖像被調(diào)整到短邊為800像素宙枷,而長邊不超過1333像素掉房。使用3×? 訓練計劃中茧跋,我們還隨機調(diào)整輸入圖像的短邊長在[640,800]范圍內(nèi)卓囚。在測試階段瘾杭,輸入圖像的短邊固定為800像素。
結(jié)果哪亿。????如表3所示粥烁,使用RetinaNet進行目標檢測時,我們發(fā)現(xiàn)當參數(shù)數(shù)目相當時蝇棉,PVT變體顯著優(yōu)于其對應變體讨阻,這表明我們的PVT可以作為CNN主干的一個很好的目標檢測替代品。例如篡殷,使用1× 訓練計劃中钝吮,RetinaNet+PVT-Tiny比RetinaNet+ResNet18[15]高4.9ap(36.7比31.8)。此外板辽,3× 訓練計劃和多尺度訓練奇瘦,RetinaNet+PVT-Large-達到 43.4ap,超過RetinaNet+ResNeXt101-64x4d[56]41.8ap劲弦,而我們的參數(shù)數(shù)減少了30%(71.1M比95.5M)耳标。
在使用Mask R-CNN的實例分割實驗中也發(fā)現(xiàn)了類似的結(jié)果,如表4所示× 訓練計劃中邑跪,Mask R-CNN+PVT-Tiny達到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. 語義分割
實驗設置夜赵。????我們選擇了ADE20K[63]明棍,這是一個具有挑戰(zhàn)性的場景分析基準耕姊,用于語義分割渐裸。ADE20K包含150個細粒度語義類別,其中分別有20210哈雏、2000和3352個圖像用于訓練嘁傀、驗證和測試兴蒸。我們將PVT主干應用于Semantic FPN[21](Panoptic feature pyramid networks),這是一種沒有擴展卷積的簡單分割方法[57]细办,以此來評估我們的PVT主干橙凳。在訓練階段蕾殴,主干用ImageNet上預先訓練的權(quán)重初始化[9],其他新添加的層用Xavier初始化[13]岛啸。我們使用AdamW[33]優(yōu)化模型钓觉,初始學習率為1e-4。按照常見設置[21,6]坚踩,我們在4個V100 gpu上訓練80k迭代的模型荡灾,批量大小為16。學習率按polynomial衰減規(guī)律衰減瞬铸,冪為0.9批幌。我們隨機調(diào)整訓練圖像的大小并將其裁剪為512× 512并在測試期間將圖像縮放到短邊長為512。
結(jié)果嗓节。????如表5所示荧缘,在不同的參數(shù)尺度下,我們的PVT始終優(yōu)于ResNet[15]和ResNeXt[56]拦宣,使用語義FPN進行語義分割截粗。例如,在參數(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)从诲,這表明對于語義分段來說,我們的PVT可以提取比CNN更好的特征靡羡,這得益于全局注意機制系洛。
5.4. 純變壓器密集預測
我們在DETR[4]上用PVT代替ResNet50進行檢測,Trans2Seg[55]進行分割略步,構(gòu)建了純變壓器密集預測管道描扯。實驗結(jié)果表明,完全無卷積變換在目標檢測和語義分割方面都有很好的效果趟薄。
PVT+DETR? ? 我們將我們的PVT與DETR[4]相結(jié)合绽诚,建立了一個用于目標檢測的純變壓器模型,DETR具有基于變壓器的檢測頭杭煎。我們在COCO train2017上培訓了50個epoch的模型恩够,初始學習率為1× 10?4.在第33個時期,學習率除以10羡铲。我們使用隨機翻轉(zhuǎn)和隨機縮放作為數(shù)據(jù)擴充蜂桶。所有其他實驗設置與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é)合,建立了一個用于語義分割的純Transformer模型疆股,Trans2Seg是一個基于Transformer解碼器的分割頭费坊。根據(jù)第5.3節(jié)的實驗設置。我們在ADE20K[63]數(shù)據(jù)集上進行了40k迭代訓練押桃、單尺度測試的實驗葵萎,并與ResNet50+Trans2Seg导犹、DeeplabV3+dilation 8(d8)和16(d16)進行了比較唱凯,如表7所示。
我們發(fā)現(xiàn)PVT Small+Trans2Seg達到42.6mIoU谎痢,優(yōu)于ResNet50-d8+DeeplabV3+(41.5)磕昼。注意,ResNet50-d8+DeeplabV3+具有120.5gflops节猿,這是由于擴展卷積的高計算成本票从,而我們的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. 燒蝕研究
實驗設置。? ? 我們對ImageNet[9]和COCO[28]數(shù)據(jù)集進行消融研究雪侥。ImageNet上的實驗設置與Sec5.1.中的設置相同碗殷。在COCO數(shù)據(jù)集上,所有模型都使用1×? 訓練時間表(即12個時期)和其他實驗設置遵循第5.2.?節(jié)中的設置校镐。
金字塔結(jié)構(gòu)亿扁。????金字塔結(jié)構(gòu)是應用于密集預測任務的關(guān)鍵。以前的ViT是一個列式框架鸟廓,其輸出是單尺度的从祝。它提出了一個問題襟己,當使用粗糙的圖像補丁(例如牍陌,32×32 per patch)作為輸入擎浴,輸出特征圖的分辨率較低,導致檢測性能較差(COCO val2017上為31.7 AP)毒涧,如表8所示贮预。當使用細粒度圖像塊(例如,4×4 per patch)作為輸入契讲,ViT將耗盡GPU內(nèi)存(例如32G)仿吞。不同的是,我們的方法通過一個漸進收縮金字塔來避免這個問題捡偏。該方法可以處理淺部高分辨率特征圖和深部低分辨率特征圖唤冈。因此,我們的方法在COCO val2017上獲得了40.4的有希望的AP银伟,比ViT Small/32高8.7 AP(40.4比31.7)你虹。
更深與更寬。????CNN主干是應該更深入還是更廣泛的問題已經(jīng)在以前的工作中進行了廣泛的討論[15,58]彤避。在這里傅物,我們在我們的PVT中探索這個問題。為了公平比較琉预,我們將PVT Small的隱藏維度{C1董饰,C2,C3模孩,C4}乘以比例因子1.4尖阔,使其具有與深度模型(即PVT Medium)等價的參數(shù)數(shù)。如表9所示榨咐,在ImageNet和COCO上介却,deep模型(即PVT-Medium)始終優(yōu)于wide模型(即PVT-Small-wide)。因此块茁,在PVT的設計中齿坷,更深的設計比更寬的設計更有效∈福基于這一觀察結(jié)果永淌,在表1中,我們通過增加模型深度開發(fā)了不同尺度的PVT模型佩耳。
預訓練的權(quán)重遂蛀。????大多數(shù)密集的預測模型(例如RetinaNet[27])依賴于主干,其權(quán)重是在ImageNet上預先訓練的干厚。我們在PVT中也討論了這個問題李滴。在圖5的頂部螃宙,我們繪制了RetinaNet-PVT-Small使用(紅色曲線)和不使用(藍色曲線)預訓練權(quán)重的驗證AP曲線。我們發(fā)現(xiàn)所坯,使用預訓練具有更好的收斂性谆扎,在1×訓練長度下,兩者區(qū)別達到13.8芹助;在3×訓練長度和多尺度訓練下堂湖,兩者區(qū)別達到8.4。因此状土,與基于CNN的模型一樣无蜂,預訓練權(quán)重也可以幫助基于PVT的模型更快更好地收斂。此外声诸,在圖5的底部酱讶,我們還看到基于PVT的模型(紅色曲線)的收斂速度比基于ResNet的模型(綠色曲線)更快退盯。
計算成本彼乌。????隨著輸入尺寸的增加,我們方法的GFLOPs增長率大于ResNet[15]渊迁,但小于ViT[10]慰照,如圖6所示,這意味著我們的PVT更適合中等分辨率輸入的任務(例如琉朽,較短的尺寸不超過800像素)毒租。在COCO上,輸入圖像的短邊是800像素箱叁。在這種情況下墅垮,基于PVT Small的RetinaNet的推理速度比基于ResNet50的推理速度慢,如表10所示耕漱。
解決這一問題的直接方法是縮小輸入規(guī)模算色。當將輸入圖像的短邊縮小到640像素時,基于PVT Small的模型比基于ResNet50的模型運行得更快螟够,但是我們的AP高出2.4(38.7比36.3)灾梦。另一個可能的解決方案是開發(fā)一種新的具有較低計算復雜度的視覺任務的自注意層。這是一個值得探索的方向妓笙,今后我們將繼續(xù)努力若河。
6.結(jié)論和今后的工作
在本文中,我們介紹了PVT寞宫,一個純變壓器骨干密集的預測任務萧福,如目標檢測和語義分割。為了在有限的計算/存儲資源下獲得多尺度特征圖辈赋,我們設計了一個漸進收縮金字塔和一個空間縮減注意層鲫忍。在目標檢測和語義分割基準上的大量實驗驗證了我們的PVT比設計良好的CNN主干在同等數(shù)量的參數(shù)下更強大毛俏。
盡管PVT可以作為CNN主干網(wǎng)的替代方案(如ResNet、ResNeXt)饲窿,但仍有一些特定的模塊和操作是為CNN設計的煌寇,但在本研究中沒有考慮,如SE[16]逾雄、SK[24]阀溶、擴展卷積[57]和NAS[48]。此外鸦泳,經(jīng)過多年的快速發(fā)展银锻,有許多精心設計的CNN主干網(wǎng),如Res2Net[12]做鹰、EfficientNet[48]和ResNeSt[60]击纬。相反,基于變壓器的計算機視覺模型還處于發(fā)展的初級階段钾麸。因此更振,我們相信未來還有許多潛在的技術(shù)有待探索。我們希望我們的方法可以作為一個良好的起點饭尝。
摘要:計算機視覺領域的變壓器最近取得了令人鼓舞的進展肯腕。本文對原有的金字塔視覺變換器(PVTv1)進行了改進,增加了三種改進設計钥平,包括:(1)重疊塊嵌入实撒;(2)卷積前饋網(wǎng)絡;(3)線性復雜度注意層涉瘾。
通過這些簡單的修改知态,我們的PVTv2在分類、檢測和分割方面顯著地改進了PVTv1立叛。此外负敏,PVTv2實現(xiàn)了比最近的工作,包括Swin變壓器更好的性能囚巴。我們希望這項工作將使最先進的視覺變壓器的研究更容易原在。代碼位于https://github.com/whai362/PVT
1.引言
最近對視覺變換器的研究主要集中在主干網(wǎng)絡[7,29彤叉,31庶柿,32,21秽浇,34浮庐,9,4]上,這些主干網(wǎng)絡是為圖像分類审残,目標檢測梭域,實例和語義分割等下游視覺任務而設計的。迄今為止搅轿,已經(jīng)取得了一些有希望的成果病涨。例如,Vision Transformer(ViT)[7]首先證明了一個純變壓器可以在圖像分類中保存最先進的性能璧坟。金字塔視覺變換器(PVT)[31]表明既穆,在一些檢測和分割任務中,純變換器主干也可以超過CNN雀鹃。之后幻工,Swin-Transformer[21]、CoaT[34]黎茎、LeViT[9]和Twins[4]進一步改進了Transformer主干的分類囊颅、檢測和分割性能。
這項工作的目的是在PVTv1框架的基礎上建立更強大傅瞻、更可行的基線踢代。我們報告了三個改進的設計,即(1)重疊補丁嵌入俭正,(2)卷積前饋網(wǎng)絡和(3)線性復雜度注意層奸鬓,與PVTv1框架正交,當與PVT結(jié)合使用時掸读,它們可以帶來更好的圖像分類、目標檢測宏多、實例和語義分割性能儿惫。具體來說,PVTv2-B5(注釋:PVTv2有6個不同大小型號伸但,從B0到B5)在ImageNet上產(chǎn)生83.8%的top-1錯誤肾请,這明顯優(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饵逐。希望這些改進后的基線能為未來視覺轉(zhuǎn)換器的研究提供參考。
2.相關(guān)工作
變壓器主干彪标。????ViT[7]將每個圖像視為一系列具有固定長度的 tokens (patches)倍权,然后將它們饋送到多個Transformer層進行分類。這是第一個證明在訓練數(shù)據(jù)足夠的情況下(例如ImageNet22k[6]捞烟,JFT-300M)薄声,純變壓器也可以在圖像分類中保存最新性能的工作当船。DeiT[29]進一步探索了一種數(shù)據(jù)高效的ViT訓練策略和蒸餾方法。
為了提高圖像分類的性能默辨,最近的一些方法對ViT進行了定制的修改德频。T2T ViT[35]將重疊滑動窗口內(nèi)的令牌逐步連接成一個令牌。TNT[10]利用內(nèi)部和外部變換塊分別生成像素嵌入和塊嵌入(pixel embeddings and patch embeddings)缩幸。CPVT[5]用條件位置編碼(conditional position encodings)代替了ViT中嵌入的固定大小的位置編碼抱婉,使得處理任意分辨率的圖像更容易。CrossViT[2]通過雙分支變壓器處理不同大小的圖像塊桌粉。LocalViT[18]將深度卷積合并到視覺變換器中蒸绩,以改善特征的局部連續(xù)性。
為了適應密集的預測任務铃肯,如目標檢測患亿、實例和語義分割,也有一些方法[31押逼、21步藕、32、34挑格、9咙冗、4]將CNNs中的金字塔結(jié)構(gòu)引入到變壓器主干的設計中。PVTv1是第一個金字塔結(jié)構(gòu)變換器漂彤,它提出了一個具有四個階段的層次變換器雾消,表明一個純變換器主干可以像CNN主干一樣通用,在檢測和分割任務中表現(xiàn)更好挫望。在那之后立润,[21,32,34,9,4]進行了改進,增強了特征的局部連續(xù)性媳板,消除了固定大小的位置嵌入桑腮。例如,Swin Transformer[21]用相對位置偏置代替了固定大小的位置嵌入蛉幸,并限制了移動窗口內(nèi)的自注意破讨。CvT[32]、CoaT[34]和LeViT[9]將類似卷積的運算引入到視覺變壓器中奕纫。Twins[4]將局部注意和全局注意機制結(jié)合起來提陶,以獲得更強的特征表示。
3.改進的金字塔視覺變換器
PVTv1的限制若锁。? ? (1) 與ViT[7]類似搁骑,PVTv1[31]將圖像視為一系列不重疊的patch,這在一定程度上喪失了圖像的局部連續(xù)性(2) PVTv1中的位置編碼是固定大小的,這對于處理任意大小的圖像是不靈活的(3)當處理高分辨率輸入(例如仲器,短邊為800像素)時煤率,PVTv1的計算復雜度相對較大。這些問題限制了PVTv1在視覺任務上的性能乏冀。
為了解決這些問題蝶糯,我們提出了PVTv2,它通過以下設計改進了PVTv1:
重疊補丁嵌入(Overlapping Patch Embedding)辆沦。????我們利用重疊補丁嵌入來標記圖像昼捍。如圖1(a)所示,我們放大了patch window肢扯,使相鄰窗口重疊一半的面積妒茬,并用零填充特征圖以保持分辨率。在這項工作中蔚晨,我們使用帶零填充的卷積來實現(xiàn)Overlapping Patch Embedding乍钻。具體來說,給定一個輸入形狀為铭腕,我們將其輸入給一個卷積银择,卷積步幅為,核大小為累舷,填充大小為浩考,核數(shù)為。輸出形狀為被盈。
有卷積的前饋析孽。????受[16,5害捕,18]的啟發(fā)绿淋,我們?nèi)サ袅斯潭ù笮〉奈恢镁幋a[7],并在PVT中引入了零填充位置編碼尝盼。如圖1(b)所示,我們在前饋網(wǎng)絡中第一個全連接(FC)層和GELU[14]之間添加一個3×3深度卷積佑菩,其padding size為1盾沫。
線性空間收縮注意力。????為了進一步降低PVT的計算成本殿漠,我們提出了線性空間縮減注意(SRA)赴精,如圖2所示。與SRA不同的是绞幌,線性SRA像卷積層一樣具有線性計算和存儲成本蕾哟。具體來說,給定一個大小為h×w×c的輸入,SRA和線性SRA的復雜性為:
? ??
? ??
其中是SRA的空間壓縮比[31]谭确。是線性SRA的池大小(pooling size)帘营,默認設置為7。
結(jié)合這三種改進逐哈,PVTv2可以(1)獲得更多的圖像和特征圖的局部連續(xù)性(2) 靈活處理變量分辨率輸入(3) 享受和CNN一樣的線性復雜度芬迄。
4? PVTv2系列細節(jié)
我們通過改變超參數(shù)將PVTv2從B0擴展到B5。具體如下:
?????:第階段重疊斑塊嵌入的步幅the stride of the overlapping patch embedding昂秃;
?????:第級輸出的通道數(shù)禀梳;
?????:第階段的編碼器層數(shù);
?????:第階段SRA的收縮比肠骆;
?????:第階段線性SRA的自適應平均池大小adaptive average pooling size算途;
?????:第階段高效自注意的頭數(shù);
?????:第階段前饋層的膨脹率[30]蚀腿;
表1顯示了PVTv2系列的詳細信息嘴瓤。我們的設計遵循ResNet的原則[13](1) 隨著層深的增加,通道維數(shù)增加唯咬,空間分辨率減猩醋ⅰ(2)階段3分配給大部分計算成本。
5.實驗
5.1. 圖像分類
設置胆胰。????圖像分類實驗在ImageNet-1K數(shù)據(jù)集[25]上進行狞贱,該數(shù)據(jù)集包含128萬個訓練圖像和50K個驗證圖像,1000個類別蜀涨。所有模型都在訓練集上訓練以進行公平比較瞎嬉,并在驗證集中報告top-1 error。我們遵循DeiT[29]厚柳,并應用隨機裁剪氧枣、隨機水平翻轉(zhuǎn)[27]、標簽平滑正則化[28]别垮、混合[36]和隨機擦除[38]作為數(shù)據(jù)增強便监。在訓練期間,我們使用AdamW[23]碳想,動量為0.9烧董,mini批量為128,權(quán)重衰減為5× 10?2胧奔。初始學習速率設置為1× 10?3逊移,余弦衰減[22]。所有模型都在8個V100 gpu上從頭開始訓練300個時代龙填。我們對基準測試的驗證集應用中心裁剪至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系列在精度和型號尺寸方面也有很大的優(yōu)勢。例如暇番,PVTv2-B5達到83.8%的ImageNet top-1精度嗤放,比Swin Transformer[21]和Twins[4]高0.5%,而我們的參數(shù)和Flops更少壁酬。
5.2. 目標檢測
設置次酌。? ? 目標檢測實驗是在具有挑戰(zhàn)性的COCO基準上進行的[20]。所有模型都在COCO train2017(118k圖片)上接受培訓舆乔,并在val2017(5k圖片)上接受評估岳服。我們驗證了PVTv2主干在主流探測器上的有效性,包括RetinaNet[19]希俩、Mask R-CNN[11]吊宋、Cascade Mask?R-CNN[1]、ATSS[37]颜武、GFL[17]和 Sparse R-CNN[26]璃搜。在訓練之前,我們使用ImageNet上預訓練的權(quán)值來初始化主干鳞上,并使用Xavier[8]來初始化新添加的層这吻。我們在8個v100gpu上訓練批量為16的所有模型,并采用AdamW[23]篙议,初始學習率為1× 10?4作為優(yōu)化器唾糯。按照慣例[19,11鬼贱,3]趾断,我們采用1× 或3× 所有檢測模型的訓練計劃(即12或36個周期)。調(diào)整訓練圖像的大小吩愧,使其短邊為800像素,而長邊不超過1333像素增显。當使用3× 在訓練計劃中雁佳,我們在[640脐帝,800]的范圍內(nèi)隨機調(diào)整輸入圖像的短邊大小。在測試階段糖权,輸入圖像的短邊固定為800像素堵腹。
結(jié)果。????如表3所示星澳,在模型尺寸相似的單級和兩級目標探測器上疚顷,PVTv2顯著優(yōu)于PVTv1。例如禁偎,PVTv2-B4在RetinaNet[19]的基礎上達到了46.1 AP腿堤,在R-CNN的基礎上達到47.5 APb[11],分別比PVTv1模型增加了3.5 AP和3 AP^b如暖。
為了公平比較PVTv2和Swin Trans-former[21]笆檀,我們保持所有設置不變,包括ImageNet-1K預訓練和COCO微調(diào)策略盒至。我們在四種最先進的探測器上評估了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達到49.9ap,比Swin-T高2.7流妻。我們的PVTv2-Li可以大大減少計算量牲蜀,從258GFlops縮減至到194GFlops,同時只犧牲一點性能绅这。
編者注:
訓練檢測模型踩坑記:
1. mmcv的安裝版本:
https://blog.csdn.net/jizhidexiaoming/article/details/108837584
https://hub.fastgit.org/open-mmlab/mmcv? ? (一定要點進去看看涣达,不要瞎填空,否則有的組合沒有证薇,導致安裝報錯一片紅)
2. 自己設計的模型沒有注冊:
https://hub.fastgit.org/whai362/PVT/issues/36
3. 自己設計的模型的num_classes=1000度苔,與coco數(shù)據(jù)集的不匹配:
把自己設計的主干的.py文件復制粘貼過去的時候,要把self.num_classes那行注釋掉浑度,把self.head注釋掉寇窑, 把def forward_features()和def forward()中相應的該注釋掉的注釋掉(即不計算分類頭的部分)
4.?[Errno 2] No such file or directory: '/....../train2017/000000575652.jpg'
別人的:https://zhuanlan.zhihu.com/p/70878433
冷靜,不一定是數(shù)據(jù)集下載錯的原因
coco官網(wǎng):https://cocodataset.org/#home
https://zhuanlan.zhihu.com/p/29393415
coco訓練集的說明:https://blog.csdn.net/qq_37643960/article/details/103466904
這里也有下載鏈接:https://blog.csdn.net/qq_41185868/article/details/82939959
經(jīng)過驗證箩张,上面那個鏈接下載的數(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())
沒找到哪一句導致這個問題甩骏。把模型里所有.view換成.reshape窗市,在所有transpose后面接.contiguous(),問題解決饮笛。
6. 從第一次迭代開始咨察,出現(xiàn) loss_cls: nan, loss_bbox: nan, loss: nan
是在ImageNet上預訓練權(quán)重未成功加載導致nan。不知道m(xù)mdet是怎么加載的福青。手動再加載一下摄狱,問題解決。
? ? PVTv2的語義分割結(jié)果(在arxiv論文里沒有更新无午,但是前幾天有開源):https://github.com/whai362/PVTv2-Seg