0. 写在前面

SuperPoint 是基于自监督训练的特征点检测和描述符提取方法,是2018年MagicLeap发表的一篇文章中提出的。MagicLeap是一个备受争议的做VR的公司,大家如果对他的八卦有兴趣可以看这篇文章:

我在阅读这篇文章的过程中,感觉作者的写作思路很清晰,尤其是把各个技术点之所以这么做的原因写的很清楚,所以又去搜了作者其他论文,一共搜到三篇,另外两篇分别是2016年和2017年发表的,这三篇文章通读下来,可以看清作者在使用深度学习进行位姿估计这一方法上的思路演变过程,为了把这一脉络理清楚,我们按照时间顺序对这三篇文章分别解读,分别是:

1)缘起:Deep Image Homography Estimation

2)发展:Toward Geometric Deep SLAM

3)正果:SuperPoint: Self-Supervised Interest Point Detection and Description

这次我们先一起讨论第一篇文章中的内容。

1. 概述

Deep Image Homography Estimation 是通过端到端的方式估计一对图像的单应矩阵。训练数据集是从MS-COCO上选取图片,然后把这张图片进行单应性变换得到图象对的方式生成的。为了得到矩阵变换的置信度(比如slam中设置方差需要这些东西),作者把网络分成两部分,分别对应两种输出,一种输出单一变换结果,另一种输出多个可能的变换结果,并给出每种变换结果的置信度,实际使用时,选择置信度最高的那个。

2. 算法流程

2.1 基础知识

刚才也提高,本篇文章所提出的方法输出的是单应性矩阵,所谓单应性矩阵,就是图象中的目标点认为是在一个平面上,相应的,如果不在一个平面上则被成为基础矩阵。单应矩阵和基础矩阵的区别可参考以下两篇文章:

在实际的slam应用中,单应矩阵在以下这三种情况时需要用到:

  • 相机只有旋转而无平移的时候,两视图的对极约束不成立,基础矩阵F为零矩阵,这时候需要使用单应矩阵H
  • 场景中的点都在同一个平面上,可以使用单应矩阵计算像点的匹配点。
  • 相机的平移距离相对于场景的深度较小的时候,也可以使用单应矩阵H。

在大家熟悉的ORB-SLAM中初始化的时候,就是单应矩阵和基础矩阵同时估计,然后根据两种方法估计出的结果计算重投影误差,选择重投影误差最小的那个作为初始化结果。

2.2 建立模型

一个单应矩阵其实就是一个3X3的矩阵,通过这个矩阵,可以把图像中的一个点,投影到对应的图像对上去,对应的公式为

在这篇文章中,作者为了更好的训练模型和评估算法效果,采用了另外一种模型,来等效代替上面的公式。我们知道,一张图片进行单应性变换的时候,图像上的点的坐标会根据变换矩阵发生变化(如上式),那么反过来,如果我知道n个变换前后的点的坐标,那么这两张图片之间的变换矩阵便可以得到,在平面关系中,n为4,即至少知道四个点就可以。因此作者用四个点对应的变化量来建立一个新的模型,如下式所示

它和单应性矩阵具有一一对应的关系

这样做的好处是,把图片对之间的矩阵关系,转换成了点和点之间的关系,在进行精度评估时,可以直接根据转换后的点的坐标与真实的坐标计算距离,作为误差评估指标,而且,还可以用于网络中损失函数的计算。

2.3 生成数据集

作者采用MS-COCO作为数据集,不过该数据集中没有图像对,也即没有单应矩阵的真值,这是没法进行训练的。因此作者根据数据集中原有图像,自动生成了图像对。具体方法如下图所示

具体步骤为:

1) 在图像中选取一个长方形区域,区域就可以用上面说的四个点的模型来表示

2) 把区域的四个点随机进行平移,这样就得到一个四边形,这两个四边形之间的单应矩阵也就是已知的

3) 把图像按照这个单应矩阵进行变换,并选取被四边形框住的区域

4) 这样1)中和3)中得到的图像就形成了一个已知真实单应矩阵的图像对

2.4 设计网络结构

本文的网络结构如下图所示

网络分成两部分,分别是Classification HomographyNet 和 Regression HomograhyNet,后者是直接输出8个量,这8个量自然就是四个点各自的x和y坐标值。但这样的缺点也很明显,就是不知道每个坐标值的置信度是多少,比如在slam中设置方差时就没有根据。因此Classification HomographyNet就是在Regression HomograhyNet的基础上,把输出端改成了8X21的输出向量,这里的8仍然是四个点各自的x和y坐标,这里的21是每个坐标值的可能值之一,并且给出了该值的概率,这样就可以定量分析置信度了。该网络所输出的置信度的可视化效果如下图所示

2.5 实验结果

实验结果的精度评测方法就是根据每个点的坐标按照单应矩阵进行转换后,和真实坐标进行L2距离测量,再把四个点的误差值取平均得到。作者把网络两部分的输出和ORB特征计算的结果分别进行了评测,对比结果如下:

从这张表里看,并没有比ORB表现出明显的优势,但是作者展示了几张图片,每个图片里显示了矫正之后的方框对,从方框对中可以明显看出区别。左边是ORB方法的,右边是本文方法的。

3. 总结与思考

本文设计了一种端到端的单应矩阵的估计方法,采用提取定点的结构等效单应矩阵,基于这种结构设计了数据集产生方法和精度评测方法,最终的结果显示效果要明显高于ORB进行的提取。

一些思考:

1) 这种从图像中产生真值,然后在利用这些图像去估计矩阵的方式是否有过拟合的嫌疑?

2) 单应矩阵一般特征共面时使用,论文中最后对比效果所列的图片明显不是这种情况,它之所以能对齐,是因为它用这个训练的,而ORB是根据真实的场景估计的,没有共面假设,这种对比是不是在根本上就不合理?