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

news2024/11/27 21:00:27

文章目录

  • 特征匹配(稀疏匹配与稠密匹配)
  • 《LoFTR: Detector-Free Local Feature Matching with Transformers》【CVPR'21】
  • 《GMFlow: Learning Optical Flow via Global Matching》【CVPR'22】
    • 光流的定义
    • 第一个问题
    • 第二个问题
    • 方法
    • 该框架下存在的一个问题


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.

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

图像之间的局部特征匹配是许多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即使在具有低纹理运动模糊重复图案模糊区域也可以生成高质量的匹配。

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

  • 使用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 方向上的位移量,并根据这些位移量计算出相邻帧之间的运动信息。深度学习展现出巨大的潜力之后,近些年有些工作开始尝试基于深度学习估计光流。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。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/577192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧园区管理平台优势详解

随着数字化和智能化的时代到来,越来越多的园区开始使用智慧园区管理平台来提高管理效率,降低管理成本和提升服务质量。智慧园区管理平台是一种通过智能化技术与物联网技术进行连接,对园区进行综合管理、智能化监控的信息化平台。下面将详细介…

大数据:云平台,阿里云VPC创建,创建安全组,云服务器ECS,

大数据:云平台 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学&…

Seata之@GlobalTransactional验证

下订单 -> 减库存 -> 扣余额 -> 改(订单)状态 1.数据库初始情况: 2.正常下单 http://localhost:2001/order/create?userId1&productId1&count10&money100 3.超时异常,没加GlobalTransactional 模拟Accou…

RabbitMQ系列(24)--RabbitMQ集群搭建

前言:当RabbitMQ服务器遇到内存崩溃、机器掉电或者主板故障等情况,该怎么办?单台RabbitMQ服务器可以满足每秒1000条消息的吞吐量,那如果应用需要RabbitMQ服务满足每秒10万条消息的吞吐量呢?购买昂贵的服务器来增强单机RabbitMQ服务的性能不…

阿里云ECS部署chat-web代理访问

1、ECS服务器申请 使用阿里云账号购买了一个美国(弗吉尼亚)的2C/2G的CentOS7.9 x64服务器。 2、系统版本升级 CentOS7.9默认的python和pip版本都是3.6的,需要升级到3.9以上,升级步骤百度,大致如下: wget…

vue diff算法与虚拟dom知识整理(12) patch精细化比较新增子节点

上文中我们编写了patch函数中对相同节点的几种处理 将简单的都写完了 但还留下了最麻烦的子节点比较 既新旧节点都有子节点 需要 精细化比较 我们先将src下的入口文件index.js 代码改成这样 import h from "./snabbdom/h"; import patch from "./snabbdom/pat…

C++实现Canny边缘检测(原理+底层代码)

文章目录 一、算法原理二、环境配置三、算法详解3.1、数据结构 Mat3.2、高斯滤波器的C实现3.3、用一阶偏导有限差分计算梯度幅值和方向 三、项目实战:C实现Canny边缘检测 一、算法原理 canny边缘检测算法步骤: 1、使用高斯滤波器对图像进行平滑处理。 2、…

recurdyn履带问题

1.问题:整车履带仿真出错,车辆越障时遇到障碍物直接弹开 思路: 关于这类模型需要调节履带和地面之间的接触参数、Bushing force,还有驱动函数。 弹飞了是因为接触刚度太大了,调小一些,在100以内继续调节…

从代码角度理解DETR

一个cnn的backbone, 提图像的feature, 比如, HWC.同时对这个feature做position_embedding.然后二者相加 (在Transformer里面就是二者相加)输入encoder,输入decoder (这里有object queries.)然后接Prediction Heads, 比如分类和回归. 下面的代码参考自: https://github.com/fac…

单片机原理及应用——持续更新

