大家好,我是realcat,今天要介绍的论文题目“COTR: Correspondence Transformer for Matching Across Images”,来源arxiv 2021。
论文题目
代码:github.com/ubc-vision/COTR
论文:arxiv.org/abs/2103.14167
主页:jiangwei221.github.io/vids/cotr/README.html
1. 摘要
Fig1. Correspondence Transformer
本文作者提出了一种匹配网络,输入为两张图像以及其中一张图像中的任意一点,输出为另外一张图像上的对应匹配点。为了使用图像的局部与全局信息,同时让模型能够捕获图像区域间的相似度,作者设计了基于Transformer的网络结构。在网络实际前向推理时,网络通过迭代地在估计点周围进行缩放,这能够使该匹配网络能够获得非常高的匹配精度。该网络能够在多项任务中获得最佳效果,其中包括稀疏匹配,稠密匹配,大视角立体视觉以及光流估计。
2. 原有技术问题
目前的图像匹配有两条不同方式:稀疏匹配,最小化对齐误差;稠密匹配,找到图像上所有点的对应匹配点。其中稀疏匹配依赖于稀疏的特征点,随后对推定的匹配对进行筛选得到稀疏的匹配点对。稠密匹配通常假定图像在时域上相差不大,如视频序列的光流估计,以及基于局部平滑假设。
3. 新技术创新点
本文提出的工作能够获得图像对任意一点的匹配对,其贡献主要体现在如下几个方面:
- 提出一种结合稀疏和稠密匹配优势的网络结构(端到端+局部全局先验);
- 网络前向时迭代多尺度匹配可获得高精度匹配;
- 本文提出的COTR网络能够在诸多稀疏和稠密任务中获得最优效果;
- 第一个使用Transformer用于特征匹配的网络(存疑,CVPR 2021 LoftR也用了Transformer)
4. 关键技术点
Fig2. COTR architecture
总览:输入两张图像,经过同一个CNN提取特征图,将特征图串联放在一起,结合位置编码得到上下文特征图;将这个特征图以及经过位置编码的查询点喂给transformer ,该网络输出经过一个多层感知机进行解码得到匹配点
输入:两幅待匹配图像,以及在图像上被归一化的坐标位置
输出:图像上被归一化的坐标位置
4.1. 问题描述
目标是找到一个最优参数集合使得函数最小化如下残差:
其中,表示有真实匹配关系的训练集;表示匹配估计的误差,表示匹配的相互一致性误差;
4.2. 网络结构
本文将建模成Transformer。将两幅输入图像resize到,随后使用同一个CNN backbone提取的到维度为特征图,将二者并排组合在一起;随后使用位置编码器对坐标函数进行编码,将上述二者结合得到上下文特征图(context feature map
) :
随后将喂给transformer 编码器,随后使用transformer解码器对经过位置编码的进行解码。最后经过一个MLP得到网络输出, 上述过程可被描述为如下形式:
- 线性位置编码
对于给定的坐标其位置编码为如下形式:
其中是特征图的通道数,的维度是,所以的维度为。
4.3. 网络前向推理
接下来将探讨上述网络是如何进行前向推理的。
4.3.1. 迭代缩放
作者提到,视觉任务中使用了功能强大的transformer是有一定代价的,它需要沉重的下采样得到的特征图,在匹配任务中,这会使匹配变差。
为了应对这种现象,本文通过不停地迭代使用能够获得高精度的匹配关系。如下图所示,下一次迭代的初值是在上一次预测的结果做了裁剪后的放大。
Fig3. Recursive COTR at inference time
4.3.2. 尺度补偿
Fig4.通过共视区域进行尺度估计
为了应对不同尺度的匹配问题,作者认为缩放比例应该与共视区域呈一定比例。例如,一开始进行匹配时输入是两张原始图像,它们可能存在一定的尺度差异,如上图(左边两幅图)所示的宫殿是从近处和远处分别拍摄的。首先估计每一个像素点的匹配,并计算相互一致性误差,设置一个阈值像素对匹配进行筛选,这样可以得到如上图右边两幅图所示的共视区域。那么在接下来的缩放过程中,缩放比例与有效的像素的数量成正比。
4.3.3. 适配任意尺寸图像
本文网络的输入为固定尺寸。对于任意尺度的图像输入,第一步将图像resize到,并估计初始匹配,在接下来的裁剪和缩放过程中,在原图的匹配像素点周围取一个正方形区域,尺寸需要与当前的缩放level适配(如上节介绍),随后将方形区域resize到作为下一次网络推理的输入。
4.3.4. 删除错误匹配
当待查询的像素在另一张图像上被遮挡或不在视野内时,应该如何处理呢?类似于尺度补偿中介绍的方法,排除那些相互一致性误差大于像素的匹配对。
4.3.5. 稠密匹配插值
作者提到有两种方式获得稠密匹配:1. 逐像素匹配(较为耗时);2. 稀疏匹配后插值(GPU rasterizer可高效实现)。
5. 实验
先把耗时写在前面:在平台NVIDIA RTX 3090上, 1秒钟35个匹配对(笔者:太慢了!);
作者比较了四个任务中COTR的表现,它们分别是:
数据集 | 任务 |
HPatches | 光照视角变化条件下图像稀疏匹配效果; |
KITTI | 自动驾驶数据集,验证稠密光流估计效果; |
ETH3D | 包含室内外手持式相机拍摄的图像,场景纹理稀疏,验证匹配效果匹配; |
Image Matching Challenge (IMC2020) | 大基线图像匹配,评价位姿估计的精度; |
5.1. HPatches
Tab1. HPatches定量结果,其中AEPE:Average End Point Error,PCK:Percent of Correct Keypoints,下列数值加粗表示最好,下划线表示次好
5.2. KITTI
Tab2. KITTI定量结果,其中Fl表示光流外点比例,越低越好;
Fig5.KITTI光流估计比较
5.3. ETH3D
Tab3. ETH匹配结果,rate越大表示帧间时域差异越大,匹配越难
Fig6. ETH3D特征匹配对比,红色表示外点匹配
5.4. Image Matching Challenge 2020
Tab4. Stereo performance on IMC2020,第二列的数值表示平均内点数量,越大越好;三四列mAA:mean Average Accuracy,阈值分别为5deg和10deg,该值越大越好
上表中括号表示该算法针对该比赛做过精心裁剪过(用语义分割将天空或行人上的特征点滤除掉)的结果,在此不做比较;作者针对上述测试结果提到“在2K特征阵营,本文算法最好”。
6. 总结
- 匹配时的迭代缩放策略+尺度补偿+外点滤除策略能够极大提高匹配精度,但其代价是耗时的增加(~30点/sec);
- 笔者认为:是否可以考虑使用patch-netvlad的划分区域+多尺度的方式对上述净化策略进行加速?
本文仅做学术分享,如有侵权,请联系删文。