来源:arXiv:2102.12122v1
单位:南大、南理、商汤、港中文
代码: https://github.com/whai362/PVT
文章内容用一句话概括就是给ViT方法装上金字塔结构处理密集预测问题。主要创新点包括两点:1. progressive shrinking strategy 能够实现金字塔结构;2. spatial reduction attention减少self-attention的计算量。
本文方法相对于传统CNN的优势:传统CNN通过层数增加来增加感受野,但相对来说还是局部信息,而transformer机制刻画的是全局的关联关系。
相对于ViT这类方法的优势:ViT一般而言通过将图像划分成不同的patch之后,每个patch提取特征,在后面的若干层transformer layer中还是针对于相同patch区域的特征,两方面劣势1)划分的patch较粗糙难以应用到dense prediction任务中;2)没有金字塔结构对不同尺寸目标同等对待。而本文的方式通过金字塔结构在开始层patch划分相对精细的多,其次通过金字塔的构造很容易作为backbone结构嵌入到已有的结构,比如替换resnet backbone等。
下面我们来具体讲一下这个方法的两个创新点。PVT的整体结构如下图所示:
他像ResNet结构一样,也分为4个stage,每个stage的结构一样,包含有pregressive shrink strategy 和 使用SRA的transformer模块。
progressive shrink strategy
ViT结构在初始时将图像划分为多个相同大小的尺寸,从复杂度上考虑,这些patch的尺寸相对都比较大。而为了密集预测,这里在开始时将图像划分成较小的patch,比如4x4, 于是就获得了 个patch,作为序列输入到transformer中,这里有个有意思的是一般来说会使用pooling的方法获得每个patch的表示,但这里用的是cat,每个patch的特征维度是.由于每个patch使用一个向量表示,于是最终获得了个长度为的列向量。将这些列向量重新reshape成2D形式获得的特征图,可以发现边长缩小为原来的。
将上一阶段获得的featmap 输入到当前阶段,此时让patch的大小为那么最终输出的featmap的尺寸为, 经过多个类似的stage,就形成了和ResNet相同的金字塔结构。
spatial-reduction attention
划分成较小的patch,特征是更加精细了,但是显然计算量大大增加,尤其是底层,patch数目相当多,所以作者提出了spatial-reduction attention(SRA)结构。
这个结构的本质就是将featmap划分成不同的block,使用block特征计算key和value。文章的Eq.3表述不是很清楚,不知道这里的x表示什么,是transformer输入的featmap还是由featmap生成的K和V?我们这里假设是featmap。K,V的话进行相应替换。
featmap的第b个block的特征表示为,对该特征进行变换, 然后再由该特征线性投影成key和value: ,接着再进行attention操作。
可以发现计算内积部分的复杂度由原始的降为, 如果相对较大的话,降低的还是非常明显的,因为transformer在每一个stage都有好多层啊。
文章类似ResNet给出了不同的框架结构,主要是每一个stage内部的堆叠数不同:
实验
实验部分,作者在图像分类、目标检测和图像分割等多个领域内与传统的CNN方法和ViT架构进行了对比,得到的结论:
- 在图像分类任务上 基于transformer的结构性能更好,而PVT相对于ViT的方法在相似参数量的前提下,性能相仿。
2.在目标检测、语义分割和实例分割任务上,ViT做不了,所以之和传统基于ResNet的方法进行了对比,性能优势很明显。 - PVT作为backbone嵌入到DETR中比采用ResNet50的DETR性能高2个点以上
消融实验的结论:
- 金字塔结构从性能和复杂度上考虑是最适合做dense prediction task.
- deep model会比 wide model性能好,deep 是指堆叠的模块数目更多,wide是指每个模块的维度更大;
- 预训练模型同样对PVT很重要,能够让模型更快更好的收敛,可以在ImageNet上进行预训练;
- PVT更适合中等分辨率的图像,一般边长为800像素左右。
结论
本文工作我觉得还是挺有意思的,将金字塔结构引入到ViT中,使其作为backbone能够更好的做dense prediction的任务。
而且考虑到 resnet提出之后在上面的各种骚操作,比如SE, ResNeXt, ResNeSt等等,在PVT结构上应该都可以刷一波。