Skip to content
🔗 分享本题
查看我的学习进度 →

21 模块 Q4 教学图:什么是Perceiver Resampler?和线性投影比有什么优势?

🧠 图解记忆:图像经过ViT后产生大量token(如14×14=196个);点击图片可查看原图。

💡 答案要点

背景问题:

  • 图像经过ViT后产生大量token(如14×14=196个)
  • 直接送入LLM计算量巨大
  • 需要对视觉token进行压缩/重采样

两种方案对比:

方案结构优点缺点
线性投影y = Wx简单、参数量少表达能力有限
Perceiver ResamplerTransformer交叉注意力动态长度、可学习压缩参数量更大

Perceiver Resampler原理:

视觉特征:[H×W×1024](如196个token,每个1024维)

可学习的 queries:[32×1024](固定32个查询token)

Cross-Attention:queries attend to 视觉特征

输出:[32×1024](压缩到固定32个token)

效果:196 → 32,压缩6倍

Flamingo的重采样实现:

python
class PerceiverResampler(nn.Module):
    def __init__(self, dim, num_queries=32, visual_dim=1024):
        super().__init__()
        self.query_tokens = nn.Parameter(torch.randn(num_queries, dim))
        self.cross_attention = CrossAttention(dim, num_heads=8)
        self.ffn = FeedForward(dim)

    def forward(self, visual_features):
        # visual_features: [B, 196, 1024]
        # query_tokens: [B, 32, 1024](可学习)
        queries = self.query_tokens.unsqueeze(0).expand(visual_features.size(0), -1, -1)
        # 交叉注意力
        x = self.cross_attention(queries, visual_features)
        x = self.ffn(x)
        return x  # [B, 32, 1024]

面试话术:

"Perceiver Resampler本质上是用少量可学习query去'查询'视觉特征,实现压缩。相当于视觉特征的摘要器。相比固定压缩,动态query能根据任务自适应调整关注区域。"