PVTv1:https://arxiv.org/abs/2102.12122
代码:https://github.com/whai362/PVT
PVTv2:https://arxiv.org/abs/2106.13797
代码:https://github.com/whai362/PVT
密集预测任务的目标是对特征图进行像素级分类或回归。目标检测和语义分割是两种典型的密集预测任务。我们的目标是在Transformer中引入金字塔结构,以便为密集的预测任务生成多尺度特征图。与CNN backbones类似,PVTv1 有四个阶段,用于生成不同比例尺的特征图(特征金字塔)。每个阶段由块(Patch)嵌入层和LiTransformer编码器层组成。下面来看LiTransformer编码器的SRA。
CNN骨干网使用卷积步幅获得多尺度特征图不同,PVT使用逐步缩小策略,通过块嵌入层来控制特征图的规模。
这里,我们用 P i P_i Pi 表示第 i i i 阶段的块大小。在阶段i的开始,我们首先将输入的特征图 F i − 1 ∈ R H i − 1 × W i − 1 × C i − 1 F_{i−1}∈\mathbb R^{H_{i−1}×W_{i−1}×C_{i−1}} Fi−1∈RHi−1×Wi−1×Ci−1均匀划分为 H i − 1 W i − 1 P i 2 \frac{H_{i−1}W_{i−1} }{P^2_i} Pi2Hi−1Wi−1 块,然后将每块进行展平并映射到 C i C_i Ci维 embedding中。经过线性映射后,嵌入块的形状可视为 H i − 1 P i × W i − 1 P i × C i \frac{H_{i−1} }{P_i }×\frac{W_{i−1}}{ P_i} × C_i PiHi−1×PiWi−1×Ci。
对于第 i 阶段的Transformer编码器,它有 L i L_i Li 层编码器,每个编码器层由注意层和前馈层组成。由于我们的方法需要处理高分辨率(如4步幅)的特征图,我们提出了一个SRA层(spatial-reduction attention, 空间缩减注意)来替代编码器中传统的 Multi-head Attention 层,分别为下右图和下左图。
与MHA类似,我们的SRA也接收一个查询Q、一个键K和一个值V作为输入,并输出一个精炼的特征。不同之处在于,我们的SRA会在如下图所示的attention操作之前降低K和V的空间尺度,这大大减少了计算/内存开销。SRA:
SRA ( Q , K , V ) = Concat ( head 0 , . . . , head N i ) W O \text{SRA}(Q, K, V ) = \text{Concat}(\text{head}_0, ...,\text{head}_{N_i})WO SRA(Q,K,V)=Concat(head0,...,headNi)WO
head j = Softmax ( Q W j Q ( SR ( K ) W j K ) ⊤ d h e a d ) SR ( V ) W j V \text{head}_j=\text{Softmax}( \frac{QW^Q_j\left ( \text{SR}(K)W^K_j \right ) ^{\top}}{\sqrt {d_{head}}})\text{SR}(V )W^V_j headj=Softmax(dheadQWjQ(SR(K)WjK)⊤)SR(V)WjV
其中, SR ( x ) = Norm(Reshape ( x , R i ) W S ) \text{SR}(x) = \text{Norm(Reshape}(x, R_i)W^S) SR(x)=Norm(Reshape(x,Ri)WS), R i R_i Ri 表示第 i i i 阶段attention空间的宽高减少倍数。
在PVTv1局限性。(1)与ViT类似,PVTv1将图像视为一个非重叠块序列,在一定程度上失去了图像的局部连续性。(2) PVTv1中的位置编码是固定尺寸的,对于任意尺寸的处理图像是不灵活的。(3)在处理高分辨率输入(如短边800像素)时,PVTv1的计算复杂度比较大。这些问题限制了PVTv1在视觉任务中的表现。
针对这些问题,我们提出了PVTv2, PVTv1通过设计改进如下:
重叠的块(Patch)嵌入。利用重叠块嵌入来标记图像。如下图(a)所示,将patch窗口放大,使相邻窗口有一半区域重叠,并将特征图填充为零以保持分辨率。在这项工作中,我们使用零填充卷积来实现重叠块嵌入。具体来说,给定一个大小为 h × w × c h × w × c h×w×c 的输入,将其进行卷积,步幅为S、核大小2S−1、填充大小S−1、核数为 c ′ c' c′ 。输出大小为 h S × w S × C ′ \frac{h}{S}×\frac{w}{S}×C' Sh×Sw×C′。
卷积前馈。删除固定大小位置编码,并引入零填充位置编码进PVTv1,如上图(b)所示,我们添加一个3×3 DWConv(depth-wise convolution)。
线性SRA (Linear Spatial Reduction Attention)。为了进一步降低PVT的计算成本,我们提出线性SRA ,如下图所示。与 SRA 不同,线性SRA具有像卷积层一样的线性计算和内存成本。具体来说,给定大小为 h × w × c h×w×c h×w×c 的输入,SRA和线性SRA的复杂性为:
Ω ( SRA ) = 2 h 2 w 2 c R 2 + h w c 2 R 2 Ω(\text{SRA}) =\frac{2h^2w^2c}{R^2}+ hwc^2R^2 Ω(SRA)=R22h2w2c+hwc2R2
Ω ( LSRA ) = 2 h w P 2 c Ω(\text{LSRA}) = 2hwP^2c Ω(LSRA)=2hwP2c
式中R为SRA[31]的空间还原比。P为线性SRA的池大小,默认为7。
结合这三种改进,PVTv2可以(1)获得更多的图像和特征图的局部连续性;(2)更灵活地处理可变分辨率输入;(3)享受与CNN相同的线性复杂性。