Skip to content
Zhengyi's Blog
Go back

BoQ 论文精读:用一袋可学习 Query 聚合地点特征

Edit page
论文信息

BoQ: A Place is Worth a Bag of Learnable Queries,Amar Ali-bey、Brahim Chaib-draa、Philippe Giguère,CVPR 2024。原文:arXiv · 作者代码

视觉地点识别的 backbone 会输出一组局部特征,但检索系统最终通常只想保存一个全局描述子。真正困难的问题是:

哪些局部区域在跨视角、跨季节、跨光照时仍能代表这个地点,应该怎样把它们稳定地聚合到同一个向量中?

NetVLAD 用聚类中心统计局部特征残差,GeM 用可学习广义均值进行全局池化,MixVPR 在空间和通道维度混合特征。BoQ 的答案更像一个主动提问过程:训练一组与输入图像无关的全局 queries,让每个 query 通过 cross-attention 去“询问”当前图像中哪些局部特征最值得保留。

这里的 query 不是待检索的查询图像,也不是某个具体地点的原型。它们是整个数据集共享的可学习探针,逐渐分工去关注建筑轮廓、植被、道路边缘、细粒度结构或更大范围的区域模式。

BoQ 总体架构

图 1:每层 Encoder 后接一个 BoQ block,各层聚合结果最终拼接成全局描述子

Table of contents

Open Table of contents

1. 从“被动池化”到“主动探测”

设 backbone 输出 NN 个局部特征,每个特征维度为 dd

X0=[x10,x20,,xN0]RN×d.\mathbf X^0 = \left[ \mathbf x_1^0,\mathbf x_2^0,\ldots,\mathbf x_N^0 \right] \in\mathbb R^{N\times d}.

传统 pooling 对所有位置使用同一种固定规约;BoQ 则引入 MM 个模型参数:

Qi=[q1i,q2i,,qMi]RM×d.\mathbf Q^i = \left[ \mathbf q_1^i,\mathbf q_2^i,\ldots,\mathbf q_M^i \right] \in\mathbb R^{M\times d}.

Qi\mathbf Q^i 不由输入图像生成。无论输入是雪天铁路、夜间街道还是历史建筑,同一组 queries 都会以相同的“问题集合”扫描局部特征。输入变化体现在 attention 权重与聚合结果中,而聚合坐标系本身保持一致。

这种输入无关性是 BoQ 的核心。它试图让不同图像在同一组通用语义探针下被编码,从而减少纯 self-attention 中“每张图都临时生成一套聚合基准”的不稳定性。

2. 一个 BoQ block 在做什么

多头注意力的基本形式可以简写为:

MHA(q,k,v)=softmax(qkd)v.\operatorname{MHA}(\mathbf q,\mathbf k,\mathbf v) = \operatorname{softmax} \left( \frac{\mathbf q\mathbf k^\top}{\sqrt d} \right) \mathbf v.

BoQ 在第 ii 层先用 Transformer Encoder 更新图像特征:

Xi=Encoderi(Xi1).\mathbf X^i = \operatorname{Encoder}^i \left( \mathbf X^{i-1} \right).

接着有两个注意力步骤。

2.1 Queries 之间先交换信息

Q~i=MHA(Qi,Qi,Qi)+Qi.\widetilde{\mathbf Q}^i = \operatorname{MHA} \left( \mathbf Q^i,\mathbf Q^i,\mathbf Q^i \right) +\mathbf Q^i.

这是 query self-attention。它让不同 queries 知道彼此正在关注什么,减少重复关注,并形成互补分工。由于 Qi\mathbf Q^i 与输入无关,这部分在推理时可以预先计算并缓存。

2.2 Queries 再从图像中读取信息

Oi=MHA(Q~i,Xi,Xi).\mathbf O^i = \operatorname{MHA} \left( \widetilde{\mathbf Q}^i, \mathbf X^i, \mathbf X^i \right).

其中:

如果有 MM 个 queries,输出 Oi\mathbf O^i 就包含 MM 个聚合结果。每个结果不是 query 参数本身,而是 query 权重作用于输入 value 后得到的图像内容

3. 为什么要聚合多个网络层

BoQ 并不只使用最后一个 Encoder 的结果,而是把 LL 个 block 的输出拼接:

O=Concat(O1,O2,,OL).\mathbf O = \operatorname{Concat} \left( \mathbf O^1,\mathbf O^2,\ldots,\mathbf O^L \right).

随后通过一到两个线性层降维:

z=W2(W1O),z^=zz2.\mathbf z = \mathbf W_2 \left( \mathbf W_1\mathbf O \right), \qquad \widehat{\mathbf z} = \frac{\mathbf z}{\|\mathbf z\|_2}.

较早层保留更多局部纹理和空间细节,较晚层具有更强的全局上下文。拼接不同层的 query 输出,相当于同时保留多个语义尺度。

但这里有一个容易忽略的设计选择:最后 Encoder 的图像 tokens 并没有直接进入描述子。它们只作为 cross-attention 的 key/value 被 queries 读取。论文也把“如何进一步利用最后一层的空间信息”留作未来工作。

4. 它与 DETR、NetVLAD 有什么本质区别

4.1 与 DETR 的区别

DETR 的 object queries 最终要输出对象类别和边界框,query 状态本身通过 decoder 不断更新,并直接参与预测。

BoQ 的 queries 只承担“读取器”角色。论文特意不在 query 与 cross-attention 输出之间加入残差连接,因此最终描述子来源于输入局部特征的加权聚合,而不是把一组固定 query 参数直接混入图像表示。

4.2 与 NetVLAD 的区别

NetVLAD 学习 cluster centers,并累计局部特征相对中心的残差;每个中心更像一个视觉词。

