Project: https://zju3dv.github.io/loftr/、 https://github.com/haofeixu/gmflow
在计算机视觉中,特征匹配任务是对两幅图像中的特征点进行匹配,预测的结果通常是一个坐标对,即将两幅图像中的对应特征点匹配起来,形成的一对坐标。
稀疏匹配是指仅在关键点(如角点、边缘点等)附近匹配两幅图像中的特征点,即只匹配关键点周围的有限个点。这种方法的优点是计算速度快,占用的存储空间小,适用于大规模、实时的图像处理任务。常见的稀疏匹配算法有 SIFT 和 SURF。
稠密匹配是指在整张图像上匹配特征点,即匹配所有像素点或每个像素块,以获得更准确的匹配结果。这种方法直接利用像素间的相似信息进行匹配,将图像中的所有点都纳入匹配范围,因此精度相对较高,适用于需要高精度匹配结果的图像处理任务,如目标检测、三维重建、虚拟实境等场景中。常见的密集匹配算法有 PatchMatch 和 SGM(Semi-Global Matching)。
目前稀疏匹配的方式(以LoFTR为主)是:首先从CNN中抽取出特征,然后使用Transformer推理特征之间的交互关系,最后用一个显式匹配层(如softmax层[1])提取对应关系。
[1] Qianqian Wang, Xiaowei Zhou, Bharath Hariharan, and Noah Snavely. Learning feature descriptors using camera pose supervision. In ECCV, pages 757–774. Springer, 2020.
图像之间的局部特征匹配是许多3D计算机视觉任务的基石,包括运动结构(SfM)、同时定位和映射(SLAM)、视觉定位等。给定要匹配的两幅图像,大多数现有的匹配方法包括三个独立的阶段:特征检测、特征描述和特征匹配。在检测阶段,首先从每个图像中检测诸如角的突出点作为兴趣点,然后在这些兴趣点的邻域周围提取局部描述符。特征检测和描述阶段产生两组具有描述符的兴趣点,随后通过最近邻搜索或更复杂的匹配算法找到它们的点对点对应关系。
特征检测器的使用减少了匹配的搜索空间,并且得到的稀疏对应(只能获得少数的对应关系)对于大多数任务(例如,相机姿态估计)来说是足够的。然而,Feature Detector可能由于纹理太少、图像模式重复、照明变化等无法提取足够的兴趣点,这个问题在室内环境中尤其突出。如下图所示,由于detector-based方法获取到的兴趣点很少,有些兴趣点是没有重复的点的,所以即使有完美的描述符,也不可能找到正确的对应关系。
最近提出的一些无检测器(Detector-free)方法[34,33,19]试图通过建立像素密集匹配来解决这个问题,然后从密集匹配(有很多个匹配)中选择具有高置信度分数的匹配,从而避免了特征检测。然而,这些模型中使用的卷积神经网络(CNN)提取的密集特征具有有限的接受域,可能无法处理纹理较少(模糊)的区域。相反,人类在对这些模糊区域进行匹配的时候,不仅基于局部区域,而且基于更大的全局背景。如,上图中的低纹理区域可以根据它们相对于边缘的相对位置来区分,这一观察告诉我们,特征提取网络中的大感受野至关重要。
因此这篇文章从上述观察出发,提出了一种新的Detector-free局部特征匹配方法LoFTR。这篇文章主要受到受开创性工作**SuperGlue[37]**的启发,使用带有自我和交叉注意层的Transformer来处理(转换)从卷积主干提取的密集局部特征。首先以低特征分辨率(图像维度的1/8)在两组变换特征之间提取密集匹配。从这些密集匹配中选择具有高置信度的匹配,然后使用基于相关性的方法将其细化到亚像素级。Transformer的全局感受野和位置编码使变换后的特征表示具有上下文和位置依赖性。通过多次交错自我和交叉注意层,LoFTR学习在ground-truth匹配中显示的密度范围内的全局一致匹配先验。还采用了线性Transformer,将计算复杂度降低到可管理的水平。
与基于检测器的基线方法相比,LoFTR即使在具有低纹理、运动模糊或重复图案的模糊区域也可以生成高质量的匹配。
主要有以下四个模块:
[19] Xinghui Li, Kai Han, Shuda Li, and Victor Prisacariu. Dualresolution correspondence networks. NeurIPS, 2020.
[33] Ignacio Rocco, Relja Arandjelovi´c, and Josef Sivic. Efficient neighbourhood consensus networks via submanifold sparse convolutions. In ECCV, 2020.
[34] Ignacio Rocco, Mircea Cimpoi, Relja Arandjelovi´c, Akihiko Torii, Tomas Pajdla, and Josef Sivic. Neighbourhood consensus networks. NeurIPS, 2018.
[37] Paul-Edouard Sarlin, Daniel DeTone, Tomasz Malisiewicz, and Andrew Rabinovich. SuperGlue: Learning feature matching with graph neural networks. In CVPR, 2020.
首先来给出光流(optical flow)的定义:光流描述了两个视频帧之间像素之间的相对运动。光流法是指通过观察同一个对象在连续帧间的像素变化,来计算对象在图像平面上的运动轨迹的方法。
比如对上面的两个视频帧,光流可以用如下图所示的二维向量来表示它们之间的运动信息。更常见的,我们会按照**“颜色表示运动方向,亮度表示运动大小”**将这个二维向量图可视化为一张RGB图像,如下图所示。
传统方法通过利用像素点的连续位移来推断运动,根据像素的图像强度值,计算出像素在 X 和 Y 方向上的位移量,并根据这些位移量计算出相邻帧之间的运动信息。深度学习展现出巨大的潜力之后,近些年有些工作开始尝试基于深度学习估计光流。FlowNet(2015)是这类方法的开创性工作,它设计了一个卷积神经网络架构可以直接将两张视频帧作为输入,并输出稠密的光流。在此之后,有很多不同的光流网络结构被提出。但是作者发现,这些方法与最早的 FlowNet 无太大本质区别,都是利用卷积从局部相关性中回归光流。
但是这样的方式存在一定的问题,由于CNN内在的局部性,使得难以处理光流领域中长期存在的一个挑战:大运动的估计(这一动机与LoFTR很像,引入更大的感受野,解决CNN的局部性)。为了缓解这一问题,当前的代表性框架 RAFT 利用大量的迭代精细化来逐步提升光流的预测效果。它基于CNN,框架如下:
由于大量iterative,所以RAFT 取得了巨大的性能提升,在最近一两年中各种 RAFT 变体层出不穷。然而,尽管这种迭代框架的取得了出色的性能,但由于本质上是一种序列化的处理方式,它也带来了线性的推理时间增长,使其难以做速度上的优化。基于此,作者思考的第一个问题是:RAFT框架是否不可替代?是否有可能高效高精度地估计光流但不依赖于这种大量的迭代精细化?
为了思考这个问题,作者开始回顾我们我们人类是如何完成找大运动情况下对应点这一任务的(从人角度出发,屡试不爽)。以下图为例,在大运动(也可以是大相机姿态变动)情况下,假设我们要在第二张图中找第一张图蓝色点的对应点(因为要计算每个像素点的运动信息,所以要找到下一个图像中该点在哪个位置),一般地,我们通常会浏览第二张图中的所有像素点,并比较这些点与蓝色点的相似度,最终将相似度最高的点作为对应点,即黄色点。
从这一角度看,其实光流任务很像是特征匹配任务,或者说光流任务中要用到特征匹配任务,以此为基础再计算光流。这一观察启发作者重新审视光流这一任务的本质:光流究竟是一个回归问题还是匹配问题?
基于这一点,作者从稀疏匹配任务中得到启发,这个任务的特点是通常两张图片之间的视角差异较大。我们注意到在主流的稀疏框架中,对应点往往是通过匹配得到的。基于这些观察,作者提出将光流重新定义为一个全局匹配问题,以期能更好地解决大运动这一难题。
先给出 GMFlow 整体框架如下图所示,以有个直观的印象。GMFlow先使用一个共享CNN来从两个frame中抽取出8倍下采样的特征,然后抽取出的特征输入到Transformer中用于特征增强,接下来,通过关联所有成对的特征来比较特征的相似性,并通过一个softmax匹配层获得光流。最后,引入另一个自注意层,通过考虑特征的自相似性,将匹配像素的高质量flow predictions传播到不匹配像素。该框架默认是提取原始图像分辨率 1/8 的特征,这样已经能取得非常不错的效果,但是它的效果可以通过利用1/4 分辨率的特征得到进一步提高,即在 1/4 分辨率的特征上进行一次额外的精细化。
因为作者将光流看作是一个全局匹配问题,所以最开始先给出了全局匹配的定义:
这个定义的意思是:给定两张图片,我们首先利用一个 CNN 提取稠密特征,然后通过全局相关性(Transformer的self- + cross-attention)计算所有点与点之间的相关性得到加强的特征F1和F2。为了得到这两个特征的对应点,我们采用了一种可微的匹配方式,即先通过 softmax 归一化全局相关性的后两个维度,从而得到匹配的概率,然后利用此概率对像素网格点做加权平均(其实就是一个self-attention)。最后通过计算输出特征与原始特征对应点之间的坐标差即可得到光流。
这种思路与LoFTR很像,核心是得到较强的特征用来匹配(使用Transformer(self- + cross-attention)对CNN的特征做处理)。只是在最后一部分有区别:GMFlow对于计算出来的两个特征,用correlation&softmax计算出的权重,再用权重乘以原特征得到一个新特征,再作差得出光流;LoFTR对于计算出来的两个特征,(中间加了一个coarse-to-fine的流程),使用相同的correlation&softmax计算出权重,直接对权重求期望预测另一个点的坐标。某种程度上,GMFlow是“删去coarse-to-fine”和“改变输出方式”的LoFTR,但这两篇文章的核心都在于用CNN+Transformer得出更利用匹配的特征,再用correlation&softmax求出匹配权重。
但是这样的框架存在一定的问题,因为它隐式地假设了对应点在两张图片中都可见,因此可以通过比较相似度进行匹配。但这一假设对遮挡和超出图像边界的像素点将不再成立,这样一个问题对于大相机姿态变动的情况都存在。在本文的求光流问题中,就会导致部分光流的结果质量差。
为缓解这个问题,本文的处理方式是:观察到光流和图像本身有一定的结构相似性,进而提出通过特征的自相似性将匹配区域的高质量光流估计结果传播到未匹配区域(就是用特征的结构分布,引导光流估计结果中高质量区域预测出低质量的区域)。这个操作可以通过一个简单的 self-attention 层实现(这个地方应该是cross-attention),所以在最上面的框架图中,最后一部分又加了一个self-attention(个人感觉应该是cross-attention),输入时特征图和光流图,用于缓解这个问题。作者将这一步称为Flow Propagation。