RealCat

· 71 min read

论文解读:RaCo,给学习型关键点加上排序与协方差

TL;DR RaCo 是 LightGlue、FlexGlue 作者团队的新关键点检测器[1]。它把关键点这件事拆成三个独立的头:一个用策略梯度训练、只追求可重复性的检测器;一个用 soft rank 训练、让”前 n 个点”在两张图里尽量一致的排序器(ranker);一个用单应自适应监督、输出像素尺度 2×2 协方差矩阵的不确定性估计器。整个网络只在单张图片的合成单应对上训练,不需要深度、位姿或共视图像对,而靠全 360° 的旋转增强就拿到了旋转鲁棒性:HPatches 上旋转可重复性 AUC@2px 为 78.3,相比 DaD 的 62.0 和 SIFT 的 69.6,单张推理 4.8 ms。排序器是即插即用的:给 SuperPoint 加上它,128 个点的预算下可重复点数接近翻倍。协方差用于 ETH3D 三角化后的点云过滤时,保留 99% 的点就能达到别人保留 90% 的精度,校准斜率 β = 0.94 最接近理想值 1。代码与权重已开源,Apache 2.0 协议;训练代码会放进 Glue Factory。

一、动机:为什么又要单独讲检测器

过去几年局部特征的进步几乎都发生在描述子和匹配器上。SuperGlue、LightGlue 让稀疏匹配变得又准又快,RoMa、FlexGlue 这类稠密或稀疏到稠密的匹配器甚至已经不太依赖描述子了。但关键点检测本身进步不大:论文直言,SIFT 在旋转不变性和定位精度上至今仍有竞争力[2]。原因之一是监督信号难拿:关键点的”正确答案”定义模糊,不像对应关系那样可以从深度和位姿直接算出来[3, 4]。

另一方面,关键点在大规模系统里的角色反而更清晰了。SfM 需要离散的多视图轨迹(track),视觉定位需要一个稀疏、可缓存、可扩展的场景表示;FlexGlue 这种匹配器也仍然要有人告诉它查询点放在哪。检测与描述解耦的趋势也在回归:DeDoDe、RDD 都把两者拆成独立网络训练[5, 6]。这就对检测器提出了新要求:高度可重复、定位精准,但和之后的匹配方式无关。论文于是把检测器单独拿出来评测和设计,并挑了三个被忽视的实际问题:

  1. 旋转鲁棒性。手机竖拍横拍、无人机俯拍、机器人翻滚,面内旋转在真实数据里很常见,但学习型检测器通常只在 90° 的倍数上做增强,中间角度直接崩溃(图 5 里 ALIKED 和 DISK 在 90° 到 270° 之间可重复性接近 0)[7, 4]。已有的修法是旋转等变卷积[8, 9, 10, 11],昂贵且复杂。
  2. 关键点打分。边缘设备和大规模系统都要截断关键点数目。现有做法是按检测置信度排序,但检测置信度只回答”这里是不是角点”,不回答”这个点在另一张图里也会被检到、也会排在前面吗”。
  3. 空间不确定性。检测器输出的坐标是带噪声的,但下游的三角化、BA 几乎都假设各向同性的单位协方差。之前的工作要么只估到尺度未知的协方差[12],要么只给一个置信度分数[13, 14]。

论文的三条贡献正对这三个问题:一套把检测器单独拿出来评的协议;一个只在合成单应上用强化学习训练的检测器 RaCo;一个不需要额外标注就能学到排序和度量协方差的简单策略。

RaCo 的三种输出:关键点、排序热图、协方差 图 1:同一张图的三种输出。左:检测到的关键点,基本落在角点上;中:排序器热图,颜色越暖表示越值得优先保留,注意窗框角点被排在墙面之前;右:协方差图,颜色是协方差第一特征向量的角度,方差大的地方被”漂白”,所以墙面是白的、窗沿是彩色细线。

二、核心方法

2.1 总体架构与训练设定

RaCo 流程图 图 2:三个分支。检测器和协方差估计器共用一个轻量多尺度骨干,分别输出关键点概率图和逐像素 2×2 协方差;排序器是一个独立的小网络,输出排序分数图。右侧是最终产物:带各向异性不确定性椭圆的、排好序的可重复关键点。

