局部特征匹配(LoFTR) & 基于全局匹配的光流学习(GMFlow)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


Project: https://zju3dv.github.io/loftr/https://github.com/haofeixu/gmflow


特征匹配稀疏匹配与稠密匹配

在计算机视觉中特征匹配任务是对两幅图像中的特征点进行匹配预测的结果通常是一个坐标对即将两幅图像中的对应特征点匹配起来形成的一对坐标。

稀疏匹配是指仅在关键点如角点、边缘点等附近匹配两幅图像中的特征点即只匹配关键点周围的有限个点。这种方法的优点是计算速度快占用的存储空间小适用于大规模、实时的图像处理任务。常见的稀疏匹配算法有 SIFT 和 SURF。

稠密匹配是指在整张图像上匹配特征点即匹配所有像素点或每个像素块以获得更准确的匹配结果。这种方法直接利用像素间的相似信息进行匹配将图像中的所有点都纳入匹配范围因此精度相对较高适用于需要高精度匹配结果的图像处理任务如目标检测、三维重建、虚拟实境等场景中。常见的密集匹配算法有 PatchMatch 和 SGMSemi-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.

《LoFTR: Detector-Free Local Feature Matching with Transformers》【CVPR’21】

图像之间的局部特征匹配是许多3D计算机视觉任务的基石包括运动结构SfM、同时定位和映射SLAM、视觉定位等。给定要匹配的两幅图像大多数现有的匹配方法包括三个独立的阶段特征检测、特征描述和特征匹配。在检测阶段首先从每个图像中检测诸如角的突出点作为兴趣点然后在这些兴趣点的邻域周围提取局部描述符。特征检测和描述阶段产生两组具有描述符的兴趣点随后通过最近邻搜索或更复杂的匹配算法找到它们的点对点对应关系。

特征检测器的使用减少了匹配的搜索空间并且得到的稀疏对应只能获得少数的对应关系对于大多数任务例如相机姿态估计来说是足够的。然而Feature Detector可能由于纹理太少、图像模式重复、照明变化等无法提取足够的兴趣点这个问题在室内环境中尤其突出。如下图所示由于detector-based方法获取到的兴趣点很少有些兴趣点是没有重复的点的所以即使有完美的描述符也不可能找到正确的对应关系。
在这里插入图片描述
最近提出的一些无检测器Detector-free方法[343319]试图通过建立像素密集匹配来解决这个问题然后从密集匹配有很多个匹配中选择具有高置信度分数的匹配从而避免了特征检测。然而这些模型中使用的卷积神经网络CNN提取的密集特征具有有限的接受域可能无法处理纹理较少模糊的区域。相反人类在对这些模糊区域进行匹配的时候不仅基于局部区域而且基于更大的全局背景。如上图中的低纹理区域可以根据它们相对于边缘的相对位置来区分这一观察告诉我们特征提取网络中的大感受野至关重要。

因此这篇文章从上述观察出发提出了一种新的Detector-free局部特征匹配方法LoFTR。这篇文章主要受到受开创性工作**SuperGlue[37]**的启发使用带有自我和交叉注意层的Transformer来处理转换从卷积主干提取的密集局部特征。首先以低特征分辨率图像维度的1/8在两组变换特征之间提取密集匹配。从这些密集匹配中选择具有高置信度的匹配然后使用基于相关性的方法将其细化到亚像素级。Transformer的全局感受野和位置编码使变换后的特征表示具有上下文和位置依赖性。通过多次交错自我和交叉注意层LoFTR学习在ground-truth匹配中显示的密度范围内的全局一致匹配先验。还采用了线性Transformer将计算复杂度降低到可管理的水平。

与基于检测器的基线方法相比LoFTR即使在具有低纹理运动模糊重复图案模糊区域也可以生成高质量的匹配。

在这里插入图片描述
主要有以下四个模块

  • 使用CNN抽取局部特征从图像对抽取粗粒度图像特征图和细粒度图像特征图。
  • 粗粒度级别局部特征转换LoFTR粗粒度图像特征图被拉平并加入位置编码后输入至LoFTR模块它的目的是通过attention的全局感受野把“特征”转换成“易于匹配的特征”核心因为具有更大的感受野。
  • 可微分的匹配模块使用的是现成的[37]中optimal transport (OT) layer。该模块的目的是对转换后的粗粒度特征进行匹配使用OT layer计算得到一个匹配的置信矩阵计算两个特征之间的得分矩阵然后再计算softmax。基于这个矩阵我们选择置信度高于一定阈值的匹配作为粗粒度匹配的结果。
  • 细粒度匹配在建立粗粒度匹配后使用粗粒度到细粒度的模块将这些匹配细化到原始图像分辨率。这里使用了一种基于相关性的方法。首先对于每对粗粒度匹配i_c, j_c在细粒度特征上确定其位置i_f, j_f并剪裁出一对大小为w × w的局部窗口将其输入一个较小的LoFTR模块生成两个以i, j 为中心的两个经过转换后的局部特征图Fi, Fj。然后将Fi的中心向量与Fj的所有向量计算相关性生成一个heatmap通过计算概率分布经过了softmax变为了概率分布的期望可以得到了在图像B上具有亚像素精度的最终位置(j_f)'。遍历所有的粗粒度匹配生成细粒度匹配。

[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.


《GMFlow: Learning Optical Flow via Global Matching》【CVPR’22】

光流的定义

首先来给出光流optical flow的定义光流描述了两个视频帧之间像素之间的相对运动。光流法是指通过观察同一个对象在连续帧间的像素变化来计算对象在图像平面上的运动轨迹的方法。
在这里插入图片描述
在这里插入图片描述
比如对上面的两个视频帧光流可以用如下图所示的二维向量来表示它们之间的运动信息。更常见的我们会按照**“颜色表示运动方向亮度表示运动大小”**将这个二维向量图可视化为一张RGB图像如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一个问题

传统方法通过利用像素点的连续位移来推断运动根据像素的图像强度值计算出像素在 X 和 Y 方向上的位移量并根据这些位移量计算出相邻帧之间的运动信息。深度学习展现出巨大的潜力之后近些年有些工作开始尝试基于深度学习估计光流。FlowNet2015是这类方法的开创性工作它设计了一个卷积神经网络架构可以直接将两张视频帧作为输入并输出稠密的光流。在此之后有很多不同的光流网络结构被提出。但是作者发现这些方法与最早的 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。

参考CVPR 2022 Oral | 基于全局匹配的光流学习框架。侵删。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6