1. 概述

GCN(Geometric Correspondence Network)是一个用于从图像中提取特征点和描述子的深度神经网络,所提的特征点和描述子可以用于位姿更新和闭环检测。GCNv2是GCN的改进版,提高了运行效率,把原来需要在GPU上运行的算法改进到可以在TX2上运行。GCN-SLAM就是基于GCNv2的实时SLAM系统。因此我们需要按照GCN->GCNv2->GCN-SLAM的顺序进行学习,本篇便是对GCN的解读。

论文链接:ieeexplore.ieee.org/doc

2.主要思路

用深度学习去提特征点和描述子的思路其实已经很常见,大致思路都是给定一张图片,端到端输出特征点和对应的描述子,本篇论文的独特之处在于它不是根据单张图片来训练,而是根据图像对,这个图像对就是slam中前后两帧对应的图像,在设计网络时,前后两帧之间的相对位姿也参与到损失函数的设计中来,这个相对位姿是根据数据集中的ground-truth提供的。作者认为,由于在训练时结合了ground-truth,所以它所提的特征点更能够适用于位姿匹配,能够提高精度和稳定性。

3.算法流程

GCN网络结构

整个算法的设计过程其实就是网络结构的设计过程,如图中所示,整个网络主要分为两部分,第一部分是一个卷积神经网络,用于在一对图片里提取可以关联的特征,第二部分是一个循环神经网络,由于slam的输入图像之间有前后的时序关系,这样图像中的特征点的位置其实是可以根据上一次提取出的位置给出预测的,此处的RCNN就是给出这个预测。下面对这两部分分别介绍。

3.1卷积网络

该部分又可以分为两个步骤,第一步是直接对图片提取特征,第二步是根据提取的特征在两张图片之间根据ground-truth提取的位姿做关联,把正确关联的作为正样本,非正确关联的作为负样本。

1)对图片提取特征

这一功能是深度学习里比较成熟的了,所以作者也是直接使用标准的神经网络ResNet-50,先进行卷积和池化,然后进行反卷积,恢复特征的像素和位置。网络的参数是直接使用在ImageNet上训练好的参数

2)特征关联

这一部分是本篇文章最最核心的部分,也是本篇文章区别于其他基于深度学习提取特征点方法的地方。所谓特征关联,其实就是选出正确的特征点,在两张图片中,他们之间的相对位姿已经由ground-truth提供了,所以如果一张图片中的一个特征点能够按照相对位姿投影到另一张图片中对应的特征点上,那么这就是一对正样本,否则就是负样本。具体实现的方式使用的是深度度量学习(Depp Metric Learning),核心在于损失函数triplet loss的使用。鉴于这是本篇文章核心中的核心,因此我们在此一起学习下深度度量学习。

在我们常见的深度学习中,多数是分类,比如基于softmax的多分类,或者基于sigmoid的二分类,但有时我们除了要完成正确分类以外,还希望同一类别的各个样本能够离得更近,不同类别的各个样本之间能够离得更远,对于一个样本,同一类别的属于正样本,不同类别的属于负样本。至此,你可能已经自然能够想到,如果在构建损失函数时,让正样本输出为正,负样本输出为负,那对网络进行优化的过程,其实就是拉近正样本之间距离,同时拉远负样本之间距离的过程。triplet loss就是基于这样的思路设计的。如果想较深入理解,可以参考这篇文章blog.csdn.net/Lucifer_z

下面我们就结合此处特征点提取的需求,看一下triplet loss的实现过程。

假定一个图片对中的两张图片分别是图片1和图片2,其中 [公式] 是图片1中的特征点, [公式]  [公式] 分别是图片2中对应的正样本和负样本,那么triplet loss的度量函数就是

其中 [公式] 是和正样本特征向量之间的距离,[公式]是和负样本特征向量之间的距离。下面主要的问题就是怎样选取正样本和负样本了。

正样本由下式计算,也就是根据ground-truth提供的R和t直接对图片1中的特征点进行投影

负样本按下式选取

这个公式可以用一句话总结为:图片2中,除了正样本以外,离选取的特征点最近的特征点

3.2 循环神经网络

循环神经网络在此出的主要作用就是预测特征点位置,这一步的作用是啥,我现在也没想明白,是预测之后,初值更准,导致收敛更快?

神经网络按下式设计

4. 实验结果对比

由于本文的主要工作是提取特征点和描述子,所以自然要和其他的特征提取方式做对比,为了控制对比变量,作者自己写了一个简单的slam结构(此处的结构不是GCN-SLAM,GCN-SLAM是GCNv2的论文里用来做对比的方法),把其他提取特征点的方法作为前端替换进去,后端保持不变。从实验结果上看,它的这个方法比其他方法精度都高,而且在表中最后一组数据做对比的时候,由于这组数据中的图像纹理较少,该方法能够正常进行位姿解算,其他方法都出现定位丢失,以此证明它的方法具有更高的稳定性。

5. 总结与疑惑

该文章提出了一种通过深度学习提取特征点的方法,由于训练的时候使用了ground-truth提供的位姿,所以使用网络提取的特征进行位姿解算的时候精度更高,稳定性更好。

训练时加入了ground-truth就可以使提取的特征更适合于位姿解算,这个深层次的原因是什么呢?

预告:下一篇文章会解读GCN的升级版GCNv2,升级之后可以在TX2上实时运行,并且位姿解算精度仍然超过其他特征提取方式。