閱讀筆記-PVT-Pyramid Vision Transformer_A versatile backbone for dense prediction without convolutions

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

title

文章內(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)如下圖所示:


PVT

他像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, 于是就獲得了 \frac{HW}{4^2}個(gè)patch,作為序列輸入到transformer中,這里有個(gè)有意思的是一般來(lái)說(shuō)會(huì)使用pooling的方法獲得每個(gè)patch的表示,但這里用的是cat,每個(gè)patch的特征維度是4^2C_i.由于每個(gè)patch使用一個(gè)向量表示,于是最終獲得了\frac{HW}{4^2}個(gè)長(zhǎng)度為C_i的列向量。將這些列向量重新reshape成2D形式獲得\frac{H}{4} \times \frac{W}{4} \times C_i的特征圖,可以發(fā)現(xiàn)邊長(zhǎng)縮小為原來(lái)的1/4。
將上一階段獲得的featmap 輸入到當(dāng)前階段,此時(shí)讓patch的大小為2\times 2那么最終輸出的featmap的尺寸為\frac{H}{8} \times \frac{W}{8} x C_i, 經(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的特征表示為f_b\in R^{R_i^2C_i},對(duì)該特征進(jìn)行變換F_{SR} = Norm(f_bW^s), 然后再由該特征線(xiàn)性投影成key和value: key = F_{SR}W^K, value=F_{SR}W^V,接著再進(jìn)行attention操作。
可以發(fā)現(xiàn)計(jì)算內(nèi)積部分的復(fù)雜度由原始的hw降為\frac{hw}{R_i^2}, 如果R_i相對(duì)較大的話(huà),降低的還是非常明顯的,因?yàn)閠ransformer在每一個(gè)stage都有好多層啊。

文章類(lèi)似ResNet給出了不同的框架結(jié)構(gòu),主要是每一個(gè)stage內(nèi)部的堆疊數(shù)不同:


PVT series 結(jié)構(gòu)

實(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é)論:

  1. 在圖像分類(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ì)很明顯。
  2. PVT作為backbone嵌入到DETR中比采用ResNet50的DETR性能高2個(gè)點(diǎn)以上

消融實(shí)驗(yàn)的結(jié)論:

  1. 金字塔結(jié)構(gòu)從性能和復(fù)雜度上考慮是最適合做dense prediction task.
  2. deep model會(huì)比 wide model性能好,deep 是指堆疊的模塊數(shù)目更多,wide是指每個(gè)模塊的維度更大;
  3. 預(yù)訓(xùn)練模型同樣對(duì)PVT很重要,能夠讓模型更快更好的收斂,可以在ImageNet上進(jìn)行預(yù)訓(xùn)練;
  4. PVT更適合中等分辨率的圖像,一般邊長(zhǎng)為800像素左右。

結(jié)論

本文工作我覺(jué)得還是挺有意思的,將金字塔結(jié)構(gòu)引入到ViT中,使其作為backbone能夠更好的做dense prediction的任務(wù)。
而且考慮到 resnet提出之后在上面的各種騷操作,比如SE, ResNeXt, ResNeSt等等,在PVT結(jié)構(gòu)上應(yīng)該都可以刷一波。

?著作權(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)容