训练数据只有单张图片:从一张图上采两块裁剪(crop),用一个已知的合成单应 和强光度增强联系起来,这就是一个”两视图”样本[3]。记两视图为 ,视图 中第 个检测到的关键点为 。因为单应是已知的,任何一个点在另一视图的真值位置都能算出来,三个头的监督全部由此而来,不需要深度、位姿或共视图像对。

三个模块各自的目标是:

  • 检测器:输出 ,每个像素被选为关键点的概率,NMS 后取局部极大值。目标是可重复:同一个 3D 点在不同视角、不同外观下都能被稳定、精确地检到。
  • 排序器:输出另一张分数图 ,给每个关键点一个排序分 。目标是对所有预算 ,按 降序截断后两视图之间的匹配数最大。
  • 协方差估计器:输出 ,每个像素一个对称正定矩阵,单位是像素。目标是把检测噪声、图像噪声、离散化误差造成的重投影误差建模成零均值高斯。

2.2 检测器:策略梯度学可重复性

检测器沿用 DISK 和 DaD 的策略梯度(policy gradient)思路[4, 15]:把”选哪些像素当关键点”看成一个随机策略,用可重复性当奖励。网络输出一张分数图 ,经过全图 softmax 归一化为概率图 (注意是整张图一个 softmax,而不是每个像素独立 sigmoid,这意味着像素之间互相竞争,是一种隐式的全局排序,后面会再提到)。训练时按 采样 个关键点,对每个点 计算它经单应投影到 之后与 中最近检测点的距离 ,奖励是

px,。负奖励 随训练步数 从 0 线性增大到 ,也就是先只鼓励、后慢慢惩罚不可重复的点。损失是采样点的负对数似然,用归一化奖励加权:

是该点的采样概率。归一化奖励是 DaD 的做法:用全图平均奖励做分母,让梯度大小不随”这张图好不好检”而剧烈变化。

和 DaD 的差别在于数据:DaD 在 MegaDepth 的真实图像对上训练,而 RaCo 只用单张图片的合成单应,且不像 SuperPoint 那样需要先在合成形状上预训练。论文的立场是:角点是高质量关键点,而深度数据并不是训练好检测器的必要条件。证据在表 1 和表 2:SuperPoint 可重复性不高,相对位姿却估得很好;RaCo 在 MegaDepth1800 和 ETH3D 上可重复性最高,而它从没见过任何真实的视角变化。

2.3 旋转鲁棒性:用增强代替等变网络

这节没有新公式,但是论文最硬的结论之一。学习型检测器缺乏旋转等变性,之前的解法是旋转等变的 steerable CNN[8],S-TREK、REKD 等检测器都走这条路[9, 10]。RaCo 的做法只是:训练用的合成单应里包含全 360° 均匀采样的面内旋转,配合强光度变换。DaD 只用 90° 间隔的旋转[15, 16],结果就是图 5 里它在 45°、135° 这些中间角度明显掉下去,而 RaCo 的曲线几乎是一条水平线。

消融(表 3 下半)给出了代价对比:把 RaCo 换成旋转等变卷积,可重复性 AUC@2px 从 78.3 涨到 81.9(+3.6),但推理慢 10 倍(4.8 ms 对 42.3 ms),训练慢 3.5 倍,显存多 2.5 倍;去掉旋转增强则跌到 24.9。所以等变结构有用但不划算,增强才是主要来源。

2.4 排序器:对任意预算最大化匹配数

关键点排序示意 图 3:两视图各检测 10 个点,其中 4 对是真实对应(彩色)。左:预算充足时 4 对都保留,4 个匹配。中:预算砍到 5 个,由于对应点在两视图里的名次差异很大(一个排第 1、另一个排第 7),只剩 1 个匹配。右:排序器把可匹配的点放到列表前面,并让对应点的名次相近,5 个点的预算下仍然 4 个匹配。

