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
andSVM
(这个估计要看书才会)triplet loss
✅
一些参考链接:
如何理解各种Loss ✅ 这个写的非常好
总而言之,我们通过NetVLAD
将PointNet
得到的 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:
\(l_2(\Vert v \Vert_2)\)就是欧几里得范数,相比
L1
不够鲁邦,无法输出稀疏数据。\[l_2 = \sqrt{\sum \left( x_i^2\right)} \]
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}\}\)
这里max
用来选择与\(P_a\)最接近的\(\{P_{neg}\}\),用来学习。(也就是说,要让最不相似的最远?)
upt, 0323: 根据我在NetVLAD
中写的,现在应该很好理解了,可以参看那篇链接Blog写的非常好。
这里的\(\max\),其实就是一种lazy。我们选择和anchor Pointcloud最相似的\(\{P_{neg}\}\)中的点云进行学习。 这样可以得到最 discriminative 的结果。
其中\(\alpha\)代表的是阈值,也就是\(P_{neg_j}\)和\(anchor\) 有多不相似。更为标准的可以理解为:
所以,我们就是在学习,如何让相似的距离尽可能小,让不相似的距离尽可能大(大于阈值\(\alpha\))。
Lazy quadruplet:
quadruplet引入了新的\(P_{neg_*}\),他是和整个训练tuple都不相似的点云。
将其引入,我个人理解是避免过度学习,使得\(P_{neg_j}\)和与他完全不相似的\(P_{neg_*}\)被学习到一类去了。
所以Lazy quadruplet形式如下:
其中\(\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
这里的证明需要我们完全了解了 VLAD 和 NetVLAD。