PointNetVLAD 论文笔记

Abstract

Unlike its image based counterpart, point cloud based retrieval for place recognition has remained as an unexplored and unsolved problem. This is largely due to the difficulty in extracting local feature descriptors from a point cloud that can subsequently be encoded into a global de-scriptor for the retrieval task. In this paper, we propose the PointNetVLAD where we leverage on(利用) the recent success of deep networks to solve point cloud based retrieval for place recognition. Specifically, our PointNetVLAD is a combi-nation/modification of the existing PointNet and NetVLAD, which allows end-to-end training and inference to extract the global descriptor from a given 3D point cloud. Fur-thermore, we propose the “lazy triplet and quadruplet” loss functions that can achieve more discriminative and gener-alizable global descriptors to tackle(处理,解决) the retrieval task. We create benchmark datasets for point cloud based retrieval for place recognition, and the experimental results on these datasets show the feasibility of our PointNetVLAD. Our code and datasets are publicly available on the project web-site

点云检索的难点在于如何提取提取一个可以被编码为用于检索任务的全局描述符的局部特征描述符(有一点绕)。

本文提出了什么呢?

  • 基于PointNet的深度学习网络
  • lazy triplet and quadruplet loss function.

Term

LiDAR (Light Detection and Ranging) 激光雷达

SfM (Structure-from-Motion) 动态结构

circumvent 避开

benchmark datasets 基准数据集

\(\mathcal{M}\) 固定框架下的3D数据库。

AOC Area of coverage 覆盖区域

进一步定义将\(\mathcal{M}\)分解为\(M\)个子图。

那么\(\mathcal{M} = \cup_{i=1}^{M} m_i | AOC(m_i) \approx AOC(m_j)\).

并且我们希望子图\(m_i\)是比较小的,满足\(|m_i| \ll |\mathcal{M}|\)

\(\mathcal{G}(\cdot)\) 下采样,但是实际上作者提前处理了。下采样之后回保证子图点云点数一样。

\(f(\cdot)\) 是对于一个给定的点云\(\bar{p}\)将其映射为固定大小的全剧描述符变量。

Problem Definition

Given a query 3D point cloud denoted as \(q\), where \(\verb|AOC|(q) \approx \verb|AOC|(m_i)\) and \(|\mathcal{G}(q)|= |\mathcal{G}(m_i)|\) , out goal is to retrieve the submap \(m_*\) from the database \(\mathcal{M}\) that is structurally most similar to \(q\).

​ 其实就是将点云映射成某个\(m\)维向量,然后\(\text{KNN}\)去找就好了。

流程

PointNet

这部分先略过,因为我们专门有PointNet的文章。只需要知道

NetVLAD(要反复读)

需要补充很多知识点,比如:

  • NetVLAD
  • Hinge Loss and SVM (这个估计要看书才会)
  • triplet loss

一些参考链接:

NetVLAD 笔记

NetVLAD 知乎

如何理解各种Loss ✅ 这个写的非常好

总而言之,我们通过NetVLADPointNet得到的 local descriptors 转化为一个\(D\times K\)的全局向量。

有一个问题,为什么我们要进行转化呢

但是考虑到\(D\times K\)维度太高了,所以我们用 full connected layer降维,最后用L2 Normalized产生最终的全局描述符(\(f(P) \in \R ^ {\mathcal{O}} | \mathcal{O} \ll (D\times K)\))。

但是仍然有几个问题:

  • full connected layer 为什么可以降维,如何实现的?(应该是看论文)
  • 什么是L2-Normalized,那么L1-Norm存在吗?这里为什么要用?解决了什么.

About L2 Normalization Link:

  1. Kaggle, 并不是很好写的,但是对比介绍很详细
  2. 知乎, 写的很好
  3. 带一点代码的

\(l_2(\Vert v \Vert_2)\)就是欧几里得范数,相比L1不够鲁邦,无法输出稀疏数据。

\[l_2 = \sqrt{\sum \left( x_i^2\right)} \]

Metric Learning

什么是Metric Learning ?

知乎🔗

Metric Learning定义

对于训练集:

\[T = \{(x_i, y_i)\}_{i=1}^m \]

其中\(x\)表示样本,\(y\)表示label。 metric learning的目标就是学习一个变换函数\(L\)把数据点从原始的向量空间映射到一个新的向量空间,在新的向量空间里相似点的距离更近,非相似点的距离更远,度量更符合任务要求。

符号

Symbol Explain
\(P_a\) Anchor Point Cloud
\(P_{pos}\) 在结构上与锚相似的点云
\(\{P_{neg}\}\) 一个结构上与锚不相似的点云集合
\(\delta_{pos}\) \(d(f(P_a), f(P_{pos}))\) --- need to minimize
\(\delta_{neg_j}\) \(d(f(P_a), f(P_{neg_j}))\) --- need to maximize
\(\mathcal{T}\) \((P_a, P_{pos}, \{P_{neg}\})\), training tuples.

Lazy triplet:

最大化 \(f(P_a)\) and the global descriptor vector of the closest negative in \(\{P_{neg}\}\)

\[\mathcal{L}_{lazyTrip}(\mathcal{T}) = \max \limits_{j}([\alpha + \delta_{pos} - \delta_{neg_j}]_+) \]

这里max用来选择与\(P_a\)最接近的\(\{P_{neg}\}\),用来学习。(也就是说,要让最不相似的最远?)

upt, 0323: 根据我在NetVLAD中写的,现在应该很好理解了,可以参看那篇链接Blog写的非常好。

这里的\(\max\)其实就是一种lazy。我们选择和anchor Pointcloud最相似的\(\{P_{neg}\}\)中的点云进行学习。 这样可以得到最 discriminative 的结果。

其中\(\alpha\)代表的是阈值,也就是\(P_{neg_j}\)\(anchor\) 有多不相似。更为标准的可以理解为:

\[(\alpha - \delta_{neg_j}) + \delta_{pos} \]

所以,我们就是在学习,如何让相似的距离尽可能小,让不相似的距离尽可能大(大于阈值\(\alpha\))。

Lazy quadruplet:

quadruplet引入了新的\(P_{neg_*}\),他是和整个训练tuple都不相似的点云。

将其引入,我个人理解是避免过度学习,使得\(P_{neg_j}\)和与他完全不相似的\(P_{neg_*}\)被学习到一类去了。

所以Lazy quadruplet形式如下:

\[\begin{array}{ll} \mathcal{L}_{lazyQuad}(\mathcal{T}, P_{neg_*}) &= \max \limits_{j} ([\alpha+\delta_{pos} - \delta_{neg_j}]_+) \\ &+\max \limits_{k}([\beta + \delta_{pos} - \delta_{neg_k^*}]_+)\\ \end{array} \]

其中\(\alpha, \beta\)都是阈值,我们要让他们到距离都尽可能的远,其中\(P_{neg_*}\)是随机选择的。(关于max的解释,在Lazy triplets 中介绍了。

关于Lazy or No lazy的区别:

原文中说,no lazy 就是$\max $ 和 $\sum $ 的替换。

替换之后,不但可以降低计算开销,并且得到的函数\(f\)能更准确,会获得更好的点云检索结果。

Permutation Invariant

Lemma 1 NetVLAD is a symmetric function

这里的证明需要我们完全了解了 VLADNetVLAD

数据处理和结果分析

posted @ 2022-03-25 22:22  Last_Whisper  阅读(475)  评论(0编辑  收藏  举报