当前位置: 代码迷 >> 综合 >> LIFT: Learned Invariant Feature Transform 论文解读
  详细解决方案

LIFT: Learned Invariant Feature Transform 论文解读

热度:1   发布时间:2023-12-15 07:50:10.0

LIFT: Learned Invariant Feature Transform

论文概述

  • 创新点
    • 使用统一的模型进行端到端的有监督训练
    • 利用了传统特征提取的先验知识
  • 方法
    • 训练过程

* 分阶段训练* 利用SfM中sift的位置和角度,训练描述符网络* 利用SfM中sift的位置,和训练好的描述符网络,训练旋转估计网络* 利用已经训练好的旋转估计和描述符网络训练特征点提取网络
* 损失函数* 同一个3d点的角度尽可能近* 匹配点描述符距离尽可能近,非匹配点尽可能远* 匹配点的位置比较接近* 非特征点位置得分尽量低
  • 特征提取过程
    在这里插入图片描述

  • 实验验证

    • 在一些传统数据集上进行了匹配重复率测试

详细描述

简介

  • 传统的手工特征点在许多计算机视觉任务中得到了广泛的应用,如三维重建,SLAM、图片检索、物体识别等等。

  • 深度学习在许多计算机视觉领域取得了颠覆性的成果,在很多领域都远超传统的方法。但是在特征点提取匹配上的研究却不多。

  • 现有的研究成果大多是分离,包括一些特征点提取方法,和描述子计算方法

    • 特征点提取方法
      • 很少,非深度学习方法
    • 描述子计算方法
      • Discriminative Learning of Deep Convolutional Feature Point Descriptors.
      • 描述子的学习主要在于难负样本挖掘
  • 本文提出如下统一的结构,进行特征点提取匹配工作。
    在这里插入图片描述
    主要难点:

  • 如何保证整体的可微性

    • 将非极大值抑制替换为 soft argmax function
    • 利用特殊变换层对图片进行旋转和裁剪等操作
  • 如何训练整个网络

    • 整个网络端到端的训练不可行
    • 利用SfM产生真实值以及训练特征点
      • 先训练描述子网络
      • 再训练旋转估计网络
      • 最后训练特征点提取网络
  • 实际应用

    • 将所有网络解耦,在图像金字塔中使用特征点提取网络
    • 非极大值抑制得到特征点
    • 旋转估计和描述子网络均应用在提取得到的特征点上

因此,本文的贡献点有:

  • 第一个完整的集成特征点提取、旋转估计、描述子计算深度学习端到端的架构
    • 难点,如何保证整体网络的可导
  • 网络训练方法
    • 利用SfM得到patch真实值
    • 分阶段、分任务进行训练

方法

问题描述
  • 采用图像patch作为输入而非整体图片作为输入进行训练,这保证了网络能够在不同尺度大小的图片上进行工作。
  • 采用SfM中提取的特征点构造图片patch进行训练,每次训练采用四个patch同时输入
    • P1, P2 为同一个特征点的不同视角下的图片patch
    • P3为不同特征点对应的图片patch
    • P4为随机选取的图片patch其中不包含特征点

因此每次训练创建四个共享参数的网络对四个patch进行处理
在这里插入图片描述

  • 包括如下部分
    • 特征点提取网络
    • softargmax 层,提取得到特征点位置(假设只有一个特征点)
    • 特殊变换层,将patch进行一定的裁剪
    • 旋转估计网络,得到角度
    • 特殊变换层2,根据角度将patch进行一定的旋转变换
    • 描述符计算层
  • 其中,p4仅用来训练特征提取网络,因此没有后面的层
训练集创建
  • 现有的数据集大多都用传统的特征点提取patch然后训练描述子,但是没有训练特征点的方法
  • 为了获取不同视角下同一个点的patch,采用SfM方法,基于sift特征点
  • 3384张图片,得到39k的特征点
描述子