问题。现代检测器按检测分数排序[3, 4],这个分数表示”这里有关键点的可能性”,不关心空间分布和可匹配性。SuperPoint、DISK 这类在网格 cell 内选点的检测器尤其如此。当预算 很小时,对应点在两视图里名次相差很大,就会出现图 3 中间的情况:两边各保留 5 个点,却只有 1 对同时幸存。

目标。记视图 中按排序分 降序取前 个点的索引集为 , 是从两个索引集中挑出真值对应对的算子,排序问题是

也就是对每一个预算 的匹配数求和。要让这个和最大,两件事缺一不可:可匹配的点必须排在不可匹配的点前面;对应点必须有相近的名次。下面的部件把图 3 做成可以拖的:16 个点里 10 对可匹配,“检测分数”是每个视图独立加噪的分数,“排序器分数”是把可匹配点放在前面并保持一致的分数。拖预算看匹配数。

默认设置下(预算 6,噪声 0.25),按检测分数只有 1 个匹配,按排序器有 6 个。把噪声拉到 0 也不会让检测分数完全追上,因为不可匹配的点仍然和可匹配点混在一起。真实检测器的分数当然不是随机噪声,但这正是论文的观察:检测分数在两视图之间的一致性没有被优化过。

可微松弛。上面的目标里 是硬排序,不可导。RaCo 用 Blondel 等人的 soft ranking 算子 把分数映射成可微的软名次[17],然后用两个损失自监督地训练排序器:

Spearman 损失。最大化两视图中已匹配关键点名次的 Spearman 秩相关,等价于最小化软名次的欧氏距离:

它保证对应点要么都在截断列表里,要么都不在。

Pull 损失。把已匹配的点往第 1 名拉,未匹配的点往第 名推:

总损失 。两个损失为什么都要?下面的部件用一个玩具版本回答:10 个点里 5 对可匹配,每个视图各有 10 个可学习的分数,软名次用两两 sigmoid 比较近似(,比论文用的投影到置换多面体的算子粗糙,但性质相同),每次改动都在浏览器里重新做 300 步梯度下降。把其中一个权重拖到 0 看会发生什么。

默认两个损失都开时,预算 2 到 5 下的匹配数达到上限。把 pull 权重拖到 0,Spearman 损失仍然能降到 0,因为它只要求对应点名次相同,并不要求靠前,于是可匹配的点可能整体沉在列表中部,小预算下匹配数掉到 1 到 2 个;把 Spearman 权重拖到 0,pull 损失把 5 个可匹配点全拉向第 1 名,它们在软名次里基本并列,两视图内部的先后顺序就变成随机的,预算 2 时可能一个都对不上。两者合起来才是图 3 右侧那个”既靠前又对齐”的列表。

为什么要一个单独的排序器。论文解释了一个细节:输出全局归一化热图的检测器(DaD、S-TREK、RaCo 自己)训练时都带某种 top-K 选择,所以已经隐式地学到了”优先可匹配的点”这个全局排序,而 SuperPoint、DISK 这类按网格 cell 选点的检测器没有。这就是为什么图 6 里排序器给 SuperPoint 带来的提升远大于给 RaCo 的。但即使是前者,也没有显式约束对应点名次的相关性,这是 Spearman 损失额外带来的。排序器本身是一个输入 RGB 图的独立 ResNet,和检测器无关,所以可以给任意检测器用。

2.5 协方差估计器:度量尺度的各向异性不确定性

协方差监督 图 4:协方差的监督方式。视图 B 的关键点 xB 经单应 HB→A 投到 A,和 A 中对应点 xA 的差是重投影误差 e(黑线)。把它建模成零均值高斯,协方差是两边预测协方差之和(B 的要先经单应的雅可比传播),最大化误差的似然。右侧是训练后的协方差图:颜色是第一特征向量的角度,纹理弱的地方方差大,显示为白色。

把每个检测点看成带不确定性 的噪声观测。对应点 、 之间的重投影误差 ,其中

是单应在 处的雅可比:B 视图的不确定性要经过单应的局部线性化才能和 A 视图的相加。这一步是协方差能有度量尺度的关键:误差是真实的像素误差,单应是真实的几何变换,所以学出的 的单位就是像素,而 DAC 那种从分数图的结构张量推出来的协方差只能确定到一个未知尺度[12]。

