UnSuperPoint:End-to-End Unsupervised Interest Point Detector And Descriptor 论文解读

本文主要是介绍UnSuperPoint:End-to-End Unsupervised Interest Point Detector And Descriptor 论文解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UnSuperPoint:End-to-End Unsupervised Interest Point Detector And Descriptor 论文解读

简介

特征点的语义信息并不明确难以用人工标注特征点位置的方法得到一个巨大的数据集,是深度学习方法用在特征点提取上的最大问题。

之前工作:

  • TILDE 用类似于sift的特征点作为真实值
  • Quad-network 基于图片单应变换结果训练,但输入为单个patch
  • LIFT,LF-Net 利用SfM中的特征点作为真实值
  • SuperPoint 利用模拟数据训练网络,自监督生成伪真实值

本工作类似于SuperPoint,但是是在其基础上的更进一步。

  • 在全图尺寸上运行
  • 不需要真实值,直接根据单应关系训练得到
  • 同时得到特征点位置和描述子

因此,本文创新点在于:

  • 提出一种自监督训练方法,不需要生成伪特征点真实值,能够直接训练得到特征点位置和得分
  • 提出新颖网络结构和损失函数,使得网络能够高效提取均匀分布的特征点,在速度精度和重复率等方面均达到最优

方法

网络结构

整体网络结构如下图,分为四个部分
在这里插入图片描述

  • 特征提取
    • VGG风格的特征提取,和SuperPoint基本一致,得到 W / 8 × H / 8 × 128 W/8 \times H/8 \times 128 W/8×H/8×128大小的特征
  • 得分分支
    • 经过两次卷积得到 W / 8 × H / 8 × 1 W/8 \times H/8 \times 1 W/8×H/8×1大小的矩阵,代表对应特征点的得分,得分在[0,1]之间。
  • 位置分支
    • 两次卷积得到 W / 8 × H / 8 × 2 W/8 \times H/8 \times 2 W/8×H/8×2大小的矩阵, W / 8 × H / 8 W/8 \times H/8 W/8×H/8个特征点坐标

    • 由于特征是下采样后的,只有 W / 8 × H / 8 W/8 \times H/8 W/8×H/8 大小,文中干脆就假设在 8 × 8 8\times 8 8×8范围内只有一个特征点,反倒起到非极大值抑制类似效果
      在这里插入图片描述

    • 特征点位置: ( x , y ) = ( c + P 1 ( r , c ) , r + p 2 ( r , c ) ) ∗ 8 (x,y) = (c + P_1(r,c), r + p_2(r,c)) * 8 (x,y)=(c+P1(r,c),r+p2(r,c))8, 含义为第(r,c)位置上的矩阵包含 P 1 ( r , c ) , P 2 ( r , c ) P_1(r,c),P_2(r,c) P1(r,c),P2(r,c)两个数据,分别在0-1之间,代表位置系数。因此预测的特征点位置为 c + P 1 ( r , c ) , r + p 2 ( r , c ) c + P_1(r,c), r + p_2(r,c) c+P1(r,c),r+p2(r,c),此外乘上下采样系数便得到最终预测的特征点位置。

  • 描述子分支
    • 两次卷积,得到 W / 8 × H / 8 × 256 W/8 \times H/8 \times 256 W/8×H/8×256的描述子
    • 然后利用特征点位置对描述子进行插值

自监督学习方法

在这里插入图片描述

  • 这应该是最简单,最直观的特征点训练方式,这样都能训练出来才是最难的。

损失函数

文中花费了大量的笔墨描述损失函数的构造以及结果分析,个人目前认为合理的损失函数是能够如此简单直接的训练方法还能得到很好结果的原因。

  • 特征点位置和得分损失 L u s p L^{usp} Lusp
  • 特征点分布均匀性损失 L u n i x y L^{uni_xy} Lunixy
  • 描述符损失 L d e s c L^{desc} Ldesc
  • 描述符正则化项 L d e c o r r L^{decorr} Ldecorr

整体的损失函数为:

L t o t a l = α u s p L u s p + α u n i x y L u n i _ x y + α d e s c L d e s c + α d e c o r r L d e c o r r L_{total} = \alpha_{usp} L^{usp} + \alpha_{uni_xy} L^{uni\_xy} + \alpha_{desc} L^{desc} + \alpha_{decorr} L^{decorr} Ltotal=αuspLusp+αunixyLuni_xy+αdescLdesc+αdecorrLdecorr