设描述子网络为:
d = h ρ ( P θ ) \textbf{d} = h_{\rho}(\textbf{P}_{\theta}) d=hρ?(Pθ?)
其中, d \textbf{d} d为计算得到的描述子向量, P θ \textbf{P}_{\theta} Pθ?为旋转过后的patch,其中patch的位置和旋转由sift特征点确定。
因此定义损失函数:
L desc  ( p θ k , p θ l ) = { ∥ h ρ ( p θ k ) ? h ρ ( p θ l ) ∥ 2 for positive pairs, and  max ? ( 0 , C ? ∥ h ρ ( p θ k ) ? h ρ ( p θ l ) ∥ 2 ) for negative pairs  \mathcal{L}_{\text {desc }}\left(\mathbf{p}_{\theta}^{k}, \mathbf{p}_{\theta}^{l}\right)= \begin{cases}\left\|h_{\rho}\left(\mathbf{p}_{\theta}^{k}\right)-h_{\rho}\left(\mathbf{p}_{\theta}^{l}\right)\right\|_{2} & \text { for positive pairs, and } \\ \max \left(0, C-\left\|h_{\rho}\left(\mathbf{p}_{\theta}^{k}\right)-h_{\rho}\left(\mathbf{p}_{\theta}^{l}\right)\right\|_{2}\right) & \text { for negative pairs }\end{cases} Ldesc ?(pθk?,pθl?)={ ?hρ?(pθk?)?hρ?(pθl?)?2?max(0,C??hρ?(pθk?)?hρ?(pθl?)?2?)? for positive pairs, and  for negative pairs ?

  • 正样本尽量接近
  • 负样本尽量远,但是限制了过分的远导致的负样本项数值很大的情况
难负样本挖掘策略

在描述子网络中,难负样本挖掘是一种非常有效的方法,因为大量的特征点之间的差别是非常大的,很容易区分,且负样本的数量往往远远大于正样本,导致网络训练效率下降。

文中采用了如参考文献[10]中类似的策略进行负样本选择。
这部分可参考该论文,这里不展开了。

旋转估计网络

设旋转估计网络为:
θ = g ? ( P ) \theta = g_{\phi}(\textbf{P}) θ=g??(P)
其中, P \textbf{P} P为sift提取得到的特征点位置处得到的patch。 θ \theta θ则为计算得到的旋转角度。

因此可以定义旋转网络的误差函数

L o r i e n t a t i o n ( P 1 , x 1 , P 2 , x 2 ) L_{orientation}(\textbf{P}^1,x^1,\textbf{P}^2,x^2) Lorientation?(P1,x1,P2,x2)

  • 就很简单,相同3d点的patch估计得到不同的角度,然后输入到训练好描述子网络中,最终得到尽量接近的描述子
  • 这里没有对非同一个特征点的patch进行约束
特征点提取

设特征点提取网络为
S = f μ ( P ) = ∑ n N δ n max ? m M ( W m n ? P + b m n ) \mathbf{S}=f_{\mu}(\mathbf{P})=\sum_{n}^{N} \delta_{n} \max _{m}^{M}\left(\mathbf{W}_{m n} * \mathbf{P}+\mathbf{b}_{m n}\right) S=fμ?(P)=nN?δn?mmaxM?(Wmn??P+bmn?)

其中, P \textbf{P} P为输入patch图片,经过多层网络的卷积变换 ( W m n ? P + b m n ) \left(\mathbf{W}_{m n} * \mathbf{P}+\mathbf{b}_{m n}\right) (Wmn??P+bmn?),之后添加线性激活函数得到单层的得分图 S \textbf{S} S

为了通过得分图确定特征点的位置,采用softargmax 函数,也就是计算得分图的质心作为特征点的位置

x = softargmax ? ( S ) softargmax ? ( S ) = ∑ y exp ? ( β S ( y ) ) y ∑ y exp ? ( β S ( y ) ) \textbf{x} = \operatorname{softargmax}(\mathbf{S})\\ \operatorname{softargmax}(\mathbf{S})=\frac{\sum_{\mathbf{y}} \exp (\beta \mathbf{S}(\mathbf{y})) \mathbf{y}}{\sum_{\mathbf{y}} \exp (\beta \mathbf{S}(\mathbf{y}))} x=softargmax(S)softargmax(S)=y?exp(βS(y))y?exp(βS(y))y?

定义误差函数分为两类

  • 分类误差,区分当前patch中有无特征点
  • 定位精度误差,计算提取的特征点位置误差
其中分类误差采用:

L class  ( P 1 , P 2 , P 3 , P 4 ) = ∑ i = 1 4 α i max ? ( 0 , ( 1 ? softmax ? ( f μ ( P i ) ) y i ) ) 2 \mathcal{L}_{\text {class }}\left(\mathbf{P}^{1}, \mathbf{P}^{2}, \mathbf{P}^{3}, \mathbf{P}^{4}\right)=\sum_{i=1}^{4} \alpha_{i} \max \left(0,\left(1-\operatorname{softmax}\left(f_{\mu}\left(\mathbf{P}^{i}\right)\right) y_{i}\right)\right)^{2} Lclass ?(P1,P2,P3,P4)=i=14?αi?max(0,(1?softmax(fμ?(Pi))yi?))2

其中patch中有特征点时 y i = 1 y_i = 1 yi?=1,没有时 y i = ? 1 y_i = -1 yi?=?1,这就保证了有特征的时得分尽量接近1,而没有特征点时计算的得分尽量趋于零。

定位精度误差采用:

L pair  ( P 1 , P 2 ) = ∥ h ρ ( G ( P 1 , softargmax  ( f μ ( P 1 ) ) ) ) ? h ρ ( G ( P 2 , softargmax ? ( f μ ( P 2 ) ) ) ) ∥ 2 \begin{aligned} \mathcal{L}_{\text {pair }}\left(\mathbf{P}^{1}, \mathbf{P}^{2}\right)=\| & h_{\rho}\left(G\left(\mathbf{P}^{1}, \text { softargmax }\left(f_{\mu}\left(\mathbf{P}^{1}\right)\right)\right)\right)-\\ & h_{\rho}\left(G\left(\mathbf{P}^{2}, \operatorname{softargmax}\left(f_{\mu}\left(\mathbf{P}^{2}\right)\right)\right)\right) \end{aligned} \|_{2} Lpair ?(P1,P2)=?hρ?(G(P1, softargmax (fμ?(P1))))?hρ?(G(P2,softargmax(fμ?(P2))))?2?

也就是利用目前训练好的旋转估计和描述符计算网络去计算当前提取位置的得分。

但是由于难以训练问题,因此实际上采用的误差函数
L ~ pair  ( P 1 , P 2 ) = 1 ? p 1 ∩ p 2 p 1 ∪ p 2 + max ? ( 0 , ∥ x 1 ? x 2 ∥ 1 ? 2 s ) p 1 ∪ p 2 \tilde{\mathcal{L}}_{\text {pair }}\left(\mathbf{P}^{1}, \mathbf{P}^{2}\right)=1-\frac{\mathbf{p}^{1} \cap \mathbf{p}^{2}}{\mathbf{p}^{1} \cup \mathbf{p}^{2}}+\frac{\max \left(0,\left\|\mathbf{x}^{1}-\mathbf{x}^{2}\right\|_{1}-2 s\right)}{\sqrt{\mathbf{p}^{1} \cup \mathbf{p}^{2}}} L~pair ?(P1,P2)=1?p1p2p1p2?+p1p2 ?max(0,?x1?x2?1??2s)?

  • 这个误差函数就是确保每次提取的特征点位置和sift特征点位置尽量重合,即 P 1 , P 2 P^1,P^2 P1,P2重合时误差最小
  • 因此没有说数据驱动得到特征点而是利用网络去拟合逼近sift特征点。
运行流程

  • 生成尺度空间图片
  • 利用特征提取网络,在尺度空间图片中滑动提取特征
  • 把 softargmax 函数替换成非极大值抑制,在整个图片内获取特征点
  • 将图片裁剪成一个个小patch
  • 估计旋转角度
  • 旋转patch
  • 计算描述子

实验验证

数据集
  • Strecha dataset [33]
  • DTU dataset [34]
  • Webcam [6]
评价标准
  • Repeatability
  • Nearest Neighbor mean Average Precision
  • Matching Score

(具体根据参考文献 [35] 进行计算)

总结

基本的思路就是用网络的方法去拟合毕竟sift特征点,只能算是基于深度学习的特征点提取的早期工作,没有完全的端到端数据驱动。

  相关解决方案