参数化。网络不直接输出 ,而是输出 Cholesky 因子 的三个非零元素,,这就自动保证了对称半正定;对角元再过一个 Softplus 保证严格正定。所以协方差头只是三张分数图,在每个关键点位置采样一下。

损失是重投影误差的负对数似然:

两个方向都算,对所有 个匹配点取平均,。行列式和逆都通过 的 Cholesky 分解计算。

这个损失为什么不会退化?直觉上网络可以把协方差预测得无限大来让 Mahalanobis 项消失,但 项会惩罚它;反过来预测得太小,Mahalanobis 项爆炸。两项的平衡点正是误差的真实协方差。下面的部件给了 40 个从真实协方差(长轴 3 px、短轴 1 px、朝向 30°)采样的误差,你来调预测的椭圆,看 NLL 的两项怎么变。

默认的各向同性预测(σ = 2)NLL 约为 3.0,真值处约为 2.3;把椭圆放大到 σ₁ = 6、σ₂ = 2 时 Mahalanobis 项降到 0.3 但 项升到 2.5,合计反而更差。这就是 NLL 作为协方差监督的全部道理:它同时惩罚过度自信和过度保守。

2.6 网络结构与两阶段训练

检测器、协方差估计器与排序器的网络结构 图 9 与图 10:上两行是检测器和协方差估计器,共用一个四尺度骨干(3×3 卷积 + BatchNorm + SELU,平均池化下采样,每个尺度 1×1 卷积后上采样成 F1 到 F4),拼接后分别接检测头(输出 softmax 归一化的 P)和协方差头(输出 Cholesky 因子 L)。最下一行是排序器:9 个残差块加一个 5×5 卷积,独立输入归一化 RGB 图,输出排序分数图 R。

骨干基于 ALIKED-N(16)[7],但把可变形卷积换成了普通卷积;协方差头接在拼接的多尺度特征上,论文说这样验证集 NLL 更低。推理时关键点坐标用 DaD 和 ALIKED 那种 soft-argmax 亚像素精化。

训练分两阶段:

  1. 检测器。Oxford-Paris 1M 干扰集的 40 万张图片,中心裁剪 768×768 后采单应再缩到 640×640;AdamW,batch 2,学习率 余弦退火到 ,1 个 epoch,每图采样 512 个点,NMS 半径 3 px,单张 RTX 2080 Ti。
  2. 排序器与协方差头。冻结检测器和骨干,用推理时的设定(NMS、top-N、亚像素精化)生成关键点和对应关系再训练,因为这两个头需要的是推理时的关键点分布和重投影误差分布,而不是训练时的采样分布。协方差头训 2 万步,排序器训 1 个 epoch,两者互不依赖,可以任意顺序训练后拼起来。

三、实验结果

3.1 评测协议

论文强调检测器要单独评,不接任何描述子或匹配器:两视图各检测固定数目的关键点,用真值变换(单应、或位姿 + 深度)把点投到对方视图,在给定重投影半径内做互最近邻,得到”匹配”。指标有:匹配数、可重复性(互最近邻在半径内的点占共视点的比例,两视图取平均)、定位误差(已匹配点的平均重投影误差)。此外,用这些几何匹配直接估单应(DLT + PoseLib,报告角点误差 AUC)或相对位姿(RANSAC,报告位姿误差 AUC,内点阈值逐方法调优)[18]。

四个数据集:HPatches 的 540 对(短边缩到 640,1024 个点)[19];DNIM 的 17 个固定网络摄像头序列中采 428 对,时间差至少半小时且跨不同季节,再叠加随机单应,图像低分辨率、夜景有阴影截断,所以只取 256 个点[20];MegaDepth1800(4 个测试场景,长边 1600,2048 个点,半径 5 px)[21];ETH3D-Two-View,作者从 ETH3D 多视图数据集新建的 13 个场景 1171 对共视图像,带 LiDAR 深度真值(长边 1024,2048 个点)[22]。所有检测器检测同样多的点。

3.2 两视图匹配

