最近学习了jiaxin老师的USIP论文,该论文提出一种使用无监督方法提取特征点的网络。论文中设计了特征点提取网络detector、和特征描述网络descriptor。
我的尝试
小编尝试利用其训练好的detector做了一下evaluation。由于网络需使用GPU,所以小编尝试在google colab上运行得到关键点,并通过修改代码保存其输入的原点云,在本地使用jupyter notebook进行可视化。
USIP实验简介
USIP实验中训练了3个网络,分别针对outdoor Lidars, RGB-D scans and object models三种测试场景,对应使用的数据集分别是Oxford 、RGB-D reconstruction dataset和ModelNet40 。
由于oxford数据集大小超出了我google drive的容量,我选择利用作者提供的针对modelnet数据集训练好的模型,进行关键点提取.
USIP简介
(已经学习过USIP论文的可以跳过。)
这是USIP detector的整体框架。思路很简单:输入点云两份,一个是原点云,一个是经过旋转平移变换的点云,通过FPN网络得到关键点Q和每个关键点的不确定程度Σ,通过最小化两个Loss: LC和LP来训练网络。其中,LC使得两个输入点云提取的关键点尽可能一致,LP使得关键点与原点云的距离尽可能接近。
其FPN网络的具体实现,根据下面的示意图,分为几个步骤:
-
结点初始化:X是原点云,S是使用FPS随机sample的结点,共M个结点。
-
Point_to_node clustering:对点云中的每一个点,选择其最近的结点,得到M个“聚类”,每个聚类点数不同,但所有点都有归属。(如图1处,每个矩形里面是一个“类”)
-
局部中心化1:每个聚类中的点坐标减去结点坐标。
-
提特征1:M个聚类分别通过PointNet,得到M个Local Feature G(M×C1)
-
KNN:注意和第1步不同,在特征空间分别对M个向量求KNN(M×K×C1)
-
局部中心化2:对每个向量,其K个近邻分别与其相减
-
提特征2:M个聚类分别通过PointNet,得到M个Local Feature H(M×C2)
-
估计关键点坐标和不确定程度:通过MLP降维后得到关键点坐标矩阵Q(M×3)和不确定程度向量Σ(M×1)
-
去中心化:估计的关键点坐标加上对应的node坐标
值得注意的是,结点数M即为提取的关键点数,该参数与第5步KNN层的参数K都会影响关键点提取的感受野。
USIP evaluation
1.数据准备
USIP的源码GitHub地址: