简介
(1): PVT(Pyramid Vision Transformer:)可以输出高分辨率特征图,也可以使用渐进式收缩金字塔来减少计算;
(2): 引入金字塔结构到Transformer中,使得它可以像CNN网络那样无缝接入到各种下游任务中(如:物体检测,语义分割),同时也取得了非常不错的效果;
(3): RetinaNet+PVT 取得40.4 AP 在MS COCO数据集,超过RetinNet+ResNet50 (36.3 AP) 4.1AP;
(4): 代码开源:https://github.com/whai362/PVT
算法
整体结构就是特征金字塔+Transformer+Attention+堆叠:
(1): 模型整体包含4个Stage,每个Stage包含Patch Embedding和Transformer Encoder;
(2): Patch Embedding用于编码图像信息,Transformer Encoder用于解码和丰富特征信息;
(3): 特征金字塔结构被引入来降低特征图分辨率并得到多尺度特征图;
(4): 在Multi-Head Attention中提出Spatical Reduction,将key(K)和value(V)的长和宽分别缩小到之前的1/Pi;
(5): 堆叠对个阶段的输出特征图,可取代之前盛行的特征提取网络(CNN),应用于目标检测、分割等上游计算机视觉任务。
在第一个阶段,给定尺寸为HxWx3的输入图像,我们按照如下流程进行处理:
(1): 首先,将其划分为块(这里是为了与ResNet对标,最大输出特征的尺寸为原始分辨率的1/4),每个块的大小为4x4x3;
(2): 然后,将展开后块送入到线性投影得到尺寸为HW/16xC1的嵌入块;
(3): 其次,将前述嵌入块与位置嵌入信息送入到Transformer的Encoder,其输出将reshape为H/4xW/4xC1
(4): 后续采取这样的方式得到金字塔特征层
代码
整体部分太多较多,接下来我们分段描述:
MLP基础模块层:包含两个线性层
Patch Embedding:编码图像块特征信息,得到特征响应图和当前特征图的长宽,对应上图中Patch Embedding位置(包含Linear和Norm操作)
Attention:对应于上图中Patch Embedding到Multi-Head Attention之间的操作模块,其采取自注意机制(以q,k和v的形式自关注)来增强与丰富目标特征。
Block:包含整个Transformer Encoder的所有内容,两次融合(原始特征图与Attention特征图、Attention特征图与MLP特征图)
至此一个Stage中的内容以全部呈现,主体函数PyramidVisionTransformer就是融合多阶段的特征金字塔特征图,作者模型包含五个基础模型:PVT-Tiny, PVT-Small, PVT-Medium, PVT-Large和PVT-Small-F4,其中前四个可根据下图参数得到,PVT-Small-F4是仅得到最顶层特征图的输出结果图。
Pi:第i个阶段中patch个数
Ci:第i个阶段中输出特征图的通道个数
Ri:第i个阶段中Spatical Reduction Attention中长宽缩短比例
Ni:第i个阶段中Spatical Reduction Attention中Transformer Head个数
Ei:第i个阶段中Transformer Encoder的Fead Forward中通道扩张比例
结果
在同一个基准模型RetinaNet下,使用PVT替换ResNet,从下图可发现,PVT在保持与ResNet参数相当的条件下,其检测准确率普遍高于基于ResNet的RetinaNet。