论文链接:https://arxiv.org/pdf/1901.07223.pdf
主要内容
作者首先指出当前的传统SLAM算法受制于数据整合任务,因此希望通过深度学习方法加以解决,但同时大部分基于深度学习的研究会受到数据库和特定环境的影响,甚至会存在牺牲效率换取准确性的问题,极大程度上降低了系统的实用性。
本文使用深度学习方法提取出来的局部特征描述子来取代传统的手工特征,提出了DF-SLAM,实验证明,相比其他的SLAM系统,其在效率和稳定性上有很好的提升,并且在光照变化等场景下拥有更强的鲁棒性。同时,由于使用的网络层数较浅,整个系统的实时性可以得到保障,可以实时地在GPU上运行。
系统流程
系统框图如下:
整个系统框架可以分为跟踪、局部建图和闭环三个并行线程。
跟踪线程通过使用临近帧之间的特征匹配来构建数据整合。然后,在这些整合数据的帮助下,初始化帧并通过对极几何约束来完成相机的定位。跟踪线程同时决定了是否需要新的关键帧被插入。如果跟踪失败,基于相同特征类型的全局重定位模块将被启动。局部建图线程则被用来优化相机位姿和地图点并且通过从跟踪线程获得的信息来重建空间三维地图。如果轨迹构成一个环并被检测到,回环线程将被启动来优化整幅地图并且实现回环。有较高匹配率的帧将被筛选为候选回环帧,用来实现回环和全局优化。这些线程中的所有模块都采用稀疏的特征信息或者帧间结合,而非原始图片作为输入,从而减少空间损失。因而根据特征信息来设计相关模块。
模块结构图如下:
首先提取出兴趣点,然后使用TFeat网络描述兴趣点附近的区域并且生成归一化的128维浮点型描述子,这里使用原始图片的patch作为直接输入。提取的特征会被保存到每一帧中,并且传输给跟踪、建图和闭环线程。借助BoW(Bag of Words,词袋)实现定位,BoW通过两帧图像的特征相似度度量两帧图像的相似度。由于描述子为浮点型,这里的相识度距离度量使用欧氏距离。DF-SLAM使用词袋进一步加速了特征匹配过程。
特征设计
为了兼顾效率和准确性,网络采用了TFeat(论文链接、代码链接)的网络架构{Conv(7,7)-Tanh-Pool(2,2)-Conv(6,6)-Tanh-FC(128)},如下图所示:
TFeat使用的三元损失函数训练方法过于简单,通过随机选择一组匹配的patch(有相同的标识)和一个没有相同标识的patch进行训练,因而效果不是很理想,作者借鉴HardNet(论文链接、代码链接)的负样本采集策略,并和TFeat的网络架构融合,形成了DF-SLAM。
这里,就HardNet中采用的损失函数做进一步的说明:
定义batch
X
=
(
A
i
,
P
i
)
i
=
1..
n
X=(A_i,P_i)_{i=1..n}
X=(Ai,Pi)i=1..n,其中patch
A
A
A表示anchor,patch
P
P
P表示positive anchor,即能与A匹配的anchor,
A
A
A和
P
P
P实际上可以对应三维表面中的同一点。记
a
i
a_i
ai为
A
i
A_i
Ai中的描述子,
p
j
p_j
pj为
P
j
P_j
Pj中的描述子,则
a
i
a_i
ai和
p
j
p_j
pj的距离定义为:
d
(
a
i
,
p
j
)
=
2
−
2
a
i
p
j
,
i
=
1..
n
,
j
=
1..
n
d(a_i,p_j)=\sqrt{2-2a_ip_j},i=1..n,j=1..n
d(ai,pj)=2−2aipj
,i=1..n,j=1..n
接下来定义
p
j
m
i
n
p_{j_{min}}
pjmin为到
a
i
a_i
ai最近且没有和
a
i
a_i
ai配对的的描述子,具体表达为:
j
m
i
n
=
a
r
g
m
i
n
j
=
1..
n
,
j
≠
i
d
(
a
i
,
p
j
)
j_{min}=arg min_{j=1..n,j\neq i}d(a_i,p_j)
jmin=argminj=1..n,j=id(ai,pj)
定义
a
k
m
i
n
a_{k_{min}}
akmin为到
p
i
p_i
pi最近且没有和
p
i
p_i
pi配对的的描述子,具体表达为:
k
m
i
n
=
a
r
g
m
i
n
k
=
1..
n
,
k
≠
i
d
(
a
k
,
p
i
)
k_{min}=arg min_{k=1..n,k\neq i}d(a_k,p_i)
kmin=argmink=1..n,k=id(ak,pi)
然后就可以定义hardest negative patch距离:
d
n
=
m
i
n
(
a
k
m
i
n
,
p
j
m
i
n
)
d_n=min(a_{k_{min}},p_{j_{min}})
dn=min(akmin,pjmin)
进一步定义损失函数:
L
O
S
S
=
1
N
∑
i
=
0
N
m
a
x
(
0
,
1
+
d
(
a
i
,
p
i
)
−
d
n
)
LOSS=\frac{1}{N}\sum^N_{i=0}max(0,1+d(a_i,p_i)-d_n)
LOSS=N1i=0∑Nmax(0,1+d(ai,pi)−dn)
实验结果
准备工作
虽然大部分基于patch的数据库使用的是DoG的detector来提取兴趣点,但是由于大部分SLAM系统的特征都是用FAST detector提取的并且均匀地分布在图片上。为了满足SLAM系统的需求,需要建立基于FAST的patch数据集,以保证网络的效率,作者从HPatches数据集的图片序列上提取patch,除了所用的detector不同外,patch的生成方式和HPatches数据集的生成方式一致。
词袋的训练使用了COCO数据集,词袋的叶子节点数选择为
1
0
6
10^6
106个。