來(lái)源:arXiv:2102.12122v1
單位:南大、南理、商湯、港中文
代碼: https://github.com/whai362/PVT

文章內(nèi)容用一句話(huà)概括就是給ViT方法裝上金字塔結(jié)構(gòu)處理密集預(yù)測(cè)問(wèn)題。主要?jiǎng)?chuàng)新點(diǎn)包括兩點(diǎn):1. progressive shrinking strategy 能夠?qū)崿F(xiàn)金字塔結(jié)構(gòu);2. spatial reduction attention減少self-attention的計(jì)算量。
本文方法相對(duì)于傳統(tǒng)CNN的優(yōu)勢(shì):傳統(tǒng)CNN通過(guò)層數(shù)增加來(lái)增加感受野,但相對(duì)來(lái)說(shuō)還是局部信息,而transformer機(jī)制刻畫(huà)的是全局的關(guān)聯(lián)關(guān)系。
相對(duì)于ViT這類(lèi)方法的優(yōu)勢(shì):ViT一般而言通過(guò)將圖像劃分成不同的patch之后,每個(gè)patch提取特征,在后面的若干層transformer layer中還是針對(duì)于相同patch區(qū)域的特征,兩方面劣勢(shì)1)劃分的patch較粗糙難以應(yīng)用到dense prediction任務(wù)中;2)沒(méi)有金字塔結(jié)構(gòu)對(duì)不同尺寸目標(biāo)同等對(duì)待。而本文的方式通過(guò)金字塔結(jié)構(gòu)在開(kāi)始層patch劃分相對(duì)精細(xì)的多,其次通過(guò)金字塔的構(gòu)造很容易作為backbone結(jié)構(gòu)嵌入到已有的結(jié)構(gòu),比如替換resnet backbone等。
下面我們來(lái)具體講一下這個(gè)方法的兩個(gè)創(chuàng)新點(diǎn)。PVT的整體結(jié)構(gòu)如下圖所示:

他像ResNet結(jié)構(gòu)一樣,也分為4個(gè)stage,每個(gè)stage的結(jié)構(gòu)一樣,包含有pregressive shrink strategy 和 使用SRA的transformer模塊。
progressive shrink strategy
ViT結(jié)構(gòu)在初始時(shí)將圖像劃分為多個(gè)相同大小的尺寸,從復(fù)雜度上考慮,這些patch的尺寸相對(duì)都比較大。而為了密集預(yù)測(cè),這里在開(kāi)始時(shí)將圖像劃分成較小的patch,比如4x4, 于是就獲得了 個(gè)patch,作為序列輸入到transformer中,這里有個(gè)有意思的是一般來(lái)說(shuō)會(huì)使用pooling的方法獲得每個(gè)patch的表示,但這里用的是cat,每個(gè)patch的特征維度是
.由于每個(gè)patch使用一個(gè)向量表示,于是最終獲得了
個(gè)長(zhǎng)度為
的列向量。將這些列向量重新reshape成2D形式獲得
的特征圖,可以發(fā)現(xiàn)邊長(zhǎng)縮小為原來(lái)的
。
將上一階段獲得的featmap 輸入到當(dāng)前階段,此時(shí)讓patch的大小為那么最終輸出的featmap的尺寸為
, 經(jīng)過(guò)多個(gè)類(lèi)似的stage,就形成了和ResNet相同的金字塔結(jié)構(gòu)。
spatial-reduction attention
劃分成較小的patch,特征是更加精細(xì)了,但是顯然計(jì)算量大大增加,尤其是底層,patch數(shù)目相當(dāng)多,所以作者提出了spatial-reduction attention(SRA)結(jié)構(gòu)。
這個(gè)結(jié)構(gòu)的本質(zhì)就是將featmap劃分成不同的block,使用block特征計(jì)算key和value。文章的Eq.3表述不是很清楚,不知道這里的x表示什么,是transformer輸入的featmap還是由featmap生成的K和V?我們這里假設(shè)是featmap。K,V的話(huà)進(jìn)行相應(yīng)替換。
featmap的第b個(gè)block的特征表示為,對(duì)該特征進(jìn)行變換
, 然后再由該特征線(xiàn)性投影成key和value:
,接著再進(jìn)行attention操作。
可以發(fā)現(xiàn)計(jì)算內(nèi)積部分的復(fù)雜度由原始的降為
, 如果
相對(duì)較大的話(huà),降低的還是非常明顯的,因?yàn)閠ransformer在每一個(gè)stage都有好多層啊。
文章類(lèi)似ResNet給出了不同的框架結(jié)構(gòu),主要是每一個(gè)stage內(nèi)部的堆疊數(shù)不同:

實(shí)驗(yàn)
實(shí)驗(yàn)部分,作者在圖像分類(lèi)、目標(biāo)檢測(cè)和圖像分割等多個(gè)領(lǐng)域內(nèi)與傳統(tǒng)的CNN方法和ViT架構(gòu)進(jìn)行了對(duì)比,得到的結(jié)論:
- 在圖像分類(lèi)任務(wù)上 基于transformer的結(jié)構(gòu)性能更好,而PVT相對(duì)于ViT的方法在相似參數(shù)量的前提下,性能相仿。
2.在目標(biāo)檢測(cè)、語(yǔ)義分割和實(shí)例分割任務(wù)上,ViT做不了,所以之和傳統(tǒng)基于ResNet的方法進(jìn)行了對(duì)比,性能優(yōu)勢(shì)很明顯。 - PVT作為backbone嵌入到DETR中比采用ResNet50的DETR性能高2個(gè)點(diǎn)以上
消融實(shí)驗(yàn)的結(jié)論:
- 金字塔結(jié)構(gòu)從性能和復(fù)雜度上考慮是最適合做dense prediction task.
- deep model會(huì)比 wide model性能好,deep 是指堆疊的模塊數(shù)目更多,wide是指每個(gè)模塊的維度更大;
- 預(yù)訓(xùn)練模型同樣對(duì)PVT很重要,能夠讓模型更快更好的收斂,可以在ImageNet上進(jìn)行預(yù)訓(xùn)練;
- PVT更適合中等分辨率的圖像,一般邊長(zhǎng)為800像素左右。
結(jié)論
本文工作我覺(jué)得還是挺有意思的,將金字塔結(jié)構(gòu)引入到ViT中,使其作為backbone能夠更好的做dense prediction的任務(wù)。
而且考慮到 resnet提出之后在上面的各種騷操作,比如SE, ResNeXt, ResNeSt等等,在PVT結(jié)構(gòu)上應(yīng)該都可以刷一波。