前言
论文地址 论文补充材料 / 附录 代码地址
??翻译并记录阅读每一段的感受和写作逻辑。如果你对特征和目标测试的一般方法有一个大致的了解,你基本上可以理解这篇文章的方法,而无需递归阅读论文。
参考文献 检测: [5] SuperPoint [6] D2-Net [7] Beyond cartesian representations for local descriptors (CVPR 2019) [16] Contextdesc: Local descriptor augmentation with cross-modality context (CVPR 2019) [17] Aslfeat [28] R2D2 [40] Learning feature descriptors using camera pose supervision (ECCV 2020)
匹配: [3] Neural-guided ransac: Learning where to sample model hypotheses (ICCV 2019) [10] S2dnet: Learning accurate correspondences for sparse-to-dense feature matching (ECCV 2020) [22] Learning to find goodcorrespondences (CVPR 2018) [33] SuperGlue [38] Acne: Attentive context normalizationfor robust permutation-equivariant learning (CVPR 2020) [42] Learning two-view correspondences and geometry using order-aware network (ICCV 2019)
检测 匹配: [13] Dual-resolution correspondence networks (NIPS 2020) [29] Convolutional neural network architecture for geometric matching (CVPR 2017) [30] Efficient neighbourhood consensus networks via submanifold sparse convolutions (ECCV 2020) [31] Neighbourhood consensus networks (NIPS 2018)
1. Introduction
??寻找图像的对应关系(即特征检测与匹配)是 SfM、SLAM 其他任务的基本步骤包括三个步骤:(1)检测特征点并提取描述符;(2)用描述符匹配特征点;(3)排除错误匹配。任务的适用领域和流程。
??传统算法的局限性。[5,6,7,16,17,28,40] 用 CNN 检测和描述学习特征点,效果好。[3,22,38,42] 建议学习一个过滤函数来排除错误匹配,而不是专注于优化第一步的效果。简单描述 SuperGlue 的做法。作为一个完整的结合特征检测器和匹配器 pipeline 是个好方向。从传统算法到深度方法,并将检测和匹配合并到网络中。
??[13,30,31] 这项工作已经完成,图像络输入图像对,直接获得相应关系。难点是达到像素精度,匹配准确。[29] 匹配低分辨率,精度不够。[30] 高分辨率匹配稀疏卷积,但仍无法实现像素级匹配。[30,31] 优点是利用弱监督最大化匹配得分,最小化非匹配得分,但学习效率太低。和需要 ground truth(GT) 强监督方法 [SuperPoint, D2-Net, S2dnet, Aslfeat, R2D2, SuperGlue] 对比,GT 学习误差虽然准确,但也可能增加,例如,稀疏的关键点被用作稀疏的关键点 GT 可以简单地学习这些点,而不是更一般的特征(个人理解是由数据引起的过拟合)。[40] 利用相机姿势做弱监督来解决这个问题,和解 [30,31] 比较准确。由于本文使用的和 [40] 同样的弱监督说明了这种训练模式的好处。
??本文提出 Patch2Pix,从新的角度设计网络。受目标目标检测的启发 patch-level 再细化的匹配 pixel-level 的匹配。网络以相机的姿态计算极几何(epipolar geometry)做弱监督,回归 patch proposal 中等像素级匹配。和 [40] 本文从匹配位置学匹配,从匹配得分学特征描述符。本文方法 SOTA。本文贡献:(1)从新的角度学习相应的关系,首先获得 patch-level 再细化的匹配 pixel-level 的匹配。(2)新的匹配细化网络可以同时细化匹配,消除错误匹配,训练不需要像素级 GT 对应关系。(3)模型在图像匹配、单应性估计、视觉定位等方面提高了匹配精度。(4)模型可直接推广到强监督方法并获得 SOTA 结果。因为训练数据是和的 [40] 同样,我觉得在这个领域制作数据的方法是一个非常重要的组成部分。这里有一个不同的训练策略,其他的是本文的常规贡献。从这一段来看,本文的核心是一种细化策略,可以推广到其他方法。通常的方法是在低分辨率特征图上得到结果,然后用插值恢复到原图的分辨率,本文采用了更好的细化方法。
??Fig. 1:Patch2Pix 一个例子。上半部分是通过匹配的信心得分来着色的。得分越低越蓝,主要在路上和空白墙上。下半部分显示,在这种大视角变化下,一些内部匹配可以成功匹配。论文的第一幅图是结果的可视化,直观地表明论文是做什么的。
2. Related Work
??介绍了一下 [6,17,28,40] 这些都是学习局部特征,需要匹配步骤来获得相应的关系。
??Matching and Outlier Rejection. 有了特征点和描述符,可以计算描述符的欧氏距离,并与最近邻搜索相匹配。一致性或匹配得分通常用于过滤异常值。 [3,22,38,42] 让网络做二分类来排除异常值,或者用 RANSAC 通过让网络学习匹配特征或匹配函数来加权输入匹配,而是改善现有的匹配和相应关系。[10,33] 学习匹配函数。SuperGlue[33] 图神经网络优化采用注意力机制 SuperPoint[5] 并用 Sinkhorn algorithm 计算匹配。S2DNet[10] 提取图像 SuperPoint[5] 特征点位置的局部特征(稀疏)采用相似度得分峰值计算和匹配另一幅图像的提取特征(密集)。这些方法主要是优化特征点的描述符,但没有优化特征点检测的问题。列出了一些单独匹配和消除异常值的方法。他们的问题是不参与特征点的检测,但如果一起进行检测和匹配,匹配效果应该会更好。
??End-to-End Matching. [13,30,31] 检测、匹配、排除异常值的正向传输。NC-Net[31] 用一个 correlation layer[29] 做匹配操作,用 4D 卷积层是邻域一致性得分的优化匹配得分,但由于内存的限制,采样16倍的特征图匹配精度过低。SparseNCNet[30] 用前10的相似度得分作为相关张量的稀疏度表示,用稀疏卷积代替密集度 4D 卷积可以匹配下采样4倍的特征图。与本文同期 DualRC-Net[13] 匹配得分结合粗分辨率和细分辨率的特征图。 [13,30] 不同的是,匹配是用回归层细化到原图分辨率。有些方法也完成了测试匹配和本文的区别。
??Full versus Weak Supervision. (强监督弱监督的个人翻译)作者认为需要准确 GT 指导损失是强有力的监督,不需要 GT 监督薄弱。大多数方法都是使用的。 GT 的,譬如 D2-Net[6]、S2dnet[10]、Aslfeat[17] 使用相机姿势和深度图,SuperPoint[5]、R2D2[28] 采用合成单应性变换等少数方法 CAPS[40] 用对极几何做弱监督。S2DNet[10] 和 SuperGlue[33] 也要 GT。[3,22,38,42] 图像对这些排除异常值的方法的几何变换做弱监督。DualRC-Net[13] 是强监督,SparseNCNet[30] 和 NC-Net[31] 用弱监督优化图像对的平均匹配得分,而不是单个匹配。本文用对极几何做弱监督,匹配坐标直接回归和优化。相比之下 CAPS[40] 用同样的监督学特征描述符,用匹配得分优化损失,匹配得分的索引给出匹配位置。基于 SparseNCNet[30] 和 NC-Net[31] 作者提出了 two-stage 匹配网络,在原图分辨率上预测匹配。这段像是报菜名,各种方法用的监督策略,不过用弱监督的只有 CAPS[40],并再次强调了一下和 [40] 的区别。
3. Patch2Pix: Match Refinement Network
匹配网络(correspondence network)的好处是可以直接优化特征匹配,而不需要明确定义特征点。网络所发现的匹配关系可以反映出特征点检测和描述。现有匹配网络不准确的两个原因:(1)内存的限制导致要用下采样的特征图做匹配。(2)SparseNCNet[30] 和 NC-Net[31] 用弱监督训练的时候让不是匹配对的匹配得分变低,是匹配对的得分变高,这样并不能让网络识别出好的匹配或坏的匹配,导致无法得到像素级精确的匹配。分析其他方法精度不够的原因。
为了解决这两个问题,提出了一个两阶段的 detect-to-refine 方法,灵感来自 Faster R-CNN。在第一个检测阶段,用一个匹配网络,譬如 NC-Net,得到 patch-level 的匹配。第二个阶段用两种方法细化匹配:(1)用分类得到匹配的置信度;(2)用回归得到以 patch 为中心的像素级分辨率的匹配。作者的直觉是匹配网络用高级特征得到 patch-level 的语义匹配,而细化网络可以关注局部结构的细节,得到精确的匹配位置。网络用弱监督的对极损失训练,使匹配满足相机姿态的几何约束。网络结构看 Fig. 2。下面以 NC-Net 为基线做匹配,本文的方法可以推广到其他类型的匹配方法上。解决问题的方法,并且明确了本文主要是以目标检测为灵感做的一个细化网络,可以代替通常的插值细化,让匹配的精度变高。
Fig. 2 Top:输入一对图像,先用 ResNet34 做 backbone 提取特征,然后送到 correspondence network 网络,譬如 NC-Net 的匹配层得到 match proposals。Patch2Pix 利用之前提取的特征图来细化这些 proposals。 Bottom:设计了两个不同等级但具有相同架构的回归器来逐步细化 match proposals 到原图分辨率。以一个 match proposal m i m_i mi 为中心的一对 S × S S\times S S×S local patches,收集 patches 的特征输入到 mid-level 回归器并输出 (1) 置信得分 c i ^ \widehat{c_i} ci 代表 match proposal 的质量 (2) 在 local patches 中找到的像素级局部匹配 δ i ^ \widehat{\delta_i} δi 。更新后的 match proposal m i ^ \widehat{m_i} mi 通过新的 local patches 更新搜索空间。 fine-level 回归器输出最终的 c i ~ \widetilde{c_i} ci 和 δ i ~ \widetilde{\delta_i} δi 以及像素级匹配 m i ~ \widetilde{m_i} mi 。整个网络在弱监督下训练,不需要明确的 GT 对应关系。
3.1. Refinement: Pixel-level Matching
输入图像对 ( I A , I B ) (I_A,I_B) (IA,IB) 给一个 L L L 层的 CNN 提取特征图。令 f l A , f l B f_l^A,f_l^B flA,flB 为 ( I A , I B ) (I_A,I_B) (IA,IB) 在 l l l 层的特征图, l = 0 l=0 l=0 时为原图,即 f 0 A = I A f_0^A=I_A f0A=IA。特征图只提取一次,用到检测和细化两个阶段。检测只用最后一层特征,包含更多高级信息;细化用最后一层之前的特征,包含更多低级细节。
给定一个匹配 m i = ( p i A , p i B ) = ( x i A , y i A , x i B , y i B ) m_i=(p_i^A, p_i^B)=(x_i^A,y_i^A,x_i^B,y_i^B) mi=(piA,piB)=(xiA,yiA,xiB,yiB),细化阶段的目标是在 patch-level 匹配的局部区域上找到 pixel-level 的精确匹配。由于在缩小的特征图上匹配,因此在特征图上误差1个像素会导致在原图上有 2 L − 1 2^{L-1} 2L−1 的误差。因此,定义搜索区域为以 p i A p_i^A piA 和 p i B p_i^B piB 为中心的 S × S S \times S S×S local patch,让 S > 2 L − 1 S>2^{L-1} S>2L−1 使其比原来 2 L − 1 × 2 L − 1 2^{L-1}\times2^{L-1} 2L−1×2L−1 的 patch 覆盖更多的区域。从所有的 match proposals 中得到一组 local patch pairs 后,网络从 local patch pairs 的特征图中回归出 pixel-level 的匹配。
提出了一个 patch 扩展机制,如 Fig. 3,用邻域扩展搜索区域。将 p i A p_i^A piA 沿 x x x 轴和 y y y 轴4个角各移动 d d d 个像素。这给了我们4个 p i A p_i^A piA 的 anchor points 来匹配 p i B p_i^B piB 得到4个新的 match proposals。同样扩展 p i B p_i^B piB 并与 p i A p_i^A piA 匹配也得到4个新的 match proposals。8个 proposals 确定了8对 S × S S \times S S×S 的 local patches。设置 d = S / 2 d=S/2 d=S/2,扩展的搜索区域大小为 2 S × 2 S 2S \times 2S 2S×2S,并且仍然覆盖原来的 S × S S \times S S×S 区域。patch 扩展 M p a t c h M_{patch} Mpatch 在训练的时候很有用,因为可以强迫网络在空间接近且相似的特征中得到正确的匹配。这个扩展机制可以加快学习过程并提高模型性能。虽然在测试的时候也可以用来扩大搜索范围,但是计算量比较高,所以在测试过程中没用。初看有点懵,没明白是干啥的。
Fig. 3:描述和段落中的基本一样
细化任务是在一对 local patches 中找到好的匹配。用了两个相同架构做 mid-level 和 fine-level,逐步得到最终的匹配。给定一对 S × S S \times S S×S 的 patches,先提取特征图中对应的特征信息 f l A , f l B {f_l^A},{f_l^B} flA,flB。patch 上的每个点 ( x , y ) (x,y) (x,y),在 l l l 层特征图上对应的位置为 ( x / 2 l , y / 2 l ) (x/2^l,y/2^l) (x/2l,y/2l)。选择了 { 0 , … , L − 1 } \{0, \dots,L-1\} { 0,…,L−1} 层中所有的特征连接成一个特征向量。将两个 feature patches P F i A , P F i B PF_i^A, PF_i^B PFiA