本文出自近几年备受瞩目的创业公司MagicLeap[1],发表在CVPR 2018,一作Daniel DeTone[2],paper[3],slides[4],code[5]。
这篇文章设计了一种自监督网络框架,能够同时提取特征点的位置以及描述子。相比于patch-based方法,本文提出的算法能够在原始图像提取到像素级精度的特征点的位置及其描述子。本文提出了一种单映性适应(Homographic Adaptation
)的策略以增强特征点的复检率以及跨域的实用性(这里跨域指的是synthetic-to-real的能力,网络模型在虚拟数据集上训练完成,同样也可以在真实场景下表现优异的能力)。
介绍
诸多应用(诸如SLAM/SfM/相机标定/立体匹配)的首要一步就是特征点提取,这里的特征点指的是能够在不同光照&不同视角下都能够稳定且可重复检测的2D图像点位置。
基于CNN的算法几乎在以图像作为输入的所有领域表现出相比于人类特征工程更加优秀的表达能力。目前已经有一些工作做类似的任务,例如人体位姿估计,目标检测以及室内布局估计等。这些算法以通常以大量的人工标注作为GT,这些精心设计的网络用来训练以得到人体上的角点,例如嘴唇的边缘点亦或人体的关节点,但是这里的问题是这里的点实际是ill-defined(我的理解是,这些点有可能是特征点,但仅仅是一个大概的位置,是特征点的子集,并没有真正的把特征点的概念定义清楚)。
本文采用了非人工监督的方法提取真实场景的特征点。本文设计了一个由特征点检测器监督的具有伪真值数据集,而非是大量的人工标记。为了得到伪真值,本文首先在大量的虚拟数据集上训练了一个全卷积网络(FCNN),这些虚拟数据集由一些基本图形组成,例如有线段、三角形、矩形和立方体等,这些基本图形具有没有争议的特征点位置,文中称这些特征点为MagicPoint
,这个pre-trained的检测器就是MagicPoint
检测器。这些MagicPoint
在虚拟场景的中检测特征点的性能明显优于传统方式,但是在真实的复杂场景中表现不佳,此时作者提出了一种多尺度多变换的方法Homographic Adaptation
。对于输入图像而言,Homographic Adaptation
通过对图像进行多次不同的尺度/角度变换来帮助网络能够在不同视角不同尺度观测到特征点。综上:SuperPoint = MagicPoint Homographic Adaptation
算法优劣对比
- 基于图像块的算法导致特征点位置精度不够准确;
- 特征点与描述子分开进行训练导致运算资源的浪费,网络不够精简,实时性不足;或者仅仅训练特征点或者描述子的一种,不能用同一个网络进行联合训练;
网络结构
上图可见特征点检测器以及描述子网络共享一个单一的前向encoder,只是在decoder时采用了不同的结构,根据任务的不同学习不同的网络参数。这也是本框架与其他网络的不同之处:其他网络采用的是先训练好特征点检测网络,然后再去进行对特征点描述网络进行训练。网络共分成以下4个主要部分,在此进行详述:
1. Shared Encoder 共享的编码网络
从上图可以看到,整体而言,本质上有两个网络,只是前半部分共享了一部分而已。本文利用了VGG-style的encoder以用于降低图像尺寸,encoder包括卷积层,max-pooling层,以及非线性激活层。通过3个max-pooling层将图像的尺寸变成 和 ,经过encoder之后,图像由 变为张量
2. Interest Point Decoder
这里介绍的是特征点的解码端。每个像素的经过该解码器的输出是该像素是特征点的概率(probability of “point-ness”)。通常而言,我们可以通过反卷积得到上采样的图像,但是这种操作会导致计算量的骤增以及会引入一种“checkerboard artifacts”。因此本文设计了一种带有“特定解码器”(这种解码器没有参数)的特征点检测头以减小模型计算量(子像素卷积)。例如:输入张量的维度是 ,输出维度 ,即图像的尺寸。这里的65表示原图 的局部区域,加上一个非特征点dustbin
。通过在channel维度上做softmax,非特征点dustbin会被删除,同时会做一步图像的reshape
: 。(这就是子像素卷积[6]的意思,俗称像素洗牌)
3. Descriptor Decoder
首先利用类似于UCN的网络得到一个半稠密的描述子(此处参考文献UCN[7]),这样可以减少算法训练内存开销同时减少算法运行时间。之后通过双三次多项式插值得到其余描述,然后通过L2-normalizes
归一化描述子得到统一的长度描述。特征维度由 变为 。
由特征点得到其描述子的过程文中没有细讲,看了一下源代码[8]就明白了。其实该过程主要用了一个函数即grid_sample
,画了一个草图作为解释。
- 图像尺寸归一化:首先对图像的尺寸进行归一化,(-1,-1)表示原来图像的(0,0)位置,(1,1)表示原来图像的(H-1,W-1)位置,这样一来,特征点的位置也被归一化到了相应的位置。
- 构建grid:将归一化后的特征点罗列起来,构成一个尺度为1*1*K*2的张量,其中K表示特征数量,2分别表示xy坐标。
- 特征点位置反归一化:根据输入张量的H与W对grid(1,1,0,:)(表示第一个特征点,其余特征点类似)进行反归一化,其实就是按照比例进行缩放 平移,得到反归一化特征点在张量某个slice(通道)上的位置;但是这个位置可能并非为整像素,此时要对其进行双线性插值补齐,然后其余slice按照同样的方式进行双线性插值。注:代码中实际的就是双线性插值,并非文中讲的双三次插值;
- 输出维度:1*C*1*K。
4. 误差构建
可见损失函数由两项组成,其中一项为特征点检测loss ,另外一项是描述子的loss。
对于检测项loss,此时采用了交叉熵损失函数:
其中:
描述子的损失函数:
其中 为Hinge-loss
(合页损失函数,用于SVM,如支持向量的软间隔,可以保证最后解的稀疏性);
同时指示函数为 , 表示所有正确匹配对集合:
网络训练
本文一共设计了两个网络,一个是BaseDetector
,用于检测角点(注意,此处提取的并不是最终输出的特征点,可以理解为候选的特征点),另一个是SuperPoint
网络,输出特征点和描述子。
网络的训练共分为三个步骤:
- 第一步是采用虚拟的三维物体作为数据集,训练网络去提取角点,这里得到的是
BaseDetector
即,MagicPoint
; - 使用真实场景图片,用第一步训练出来的网络
MagicPoint
Homographic Adaptation
提取角点,这一步称作兴趣点自标注(Interest Point Self-Labeling) - 对第二步使用的图片进行几何变换得到新的图片,这样就有了已知位姿关系的图片对,把这两张图片输入SuperPoint网络,提取特征点和描述子。
预训练Magic Point
此处参考作者之前发表的一篇论文[Toward Geometric Deep SLAM[9]],其实就是MagicPoint
,在此不做展开介绍。
Homographic Adaptation
算法在虚拟数据集上表现极其优秀,但是在真实场景下表示没有达到预期,此时本文进行了Homographic Adaptation
。 作者使用的数据集是MS-COCO
,为了使网络的泛化能力更强,本文不仅使用原始了原始图片,而且对每张图片进行随机的旋转和缩放形成新的图片,新的图片也被用来进行识别。这一步其实就类似于训练里常用的数据增强。经过一系列的单映变换之后特征点的复检率以及普适性得以增强。值得注意的是,在实际训练时,这里采用了迭代使用单映变换的方式,例如使用优化后的特征点检测器重新进行单映变换进行训练,然后又可以得到更新后的检测器,如此迭代优化,这就是所谓的self-supervisd。
最后的关键点检测器,即
可以表示为再所有随机单映变换/反变换的聚合:
利用上面网络得到的关键点位置以及描述子表示构建残差,利用ADAM
进行优化。
实验结果
总结
- it is possible to transfer knowledge from a synthetic dataset onto real-world images
- sparse interest point detection and description can be cast as a single, efficient convolutional neural network
- the resulting system works well for geometric computer vision matching tasks such as Homography Estimation
- 研究Homographic Adaptation能否在语义分割任务或者目标检测任务中有提升作用
- 兴趣点提取以及描述这两个任务是如何影响彼此的
作者最后提到,他相信该网络能够解决SLAM或者SfM领域的数据关联,并且learning-based
前端可以使得诸如机器人或者AR等应用获得更加鲁棒。
参考资料
[1]MagicLeap: https://www.magicleap.com/ [2]Daniel DeTone: http://www.danieldetone.com/ [3]paper: https://arxiv.org/abs/1712.07629 [4]slides:https://github.com/MagicLeapResearch/SuperPointPretrainedNetwork/blob/master/assets/DL4VSLAM_talk.pdf [5]code:https://github.com/MagicLeapResearch/SuperPointPretrainedNetwork [6]子像素卷积: https://blog.csdn.net/leviopku/article/details/84975282 [7]UCN: https://arxiv.org/abs/1606.03558 [8]SpatialGridSamplerBilinear:https://github.com/pytorch/pytorch/blob/f064c5aa33483061a48994608d890b968ae53fb5/aten/src/THNN/generic/SpatialGridSamplerBilinear.c [9]Toward Geometric Deep SLAM: https://arxiv.org/abs/1707.07410
编辑:计算机视觉SLAM
本文仅做学术分享,如有侵权,请联系删文。