Introduction

这篇文章设计了一种自监督网络框架,能够同时提取特征点的位置以及描述子。相比于patch-based方法,本文提出的算法能够在原始图像提取到像素级精度的特征点的位置及其描述子。本文提出了一种单映性适应(Homographic Adaptation)的策略以增强特征点的复检率以及跨域的实用性(这里跨域指的是synthetic-to-real的能力,网络模型在虚拟数据集上训练完成,同样也可以在真实场景下表现优异的能力)。

SuperPoint Architecture

1 Shared Encoder

这是一个VGG-style的网络层,将原始输入图片进行一系列的处理后,将原始输入图片的尺寸变成\(H_c=H/8,W_c = W/8\)

2 Interest Point Decoder

The 65 channels correspond to local, non-overlapping 8 × 8 grid regions of pixels plus an extra “no interest point” dustbin.

After a channel-wise softmax, the dustbin dimension is removed and a RH c ×W c ×64 ⇒ RH×W reshape is performed.

65个通道对应原始图片\(8\times 8\)的网格,加上一个非特征点dustbin,通过在channel维度上做softmax,非特征点dustbin会被删除,同时会做一步图像的reshape (使用的是一个叫做\(子像素卷积^{[1]}\)的方法),得到一个和输出图片size相同的概率图。

3 Descriptor Decoder

首先利用类似于UCN的网络得到一个半稠密的描述子(此处参考文献\(UCN^{[3]}\) ),这样可以减少算法 训练内存开销同时减少算法运行时间。之后通过双三次多项式揷值得到其余描述,然后通过 L2normalizes 归一化描述子得到统一的长度描述。特征维度由 \(\mathcal{D} \in \mathbb{R}^{H_{c} \times W_{c} \times D}\) 变为 \(\mathbb{R}^{H \times W \times D}\) 。

4 Loss Functions

可见损失函数由两项组成,其中一项为特征点检测loss\(\mathcal{L}_{p}\) ,另外一项是描述子的loss\(\mathcal{L}_{d}\)。

前者使用的是交叉熵误差函数:

The interest point detector loss function \(\mathcal{L}_{p}\) is a fully convolutional cross-entropy loss over the cells \(\mathbf{x}_{h w} \in \mathcal{X}\). We call the set of corresponding ground-truth interest point labels \(Y\) and individual entries as \(y_{h w}\). The loss is:

\[\mathcal{L}_{p}(\mathcal{X}, Y)=\frac{1}{H_{c} W_{c}} \sum_{h=1 \atop w=1}^{H_{c}, W_{c}} l_{p}\left(\mathbf{x}_{h w} ; y_{h w}\right)
\]

where

\[l_{p}\left(\mathbf{x}_{h w} ; y\right)=-\log \left(\frac{\exp \left(\mathbf{x}_{h w y}\right)}{\sum_{k=1}^{65} \exp \left(\mathbf{x}_{h w k}\right)}\right)
\]

描述子的损失函数:

\[\begin{aligned} \mathcal{L}_{d}\left(\mathcal{D}, \mathcal{D}^{\prime}, S\right)=& \\ & \frac{1}{\left(H_{c} W_{c}\right)^{2}} \sum_{h=1 \atop w=1}^{H_{c}, W_{c}} \sum_{h_{c}^{\prime}=1 \atop w^{\prime}=1}^{H_{c}, W_{c}} l_{d}\left(\mathbf{d}_{h w}, \mathbf{d}_{h^{\prime} w^{\prime}}^{\prime} ; s_{h w h^{\prime} w^{\prime}}\right), \end{aligned}
\]

where

\[\begin{array}{r}
l_{d}\left(\mathbf{d}, \mathbf{d}^{\prime} ; s\right)=\lambda_{d} * s * \max \left(0, m_{p}-\mathbf{d}^{T} \mathbf{d}^{\prime}\right) \\
+(1-s) * \max \left(0, \mathbf{d}^{T} \mathbf{d}^{\prime}-m_{n}\right)
\end{array}
\]

其中对应每个cell的s是这样定义的:

\[s_{h w h^{\prime} w^{\prime}}= \begin{cases}1, & \text { if }\left\|\widehat{\mathcal{H} \mathbf{p}_{h w}}-\mathbf{p}_{h^{\prime} w^{\prime}}\right\| \leq 8 \\ 0, & \text { otherwise }\end{cases}
\]

Synthetic Pre-Training

网络的训练分为三个步骤:

  1. 第一步是采用虚拟的三维物体作为数据集,训练网络去提取角点,这里得到的是BaseDetectorMagicPoint

  2. 使用真实场景图片(MS-CoCo),用第一步训练出来的网络MagicPoint +Homographic Adaptation提取角点,这一步称作兴趣点自标注(Interest Point Self-Labeling)

  3. 对第二步使用的图片进行几何变换得到新的图片,这样就有了已知位姿关系的图片对,把这两张图片输入SuperPoint网络,提取特征点和描述子,然后计算loss,进行训练。

这里重点介绍一下Homographic Adaptation

针对Magicpoint在真实数据上的缺点,作者提出了Homographic Adaptation,也就是把真实图片做几次单应变换,将这些单应变换的结果都输入Magicpoint,然后将检测到的特征点投影到原始的图片上,合起来作为最后的特征点真值。这样使检测到的特征点更丰富,也具备了一定的单应不变性。然后将通过这个步骤得到的图片结合原图片送入到SuperPoint进行训练。

Running

观察到论文的作者在GitHub上开源了SuperPoint的\(代码^{[2]}\),拉下来跑了一下。

