superpoint

模型结构

superpoint_第1张图片

模型特点

SuperPoint 是基于自监督训练的特征点检测和描述符提取方法,是2018年MagicLeap发表的一篇文章中提出的;

目前深度学习在SLAM的应用中,有明显对立的两派,一派主张学习特征和描述子,另一派主张直接端到端学习位姿。关于这一点,我和博主看法相同,认为有明确数学模型的地方还是应该以模型为主,利用特征点的投影计算位姿,这是有很明确的几何关系的,何必再用深度学习这种不可解释性的方法取而代之呢。博主认为深度学习在这方面最好的应用方式就是提取特征,这是它的强项,也是传统方法的弱项,因为传统方法提取的特征在稳定性和长时间重定位方面都不尽如人意。通过分析SuperPoint的作者这连续三篇文章中思想的转变,也能够体会到这一点,算是一个间接的证明。

其实,不光是在 SLAM 中有这样的思想,在医药行业同样也是,很多学者认为有明确的数学模型,应该以具体的数学模型为主,使用数学模型很难建立的部分可以利用神经网络这种黑箱的操作模式,这样的可解释性也是比较好的;

网络结构

superpoint_第2张图片

网络共分为四部分,下面分别介绍

1)编码网络

从上面的SuperPoint网络的图片我们可以看出,这本质上就是两个网络,只不过在前半部分有一些相同的结构,所以把这些相同的结构提取出来共用,合并之后就看起来像是一个网络了。这个共用的网络就是编码网络,作者选用的是一个类似于VGG的网络结构,它的作用是是对图片降维,提取特征,以减小后续网络的计算量。

2)特征点检测网络

此处的网络实际就是一个解码器,上面有编码,此处自然就需要解码。作用就是对图片的每个像素都计算一个概率,这个概率表示的就是其为特征点的可能性大小。对于一般的解码操作运算量过大的问题,作者也提出了采用子像素卷积(sub-pixel convolution)的方法降低计算量

问题:什么是子像素卷积(sub-pixel convolution)
Sub-pixel convolution是一种巧妙的图像及特征图upscale的方法,又叫做 pixel shuffle (像素洗牌)。我们知道,用深度学习处理图像的话,经常需要对特征图放大。常见的方法有直接上采样,双线性插值,反卷积;

子像素卷积(sub-pixel convolution)

superpoint_第3张图片

上图很直观得表达了sub-pixel convolution的做法,前面就是一个普通的CNN网络,到后面彩色部分就是sub-pixel conv的操作了。首先,如果我想对原图放大3倍,那么我需要生成出3^2=9个same size的特征图。将九个same size的特征图拼成一个X3的大图,这就是sub-pixel convolution的操作了。

这是一种抽样的反思想,如果把一张x3的大图,每隔三个点抽样一个,那就会得到9张低分辨率的图像。于是,如果我们可以通过CNN来获得9张符合分布的低分辨率图像,那么就可以组成一张高分辨率的大图。

3)描述子检测网络

同样的,此处也是一个解码器。先学习半稠密的描述子(不使用稠密的方式是为了减少计算量和内存),然后进行双三次插值算法(bicubic interpolation)得到完整描述子,最后再使用L2标准化(L2-normalizes)得到单位长度的描述。

4)损失函数

网络分为两个分支,损失函数自然也就分为两个分支。不过为了统一进行训练,作者把两个分支的损失函数加和作为最终的损失函数来用。最终的损失函数为

superpoint_第4张图片

故整体提炼出来的训练顺序为:

  • 提取基本形状元素特征点的模型 ---Training MagicPoint on Synthetic Shapes 

  • 真实图像自标注 ---  Exporting detections on MS-COCO

  • 特征点提取和描述符计算联合训练 --- Training Superpoint on MS-COCO
  • 输出各指标 --- Export the metrics on HPatches

参考:

语义SLAM | 深度学习用于特征提取 : SuperPoint(三) - 知乎

Sub-pixel Convolution(子像素卷积)_木盏-CSDN博客_子像素卷积

你可能感兴趣的:(slam,计算机视觉,人工智能,深度学习,slam,神经网络)