paper:Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions
official implementation:GitHub - whai362/PVT: Official implementation of PVT series
存在的問題
現有的 Vision Transformer (ViT) 主要設計用于圖像分類任務,難以直接用于像素級密集預測任務,如目標檢測和分割。這是因為存在以下問題
- 低分辨率輸出:傳統的Vision Transformer(ViT)在處理密集預測任務(如目標檢測和語義分割)時,輸出分辨率較低,難以獲得高質量的像素級別預測。
- 高計算和內存開銷:ViT在處理大尺寸輸入圖像時,計算和內存開銷較高,限制了其在實際應用中的效率。
本文的創新點
為了解決上述問題,作者提出了 Pyramid Vision Transformer (PVT), PVT結合了卷積神經網絡的金字塔結構和Transformer的全局感受野,旨在克服傳統Transformer在處理密集預測任務時遇到的分辨率低、計算和內存開銷大的問題。它可以作為 CNN 骨干網絡的替代品,用于多種下游任務,包括圖像級預測和像素級密集預測。具體包括:
- 金字塔結構:PVT引入了金字塔結構,可以生成多尺度的特征圖,這對于密集預測任務是有益的。
- 空間縮減注意力層(SRA):為了處理高分辨率特征圖并減少計算/內存成本,作者設計了 SRA 層來替代傳統的多頭注意力 (MHA) 層。
- 純Transformer骨干:PVT 是一個沒有卷積的純 Transformer 骨干網絡,可以用于各種像素級密集預測任務,并與 DETR 結合構建了一個完全無需卷積的目標檢測系統。
實際效果
- PVT 在多個下游任務上進行了廣泛的實驗驗證,包括圖像分類、目標檢測、實例和語義分割等,并與流行的 ResNets 和 ResNeXts 進行了比較。
- 實驗結果表明,在參數數量相當的情況下,PVT 在 COCO 數據集上使用 RetinaNet 作為檢測器時,PVT-Small 模型達到了 40.4 的 AP(平均精度),超過了 ResNet50+RetinaNet(36.3 AP)4.1 個百分點。
- PVT-Large 模型達到了 42.6 的 AP,比 ResNeXt101-64x4d 高出 1.6 個百分點,同時參數數量減少了 30%。
- 這些結果表明 PVT 可以作為 CNN 骨干網絡的一個有效的替代,用于像素級預測,并推動未來的研究。
方法介紹
Overall Architecture
PVT的整體結構如圖3所示
和CNN backbone類似,PVT也有四個stage來生成不同尺度的特征圖。所有stage都有一個相似的架構,包括一個patch embedding層和 \(L_i\) 個Transformer encoder層。
在第一個stage,給定大小為 \(H\times W\times 3\)?的輸入圖片,我們首先將其劃分為 \(\frac{HW}{4^2}\)?個patch,每個大小為4x4x3。然后將展平的patch送入一個線性映射層得到大小為 \(\frac{HW}{4^2}\times C_1\)?的輸出。然后將輸出和位置編碼一起進入有 \(L_1\)?層的Transformer encoder,得到的輸出reshape成大小為 \(\frac{H}{4}\times \frac{W}{4}\times C_1\) 的特征圖 \(F_1\)。同樣的方式,以前一個stage的輸出特征圖作為輸入,我們得到特征圖 \(F_2,F_3,F_4\),相對于原始輸入圖片的步長分別為8,16,32。用了特征圖金字塔 \(\{F_1,F_2,F_3,F_4\}\),我們的方法可以很容易地應用于大多數下游任務,包括圖像分類、目標檢測和語義分割。
Feature Pyramid for Transformer
和CNN backbone用不同stride的卷積來得到不同尺度特征圖不同,PVT使用一個漸進式shrinking策略,通過patch embedding層來控制特征圖的尺度。?
我們用 \(P_i\) 來表示第 \(i\) 個stage的patch size,在stage \(i\) 的開始,我們首先將輸入特征圖 \(F_{i-1}\in \mathbb{R}^{H_{i-1}\times W_{i-1}\times C_{i-1}}\)?均勻地劃分成 \(\frac{H_{i-1}W_{i-1}}{P_i^2}\)?個patch,然后將每個patch展平并映射得到一個 \(C_i\)?維的embedding。在線性映射后,embedded patch的大小為 \(\frac{H_{i-1}}{P_i}\times \frac{W_{i-1}}{P_i}\times C_i\),其中寬高比輸入小了 \(P_i\) 倍。
這樣,我們就可以在每個stage靈活地調整特征圖的尺度,從而將Transformer構建成金字塔結構。
Transforme Encoder
由于PVT需要處理高分辨率(stride-4)的特征圖,我們提出了一種spatial-reduction attention(SRA)來替換encoder中傳統的multi-head attention(MHA)。
和MHA類似,SRA的輸入包括一個query \(Q\),一個key \(K\),一個value \(V\)。不同的是SRA在attention operation之前減小了 \(K\) 和 \(V\) 的大小,如圖4所示,這大大減少了計算和內存的開銷。
stage \(i\) 的SRA如下
其中 \(Concat(\cdot)\) 是拼接操作。\(W^{Q}_j\in \mathbb{R}^{C_i\times d_{head}},W^{K}_j\in \mathbb{R}^{C_i\times d_{head}},W^{V}_j\in \mathbb{R}^{C_i\times d_{head}},W^O\in \mathbb{R}^{C_i\times C_i}\)?是線性映射參數。\(N_i\) 是stage \(i\) 中attention層的head數量,所以每個head的維度(即\(d_{head}\))等于 \(\frac{C_i}{N_i}\)。\(SR(\cdot)\) 是降低輸入序列(即 \(K\) 或 \(V\))空間維度的操作,如下:
其中 \(\mathbf{x}\in\mathbb{R}^{(H_iW_i)\times C_i}\)?表示一個輸入序列,\(R_i\) 表示stage \(i\)?中attention層的reduction ratio。\(Reshape(\mathbf{x},R_i)\)?是將輸入序列 \(\mathbf{x}\)?reshape成大小為 \(\frac{H_iW_i}{R^2_i}\times (R^2_iC_i)\)?的序列的操作。\(W_S\in \mathbb{R}^{(R^2_iC_i)\times C_i}\)?是一個linear projection,它將輸入序列的維度降低到?\(C_i\)。\(Norm(\cdot)\)?是layer normalization。和原始的Transformer一樣,attention operation按下式計算
通過上述公式我們可以發現,MSA的計算/內存開銷是MHA的 \(\frac{1}{R^2}\),因此MSA可以在有限的資源下處理更大的輸入特征圖或序列。
代碼解析
見PVT v2的代碼解析?PVT v2 原理與代碼解析-CSDN博客
實驗結果?
模型涉及到的一些超參總結如下:
- \(P_i\):stage \(i\) 的patch size
- \(C_i\):stage \(i\)?的輸出通道數
- \(L_i\):stage \(i\)?中的encoder層數
- \(R_i\):stage \(i\)?中SRA的reduction ratio
- \(N_i\):stage \(i\)?中SRA的head數量
- \(E_i\):stage \(i\)?中FFN層的expansion ratio
作者設計了一系列的PVT模型,具體配置如表1
和其它SOTA模型在ImageNet的結果對比如表2所示
用RetinaNet上和其它backbone的結果對比如表3所示,可以看到PVT不同大小的模型與ResNet系列相比,參數更少精度更高。
在語義分割模型Semantic FPN上PVT也超越了對應的ResNet