input output

真的牛!!!!

Conclusion

作者先使用一个合成的数据集训练MagicPoint,然后再结合Homographic Adaptation使其在真实世界里的表现得到了提升。同时特征点的检测也可以使用深度学习的方法来解决了。并且取得了较传统的方法很大的性能提升。


Refer

[1]子像素卷积:https://blog.csdn.net/leviopku/article/details/84975282

[2]superpoint:https://github.com/magicleap/SuperPointPretrainedNetwork

[3]C. B. Choy, J. Gwak, S. Savarese, and M. Chandraker. Universal Correspondence Network. In NIPS. 2016.2, 3, 8

SuperPoint: Self-Supervised Interest Point Detection and Description 论文笔记的更多相关文章

  1. Learning Rich Features from RGB-D Images for Object Detection and Segmentation论文笔记

    相关工作: 将R-CNN推广到RGB-D图像,引入一种新的编码方式来捕获图像中像素的地心姿态,并且这种新的编码方式比单纯使用深度通道有了明显的改进. 我们建议在每个像素上用三个通道编码深度图像:水平视 ...

  2. 【论文笔记】Malware Detection with Deep Neural Network Using Process Behavior

    [论文笔记]Malware Detection with Deep Neural Network Using Process Behavior 论文基本信息 会议: IEEE(2016 IEEE 40 ...

  3. 论文笔记《Spatial Memory for Context Reasoning in Object Detection》

    好久不写论文笔记了,不是没看,而是很少看到好的或者说值得记的了,今天被xinlei这篇paper炸了出来,这篇被据老大说xinlei自称idea of the year,所以看的时候还是很认真的,然后 ...

  4. [CVPR 2016] Weakly Supervised Deep Detection Networks论文笔记

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Helvetica Neue"; color: #323333 } p. ...

  5. 论文笔记:Chaotic Invariants of Lagrangian Particle Trajectories for Anomaly Detection in Crowded Scenes

    [原创]Liu_LongPo 转载请注明出处 [CSDN]http://blog.csdn.net/llp1992 近期在关注 crowd scene方面的东西.由于某些原因须要在crowd scen ...

  6. [CVPR2017] Weakly Supervised Cascaded Convolutional Networks论文笔记

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Helvetica Neue"; color: #042eee } p. ...

  7. [Arxiv1706] Few-Example Object Detection with Model Communication 论文笔记

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Helvetica Neue"; color: #042eee } p. ...

  8. 论文笔记:Rich feature hierarchies for accurate object detection and semantic segmentation

    在上计算机视觉这门课的时候,老师曾经留过一个作业:识别一张 A4 纸上的手写数字.按照传统的做法,这种手写体或者验证码识别的项目,都是按照定位+分割+识别的套路.但凡上网搜一下,就能找到一堆识别的教程 ...

  9. 论文笔记之:Learning Cross-Modal Deep Representations for Robust Pedestrian Detection

    Learning Cross-Modal Deep Representations for Robust Pedestrian Detection 2017-04-11  19:40:22  Moti ...

随机推荐

  1. 【操作系统】Linux bash常用函数路径配置

    临时方法:export PATH=/usr/bin:/usr/sbin:/bin:/sbin长期方法:1.    vi /etc/profile2.    在最后插入并保存:    export PA ...

  2. BBN+

    目录 motivation settings results motivation 观测用BBN的模式训练出来的模型, 配上不同的\(\alpha\), 结果会如何. settings Attribu ...

  3. 【入门到精通】❤️「Java工程师全栈知识路线」

    持续更新中- Vue前端开发 章节 内容 实践练习 Vue.js高效前端开发 • (实践练习) 第1章 Vue.js高效前端开发 • [ 一.初识Vue.js ] 第2章 Vue.js高效前端开发 • ...

  4. 关于PaddleSharp GPU使用 常见问题记录

    在安装NVIDIA驱动过程中遇到一系列问题,记录如下! 附上PaddleSharp地址,大家喜欢可以关注 根据PaddleSharp官方说明需要安装驱动如下 CUDA 和 cuDNN 和 Tensor ...

  5. CS基础 float 浮动的使用方法

    html代码: <body> <div class='red'> </div> <div class='green'> </div> < ...

  6. Flask_环境部署(十六)

    flask自带的服务器,无法满足性能要求,我们这里采用Gunicorn做wsgi容器,来部署flask程序并使用 Nginx 做前端代理实现分流.转发.负载均衡,以及分担服务器的压力. Gunicor ...

  7. linux centos7 修改文件启动报错如何拯救

    系统无法启动 CentOS启动的时候读条已经读满,但是没有反应,按下f5键跳出启动列表,最后一条信息:A start job is running for /etc/rc.d/rc.local Com ...

  8. yum方式安装nginx

    1.添加CentOS 7 Nginx yum资源库 [root@localhost ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPM ...

  9. js- float类型相减 出现无限小数的问题

    6.3 -1.1 是不是应该等于5.2? 但是js 会导致得出 5.19999999999的结果 怎么办?可以先先乘100 后相减,然是用方法 舍入为最接近的整数,然后再除于100, Math.rou ...

  10. spring boot 打包war后 部署到外部 tomcat 的具体正确操作【包括修改端口 与 去除请求路径的工程名】

    1.前言 工程做好了,总不能放在idea运行吧?不然怎么把项目放到云服务器呢?[这一篇随笔不讲解发布的云服务器的操作,在其他随笔有详细记载.] 解决的方案是把springboot 工程 打包成war文 ...