LIFT: Learned Invariant Feature Transform 论文解读
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特征点确定。
因此定义损失函数:
Ldesc (pθk,pθl)={∥hρ(pθk)−hρ(pθl)∥2for 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)∥∥2max(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θ则为计算得到的旋转角度。
因此可以定义旋转网络的误差函数
Lorientation(P1,x1,P2,x2)L_{orientation}(\textbf{P}^1,x^1,\textbf{P}^2,x^2) Lorientation(P1,x1,P2,x2)
- 就很简单,相同3d点的patch估计得到不同的角度,然后输入到训练好描述子网络中,最终得到尽量接近的描述子
- 这里没有对非同一个特征点的patch进行约束
特征点提取
设特征点提取网络为
S=fμ(P)=∑nNδnmaxmM(Wmn∗P+bmn)\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)=n∑NδnmmaxM(Wmn∗P+bmn)
其中,P\textbf{P}P为输入patch图片,经过多层网络的卷积变换(Wmn∗P+bmn)\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)=∑yexp(βS(y))y∑yexp(β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)=∑yexp(βS(y))∑yexp(βS(y))y
定义误差函数分为两类
- 分类误差,区分当前patch中有无特征点
- 定位精度误差,计算提取的特征点位置误差
其中分类误差采用:
Lclass (P1,P2,P3,P4)=∑i=14αimax(0,(1−softmax(fμ(Pi))yi))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=1∑4αimax(0,(1−softmax(fμ(Pi))yi))2
其中patch中有特征点时yi=1y_i = 1yi=1,没有时yi=−1y_i = -1yi=−1,这就保证了有特征的时得分尽量接近1,而没有特征点时计算的得分尽量趋于零。
定位精度误差采用:
Lpair (P1,P2)=∥hρ(G(P1,softargmax (fμ(P1))))−hρ(G(P2,softargmax(fμ(P2))))∥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 (P1,P2)=1−p1∩p2p1∪p2+max(0,∥x1−x2∥1−2s)p1∪p2\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−p1∪p2p1∩p2+p1∪p2max(0,∥∥x1−x2∥∥1−2s)
- 这个误差函数就是确保每次提取的特征点位置和sift特征点位置尽量重合,即P1,P2P^1,P^2P1,P2重合时误差最小
- 因此没有说数据驱动得到特征点而是利用网络去拟合逼近sift特征点。
运行流程
- 生成尺度空间图片
- 利用特征提取网络,在尺度空间图片中滑动提取特征
- 把 softargmax 函数替换成非极大值抑制,在整个图片内获取特征点
- 将图片裁剪成一个个小patch
- 估计旋转角度
- 旋转patch
- 计算描述子
实验验证
数据集
- Strecha dataset [33]
- DTU dataset [34]
- Webcam [6]
评价标准
- Repeatability
- Nearest Neighbor mean Average Precision
- Matching Score
(具体根据参考文献 [35] 进行计算)
总结
基本的思路就是用网络的方法去拟合毕竟sift特征点,只能算是基于深度学习的特征点提取的早期工作,没有完全的端到端数据驱动。
LIFT: Learned Invariant Feature Transform 论文解读相关推荐
- LIFT: Learned Invariant Feature Transform详细笔记
LIFT: Learned Invariant Feature Transform Paper: LIFT: Learned Invariant Feature Transform | Springe ...
- LIFT: Learned Invariant Feature Points完整调试记录(三)安装theano+Lasagne
基本环境到这里算是安装结束了,接下来就是安装论文所需的工具了,对这部分的过程也做一个简单记录. 参考网址:LIFT: Learned Invariant Feature Points完整调试记录 ub ...
- 《Scale Invariant Feature Transform on the Sphere: Theory and Applications》论文阅读和源码理解(一)
<Scale Invariant Feature Transform on the Sphere: Theory and Applications>论文阅读和源码理解(一) 摘要 主要贡献 ...
- SIFT算法详解:Scale Invariant Feature Transform
尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun zdd zddmail@gmail.com or (zddhu ...
- 尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT)
1.SIFT综述 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取 ...
- Distilling Object Detectors with Fine-grained Feature Imitation论文解读
论文链接 文章目录 1.简介 2.方法 2.1 模仿区域的估计 2.2 细粒度特征模仿 1.简介 对于以往应用于知识蒸馏的目标检测存在两种方法.第一种来自于论文FitNets: Hints for T ...
- 算法 | 尺度不变特征变换匹配算法 Scale Invariant Feature Transform (SIFT)
/******************************************************/ github:https://github.com/MichaelBeechan CS ...
- OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform)
OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform) 1. 效果图 2. 原理 2.1 步骤 2.2 opencv实现方法 2.3 SIFT ...
- 细粒度分类:DBTNet(Deep Bilinear Transform)(一)论文解读
文章目录 前言 一.参考论文 二.论文解读 摘要 1.简介 2.相关工作 3.Deep Bilinear Transform 3.1 Semantic Grouping Layer 语义分组层 3.2 ...
- 论文精读《OFT: Orthographic Feature Transform for Monocular 3D Object Detection》
OFT: Orthographic Feature Transform for Monocular 3D Object Detection 文章目录 OFT: Orthographic Feature ...
最新文章
- java 链表算法_JAVA数据结构与算法之链表(一)
- 复现经典:《统计学习方法》第19章 马尔可夫链蒙特卡罗法
- 简单的SQL注入学习
- 【iOS发展-44】通过案例谈iOS重构:合并、格式化输出、宏观变量、使用数组来存储数据字典,而且使用plist最终的知识...
- python可以做什么工作-Python可以做什么工作?Python有哪些方向?
- 元素出现在页面时,添加动画,配合animate.css使用
- python help帮助文档
- 计算机电路中bga是什么,什么是BGA BGA的结构和性能
- MyEclipse出现弹窗提示“当前页面的脚本发生错误”
- if_attact中几个宏定义
- Cylinder Candy(zoj 3866 旋转体体积和表面积)
- 货拉拉数据治理平台建设实践
- iceberg-flink 十:flink 窗口,事件时间,处理时间。
- plotjuggler⬅ROS1/ROS2画轨迹神器➡rqt_plot+rqt_multiplot之超级加强版
- Python - io 模块
- markdown编辑器的基本使用
- 手把手教你通过vue-cli搭建手机端框架
- 2022年N1叉车司机操作证考试题模拟考试平台操作
- 小米node2红外_小米门窗传感器2的糟心问题
- 台式计算机系统配置,怎么看自己电脑配置 电脑配置参数说明【图文】