特征点位置和得分损失

由于需要两张图片提取的特征点一起确定误差项,因此首先需要确定如何对提取得到的特征点构建匹配关系。

将图片A中所有特征点变换到B中,计算和B中所有特征点的距离,取最近且小于最大值的一对点作为匹配点。

  • 距离计算
    G = [ g i j ] M A × M B = [ ∥ p i A → B − p j B ∥ 2 ] M A × M B \mathbf{G}=\left[g_{i j}\right]_{M^{\mathrm{A}} \times M^{\mathrm{B}}}=\left[\left\|\mathbf{p}_{i}^{\mathrm{A} \rightarrow \mathrm{B}}-\mathbf{p}_{j}^{\mathrm{B}}\right\|_{2}\right]_{M^{\mathrm{A}} \times M^{\mathrm{B}}} G=[gij]MA×MB=[piABpjB2]MA×MB

  • 距离小于阈值的作为匹配点,记为 s ^ , P ^ , F ^ \hat{s},\hat{P},\hat{F} s^,P^,F^

损失函数

损失函数分为三个部分

  • 位置损失 l p o s i t i o n l^{position} lposition
  • 得分损失 l s c o r e l^{score} lscore
  • 匹配损失 l u s p l^{usp} lusp

总体得分如下:

L u s p = α p o s i t i o n ∑ k = 1 K l k p o s i t i o n + α s c o r e ∑ k = 1 K l k s c o r e + ∑ k = 1 K l k u s p L^{usp} = \alpha_{position} \sum_{k=1}^{K} l_k^{position} + \alpha_{score} \sum_{k=1}^{K} l_k^{score} + \sum_{k=1}^{K} l_k^{usp} Lusp=αpositionk=1Klkposition+αscorek=1Klkscore+k=1Klkusp

位置损失

重投影误差:
l k p o s i t i o n = ∥ T p ^ k A − p ^ k B ∥ l_k^{position} = \|T \hat{p}_k^A - \hat{p}_k^B\| lkposition=Tp^kAp^kB

得分损失

两个匹配的特征点得分应该尽量接近

l k score  = ( s ^ k A − s ^ k B ) 2 l_{k}^{\text {score }}=\left(\hat{s}_{k}^{\mathrm{A}}-\hat{s}_{k}^{\mathrm{B}}\right)^{2} lkscore =(s^kAs^kB)2

匹配损失

定义匹配误差:
d k = ∥ T p ^ k A − p ^ k B ∥ = ∥ p ^ k A → B − p ^ k B ∥ d_{k}=\left\|T \hat{\mathbf{p}}_{k}^{\mathrm{A}}-\hat{\mathbf{p}}_{k}^{\mathrm{B}}\right\|=\left\|\hat{\mathbf{p}}_{k}^{\mathrm{A} \rightarrow \mathrm{B}}-\hat{\mathbf{p}}_{k}^{\mathrm{B}}\right\| dk=Tp^kAp^kB=p^kABp^kB
那么,定义匹配损失:
l k usp  = s ^ k ( d k − d ˉ ) l_{k}^{\text {usp }}=\hat{s}_{k}\left(d_{k}-\bar{d}\right) lkusp =s^k(dkdˉ)

其中,
s ^ k = s ^ k A + s ^ k B 2 \hat{s}_{k} = \frac{\hat{s}_{k}^A+\hat{s}_{k}^B}{2} s^k=2s^kA+s^kB

d ˉ = 1 K ∑ k = 1 K d k \bar{d}=\frac{1}{K} \sum_{k=1}^{K} d_{k} dˉ=K1k=1Kdk

这样得分越高的点,匹配误差就越小,得分低的点匹配误差大一点没啥关系。

  • 之所以这么定义,可能是训练过程中的图片总是会有匹配不上的点,如果用整体的误差最小,可能难以收敛。只保证得分很高的前一部分特征点取得较高的精度能够去除掉一些无法匹配的区域影响,训练效果更好。
特征点分布均匀性损失

x , y x,y x,y坐标排序并归一化,从0开始,如果特征点分布的非常非常均匀则理想情况下应该是如此排列的。

x = [ 0 , 1 M − 1 , 2 M − 1 , 3 M − 1 , ⋯ , i − 1 M − 1 , ⋯ , 1 ] x = [0, \frac{1}{M-1}, \frac{2}{M-1}, \frac{3}{M-1}, \cdots, \frac{i-1}{M-1}, \cdots , 1] x=[0,M11,M12,M13,M1i1,,1]

