队列保存的是带历史身份的 key
课堂上下文:从哪个问题来
指认历史key的身份、加入与离开,先理解缓存到底存了什么,再问它是否仍一致。
沿本页的双样本示意,队列容量为 4,当前保存旧键 [k1,k2,k3,k4]。本轮两张图产生两个新键 k5、k6;每个查询先与自己的本轮正键及更新前的旧队列比较。比较完成后,将 k5、k6 按序加入,并移除最旧的 k1、k2;下一批使用的字典于是变为 [k3,k4,k5,k6]。这是“容量 4、每批 2 个新键”的教学设置。P17 为便于逐项跟踪,改用每批 1 个新键,得到 [k2,k3,k4,k5];入队和出队遵守相同的先进先出规则。
每个槽保存的是当时算好的向量。k2不会因为查询编码器更新,就自动变成今天重新编码的k2;也没有保存一条可以反传回早先图像的完整计算图。队列的身份标签帮助我们看清“新信息进入、旧信息退出”,向量值则用于相似度计算。
容量更大可以提供更多比较对象,也使最旧条目来自更早的步骤。容量、batch大小和编码器变化速度因此互相影响。课堂图只画4个槽便于指认,不能把4当作MoCo论文的配置。
容量 4:旧队列 [k1,k2,k3,k4];比较后 k5、k6 入队,k1、k2 离开,下一批为 [k3,k4,k5,k6]。旧 key 保留原向量。 查看对应图解状态
- 容量 4 · 本轮新键 k₅、k₆ · FIFO 教学队列
- 当前图像 → key 编码器
- k₅
- k₆
- 入队的是特征
- 原图只说明来源
- k3
- k4
- k5
- k6
- 最旧
- 最新
- k₅、k₆ 入队
- k₁、k₂ 退队
- 队列中的旧键保持原值;更新编码器不会追溯重算它们。