· 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。
- 论文:RaCo: Ranking and Covariance for Practical Learned Keypoints,Abhiram Shenoi、Philipp Lindenberger、Paul-Edouard Sarlin、Marc Pollefeys,ETH Zurich / Google / Microsoft Mixed Reality & AI Lab,3DV 2026,2026 年 2 月 17 日。
- 代码:github.com/cvg/RaCo
- 前作 / 预备知识:SuperPoint(单应自适应与合成训练)、SuperGlue、FlexGlue(同一团队的匹配器,RaCo 的关键点可以直接作为它的查询)。
一、动机:为什么又要单独讲检测器
过去几年局部特征的进步几乎都发生在描述子和匹配器上。SuperGlue、LightGlue 让稀疏匹配变得又准又快,RoMa、FlexGlue 这类稠密或稀疏到稠密的匹配器甚至已经不太依赖描述子了。但关键点检测本身进步不大:论文直言,SIFT 在旋转不变性和定位精度上至今仍有竞争力[2]。原因之一是监督信号难拿:关键点的”正确答案”定义模糊,不像对应关系那样可以从深度和位姿直接算出来[3, 4]。
另一方面,关键点在大规模系统里的角色反而更清晰了。SfM 需要离散的多视图轨迹(track),视觉定位需要一个稀疏、可缓存、可扩展的场景表示;FlexGlue 这种匹配器也仍然要有人告诉它查询点放在哪。检测与描述解耦的趋势也在回归:DeDoDe、RDD 都把两者拆成独立网络训练[5, 6]。这就对检测器提出了新要求:高度可重复、定位精准,但和之后的匹配方式无关。论文于是把检测器单独拿出来评测和设计,并挑了三个被忽视的实际问题:
- 旋转鲁棒性。手机竖拍横拍、无人机俯拍、机器人翻滚,面内旋转在真实数据里很常见,但学习型检测器通常只在 90° 的倍数上做增强,中间角度直接崩溃(图 5 里 ALIKED 和 DISK 在 90° 到 270° 之间可重复性接近 0)[7, 4]。已有的修法是旋转等变卷积[8, 9, 10, 11],昂贵且复杂。
- 关键点打分。边缘设备和大规模系统都要截断关键点数目。现有做法是按检测置信度排序,但检测置信度只回答”这里是不是角点”,不回答”这个点在另一张图里也会被检到、也会排在前面吗”。
- 空间不确定性。检测器输出的坐标是带噪声的,但下游的三角化、BA 几乎都假设各向同性的单位协方差。之前的工作要么只估到尺度未知的协方差[12],要么只给一个置信度分数[13, 14]。
论文的三条贡献正对这三个问题:一套把检测器单独拿出来评的协议;一个只在合成单应上用强化学习训练的检测器 RaCo;一个不需要额外标注就能学到排序和度量协方差的简单策略。
图 1:同一张图的三种输出。左:检测到的关键点,基本落在角点上;中:排序器热图,颜色越暖表示越值得优先保留,注意窗框角点被排在墙面之前;右:协方差图,颜色是协方差第一特征向量的角度,方差大的地方被”漂白”,所以墙面是白的、窗沿是彩色细线。
二、核心方法
2.1 总体架构与训练设定
图 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 亚像素精化。
训练分两阶段:
- 检测器。Oxford-Paris 1M 干扰集的 40 万张图片,中心裁剪 768×768 后采单应再缩到 640×640;AdamW,batch 2,学习率 余弦退火到 ,1 个 epoch,每图采样 512 个点,NMS 半径 3 px,单张 RTX 2080 Ti。
- 排序器与协方差头。冻结检测器和骨干,用推理时的设定(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 多视图三角化与协方差校准
图 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 定性结果
图 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 那样在窗洞里成簇。
四、局限性
论文没有专门的局限性章节,但散落在结果里承认了几点:
- 定位精度不是最好的:定位误差略高于 DaD,MegaDepth1800 和 ETH3D 上的位姿 AUC 也落后 DaD 一两分。可重复性第一不等于位姿第一。
- 等变卷积仍然有增益(+3.6 AUC@2px),只是作者认为不值 10 倍的推理时间。
- 常数协方差在多视图里已经很强,说明在长轨迹场景下学习协方差的边际收益有限;它的价值更多体现在短轨迹或两视图的情形,而论文没有在这种情形下评测协方差。
我自己再补几条:
- 只有检测器,没有描述子。仓库的
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]。
参考
- Shenoi, Lindenberger, Sarlin, Pollefeys. RaCo: Ranking and Covariance for Practical Learned Keypoints. 3DV 2026, arXiv 2602.15755. arXiv · 代码
- Lowe. Distinctive Image Features from Scale-Invariant Keypoints. IJCV 2004. PDF
- DeTone, Malisiewicz, Rabinovich. SuperPoint: Self-Supervised Interest Point Detection and Description. CVPRW 2018. arXiv · 代码
- Tyszkiewicz, Fua, Trulls. DISK: Learning Local Features with Policy Gradient. NeurIPS 2020. arXiv · 代码
- Edstedt, Bökman, Wadenbäck, Felsberg. DeDoDe: Detect, Don't Describe — Describe, Don't Detect for Local Feature Matching. 3DV 2024. arXiv · 代码
- Chen, Fu, Chen, Teng, Xiao, Zhao. RDD: Robust Feature Detector and Descriptor using Deformable Transformer. CVPR 2025. arXiv · 代码
- Zhao, Wu, Chen, Chen, Xu, Li. ALIKED: A Lighter Keypoint and Descriptor Extraction Network via Deformable Transformation. IEEE TIM 2023. arXiv · 代码
- Cesa, Lang, Weiler. A Program to Build E(N)-Equivariant Steerable CNNs. ICLR 2022. OpenReview · 代码
- Santellani, Sormann, Rossi, Kuhn, Fraundorfer. S-TREK: Sequential Translation and Rotation Equivariant Keypoints for Local Feature Extraction. ICCV 2023. arXiv
- Lee, Kim, Cho. Self-Supervised Equivariant Learning for Oriented Keypoint Detection. CVPR 2022. arXiv · 代码
- Bökman, Edstedt, Felsberg, Kahl. Steerers: A Framework for Rotation Equivariant Keypoint Descriptors. CVPR 2024. arXiv · 代码
- Tirado-Garín, Warburg, Civera. DAC: Detector-Agnostic Spatial Covariances for Deep Local Features. 3DV 2024. arXiv · 代码
- Santellani, Zach, Sormann, Rossi, Kuhn, Fraundorfer. GMM-IKRS: Gaussian Mixture Models for Interpretable Keypoint Refinement and Scoring. ECCV 2024. arXiv
- Zeng, Gu, Liu, Cai, Cheng. Uncertainty Aware Interest Point Detection and Description. WACV 2025. CVF · 代码
- Edstedt, Bökman, Wadenbäck, Felsberg. DaD: Distilled Reinforcement Learning for Diverse Keypoint Detection. arXiv 2503.07347, 2025. arXiv · 代码
- Edstedt, Bökman, Zhao. DeDoDe v2: Analyzing and Improving the DeDoDe Keypoint Detector. CVPRW 2024. arXiv · 代码
- Blondel, Teboul, Berthet, Djolonga. Fast Differentiable Sorting and Ranking. ICML 2020. arXiv
- Larsson et al. PoseLib: Minimal Solvers for Camera Pose Estimation. GitHub. 代码
- Balntas, Lenc, Vedaldi, Mikolajczyk. HPatches: A Benchmark and Evaluation of Handcrafted and Learned Local Descriptors. CVPR 2017. arXiv
- Zhou, Sattler, Jacobs. Evaluating Local Features for Day-Night Matching. ECCVW 2016. PDF
- Li, Snavely. MegaDepth: Learning Single-View Depth Prediction from Internet Photos. CVPR 2018. arXiv
- Schöps, Schönberger, Galliani, Sattler, Schindler, Pollefeys, Geiger. A Multi-View Stereo Benchmark with High-Resolution Images and Multi-Camera Videos. CVPR 2017. 项目页
- Lindenberger, Sarlin, et al. Glue Factory: training and evaluation of deep neural networks for local feature extraction and matching. GitHub. 代码
- Muhle, Koestler, Jatavallabhula, Cremers. Learning Correspondence Uncertainty via Differentiable Nonlinear Least Squares. CVPR 2023. arXiv
- Künzel, Hilsmann, Eisert. RIPE: Reinforcement Learning on Unlabeled Image Pairs for Robust Keypoint Extraction. ICCV 2025. arXiv · 代码
- Lindenberger, Sarlin, Pollefeys. LightGlue: Local Feature Matching at Light Speed. ICCV 2023. arXiv · 代码