下面的部件把表 1、2、3、4 做成可以切换的横向条形图,RaCo 的条用主题色标出。

几个值得注意的结论:

  • 可重复性上 RaCo 在四个数据集都是第一(@3px),而它只在合成单应上训练。
  • 位姿精度不是第一:MegaDepth1800 上 DaD 的 AUC@5° 为 72.4 对 71.8,ETH3D 上 DaD 94.5、SuperPoint 92.9 对 92.5。论文承认定位误差略高于 DaD、与 ALIKED 相当。
  • DISK 在 MegaDepth 上匹配数最多(647),但可重复性和泛化(到 ETH3D、HPatches)较弱,这是在 MegaDepth 上训练的典型表现[4]。
  • SuperPoint 可重复性不高,位姿却估得很好,论文由此得出”角点是高质量关键点,深度数据不是必需的”。
  • DNIM 上 RaCo 全面领先,说明光照和透视变化同时存在时它最稳。

3.3 旋转等变性

面内旋转下的可重复性曲线 图 5 与图 11:HPatches 图像对在 0° 到 360° 面内旋转下的可重复性@2px。左:ALIKED、DISK 在 90° 到 270° 之间几乎归零;SuperPoint、DaD 在 90° 倍数处有尖峰、中间凹陷;SIFT 稳定在 0.7 左右;RaCo 在 0.8 附近几乎水平。右:RaCo 加等变卷积(绿)只略高于不加(蓝);REKD 这个用等变卷积的检测器只有 0.6;去掉旋转增强(品红)的 RaCo 和 ALIKED 一样崩溃。

曲线的 90° 周期性有两个来源,论文在附录 C.3 里解释:一是多数检测器只在 90° 倍数上做增强;二是旋转 90° 倍数时不需要插值,没有插值伪影(评测时加了 σ = 10 的高斯噪声来压制这个因素,但压不干净)。RaCo 的曲线在 90° 倍数处也有轻微隆起,但幅度很小。

3.4 关键点排序

可重复性随关键点预算变化 图 6(上半):HPatches(左,预算 1 到 1024)和 MegaDepth1800(右,1 到 2048)上可重复性@3px 随预算的变化。实线是用排序器排序,虚线是用检测分数。SuperPoint 的提升最大:HPatches 上预算 100 时从 0.3 提到 0.48;RaCo 自己的提升小一些,因为它的检测分数已经是全局归一化的。预算到满时实线和虚线重合,排序器只是重排。

为了证明排序器是即插即用的,作者用 SuperPoint 的关键点重新训练了一个排序器。两种检测器的曲线都表明:越小的预算,排序器的收益越大。论文的解释见 2.4 节末尾:按网格 cell 选点的检测器缺乏全局排序,排序器正好补上。

排序器定性结果 图 16(节选):HPatches 上每视图 256 个点的预算,四列分别是 SuperPoint、SuperPoint + 排序器、RaCo、RaCo + 排序器,绿线是找到的匹配。第一个例子预算 128 时可重复性从 0.15(SuperPoint)提到 0.45(加排序器),RaCo 从 0.36 到 0.54;第二个例子从 0.22 到 0.56、0.42 到 0.58。

3.5 多视图三角化与协方差校准

三角化精度 vs 完整性,以及协方差校准 图 7 与图 8。左:ETH3D 上用真值位姿和深度把关键点连成轨迹、三角化并做非线性优化(PyCeres + COLMAP,重投影残差用估计的协方差加权),然后按 3D 点的边缘协方差(精度 = 协方差椭球体积的倒数)从低到高剔除,横轴是保留比例对应的完整性,纵轴是 0.5 cm 阈值下的精度。RaCo(紫)在所有保留比例下都同时更准、更全。右:校准曲线,横轴是预测不确定性 √Tr(Σ),纵轴是对真值网格的实际误差,灰虚线是理想的 β = 1;RaCo 的 β = 0.94 最接近,DAC-iso 只有 0.65。