BoQ 不统计残差。它通过 query-key 相似度为当前图像动态生成空间权重,再对 value 加权求和。一个 query 可以在不同图像中关注位置完全不同、但功能相似的稳定结构。

4.3 与普通 attention pooling 的区别

如果 query 直接由输入产生,聚合标准会随图像改变。BoQ 使用全数据共享的参数 queries,希望为不同场景建立一致的探测基准,同时再通过 cross-attention 对每张图自适应读取。

5. 训练方式与注意力可解释性

BoQ 延续 GSV-Cities 的监督训练框架:

不同 learned queries 的 cross-attention

图 2:三列是不同数据集的输入,四行热力图对应四个 learned queries

可视化说明 queries 确实形成了不同关注模式:

不过,attention heatmap 只能说明“模型从哪里读取”,不能单独证明该区域对最终相似度的因果贡献。要做更强解释,还需要遮挡、替换或 query ablation。

6. 实验与消融:真正重要的不是 queries 越多越好

6.1 与全局检索方法比较

下表使用 ResNet-50 backbone,列出论文 Table 2 的 R@1。先看城市检索基准:

方法维度Pitts250kMSLS-val
Conv-AP409692.483.4
CosPlace204892.387.4
MixVPR409694.288.0
EigenPlaces204894.189.2
BoQ409695.091.1
BoQ1638495.091.2

再看环境变化更强的基准:

方法SPEDNordland*
Conv-AP80.138.2
CosPlace75.354.4
MixVPR85.258.4
EigenPlaces82.454.2
BoQ85.469.5
BoQ86.570.7

BoQ 在普通城市数据上的增益不算巨大,但在 Nordland 的极端季节变化下优势明显。这与论文的动机一致:多个共享 queries 能从变化剧烈的图像中寻找不同类型的稳定证据。

6.2 单阶段检索的效率

论文的延迟对比中,BoQ 特征提取约为 7 ms,且不需要 re-ranking;R2Former 为 31 ms 特征提取加约 400 ms 重排。BoQ 在该表的 MSLS-val R@1 为 91.4,也高于 R2Former 的 89.7。

这些数字证明了单阶段全局描述子的工程价值,但应限定在论文使用的硬件、输入尺寸和候选数设置内,不能直接当成任意部署平台上的固定延迟。

6.3 Query 数量

Query 数 MMMSLS-val R@1Pitts30k-val R@1AmsterTime R@1
486.993.142.7
888.193.944.3
1688.794.046.2
3290.694.148.9
6491.394.552.0

长期变化更强的 AmsterTime 从更多 queries 中获益最大。Pitts30k 已接近饱和,增加 queries 的收益较小。

精读时还可以发现一个文字与表格的小不一致:正文称 Pitts30k 从 8 到 64 queries 只提升 0.2 个百分点,但 Table 5 给出的是 93.9 到 94.5,即 0.6 个百分点。本文按表格数值引用。

6.4 Self-attention 不是装饰

去掉 query self-attention 后,Nordland R@1 为 56.4;加入后达到 65.9。MSLS、Pitts30k 和 Pitts250k 也全部提升。这说明 queries 之间的协同与去冗余是 BoQ 的关键组成,而不是可以随意移除的前处理。

6.5 深度并非单调有效

使用 ResNet-18 时,BoQ blocks 从 1 增加到 4,多个数据集持续改善;增加到 8 后反而下降。ResNet-101 也没有超过 ResNet-50,论文认为原因之一是显存限制迫使训练使用更小 batch。

这提示结果同时受模型容量与 batch 内负样本丰富度影响,不能把“更深但更差”简单归因于 backbone 本身。

7. 方法边界与我的结论

7.1 训练资源仍然不轻

480 至 800 张图的大 batch 是高质量 online mining 的重要条件。BoQ 推理很快,但训练并不是低资源方案;减小 batch 后,难例分布和 Multi-Similarity 的效果都可能变化。

7.2 Attention 成本随局部 token 数增长

cross-attention 约随 MNM N 增长,Encoder self-attention 约随 N2N^2 增长。提高输入分辨率能提供更多细节,却会迅速增加计算。补充实验也显示,分辨率并非越高越好:某些数据集在 384 或 432 像素附近最佳,Nordland 在继续放大时反而下降。

7.3 描述子紧凑性需要主动选择

更多 queries、更多 blocks 会提升表征能力,也会增加拼接后的中间维度与参数。论文的 16384 维版本准确率最高,但在超大规模地图中会显著增加存储和相似度搜索成本;4096 维版本通常是更现实的折中。

7.4 全局描述子仍缺少显式几何验证

BoQ 学会了空间选择,却最终输出一个全局向量。对重复立面、相似道路或极端视角变化,它没有像局部匹配方法那样验证几何一致性。无重排是它的速度优势,也构成精细辨别能力的上限。

BoQ 最值得借鉴的不是“把 Transformer 放进 VPR”,而是它对聚合问题的重新表述:

不要让每张图像自己决定一套临时的摘要方式,而是学习一组跨数据共享的问题,再让这些问题从每张图中读取对应证据。

这组 queries 既像可学习视觉词,又比固定聚类中心更灵活;既保留 attention 的动态选择,又维持跨图像一致的聚合坐标系。对于需要单阶段、低延迟、强环境鲁棒性的地点检索系统,这是一个非常干净且可迁移的设计。

参考资料

  1. 论文原文:arXiv 2405.07364
  2. BoQ 官方代码与模型
  3. GSV-Cities 原文

Edit page

Previous Post
AGPlace 论文精读:用 Neural ODE 融合航拍与地面多模态地点表征
Next Post
GSV-Cities 论文精读:把视觉地点识别从弱监督带回度量学习