论文笔记:LoFTR: Detector-Free Local Feature Matching with Transformers

论文链接:论文地址
代码链接: 代码地址
摘要:是一种detect-free的匹配算法, 没有检测特征点,模型直接输出匹配对,利用cnn初步提取特征,再利用transformer的全局注意力加强特征,可以较好的对低纹理图片和相似区域进行匹配,个人感觉后面匹配那部分跟superglue很像。

方法:
论文笔记:LoFTR: Detector-Free Local Feature Matching with Transformers_第1张图片
1.使用resnet+FPN提取分辨率为 1/8的粗略特征图以及 1/2的精细特征图
2.Positional Encoding:
不同于DETR, 只在cnn的输出特征上进行一次位置编码,代码中使用的是sin/cos函数进行编码,然后将编码与特征图相加,用于后续输入至transformer
3. 将粗略特征图输入至粗特征提取的transformer提取匹配特征:该transformer由多个交替的自注意力和交叉注意力层构成,自注意力层使得每个点关注其周围所有点的关联,交叉注意力层使得点关注与另一幅图上的所有点的关联
4. 粗级别的匹配,使用乘积的方式先计算所有位置的匹配得分矩阵 S,然后计算最优匹配,可以通过最优传输OT算法或者dual-softmax方法,文中使用的是dual-softmax, 然后再通过互近邻MNN算法过滤掉一些离群匹配对
5. 精细匹配,通过粗匹配得到粗粒度的匹配结果,例如匹配点对(i1,j1),(i2,j2), 将其映射到对应的精细特征图,并且将其(w,w)领域裁剪出来(相当于裁剪出来了w*w个位置的特征),输入至精细特征提取的transformer2提取匹配特征,得到FA和FB,然后计算FA中心特征与FB中所有特征的匹配概率(即相似度),再计算该概率分布即可计算出FB中的亚像素精度的匹配点位置(应该是通过领域(5,5)以及对应的概率,加权相加计算出精细位置,是亚像素级别的)
思考:这里之所以先用粗级别特征进行匹配,是因为transformer的复杂度跟输入序列相关,直接输入精细特征图的话,容易导致内存爆炸,这里巧妙的分成两次,有点像金字塔结构的搜索策略

6.损失
两部分:粗匹配部分+细匹配部分
粗匹配部分:
Mgt为粗匹配的gt, 可通过数据集中的位姿和深度信息计算得到。
损失主要激励在真实粗匹配的匹配对分数越高越好。
细匹配部分:
Mf,细匹配可以通过计算映射点与匹配点的距离得到损失

实验部分:
1.Homography estimation
HPatches上为state of art, 超越了 superpoint+superglue
2.Relative Pose Estimation
针对室内场景,是在ScantNet上进行的实验,ScanNet是用RGB-D摄像机采集的数据集,包含了多个室内场景序列图片,每幅图片同时包含了深度图以及相对位姿矩阵(4*4的一个矩阵,类似于homography),因此可以通过深度图以及位姿矩阵计算出两幅图片的匹配关系,从而得出匹配的gt,用于监督 粗匹配以及精细匹配部分的损失
ScanNet和MegaDepth上也是state of art
3. Visual Localization
在 AachenDay-Night数据集上效果略低于superpoint+superglue,但是差距很小
在 InLoc数据集上,也和superpoint不分上下

总结:LoFTR使用的是端到端的detect-free方法,和superpoint+superglue这种先检测再匹配的方法的区别在于:
优势:superpoint基本检测的是一些角点和纹理清晰的点(这和其训练中构建的虚拟数据集有关),这样的话低纹理区域是基本不会生成匹配对的,对于重复性大、鉴别性小、低纹理的场景匹配效果不会太好
LoFTR采用的是detector-free,也就是说低纹理区域的点也有机会参与匹配,并且由于编码了位置信息,以及自注意力+交叉注意力的存在,低纹理上的点也会变得有鉴别性(一个是位置是有鉴别性的,另一方面自注意力使得特征会学习到与周围点的关联信息,这些关联信息也是有鉴别性的),因此会得到更多匹配的机会

你可能感兴趣的:(深度学习,transformer,机器学习)