目录 一、单片机概述 1、单片机简介 2、单片机的特点 3、MSC-51系列与AT89S5x系列单片机 (1)MSC-51系列单片机 (2)AT89S5x系列单片机 二、AT89S52单片机的片内硬件结构 1、AT89S52单片机的硬件组成 2、AT89S52单片机的引…

Springboot +spring security,OAuth2 四种授权模式概念

一.简介 这篇文章来讲下Spring Security OAuth2 四种授权模式。 二.什么是OAuth2 OAuth 2.0 是一种用于授权的开放标准,允许用户授权第三方应用程序访问他们的资源,例如照片、视频或其他个人信息。OAuth 2.0 提供了一些不同的授权模式,包括…

我有一个朋友,分享给我的字节跳动测试开发真题

朋友入职已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我写出了这份面试题,而我把它分享给小伙伴们,面试&入职的经验! 大概是在3月中的时候他告诉我投递了简历,5月的时候经过了3轮面试收获…

Windows10中搭建ftp服务器以实现文件传输

开启ftp服务: 1、打开控制面板》程序和功能》 启用或关闭Windows功能 2、找到Internet Information Services,开启以下服务 勾选之后,ftp服务开启成功。 配置IIS,搭建ftp 1、WinS键搜索iis,回车打开》右击网站 》添加…

QUIC 协议:特性、应用场景及其对物联网/车联网的影响

什么是 QUIC 协议 QUIC(Quick UDP Internet Connections)是由谷歌公司开发的一种基于用户数据报协议(UDP)的传输层协议,旨在提高网络连接的速度和可靠性,以取代当前互联网基础设施中广泛使用的传输控制协议…

/dev/kmem /proc/kallsyms

文章目录 前言概述使用 /dev/kmem使用 /proc/kallsyms验证进阶 前言 上篇文章我们介绍了 /dev/mem,今天再来介绍下它的好兄弟 /dev/kmem crw-r----- 1 root kmem 1, 1 May 26 06:10 /dev/mem crw-r----- 1 root kmem 1, 2 May 26 06:10 /dev/kmem对比一下&#xf…

第十四届全国大学生数学竞赛决赛(非数类)游记+答案解析

2023/5/27 20:08:今天早上9:00~12:00考了数学竞赛国赛。广州是真的热啊!西安才17度,还下着小雨,到广州之后那个艳阳直接给我人干废了,去酒店的路上步行了20分钟真的要死了已经。 拿到卷子的我是崩溃的,用正…

计算机视觉:填充(padding)技术

本文重点 在前面的课程中,我们学习了使用3*3的过滤器去卷积一个5*5的图像,那么最终会得到一个3*3的输出。那是因为 33 过滤器在 55 矩阵中,只可能有 33 种可能的位置。 这背后的数学解释是,如果我们有一个nn的图像,用ff的过滤器做卷积,那么输出的维度就是(n−f+1)(n−f…

码出高效_第一章 | 有意思的二进制表示及运算

目录 0与1的世界1.如何理解32位机器能够同时处理处理32位电路信号?2.如何理解负数的加减法运算3.溢出在运算中如何理解4.计算机种常用的存储单位及转换5.位移运算规则6.有趣的 && 和 & 浮点数1.定点小数(为什么会出现浮点数表示?…

Linux 系统烧写

目录 MfgTool 工具简介MfgTool 工作原理简介烧写方式系统烧写原理 烧写NXP 官方系统烧写自制的系统系统烧写网络开机自启动设置 改造我们自己的烧写工具改造MfgTool烧写测试解决Linux 内核启动失败 前面我们已经移植好了uboot 和linux kernle,制作好了根文件系统。但…

Spring 事件相关知识ApplicationEvent

Spring 事件相关知识ApplicationEvent 事件工作流程相关类ApplicationListenerApplicationEvent 我们可以发布自己的事件ApplicationEventPublisher Spring框架中提供了多种事件类型,常用的几个事件类型如下: Spring 事件驱动模型是 Spring 框架中的一个…