对比基线有四个:DAC 的各向同性和完整协方差(都只到尺度)[12]、常数各向同性协方差、以及用重投影误差倒数加权。结果有两点值得玩味:

  • 常数协方差出人意料地有竞争力,论文把它归因于轨迹够长,多视图冗余掩盖了单点的不确定性。DAC-full 比 DAC-iso 好,但缺少尺度限制了它在多视图里的信息量。
  • RaCo 的协方差在保留 99% 点时精度最高,说明它不只是用来”剔除坏点”的,而是在 BA 里降低了噪声观测的权重,让点本身更准。

更粗阈值下的三角化曲线 图 12:同样的实验在 1 cm 和 2 cm 阈值下,结论不变,RaCo 曲线始终在最外侧。

附录 C.6 还把检测器本身放进这条流水线评了一次(4096 个点,三角化后只优化点的 BA,表 4):F1 在三个阈值上 RaCo 都最高(0.33 / 1.76 / 6.71 对 DaD 的 0.32 / 1.71 / 6.69),差距很小,但完整性是最高的。

3.6 定性结果

RaCo 在各数据集上的四种输出 图 13 与图 14(节选):每行从左到右是关键点、检测器分数图、排序器分数图、协方差第一特征向量角度图。四行分别来自 HPatches(工具)、DNIM(小镇街景)、MegaDepth(林肯像)、ETH3D(庭院中的金属螺旋)。检测器学到的是角点类特征;排序器把明显的角点排最高,次要角点其次,再是边缘类特征,无纹理区域最低;协方差图里纹理弱的区域泛白(方差大),边缘上协方差长轴沿着边的方向,第四行的螺旋结构最明显。

可重复点对比 图 15(节选):两个 HPatches 图像对,四列是 SuperPoint、ALIKED、DaD、RaCo,绿点可重复、红点不可重复、蓝点不在共视区域。第一对(平面挂毯,大视角变化)可重复性分别是 70.9%、56.4%、63.0%、76.8%;第二对(城堡立面)46.3%、51.8%、53.3%、55.6%。RaCo 的点分布更均匀,不像 SuperPoint 那样在窗洞里成簇。

四、局限性

论文没有专门的局限性章节,但散落在结果里承认了几点:

  1. 定位精度不是最好的:定位误差略高于 DaD,MegaDepth1800 和 ETH3D 上的位姿 AUC 也落后 DaD 一两分。可重复性第一不等于位姿第一。
  2. 等变卷积仍然有增益(+3.6 AUC@2px),只是作者认为不值 10 倍的推理时间。
  3. 常数协方差在多视图里已经很强,说明在长轨迹场景下学习协方差的边际收益有限;它的价值更多体现在短轨迹或两视图的情形,而论文没有在这种情形下评测协方差。

我自己再补几条:

  • 只有检测器,没有描述子。仓库的 matching_demo.ipynb 用 ALIKED 的描述子加 LightGlue+ 做匹配。排序器的”可匹配”是纯几何意义上的(几何上可重复),不包含”描述子是否可区分”:重复纹理上的角点可重复性很高,但描述子匹配时会歧义。要用它做 SfM,仍然得另配描述子或 FlexGlue 这类不依赖描述子的匹配器。
  • 只用单应训练意味着模型从没见过遮挡、深度不连续、非平面视差。它在 MegaDepth 和 ETH3D 上的泛化令人意外地好,但失败模式(例如深度边界上的”虚假角点”,两视图里落在不同表面上)没有被分析过。
  • 协方差只在真值位姿下评了三角化,没有端到端 SfM 或相对位姿估计的结果;“协方差能传播到位姿”是设计目标,但论文只验证了传播到 3D 点这一步。另外训练时的误差来源是合成单应 + 光度增强,真实图像里的误差源(运动模糊、压缩、视差)是否被这个分布覆盖,没有校准实验之外的证据。
  • DNIM 的评测用了合成单应,不是真实视角变化;表 1 里 DNIM 的位姿 AUC 绝对值很低(@1px 只有 2 到 4),说明这个设定对所有方法都很难,排名的统计意义有限。
  • 运行时间 4.8 ms 是检测器的数字,排序器是另一个 9 个残差块的网络,论文没有单独报告它和协方差头的开销。
  • 训练代码尚未放出,README 说会进 Glue Factory[23]。

