CrossFormer 论文详解教程
CrossFormer 论文详解教程
难度等级:⭐⭐⭐(中等)
预计阅读时间:45分钟
目录
- 快速导读
- 论文核心问题
- 三大创新模块详解
- 实验结果分析
- 消融研究理解
- 设计洞察与启示
- 常见问题FAQ
- 学习资源推荐
快速导读
这篇论文在做什么?
标题:CrossFormer: A Versatile Vision Transformer Hinging on Cross-Scale Attention
核心创新:解决Vision Transformer缺乏跨尺度特征交互的问题
关键贡献:
- 🔸 CEL(Cross-scale Embedding Layer)- 多尺度嵌入层
- 🔸 LSDA(Long Short Distance Attention)- 长短距离注意力
- 🔸 DPB(Dynamic Position Bias)- 动态位置偏置
创新水平:⭐⭐⭐⭐(系统性强,工程化好)
论文核心问题
问题的提出
在开始讲解CrossFormer之前,我们需要理解它要解决什么问题。
1. Transformer的成功与应用
NLP中的Transformer:
✓ 能建立长距离依赖 → 理解整个文本的含义
✓ 自注意力机制 → 学习词之间的复杂关系视觉任务需要的能力:
✓ 理解不同尺度的物体 → 同时看到细节和全局
✓ 建立多尺度特征交互 → 大物体背景帮助理解小物体
✓ 处理可变的图像大小 → 不同场景的适应性
2. 现有Vision Transformer的标准做法
# 典型的Vision Transformer流程:# 步骤1:将图像分成等大小的Patch
image = 224 × 224
patch_size = 4
num_patches = (224/4)² = 56 × 56 = 3,136个# 步骤2:投影成嵌入
embedding = Linear(patch) → 768维# 步骤3:Self-Attention
# 计算所有3,136×3,136个Patch之间的注意力
# 复杂度:O(N²) = O(3,136²) ≈ 1000万操作
3. 现有方法的两大问题
问题1:单一尺度特征
现状:
┌─ 所有Patch都是4×4大小
├─ 每个嵌入都只包含单一尺度的信息
├─ 无法同时理解图像中的多尺度物体
└─ 特别在密集预测任务中表现不佳具体例子:
- 检测一个大建筑和窗户(两种尺度)
- 大建筑的特征和窗户的特征无法有效交互
- 导致检测精度下降
问题2:合并的代价
现有的成本降低方案:方案A(PVT):合并Embedding嵌入1 ──┐嵌入2 ──┼─→ 合并成1个嵌入3 ──┘✓ 优点:计算量下降到1/3✗ 问题:丧失细粒度特征方案B(Swin):局部窗口[■ ■ ■] [■ ■ ■][■ ■ ■] 和 [■ ■ ■][■ ■ ■] [■ ■ ■]✓ 优点:计算量下降✗ 问题:无法建立跨窗口的长距离依赖两个方案都付出了代价:
- 要么丧失细节(PVT)
- 要么丧失全局(Swin)
- 无法同时拥有!
4. 为什么这很重要?
实际应用中的需求:任务1:图像分类输入:192×192 的狗的照片需要:理解整体轮廓 → 复杂度低,单一尺度可能够任务2:目标检测输入:1280×720 的街景图像需要:✓ 检测远处的小汽车 → 需要细粒度特征✓ 检测近处的人物 → 需要粗粒度特征✓ 理解人物和汽车的关系 → 需要跨尺度交互复杂度高,多尺度很关键!任务3:语义分割输入:2048×2048 高分辨率图像需要:✓ 像素级的精确分割✓ 利用多尺度上下文✓ 跨尺度特征最关键的地方
三大创新模块详解
模块1:跨尺度嵌入层(CEL)
设计动机
CrossFormer的第一个想法很直观:
问题:Embedding只包含单一尺度信息
想法:为什么不让每个Embedding包含多种尺度呢?
方案:用多个不同大小的卷积核同时采样
核心设计
输入图像 (224×224)↓┌───────────────┼───────────────┐↓ ↓ ↓ ↓4×4卷积 8×8卷积 16×16卷积 32×32卷积↓ ↓ ↓ ↓采样Patch 采样Patch 采样Patch 采样Patch↓ ↓ ↓ ↓投影到D/2维 投影到D/4维 投影到D/8维 投影到D/8维↓ ↓ ↓ ↓└───────────────┼───────────────┘↓拼接在一起D维Embedding
四种卷积核的意义:
| 核大小 | 感受野 | 含义 | 特征类型 |
|---|---|---|---|
| 4×4 | 4×4 | 细节信息 | 边缘、纹理 |
| 8×8 | 8×8 | 局部形状 | 小物体轮廓 |
| 16×16 | 16×16 | 中等区域 | 物体部分 |
| 32×32 | 32×32 | 全局背景 | 大物体/背景 |
维度分配的黑科技
这是CEL最聪明的地方!不是平均分配维度,而是动态分配。
为什么需要动态分配?
卷积的计算量公式:
计算量∝K2×D2计算量 \propto K^2 \times D^2计算量∝K2×D2
其中K是核大小,D是维度。
场景1:如果每种核都分配相同维度D4×4: 成本 ∝ 16 × D²
8×8: 成本 ∝ 64 × D² (比4×4多4倍)
16×16: 成本 ∝ 256 × D² (比4×4多16倍)
32×32: 成本 ∝ 1024 × D² (比4×4多64倍)总成本 = (16 + 64 + 256 + 1024) × D² = 1360D² ❌ 太昂贵!场景2:CrossFormer的方案 - 动态分配4×4维度D/2: 成本 ∝ 16 × (D/2)² = 4D²
8×8维度D/4: 成本 ∝ 64 × (D/4)² = 4D²
16×16维度D/8: 成本 ∝ 256 × (D/8)² = 4D²
32×32维度D/8: 成本 ∝ 1024 × (D/8)² = 4D²总成本 = (4 + 4 + 4 + 4) × D² = 16D² ✅ 高效85倍!
具体例子(D=128):
4×4 → 64维
8×8 → 32维
16×16 → 16维
32×32 → 16维
总计:64+32+16+16 = 128维效果:用128维包含了4种不同尺度的信息
实现方式
# 伪代码:CEL的实现class CrossScaleEmbeddingLayer(nn.Module):def __init__(self, in_channels, out_channels):super().__init__()# 4种卷积,维度递减self.conv1 = nn.Conv2d(in_channels, out_channels//2, kernel_size=4, stride=4)self.conv2 = nn.Conv2d(in_channels, out_channels//4, kernel_size=8, stride=4)self.conv3 = nn.Conv2d(in_channels, out_channels//8, kernel_size=16, stride=4)self.conv4 = nn.Conv2d(in_channels, out_channels//8, kernel_size=32, stride=4)def forward(self, x):# 采样4种不同尺度out1 = self.conv1(x) # (B, D/2, H, W)out2 = self.conv2(x) # (B, D/4, H, W)out3 = self.conv3(x) # (B, D/8, H, W)out4 = self.conv4(x) # (B, D/8, H, W)# 拼接(在通道维度)out = torch.cat([out1, out2, out3, out4], dim=1) # (B, D, H, W)return out
模块2:长短距离注意力(LSDA)
设计动机
CEL解决了特征的多尺度性问题,现在要解决注意力的高效性问题。
核心矛盾:
├─ 完整Self-Attention能建立所有依赖关系
│ ├─ 优点:信息完整
│ └─ 缺点:计算量O(N²) - 太贵!
│
└─ 简化的Self-Attention能降低成本├─ PVT方案:合并Embedding│ ├─ 优点:便宜│ └─ 缺点:丧失细粒度特征│└─ Swin方案:局部窗口├─ 优点:便宜└─ 缺点:丧失长距离依赖CrossFormer的想法:能否两全其美?
→ 答案:分而治之!
核心方案:长短分离
短距离注意力(SDA):处理相邻的Embedding
原始56×56的Embedding网格:■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■
...SDA分组(G=7):┌─────────────┐ ┌─────────────┐
│ ■ ■ ■ ■ ■ ■ │ │ ■ ■ ■ ■ ■ ■ │
│ ■ ■ ■ ■ ■ ■ │ │ ■ ■ ■ ■ ■ ■ │
│ ■ ■ ■ ■ ■ ■ │ │ ■ ■ ■ ■ ■ ■ │
│ ■ ■ ■ ■ ■ ■ │ │ ■ ■ ■ ■ ■ ■ │
│ ■ ■ ■ ■ ■ ■ │ │ ■ ■ ■ ■ ■ ■ │
│ ■ ■ ■ ■ ■ ■ │ │ ■ ■ ■ ■ ■ ■ │
│ ■ ■ ■ ■ ■ ■ │ │ ■ ■ ■ ■ ■ ■ │
└─────────────┘ └─────────────┘7×7组 各自做Self-Attention计算复杂度分析:
- 每组:7² = 49个Attention计算
- 共:(56/7)² = 64组
- 总计:49 × 64 = 3,136个Attention
- vs 完整:56² = 3,136个位置需要计算✓ 计算量确实降低了!(通过分组)
✓ 每个Embedding完全保留!(没有合并)
长距离注意力(LDA):处理远距离的Embedding
采样策略(I=8):◆ . . . . . . . ◆ . . . . . . . ◆
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
◆ . . . . . . . ◆ . . . . . . . ◆
...(每隔8个位置采样一个)采样后形成G×G的组(大小 = S/I × S/I = 56/8 = 7):◆ ◆ ◆ ◆ ◆ ◆ ◆
◆ ◆ ◆ ◆ ◆ ◆ ◆
◆ ◆ ◆ ◆ ◆ ◆ ◆
◆ ◆ ◆ ◆ ◆ ◆ ◆
◆ ◆ ◆ ◆ ◆ ◆ ◆
◆ ◆ ◆ ◆ ◆ ◆ ◆
◆ ◆ ◆ ◆ ◆ ◆ ◆在这个7×7组内做Self-Attention为什么有效?(关键洞察)采样后的Embedding:
- 来自原始网格的不同位置(远距离)
- 相邻的采样Embedding对应的大尺度Patch相邻例如:
原始位置(0,0)的大尺度Patch:16×16范围
原始位置(0,8)的大尺度Patch:16×16范围
它们的Patch有重叠!→ 提供充分上下文结论:
✓ 建立了长距离依赖
✓ 利用大尺度特征的连续性
✓ 理解变得更容易
交替使用的逻辑
Block序列:Block1: SDA(短距离)└─ 处理局部细节Block2: LDA(长距离)└─ 处理全局关系Block3: SDA└─ 基于全局重新理解局部Block4: LDA└─ 基于局部重新理解全局...效果:多尺度信息逐层融合
- 前面的Block学会了什么是重要的
- 后面的Block基于此来理解不同尺度
- 形成从局部→全局→局部...的信息流
计算复杂度对比
假设图像分辨率:56×56嵌入总数:3,136个方案对比:1. 完整Self-Attention复杂度:O(S⁴) = O(56⁴) ≈ 980万✗ 太昂贵2. Swin(窗口大小7×7)复杂度:O(S²G²) = O(56² × 7²) ≈ 150万✓ 便宜但丧失长距离3. LSDA(G=7, I=8)复杂度:O(S²G²) = O(56² × 7²) ≈ 150万✓ 同样便宜,但保留全部Embedding!
实现代码
# LSDA伪代码(论文中仅需10行)class LSDA(nn.Module):def forward(self, x, attention_type='SDA'):H, W, D = x.shape # (H, W, D)if attention_type == 'SDA':# 短距离:分G×G的组x = x.reshape(H//G, G, W//G, G, D).permute(0, 2, 1, 3, 4)x = x.reshape(H*W//(G**2), G**2, D)else: # LDA# 长距离:采样后分组x = x.reshape(G, H//G, G, W//G, D).permute(1, 3, 0, 2, 4)x = x.reshape(H*W//(G**2), G**2, D)# 在每组内做标准Self-Attentionx = self.attention(x) # (num_groups, G², D)# 逆变换恢复原始形状# ... (ungroup逻辑)return x
关键特性:
- ✅ 仅使用reshape和permute操作
- ✅ 没有额外的计算成本
- ✅ 代码简洁(10行)
模块3:动态位置偏置(DPB)
设计动机
现有问题:相对位置偏置(RPB)方案(Swin等):Attention = Softmax(QK^T / √d + B) × V其中B是固定的矩阵(如13×13):-6 -5 -4 ... +6
-6 [值] [值] [值] [值]
-5 [值] [值] [值] [值]
...
+6 [值] [值] [值] [值]局限性:
1. 图像大小必须固定(224×224)
2. 如果Δx或Δy超出范围,查表失败
3. 不同任务用不同大小的图像,很不灵活
核心方案
新想法:不用固定表格,而是用神经网络动态生成!DPB(Δx, Δy) → 位置偏置标量具体结构:输入:(Δx, Δy)↓ [2维]全连接层↓ [D/4维]LayerNorm + ReLU↓全连接层↓ [D/4维]LayerNorm + ReLU↓全连接层↓ [1维]输出:位置偏置(标量)参数量:很小(只有几个FC层)
计算开销:可忽略
灵活性:支持任意的相对距离
原理分析
为什么这个方案有效?1. MLP的学习能力├─ 能根据相对距离学到位置关系└─ 比固定表格更灵活2. 参数量控制├─ 隐层维度D/4(而不是D)├─ 只有3个FC层└─ 参数量:约 2×(D/4)² + (D/4)²×1 ≈ D²/43. 计算效率├─ 对每个(i,j)对计算一次DPB├─ 在实现中,(Δx,Δy)只有有限组合(≤(2G-1)²)├─ 预计算后查表,复杂度O(G²)└─ 相比完整Self-Attention的O(G⁴)便宜很多
数学等价性
论文证明了:在固定图像大小下,DPB等价于RPB
证明思路:固定大小下,(Δx, Δy)只有有限组合:
1-G ≤ Δx, Δy ≤ G-1共(2G-1)²种组合我们可以为每种组合预计算DPB值:
B_matrix[(Δx, Δy)] = DPB(Δx, Δy)这就是一个固定的(2G-1)×(2G-1)矩阵!
完全等同于传统的RPB。但不同的是:
- RPB必须预定义尺寸
- DPB可以动态处理任意尺寸
实现代码
class DynamicPositionBias(nn.Module):def __init__(self, dim):super().__init__()self.linear1 = nn.Linear(2, dim//4)self.ln1 = nn.LayerNorm(dim//4)self.relu = nn.ReLU(inplace=True)self.linear2 = nn.Linear(dim//4, dim//4)self.ln2 = nn.LayerNorm(dim//4)self.linear3 = nn.Linear(dim//4, 1)def forward(self, delta_xy):"""delta_xy: (num_pairs, 2),包含所有(Δx, Δy)对返回:(num_pairs,) 位置偏置"""x = self.linear1(delta_xy)x = self.ln1(x)x = self.relu(x)x = self.linear2(x)x = self.ln2(x)x = self.relu(x)bias = self.linear3(x) # (num_pairs, 1)return bias.squeeze(-1)
实验结果分析
4.1 图像分类性能
数据集与设置
数据集:ImageNet
├─ 训练集:128万张图像
├─ 验证集:50万张图像
└─ 图像分辨率:224×224训练配置:
├─ 优化器:AdamW
├─ 轮数:300 Epoch
├─ 预热:前20个Epoch
├─ 批大小:1024(8张V100 GPU)
├─ 初始学习率:0.001
├─ 权重衰减:0.05
└─ 数据增强:RandAugment, Mixup, CutMix等
关键结果对比
| 模型 | 参数量 | FLOPs | 准确率 | 相比Swin提升 |
|---|---|---|---|---|
| Swin-T | 29.0M | 4.5G | 81.3% | - |
| CrossFormer-T | 27.8M | 2.9G | 81.5% | +0.2% |
| Swin-S | 50.0M | 8.7G | 83.0% | - |
| CrossFormer-S | 30.7M | 4.9G | 82.5% | -0.5% |
| RegionViT-S | 30.6M | 5.3G | 82.5% | -0.5% |
解读:
CrossFormer-T:
✓ 参数少4%
✓ 计算量少36%
✓ 准确率高0.2%
→ 小模型上效率优势明显CrossFormer-S:
✓ 准确率与RegionViT打平(82.5%)
✓ 但计算量更低(4.9G vs 5.3G)
→ 效率更优
4.2 目标检测性能
为什么检测任务很重要?
分类 vs 检测的区别:图像分类:
- 输入:单个物体图像
- 输出:类别标签
- 需求:全图理解
- 特征需求:单一尺度足够
- 难度:⭐目标检测:
- 输入:包含多个物体的大图像
- 输出:多个物体的位置和类别
- 需求:多物体的准确定位
- 特征需求:多尺度特征(小物体需要细粒度,大物体需要粗粒度)
- 难度:⭐⭐⭐语义分割:
- 输入:高分辨率图像
- 输出:像素级的类别标签
- 需求:精细的空间信息
- 特征需求:多尺度特征最关键
- 难度:⭐⭐⭐⭐
检测结果(COCO 2017)
方法 模型规模 AP (主要指标) 相比前二提升
─────────────────────────────────────────────────────────
Mask R-CNN (ResNet-50) baseline 42.0 AP -
TransCNN-B base 44.0 AP -
Twins-SVT-B base 45.1 AP -
CrossFormer-S small 45.4 AP +0.4%
CrossFormer-B base 47.2 AP +1.7%关键观察:
✓ CrossFormer-B相比前二名提升1.7%
✓ 这是一个显著的改进!
✓ 在密集预测上优势大于分类
分布式分析
AP分布(CrossFormer-B):AP (all sizes) 47.2 ← 整体性能
├─ AP50 (IoU>0.5) 69.9 ← 容易的检测
├─ AP75 (IoU>0.75) 51.8 ← 困难的检测
├─ APs (small) 30.1 ← 小物体 ✓ 显著提升!
├─ APm (medium) 49.9 ← 中等物体
└─ APl (large) 66.2 ← 大物体特别观察:
✓ 小物体检测显著提升 → 说明细粒度特征很有用
✓ 困难的检测(AP75)提升显著 → 多尺度特征帮助很大
4.3 分割任务性能
语义分割(ADE20K)
数据集:ADE20K
├─ 训练集:20K图像
├─ 验证集:2K图像
└─ 150个语义类别关键结果:使用语义FPN作为解码器头:
─────────────────────────────
模型 IOU 相比前二提升
Swin-S 45.2% -
CrossFormer-S 46.0% +0.8%
CrossFormer-B 47.7% +4.1%(对比CAT-B)使用UPerNet作为解码器头:
──────────────────────────────
模型 IOU MS-IOU 提升
Swin-B 48.1% 49.7% -
CrossFormer-B 49.7% 50.6% +1.6%
CrossFormer-L 50.4% 51.4% +2.3%关键观察:
✓ 分割任务上的提升最大(+4.1%)
✓ 大模型的优势更明显
✓ 这正是跨尺度特征最有用的地方!
性能提升的模式
按任务难度排序:分类 < 检测 < 分割↑ ↑ ↑
0.2% 1.7% 4.1%
小 中 大现象:越困难的任务,提升越大!原因分析:分类(简单):
- 只需要全图理解
- 单尺度特征基本够用
- CEL/LSDA的优势有限检测(中等):
- 需要多物体定位
- 多尺度特征开始有用
- CEL/LSDA提升明显分割(困难):
- 需要像素级精细分割
- 多尺度特征最关键
- CEL/LSDA优势最大结论:
→ CrossFormer对密集预测任务特别有效!
消融研究理解
什么是消融研究?
定义:逐个移除模型的某个部分,测量性能变化目的:证明每个部分都有贡献,都是必要的方法:
1. 构建完整模型(基线)
2. 移除某个部分,得到变种
3. 测量性能下降
4. 分析该部分的重要性好的论文必须做消融研究,原因:
✓ 证明创新的有效性
✓ 排除偶然性
✓ 指导设计选择
消融1:CEL的多尺度有效性
实验设置
基线模型:CrossFormer-S(82.5%准确率)
变种设置:
| 配置 | Stage-1 | Stage-2/3/4 | 结果 |
|---|---|---|---|
| V1(单尺度) | 4×4只 | 2×2只 | 81.5% |
| V2(单尺度) | 8×8只 | - | 81.9% |
| V2(双尺度) | 4×4,8×8 | 2×2,4×4 | 82.3% |
| V3(四尺度) | 4×4,8×8,16×16,32×32 | 2×2,4×4 | 82.5% |
| V4(过度) | 4×4,8×8,16×16,32×32 | 2×2,4×4,8×8 | 82.4% |
关键发现
分析1:单尺度的不足
V1 (4×4):81.5%
V2 (8×8):81.9%✓ 单一大核(8×8)比单一小核(4×4)好0.4%
✓ 说明感受野有帮助,但不够分析2:多尺度的效果
V1 → V3:从81.5%到82.5% (+1.0%)
✓ 多尺度提升1%!
✓ 这是显著的改进分析3:鲁棒性测试
V2, V3都在82.3%-82.5%
✓ 不同尺度组合都接近
✓ 设计相对鲁棒,不是精细调参分析4:过度设计
V3 → V4:从82.5%到82.4% (-0.1%)
✓ 在Stage-2/3/4加3种尺度反而略差
✓ 说明找到了最优设计
✓ 避免过度工程化结论:
→ 多尺度特征确实有帮助
→ 4种尺度是最优的
→ 设计相对鲁棒
消融2:LSDA的有效性
对比方案
方案A:PVT式自注意力
- 特点:将相邻Embedding合并
- 优点:计算量低
- 缺点:丧失细粒度特征方案B:Swin式自注意力
- 特点:仅在本地窗口内做注意力
- 优点:计算量低,保留细节
- 缺点:无法建立跨窗口的长距离依赖方案C:LSDA(CrossFormer)
- 特点:长短距离分离,不合并
- 优点:保留全部特征,同时降低成本
- 缺点:逻辑更复杂
实验结果
基线:CrossFormer-S使用LSDA = 82.5%变种1:替换为PVT式
├─ 移除CEL的多尺度特征
├─ 测试结果:81.3%
└─ 下降:-1.2%变种2:替换为Swin式
├─ 保留CEL的多尺度特征
├─ 但用局部窗口注意力
├─ 测试结果:81.9%
└─ 下降:-0.6%完整CrossFormer(LSDA)
├─ 多尺度特征 ✓
├─ 保留全部Embedding ✓
├─ 长短距离结合 ✓
└─ 结果:82.5%性能对比:
PVT式 < Swin式 < LSDA
81.3% < 81.9% < 82.5%
-1.2% -0.6% 基线结论:
→ LSDA的设计是最优的
→ 相比PVT提升1.2%
→ 相比Swin提升0.6%
→ 长短分离确实有效
消融3:位置编码对比
三种位置编码方案
方案A:绝对位置编码(APE)
Embedding = Embedding + Position缺点:位置信息是绝对的不同长度的输入无法通用方案B:相对位置偏置(RPB)
Attention = Softmax(QK^T / √d + B) × V改进:B矩阵存储相对距离关系对不同长度输入有更好的泛化性缺点:B矩阵大小固定无法处理超出范围的距离方案C:动态位置偏置(DPB)
Attention = Softmax(QK^T / √d + DPB(Δx, Δy)) × V改进:用MLP动态生成位置偏置支持任意大小的距离优势:最灵活,支持可变图像大小
实验结果
基线模型:CrossFormer-S方案 参数量 吞吐量 准确率
──────────────────────────────────
APE 30.93M 686 img/s 82.1%
RPB 30.62M 684 img/s 82.5%
DPB 30.66M 672 img/s 82.5%
DPB+残差 30.66M 672 img/s 82.4%分析:1. 准确率对比APE < RPB = DPB = 基线82.1% < 82.5% = 82.5% = 82.5%✓ 相对位置(RPB/DPB)都优于绝对位置✓ 提升0.4%2. 吞吐量对比RPB ≈ DPB(差异不大)684 ≈ 672✓ DPB的计算开销可接受✓ 虽然略低,但不显著3. 灵活性对比APE:支持任意大小 ✓RPB:固定大小 ✗DPB:任意大小 ✓✓ DPB同时具有RPB的准确性和APE的灵活性4. 过度设计DPB → DPB+残差:82.5% → 82.4%✓ 残差连接反而有害✓ 说明设计已经足够优化结论:
→ DPB是最好的选择
→ 性能与RPB相同
→ 灵活性更优
→ 计算开销可接受
设计洞察与启示
为什么CrossFormer有效?
洞察1:多尺度特征的互补性
直观理解:小尺度Patch(4×4):
├─ 看到:边缘、纹理、细节
├─ 优点:信息丰富
└─ 问题:范围有限大尺度Patch(32×32):
├─ 看到:轮廓、形状、整体结构
├─ 优点:范围广阔
└─ 问题:信息不够精细两者结合:
✓ 既有细节又有全局
✓ 小尺度通过大尺度的上下文理解
✓ 大尺度通过小尺度的细节充实类比人的视觉系统:
- 眼中心:高分辨率(对应小Patch)
- 眼周边:低分辨率(对应大Patch)
- 大脑综合两者信息做出最终理解
洞察2:长短距离的互补性
短距离注意力(SDA):
├─ 作用:捕捉相邻元素的紧密依赖
├─ 特点:快速、精确、范围小
└─ 比喻:微观视角长距离注意力(LDA):
├─ 作用:捕捉远距离元素的稀疏依赖
├─ 特点:全局、概括、范围大
└─ 比喻:宏观视角交替使用的效果:
Block1(SDA) → Block2(LDA) → Block3(SDA) → ...第1层后:
✓ SDA学会了局部的细微模式第2层后:
✓ LDA基于这些模式做全局综合
✓ 信息向外传播第3层后:
✓ SDA重新审视局部,基于全局理解
✓ 信息向内汇聚结果:多层次信息融合
洞察3:成本控制的精巧性
CEL的维度分配:如果平均分配(简单但贵):
成本 = (16+64+256+1024) × D² = 1360D²CrossFormer的方案(聪明的分配):
成本 = (4+4+4+4) × D² = 16D²改进:85倍!原理:
✓ 大核已经贵(∝ K²)
✓ 不必再给它高维度(∝ D²)
✓ 维度分配要补偿核的成本
✓ 所以大核用低维,小核用高维结果:
✓ 保留了多尺度特征
✓ 控制了计算成本
✓ 性能没有下降
对研究者的启示
启示1:问题驱动的研究
CrossFormer的研究过程:1. 识别真实问题├─ 不是"我想提升精度"├─ 而是"多尺度特征无法交互"└─ 有具体的目标2. 根本分析问题├─ 为什么会这样?├─ 现有方案为什么不行?├─ 有什么根本的矛盾?└─ CEL vs LSDA vs DPB都是因此而生3. 系统性解决├─ 不是单点创新├─ 而是三个模块紧密配合├─ CEL提供多尺度特征├─ LSDA利用这些特征└─ DPB支持灵活的输入启示:好的研究来自好的问题好的问题需要系统的解决
启示2:创新不等于复杂
CrossFormer的优势:
✓ 核心思想简洁(长短分离、多尺度混合)
✓ 实现简洁(10行代码)
✓ 效果显著(密集预测任务提升1-4%)对比其他复杂设计:
✗ 一些论文追求novel的点数
✗ 堆砌各种技巧
✗ 代码复杂,难以复现
✗ 改进不显著启示:
→ 简单的想法 + 精心的实现 > 复杂的技巧
→ 代码简洁反而证明了设计的优雅
→ 实用性很重要
启示3:全面的验证很重要
CrossFormer的验证:维度:
✓ 分类(ImageNet)
✓ 检测(COCO)
✓ 分割(ADE20K)
✓ 不同模型大小(T/S/B/L)深度:
✓ 主要实验展示性能
✓ 消融研究证明必要性
✓ 分析实验解释有效性
✓ 对比实验排除其他因素启示:
→ 单一任务上的成功不足以说明问题
→ 多个任务上的一致改进才能证明有效性
→ 消融研究是论文可信度的标志
常见问题FAQ
Q1: CEL中为什么是4种尺度?2种或6种不行吗?
A: 从Table 6的消融研究可以看到:
2种尺度(4×4, 8×8):82.3%
3种尺度(推断):82.4%左右
4种尺度(完整):82.5%
过度(3种在更多层):82.4%结论:
✓ 4种是平衡点
✓ 2种欠缺(缺少很大的感受野)
✓ 更多反而没帮助(边际收益递减)原理:
- 4×4 ~ 8×8 ~ 16×16 ~ 32×32
- 形成几何级数的感受野
- 覆盖了从细节到全局的所有尺度
- 再加就冗余了启示:设计要找到平衡点,不是越多越好
Q2: LSDA中的G=7和I=8是怎么选的?
A: 这些是超参数,论文中有说明:
原则:
G = 分组大小 = 窗口大小(类似Swin)
I = 采样间隔 = 降采样因子选择:
Stage-1 (56×56):G=7, I=8- G=7: 7×7组,共(56/7)²=64组- I=8: 采样得到7×7网格Stage-2 (28×28):G=7, I=4- 分辨率降低,调整间隔Stage-3 (14×14):G=7, I=2
Stage-4 (7×7):G=7, I=1模式:
✓ 每层保持G=7(一致的分组大小)
✓ I随分辨率降低而减小
✓ 保持采样覆盖范围论文没有系统的搜索,而是基于经验设计
可以尝试其他值,但这个设置工作得很好
Q3: DPB为什么要用3层MLP?
A: 这是一个设计选择:
MLP的作用:学习相对距离到位置偏置的映射为什么3层?
├─ 1层太简单,可能欠拟合
├─ 2层还是比较简单
├─ 3层能学复杂的映射
└─ 4层以上可能过度为什么隐层是D/4?
├─ D/2太大,参数多
├─ D/4足够表示相对距离信息
├─ 体现了压缩设计理念对比RPB:
RPB:一个固定的(2G-1)×(2G-1)矩阵
DPB:一个小MLP参数量对比:
RPB:约(2×7-1)² ≈ 169个参数
DPB:约2×D/4 + D/4×D/4 + D/4×1 ≈ D²/16个参数D=256时,DPB:约4096个参数(多一些)
但获得了灵活性
Q4: 为什么在分割上的提升最大?
A: 这与任务的特性有关:
任务复杂度排序:分类 < 检测 < 分割分类(82.5%):
└─ 提升:+0.2%├─ 只需整体判断├─ 单尺度特征基本够└─ 多尺度的帮助有限检测(44.4 AP):
└─ 提升:+1.7%├─ 需要定位多个物体├─ 物体有不同尺度├─ 多尺度特征开始有用└─ 但物体检测部分简化了问题分割(47.7 IOU):
└─ 提升:+4.1%(最大!)├─ 需要像素级精确分割├─ 边界识别需要细粒度特征├─ 全局理解需要粗粒度特征├─ 两者都同等重要└─ 多尺度特征最关键的地方!类比:
- 分类 = 看照片说是什么
- 检测 = 说出照片中物体在哪儿
- 分割 = 用彩色笔精确描绘物体轮廓分割最难,需要最多的细节信息
Q5: CrossFormer能用于3D吗?
A: 理论上可以扩展:
当前设计(2D):
- CEL:2D卷积(4×4, 8×8等)
- LSDA:2D网格分组
- DPB:2D距离(Δx, Δy)扩展到3D的思路:
- CEL:3D卷积(4×4×4, 8×8×8等)
- LSDA:3D网格分组
- DPB:3D距离(Δx, Δy, Δz)预期:
✓ 理论上完全兼容
✓ 代码改动不大
✗ 但计算量会增加
✗ 内存需求增加8倍实际应用:
- 医学图像(CT/MRI):可能有帮助
- 视频处理:需要评估
- 点云处理:需要特殊设计
学习资源推荐
基础知识准备
必读文献
1. Transformer基础标题:Attention is All You Need作者:Vaswani et al., 2017地位:奠基性论文难度:⭐⭐⭐学习时间:2-3小时核心内容:Self-Attention机制、位置编码2. Vision Transformer初探标题:An Image is Worth 16x16 Words作者:Dosovitskiy et al., 2021地位:第一个成功的ViT难度:⭐⭐学习时间:1-2小时核心内容:如何将Transformer应用到视觉任务3. 金字塔ViT标题:PVT: Pyramid Vision Transformer作者:Wang et al., 2021地位:引入多阶段设计难度:⭐⭐学习时间:1-2小时核心内容:金字塔结构、阶段设计4. 窗口注意力标题:Swin Transformer作者:Liu et al., 2021地位:局部窗口的代表难度:⭐⭐学习时间:1-2小时核心内容:窗口注意力、相对位置偏置
推荐教程
视频教程:
1. 3Blue1Brown - Attention and Transformers链接:YouTube上搜索难度:简明易懂时长:约30分钟优点:从零基础讲起,有很好的动画演示2. Stanford CS224N - Attention & Transformers链接:课程主页难度:学术性强时长:90分钟优点:完整的理论推导博客教程:
1. Jay Alammar - Illustrated Transformerhttps://jalammar.github.io/illustrated-transformer/优点:逐句讲解,配图清晰2. 张俊林 - Transformer详解知乎/个人博客优点:中文讲解,深入浅出
CrossFormer学习路径
第1天:理论准备(6小时)
上午(3小时):
- 复习Self-Attention机制(1小时)
- 理解位置编码(1小时)
- 学习Vision Transformer基本概念(1小时)下午(3小时):
- 了解现有ViT的改进方向(1小时)
- 学习金字塔结构(1小时)
- 学习Swin的窗口注意力(1小时)
第2天:论文详读(8小时)
上午(4小时):
- 快速浏览论文(30分钟)
- 深入理解CEL的设计(1.5小时)├─ 为什么需要多尺度├─ 维度分配的计算└─ 具体实现方式
- 深入理解LSDA的设计(1.5小时)├─ SDA和LDA的区别├─ 为什么要交替└─ 复杂度分析下午(4小时):
- 深入理解DPB的设计(1.5小时)├─ RPB的局限├─ DPB的创新└─ 等价性证明
- 分析实验结果(1.5小时)
- 学习消融研究(1小时)
第3天:代码实现(6小时)
上午(3小时):
- 阅读官方代码https://github.com/cheerss/CrossFormer
- 理解核心模块的代码实现
- 逐行注释关键部分下午(3小时):
- 尝试自己实现CEL
- 尝试自己实现LSDA
- 跑一个小数据集测试
第4天:应用与扩展(4小时)
上午(2小时):
- 思考CrossFormer的局限
- 考虑可能的改进方向├─ 是否可以用不同的尺度组合?├─ 是否可以学习尺度权重?└─ 是否可以自适应地选择尺度?下午(2小时):
- 在自己的数据集上试验
- 或者改写代码试验某个想法
- 记录结果和思考
进阶学习
相关工作理解
如果想全面理解Vision Transformer的演化:1. ViT (Dosovitskiy et al., 2021)→ 最初的想法2. DeiT (Touvron et al., 2021) → 数据高效的ViT3. T2T-ViT (Yuan et al., 2021)→ Token到Token的渐进编码4. Swin (Liu et al., 2021)→ 窗口注意力5. PVT (Wang et al., 2021)→ 金字塔结构6. Twins (Chu et al., 2021)→ 空间注意力的重新思考7. CrossFormer (Wang et al., 2021)→ 跨尺度注意力学习顺序:ViT → DeiT → Swin/PVT → CrossFormer每个论文都解决了前面论文的某个问题
理解这个演化过程很重要
实践项目
项目1:修改CEL
- 试验不同数量的尺度(3种、5种)
- 分析性能变化
- 记录最优配置项目2:修改LSDA
- 试验不同的G和I组合
- 看是否能进一步降低成本
- 评估准确率权衡项目3:应用到其他任务
- 医学图像分割
- 遥感图像分析
- 自定义数据集项目4:融合其他想法
- 结合Knowledge Distillation
- 结合剪枝技术
- 结合量化方法
总结与反思
CrossFormer的核心价值
1. 理论贡献✓ 识别了Vision Transformer的根本问题✓ 提出了系统性的解决方案✓ 三个模块紧密配合,相辅相成2. 工程贡献✓ 实现简洁高效(10行代码)✓ 无需特殊的硬件支持✓ 易于集成到现有项目3. 实验贡献✓ 全面的验证(4个任务)✓ 详细的消融研究✓ 显著的性能提升(特别是密集预测)4. 启示贡献✓ 展示了如何系统解决问题✓ 证明了简洁有力✓ 多尺度特征的重要性
