PVT(Pyramid Vision Transformer):金字塔结构,适合检测/分割
源码、配套笔记&讲解视频,点击文末名片
- PVT 的研究背景和动机
在 计算机视觉 领域,过去的主力军是 卷积神经网络(CNN),比如 ResNet、VGG、Inception。这些 CNN 模型之所以成功,一个关键原因是它们采用了 金字塔结构 —— 从高分辨率的特征图逐渐下采样,得到多尺度的特征表示。这个特性对 目标检测、实例分割、语义分割 等“密集预测任务”至关重要,因为这些任务需要模型理解物体在不同尺度下的细节。
后来,ViT 出现了,把 NLP 的 Transformer 思路引入到视觉任务中。ViT 在 图像分类 上表现非常好,因为它能捕捉全局依赖关系。但是,ViT 有两个重大问题: - 输出只有单一尺度:ViT 把整张图片切成大块(比如 16×16),然后一次性处理。最终得到的特征图分辨率太低,不适合像检测、分割这样需要精细定位的任务。
- 计算/显存消耗巨大:如果强行用小块(比如 4×4)去分割输入,显存马上爆炸,训练根本跑不动。
所以,ViT 更像是“分类专用工具”,而不是通用视觉骨干。
PVT 的动机
研究者们提出 PVT,就是要解决 ViT 不能很好用于密集预测任务 的问题。
PVT 的设计目标是:
- 继承 Transformer 的全局建模能力(能捕捉远距离关系);
- 融合 CNN 的金字塔思想(能逐层下采样,获得多尺度特征);
- 降低资源消耗(能在有限显存下处理高分辨率特征图)。
换句话说,PVT 想做的就是:
👉 把 ViT 从“只能分类”扩展为“通用视觉骨干”,让它在检测、分割这些任务里也能替代 CNN。
研究者的核心问题是: - CNN 在密集预测任务中表现好,但缺乏全局建模;
- ViT 有全局建模,但对密集预测任务不友好;
- PVT 结合两者优势,在保持 Transformer 架构的同时,引入 金字塔+多尺度特征图,让它能适应检测、分割等复杂任务。
2、PVT 的创新点
(1) 引入金字塔结构(Pyramid)
- 问题(ViT 的缺陷):ViT 只输出单一尺度的特征(比如 14×14),不适合检测和分割这种需要多尺度特征的任务。
- PVT 的创新:借鉴 CNN 的“金字塔”思想,从高分辨率到低分辨率,逐层下采样,得到多层次的特征图(比如 56×56 → 28×28 → 14×14 → 7×7)。
- 好处:能够兼顾大物体和小物体,成为目标检测、分割等任务的通用骨干网络。
👉 类比:ViT 像一个人只看“缩略图”,只能粗略识别;PVT 像拿了显微镜和望远镜,可以在不同尺度下看清楚细节和整体。
(2) 空间降采样注意力(Spatial-Reduction Attention, SRA)
- 问题:ViT 的注意力计算复杂度是 O(N²),输入分辨率一大就爆显存。
- PVT 的创新:在计算注意力时,先对 Key 和 Value 做空间下采样(Spatial Reduction),降低 token 数量,从而大幅减少计算量。
- 好处:
- 可以在显存有限的情况下处理更大分辨率图像;
- 在保证精度的同时,大幅提升计算效率。
👉 类比:ViT 开会时要求“全员发言”,人越多越慢;PVT 先挑代表来开会(下采样),效率更高。
(3) 通用性强,可替代 CNN Backbone
- 问题:ViT 只能做分类,不能直接迁移到检测/分割。
- PVT 的创新:设计时就兼容了 FPN(特征金字塔网络) 思路,直接输出多尺度特征。
- 好处:PVT 可以像 ResNet 一样,成为检测(Mask R-CNN、RetinaNet)、分割(Semantic FPN、SegFormer)等下游任务的 backbone。
👉 类比:ViT 是“单科选手,只擅长做选择题(分类)”;PVT 是“全能选手,既能考选择题(分类),也能写大题(检测、分割)”。
(4) 简洁优雅的设计
- PVT 没有搞太复杂的模块,而是用很直接的方式(分层金字塔 + SRA 下采样)就解决了 ViT 的大部分缺陷。
- 这使得它在学术界很受欢迎,成为后续很多视觉 Transformer 的基线(比如 SegFormer、BEiT)。
👉 类比:PVT 就像在 ViT 的“框架房子”上,加了楼梯(金字塔)和电梯(SRA),让整栋楼更实用。
✅ 总结一句话
PVT 的核心创新点是:在 ViT 基础上引入金字塔结构和空间缩减注意力,使得 Transformer 不再只是分类工具,而成为能适配检测、分割等下游任务的通用视觉骨干网络。
3、空间降采样注意力 SRA
普通的多头注意力(左边图)
在 Transformer 里,有一个核心模块叫 多头注意力 (Multi-Head Attention, MHA)。
它的输入有三种东西:
- Q (Query):可以理解为“我要找的信息”。
- K (Key):可以理解为“信息的标签或关键字”。
- V (Value):可以理解为“信息的具体内容”。
普通的注意力机制就是:
👉 每个 Query 去和所有 Key 对比,算出哪些 Key 跟自己相关,然后再根据相关性加权取对应的 Value。
这样,模型就能学到“谁和谁相关”,从而实现 全局信息交互。
⚠️ 问题:如果输入图片很大(比如 224×224 的图像被切成很多 patch),Key 和 Value 的数量会非常多,计算和显存开销就会爆炸式增长。
空间降采样注意力 SRA(右边图)
为了降低计算量,引入了 Spatial Reduction Attention (SRA)。
从图里可以看到,区别就在于:
- 在进入 Multi-Head Attention 之前,Key 和 Value 先经过一个“Spatial Reduction(空间降采样)”模块。
- Query 不变(因为查询需求还是完整的),但是 Key/Value 会变少。
直观类比: - 普通注意力:开大会 → 所有人都要发言 → 很耗时。
- SRA:开大会前,先选出代表(下采样) → 只有部分人发言,但大部分信息仍能覆盖到 → 节省计算量和显存。
好处
- 减少计算量:Key/Value 数量减少,注意力计算更快。
- 节省显存:不用存储庞大的全量 K/V。
- 保持全局建模能力:虽然少了一些细节,但仍然能看全局(因为 Query 还是完整的)。
4、PVT 的网络结构
PVT 和 CNN 类似,采用了 金字塔式的多阶段结构。整张图分为 4 个阶段,每个阶段都会把输入特征图的分辨率减半、通道数增加,逐步提取更深层的特征。
🔹 (1) 输入与 Patch Embedding
- 输入:大小为 H×W×3的彩色图像。
- 处理:先切成小 patch(比如 4×4),再用 线性映射 (Linear Projection) 把每个 patch 转换为向量(类似 ViT 的操作)。
- 结果:得到第一个特征图 F1,分辨率缩小 1/4,通道数变成 C1。
👉 类比:把一张大照片切成小块,再把每个小块压缩成一个“数字 ID 卡”。
🔹 (2) 四个 Stage(金字塔结构)
整个网络由 Stage 1 → Stage 4 组成,每一层都会进一步缩小分辨率,增加通道数:
- Stage 1:
- 输入:原图(切分后)。
- 输出:H/4×W/4×C1。
- 特点:保留了比较高的分辨率,适合捕捉细节。
- Stage 2:
- 输出:H/8×W/8×C2。
- 分辨率减半,通道数增加,特征更抽象。
- Stage 3:
- 输出:H/16×W/16×C3
- 进入更深层的语义特征(类似 ResNet 的 C3 层)。
- Stage 4:
- 输出:H/32×W/32×C4
- 最深层,分辨率最小,但通道最多,信息最抽象。
👉 类比:就像看地图,从“街道地图(Stage1,高分辨率)”到“城市地图(Stage4,低分辨率但全局视野更强)”。
🔹 (3) Transformer Encoder(每个 Stage 内部)
在每个 Stage 内,都会经过一个 Transformer Encoder,里面的关键模块是:
- Norm:归一化,稳定训练。
- Spatial Reduction Attention (SRA):
- 对 Key/Value 特征先下采样,减少注意力计算量。
- 保证全局建模的同时节省显存。
👉 类比:开会前先挑选代表(下采样),不需要所有人都发言。
- Multi-Head Attention:多头自注意力,捕捉远距离关系。
- Feed Forward 网络 (FFN):全连接层 + 激活函数,增强特征表达能力。
🔹 (4) 输出特征
- 最终输出 四个不同分辨率的特征图:
[图片]
👉 这些多尺度特征可以直接送进 FPN、检测头、分割头,替代 ResNet 等 CNN Backbone。
5、PVT(Pyramid Vision Transformer)的重大缺点
- 局部特征建模不足
- PVT 使用 spatial-reduction attention 来降低计算量,但没有像 CNN 的卷积核或 Swin Transformer 的窗口机制那样,显式增强局部感受野。
- 导致在处理 小目标检测、精细分割、纹理信息建模 时性能不足。
- 细粒度信息丢失
- PVT 采用金字塔下采样结构来压缩特征,但这种方式容易丢失空间细节,限制了对 高分辨率图像 的建模能力。
- 在 医学影像、遥感图像 等需要保留丰富细节的任务上表现较弱。
- 计算效率仍然不够理想
- 虽然相比原始 ViT 已经降低了复杂度,但在高分辨率下,内存开销和推理速度仍然不及高效 CNN。
- 在 移动端或实时应用 中,PVT 的能效比偏低。
- 对大规模预训练依赖强
- 和大多数 Transformer 一样,PVT 在小数据集上直接训练时效果不佳,必须依赖 大规模预训练。
- 在数据有限的场景(如医疗影像)应用受限。
6、 后续的改进模型
PVT 作为早期探索性工作,启发了许多改进模型,主要集中在 增强局部建模能力 和 提升计算效率 上:
- Swin Transformer
- 引入 shifted window attention(滑动窗口注意力),强化局部建模并保持跨窗口信息交互。
- 兼顾局部与全局,成为图像识别、检测、分割任务的新基准。
- 明显提升了 精度-效率平衡。
- CvT(Convolutional Vision Transformer)
- 在 Transformer 前引入卷积操作(卷积投影),结合 CNN 的局部感知与 Transformer 的全局建模。
- 改善了 小目标感知能力 和 低层特征表达。
- ViL(Vision Longformer)
- 采用局部窗口 + 稀疏全局 token 的机制,提升长程依赖建模能力,降低注意力复杂度。
- PVT v2
- PVT 作者后续提出的改进版本,增强了表示能力并优化了效率,解决了部分细节丢失问题。
- 其他方向
- MobileViT、LeViT:面向移动端优化,进一步降低计算量。
- CoAtNet:结合卷积与 Transformer 的混合架构,强化泛化能力。