五、结论与展望

RaCo 的故事线很清楚:匹配器这几年进步太快,关键点检测反而成了短板,但关键点在大规模系统里的角色又不可替代。论文于是把检测器拆成三个各管一摊的头[1]:检测器只管可重复(策略梯度 + 合成单应 + 360° 旋转增强,不要深度不要位姿,SIFT 之后终于有一个学习型检测器在任意面内旋转下不崩);排序器只管截断之后还能匹配(soft rank 上的 Spearman + pull 损失,给任何检测器都能用);协方差头只管误差有多大、朝哪个方向(Cholesky 参数化 + 经单应雅可比传播的 NLL,输出的单位是像素)。三者解耦,各自可以单独训练、单独替换。

对实践者来说,有几个可操作的点:

  • 要在边缘设备上限制关键点数目,先用 ranker_scores 而不是 keypoint_scores 做 top-k;SuperPoint 这类网格检测器收益最大。
  • 面内旋转大的场景(无人机、手持设备)可以直接换 RaCo,不需要任何等变结构。
  • 协方差矩阵可以直接作为 BA 里重投影残差的权重(论文的 PyCeres + COLMAP 流程),或者按 过滤点。
  • 它和 FlexGlue 是同一团队的配套件:FlexGlue 要的是查询点而不是描述子,RaCo 正好只给点和不确定性。

往后看,自然的方向是把协方差一路传到相对位姿和 SfM 的位姿协方差(Muhle 等人的可微非线性最小二乘已经做了一半[24]),把排序器的目标从”几何可匹配”扩展到”描述子可区分”,以及把”只用单张图 + 合成单应”的训练配方推到真实图像对(RIPE 这类只需要正负图像对的强化学习方法可能是中间道路[25])。更大的问题是:在前馈 3D 重建模型越来越强的当下,离散关键点的价值在于可缓存、可扩展、可做轨迹,RaCo 这种”关键点 + 排序 + 不确定性”的接口,可能正是稀疏流水线和稠密模型之间最薄的那层胶水。

六、上手

git clone https://github.com/cvg/RaCo.git
cd RaCo && pip install -e .    # PyTorch >= 1.9.1、OpenCV、Kornia
import torch
from raco import RaCo
from raco.utils import load_image

image = load_image("assets/i_castle.png")
extractor = RaCo()                      # 默认自动下载官方权重
output = extractor.extract(image)

keypoints = output["keypoints"]          # (B, N, 2) 像素坐标
scores = output["keypoint_scores"]       # (B, N) 检测置信度
ranker_scores = output["ranker_scores"]  # (B, N) 排序分,按它取 top-k 做截断
covariances = output["covariances"]      # (B, N, 2, 2) 像素尺度的协方差

也可以不克隆仓库,直接 torch.hub.load("cvg/RaCo", "raco", pretrained=True),输入是 范围的 (B, 3, H, W) 张量,灰度图传 (B, 1, H, W)。构造参数和论文的对应:max_num_keypoints(默认 512,论文训练时也是每图 512 个)、nms_radius(默认 3,必须是奇数,对应论文的 3 px NMS)、subpixel_sampling / subpixel_temp(soft-argmax 亚像素精化及其温度,默认开、0.5)、detection_threshold(默认 −1 不过滤)、ranker 和 covariance_estimator(可分别关掉对应的头省时间)。demo.ipynb 画关键点、协方差椭圆和排序可视化,matching_demo.ipynb 接 ALIKED 描述子 + LightGlue+ 做两视图匹配[26]。权重在 GitHub Release(raco.pth),整个仓库 Apache 2.0。训练与评测代码会发布在 Glue Factory[23]。