上式为理想的坐标分布,那么实际情况下的均匀性误差为:
( x i sorted  − i − 1 M − 1 ) 2 \left(x_{i}^{\text {sorted }}-\frac{i-1}{M-1}\right)^{2} (xisorted M1i1)2

因此,从x,y两个方向分别定义如下的误差函数,代表和理想分布的距离:

L uni_xy  = α uni_xy  ( L uni_x + L uni_y  ) L uni_x  = ∑ i = 1 M ( x i sorted  − i − 1 M − 1 ) 2 L uni_y  = ∑ i = 1 M ( y i sorted  − i − 1 M − 1 ) 2 \begin{aligned} \mathcal{L}^{\text {uni\_xy }} &=\alpha_{\text {uni\_xy }}\left(\mathcal{L}^{\text {uni\_x}}+\mathcal{L}^{\text {uni\_y }}\right) \\ \mathcal{L}^{\text {uni\_x }} &=\sum_{i=1}^{M}\left(x_{i}^{\text {sorted }}-\frac{i-1}{M-1}\right)^{2} \\ \mathcal{L}^{\text {uni\_y }} &=\sum_{i=1}^{M}\left(y_{i}^{\text {sorted }}-\frac{i-1}{M-1}\right)^{2} \end{aligned} Luni_xy Luni_x Luni_y =αuni_xy (Luni_x+Luni_y )=i=1M(xisorted M1i1)2=i=1M(yisorted M1i1)2

描述符损失

和SuperPoint特征点的描述符损失保持一致

L d e s c = ∑ i = 1 M A ∑ j = 1 M B l i j d e s c l i j d e s c = λ d ⋅ c i j ⋅ max ⁡ ( 0 , m p − f i A T f j B ) + ( 1 − c i j ) ⋅ max ⁡ ( 0 , f i A T f j B − m n ) \begin{aligned} \mathcal{L}^{\mathrm{desc}} &=\sum_{i=1}^{M^{A}} \sum_{j=1}^{M^{\mathrm{B}}} l_{i j}^{\mathrm{desc}} \\ l_{i j}^{\mathrm{desc}} &=\lambda_{d} \cdot c_{i j} \cdot \max \left(0, m_{p}-\mathbf{f}_{i}^{\mathrm{A}^{T}} \mathbf{f}_{j}^{\mathrm{B}}\right) \\ &+\left(1-c_{i j}\right) \cdot \max \left(0, \mathbf{f}_{i}^{\mathrm{A}^{T}} \mathbf{f}_{j}^{\mathrm{B}}-m_{n}\right) \end{aligned} Ldesclijdesc=i=1MAj=1MBlijdesc=λdcijmax(0,mpfiATfjB)+(1cij)max(0,fiATfjBmn)

  • f j A , f j B \mathbf{f}_{j}^{\mathrm{A}},\mathbf{f}_{j}^{\mathrm{B}} fjA,fjB均为单位向量
  • f i A T f j B \mathbf{f}_{i}^{\mathrm{A}^{T}} \mathbf{f}_{j}^{\mathrm{B}} fiATfjB结果为两个向量越接近值越大
  • c i j = 1 c_{ij} = 1 cij=1为两点为匹配点时,仅有第一项,两向量尽可能接近时LOSS越小
  • c i j = 0 c_{ij} = 0 cij=0为两点为匹配点时,仅有第二项,两向量尽可能远离时LOSS越小
描述符正则化项

目标减少特征描述符的过拟合并提高表达紧凑性,基于如下思考:

  • 若描述符的所有维度数值相关性很低,那么同样大小的描述子将会表达更多的信息,极端情况是如果描述符的所有维度线性相关,那么无论多少维最终表达的信息和1维没有任何差别。

描述符相关矩阵设为 R b = [ r i j b ] F × F \mathbf{R}^{b}=\left[r_{i j}^{b}\right]_{F \times F} Rb=[rijb]F×F 对于图像 b b b,代表F个描述子相互之间的相关性。(概率论里面互相关函数)