参考

  1. Shenoi, Lindenberger, Sarlin, Pollefeys. RaCo: Ranking and Covariance for Practical Learned Keypoints. 3DV 2026, arXiv 2602.15755. arXiv · 代码
  2. Lowe. Distinctive Image Features from Scale-Invariant Keypoints. IJCV 2004. PDF
  3. DeTone, Malisiewicz, Rabinovich. SuperPoint: Self-Supervised Interest Point Detection and Description. CVPRW 2018. arXiv · 代码
  4. Tyszkiewicz, Fua, Trulls. DISK: Learning Local Features with Policy Gradient. NeurIPS 2020. arXiv · 代码
  5. Edstedt, Bökman, Wadenbäck, Felsberg. DeDoDe: Detect, Don't Describe — Describe, Don't Detect for Local Feature Matching. 3DV 2024. arXiv · 代码
  6. Chen, Fu, Chen, Teng, Xiao, Zhao. RDD: Robust Feature Detector and Descriptor using Deformable Transformer. CVPR 2025. arXiv · 代码
  7. Zhao, Wu, Chen, Chen, Xu, Li. ALIKED: A Lighter Keypoint and Descriptor Extraction Network via Deformable Transformation. IEEE TIM 2023. arXiv · 代码
  8. Cesa, Lang, Weiler. A Program to Build E(N)-Equivariant Steerable CNNs. ICLR 2022. OpenReview · 代码
  9. Santellani, Sormann, Rossi, Kuhn, Fraundorfer. S-TREK: Sequential Translation and Rotation Equivariant Keypoints for Local Feature Extraction. ICCV 2023. arXiv
  10. Lee, Kim, Cho. Self-Supervised Equivariant Learning for Oriented Keypoint Detection. CVPR 2022. arXiv · 代码
  11. Bökman, Edstedt, Felsberg, Kahl. Steerers: A Framework for Rotation Equivariant Keypoint Descriptors. CVPR 2024. arXiv · 代码
  12. Tirado-Garín, Warburg, Civera. DAC: Detector-Agnostic Spatial Covariances for Deep Local Features. 3DV 2024. arXiv · 代码
  13. Santellani, Zach, Sormann, Rossi, Kuhn, Fraundorfer. GMM-IKRS: Gaussian Mixture Models for Interpretable Keypoint Refinement and Scoring. ECCV 2024. arXiv
  14. Zeng, Gu, Liu, Cai, Cheng. Uncertainty Aware Interest Point Detection and Description. WACV 2025. CVF · 代码
  15. Edstedt, Bökman, Wadenbäck, Felsberg. DaD: Distilled Reinforcement Learning for Diverse Keypoint Detection. arXiv 2503.07347, 2025. arXiv · 代码
  16. Edstedt, Bökman, Zhao. DeDoDe v2: Analyzing and Improving the DeDoDe Keypoint Detector. CVPRW 2024. arXiv · 代码
  17. Blondel, Teboul, Berthet, Djolonga. Fast Differentiable Sorting and Ranking. ICML 2020. arXiv
  18. Larsson et al. PoseLib: Minimal Solvers for Camera Pose Estimation. GitHub. 代码
  19. Balntas, Lenc, Vedaldi, Mikolajczyk. HPatches: A Benchmark and Evaluation of Handcrafted and Learned Local Descriptors. CVPR 2017. arXiv
  20. Zhou, Sattler, Jacobs. Evaluating Local Features for Day-Night Matching. ECCVW 2016. PDF
  21. Li, Snavely. MegaDepth: Learning Single-View Depth Prediction from Internet Photos. CVPR 2018. arXiv
  22. Schöps, Schönberger, Galliani, Sattler, Schindler, Pollefeys, Geiger. A Multi-View Stereo Benchmark with High-Resolution Images and Multi-Camera Videos. CVPR 2017. 项目页
  23. Lindenberger, Sarlin, et al. Glue Factory: training and evaluation of deep neural networks for local feature extraction and matching. GitHub. 代码
  24. Muhle, Koestler, Jatavallabhula, Cremers. Learning Correspondence Uncertainty via Differentiable Nonlinear Least Squares. CVPR 2023. arXiv
  25. Künzel, Hilsmann, Eisert. RIPE: Reinforcement Learning on Unlabeled Image Pairs for Robust Keypoint Extraction. ICCV 2025. arXiv · 代码
  26. Lindenberger, Sarlin, Pollefeys. LightGlue: Local Feature Matching at Light Speed. ICCV 2023. arXiv · 代码

Comments