r i j b = ( v j b − v ˉ j b ) T ( v i b − v ˉ i b ) ( v j b − v ˉ j b ) T ( v i b − v ˉ i b ) ( v j b − v ˉ j b ) T ( v i b − v ˉ i b ) r_{i j}^{b}=\frac{\left(\mathbf{v}_{j}^{b}-\bar{v}_{j}^{b}\right)^{T}\left(\mathbf{v}_{i}^{b}-\bar{v}_{i}^{b}\right)}{\sqrt{\left(\mathbf{v}_{j}^{b}-\bar{v}_{j}^{b}\right)^{T}\left(\mathbf{v}_{i}^{b}-\bar{v}_{i}^{b}\right)} \sqrt{\left(\mathbf{v}_{j}^{b}-\bar{v}_{j}^{b}\right)^{T}\left(\mathbf{v}_{i}^{b}-\bar{v}_{i}^{b}\right)}} rijb=(vjbvˉjb)T(vibvˉib) (vjbvˉjb)T(vibvˉib) (vjbvˉjb)T(vibvˉib)

那么矩阵的非对角元素之和作为相关性评价损失:

L decorr  = ∑ i ≠ j F ( r i j a ) + ∑ i ≠ j F ( r i j b ) \mathcal{L}^{\text {decorr }}=\sum_{i \neq j}^{F}\left(r_{i j}^{\mathrm{a}}\right)+\sum_{i \neq j}^{F}\left(r_{i j}^{\mathrm{b}}\right) Ldecorr =i=jF(rija)+i=jF(rijb)

对角元素为自己和自己的相关性,那肯定为一,没有意义,因此采用非对角元素之后代表各个描述符之间的相关性。

实验

评价标准

特征提取
  • 重复率(RS)
    • 在 距 离 ρ 以 内 匹 配 上 的 特 征 点 对 数 能 够 匹 配 上 的 所 有 特 征 点 对 数 \frac{在距离\rho以内匹配上的特征点对数}{能够匹配上的所有特征点对数} ρ
  • 定位误差(LE)
    • 在距离 ρ \rho ρ以内匹配上的特征点的平均误差(特征点对应的匹配点不超过另一张图片的范围即算能匹配上的点)
特征匹配
  • 匹配得分(MS)
    • 采 用 最 近 邻 搜 索 能 够 匹 配 上 , 且 误 差 在 距 离 ρ 以 内 的 特 征 点 对 数 能 够 匹 配 上 的 所 有 特 征 点 对 数 \frac{采用最近邻搜索能够匹配上,且误差在距离\rho以内的特征点对数}{能够匹配上的所有特征点对数} ρ
  • 单应精度(HA)
    • 利用匹配点估计的单应矩阵和实际单应矩阵之间的误差

数据集

  • HPatchs

结果

  • 特征点提取

    • 提取结果达到了最优,比起传统方法好挺多
      在这里插入图片描述
  • 特征点匹配

    • 在误差较为宽松时较好
    • 误差非常严格时sift依旧非常优秀
      在这里插入图片描述

速度

在这里插入图片描述

  • 比SuperPoint要略快一些

总结

本文最大的意义在于向人们证明了,给定合适的损失函数,加上良好的网络结构,可以几乎完全由数据驱动,学习得到特征点的位置。但是论文没有直接将代码开源,有机会可以对其进行复现。

这篇关于UnSuperPoint:End-to-End Unsupervised Interest Point Detector And Descriptor 论文解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185971

相关文章

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

解读@ConfigurationProperties和@value的区别

《解读@ConfigurationProperties和@value的区别》:本文主要介绍@ConfigurationProperties和@value的区别及说明,具有很好的参考价值,希望对大家... 目录1. 功能对比2. 使用场景对比@ConfigurationProperties@Value3. 核

Jupyter notebook安装步骤解读

《Jupyternotebook安装步骤解读》:本文主要介绍Jupyternotebook安装步骤,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、开始安装二、更改打开文件位置和快捷启动方式总结在安装Jupyter notebook 之前,确认您已安装pytho

Java中的StringUtils.isBlank()方法解读

《Java中的StringUtils.isBlank()方法解读》:本文主要介绍Java中的StringUtils.isBlank()方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录所在库及依赖引入方法签名方法功能示例代码代码解释与其他方法的对比总结StringUtils.isBl

对Django中时区的解读

《对Django中时区的解读》:本文主要介绍对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景前端数据库中存储接口返回AI的解释问题:这样设置的作用答案获取当前时间(自动带时区)转换为北京时间显示总结背景设置时区为北京时间 TIM

Java中的内部类和常用类用法解读

《Java中的内部类和常用类用法解读》:本文主要介绍Java中的内部类和常用类用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录内部类和常用类内部类成员内部类静态内部类局部内部类匿名内部类常用类Object类包装类String类StringBuffer和Stri