零、概要
- 论文: SampleNet: Differentiable Point Cloud Sampling
- tag:
CVPR 2020
;Sample
,Classification
,Registration
,Reconstruction
- 代码: https://github.com/itailang/SampleNet
- 作者: Itai Lang, Asaf Manor, Shai Avidan
- 机构: Tel Aviv University
- 笔者整理了一个最近几年150多篇点云的论文列表,欢迎大家一块学习交流。
0.0 摘要
有越来越多的任务直接利用点云数据,随着点云尺寸的增加,这些任务的计算需求也会增加。一种可能的解决方案是首先对点云进行采样。典型的采样算法,比如FPS(farthest point sampling),但不考虑接下来的任务。最近的一项研究表明,学习一种task-specific的采样,可以显著提升结果。然而,上述研究提出的技术并没有处理采样操作的不可导性,而是提供了一种解决办法。
作者提出了一种新的可微松弛方法用于点云的采样,它将采样点近似(approximate)为原始输入点云中的点的混合。论文中的近似方案(approximation)在分类和几何重建应用中得到了一致的好结果,同时表明了所提出的采样方法可以作为点云配准(点云配准是一项具有挑战性的任务,因为采样必须在两个不同的点云上保持一致)网络的前端。在所有的情况下,作者的办法都优于现有的非学习和基于学习的采样方法。
一、论文的出发点和贡献
近年来,三维传感设备的流行度不断提高,这些设备通常以点云的形式捕捉数据。但当面对大的点云数据时,点云分类、配准、重建等任务为了提高计算效率,需要对点云进行下采样操作。常用的下采样算法是FPS(farthest point sampling),它的目标是实现输入的最大覆盖。FPS是与任务无关的,它最大限度的减少了几何误差,但不考虑采样后点云的后续处理。
最近的一个工作Learning to Sample提出了一种基于学习的面向任务的下采样方法,相比于非学习的下采样方法(FPS, 随机采样等),显著提升了分类、配准等应用的性能。但此方法中的匹配操作时不可微分的,不能通过神经网络传播梯度,从而导致网络在训练阶段和测试阶段性能的差异。
为了解决上述问题,作者提出了SampleNet,它实现了一种可微分的方法来近似点云采样;相比于非学习和基于学习的采样方案,SampleNet提升了分类和重建任务的性能;此外,作者还研究了一种新的基于采样点云的配准方法,优于其它的采样方法。
二、论文的方法
2.1 网络架构
SampleNet的网络架构如Figure 3的紫色虚线框所示,它的输入是点云 P ∈ R n × 3 P \in \mathbb R^{n \times 3} P∈Rn×3,输出是下采样后的点云 R ∈ R m × 3 R \in \mathbb R^{m \times 3} R∈Rm×3。SampleNet包括两部分: 用于simplify的PointNet类网络和用于match的Projection网络。
PointNet类网络: MLP(64, 64, 64, 128, bottleneck) -> Pool(1 x bottleneck) -> FC(128, 128, 3*m) -> Reshape(m, 3)
输入点云 P ∈ R n × 3 P \in \mathbb R^{n \times 3} P∈Rn×3经过PointNet类网络,输出simlified的点云 Q ∈ R m × 3 Q \in \mathbb R^{m \times 3} Q∈Rm×3,至此,基本是Learning to Sample的方法。这里输出的 Q Q Q表示的3维点云并不是输入点云中的点,为了实现采样后的点云是输入点云中的点,同时兼顾训练时的可导性,作者提出了一个折中的策略,在原始输入点云 P P P中寻找每个 q ∈ Q q \in \mathbb Q q∈Q的K近邻,并根据距离 q q q的距离,对每个K紧邻点 p i p_i pi赋予权重,求加权和表示近似的采样点:
r = Σ p i ∈ N P ( q ) w i p i , w i = e − d i 2 t 2 Σ j ∈ N P ( q ) e − d j 2 t 2 r = \Sigma_{p_i \in N_P(q)} w_ip_i, w_i = \frac{e^{-\frac{d_i^2}{t^2}}}{\Sigma_{j \in N_P(q)}e^{-\frac{d_j^2}{t^2}}} r=Σpi∈NP(q)wipi,wi=Σj∈NP(q)e−t2dj2e−t2di2
其中, N P ( q ) N_P(q) NP(q)表示在点云 P P P中 q q q的K近邻点的索引, d i = ∣ ∣ q − p i ∣ ∣ 2 d_i = ||q - p_i||_2 di=∣∣q−pi∣∣2, t t t称作温度系数(temperature coeffiicient),控制着 w w w的分布的形状。当 t − > 0 t -> 0 t−>0时,该分布收敛到的克罗内克 δ \delta δ函数(Kronecker delta function),即表示距离 q q q的最近点。这里刚开始我不太理解,因为对softmax的特性不太了解,做了几个实验后,发现当t->0时,分布收敛到克罗内克 δ \delta δ函数。
Project的过程如Figure 2所示。
另外,论文中也介绍了progressive sampling网络,即考虑不同数量的采样点,如2, 4, 8, …, 1024,在训练时不同数量采样点的loss都参与训练。这样支持不同数量采样点的下采样操作。
2.2 损失函数
如何设计损失函数,使得经过SampleNet输出的m个点表示采样点呢 ?
作者这里采用了3个损失函数: simplify loss, project loss和task loss。即,
L t o t a l s a m p = L t a s k ( R ) + α L s i m p l i f y ( Q , P ) + λ L p r o j e c t L_{total}^{samp} = L_{task}(R) + \alpha L_{simplify}(Q, P) + \lambda L_{project} Ltotalsamp=Ltask(R)+αLsimplify(Q,P)+λLproject
-
simplify loss
Simplify Loss的目的是使simplified点云 Q Q Q与输入点云比较近;也就是说, Q Q Q中每一个点都应该在 P P P上有一个接近点,反之亦然。
设 L a ( X , Y ) = 1 ∣ X ∣ Σ x ∈ X min y ∈ Y ∣ ∣ x − y ∣ ∣ 2 2 L_a(X, Y) = \frac{1}{|X|}\Sigma_{x \in X}\min_{y \in Y} ||x-y||_2^2 La(X,Y)=∣X∣1Σx∈Xminy∈Y∣∣x−y∣∣22, L m ( X , Y ) = max x ∈ X min y ∈ Y ∣ ∣ x − y ∣ ∣ 2 2 L_m(X, Y) = \max_{x \in X} \min_{y \in Y} ||x-y||_2^2 Lm(X,Y)=maxx∈Xminy∈Y∣∣x−y∣∣22,则
L s i m p l i f y ( Q , P ) = L a ( Q , P ) + β L m ( Q , P ) + ( γ + δ ∣ Q ∣ ) L a ( P , Q ) L_{simplify}(Q, P) = L_a(Q, P) + \beta L_m(Q, P) + (\gamma + \delta|Q|)L_a(P, Q) Lsimplify(Q,P)=La(Q,P)+βLm(Q,P)+(γ+δ∣Q∣)La(P,Q)
-
project loss
作者希望加权点 r r r能够近似 P P P中最近邻点,通过观察得知,当 t − > 0 t -> 0 t−>0时,满足要求,因此
L p r o j e c t = t 2 L_{project} = t^2 Lproject=t2
-
task loss
SampleNet的输出 R R R被输入到任务中(task), L t a s k L_{task} Ltask优化,它是为了保持采样点云 R R R在任务中的性能, L t a s k L_{task} Ltask的形式与任务有关。
对于Progressive SampleNet,其Loss为
L t o t a l p r o g = Σ c ∈ C s ( L t a s k ( R c ) + α L s i m p l i f y ( Q c , P ) ) + λ L p r o j e c t L_{total}^{prog} = \Sigma_{c \in C_s}(L_{task}(R_c) + \alpha L_{simplify}(Q_c, P)) + \lambda L_{project} Ltotalprog=Σc∈Cs(Ltask(Rc)+αLsimplify(Qc,P))+λLproject
C s C_s Cs是训练时不同采样点数量的种类,即,如果(256, 512, 1024),则 C s = 3 C_s = 3 Cs=3。
2.3 SampleNet的训练和测试
SampleNet的训练有些特殊,因为它是面向task设计的下采样方法,因此在训练SampleNet之前,先训练task网络。训练流程如下:
- 训练task网络,保存参数
- 训练SampleNet + task网络,但task网络的模型参数从训练好的模型载入,而且在训练过程中,此训练参数是冻结的(frozen),保存SampleNet + task网络的参数。
SampleNet的测试和训练时不同的,在训练时对于 R R R中的点 r r r是 p i ∈ P p_i \in P pi∈P的加权和,在测试时 r r r是 P P P中的最近邻点。
三、论文的实验
3.1 点云分类
-
分类性能
数据集采用了ModelNet40,训练时使用了1024个点,分类网络基于PointNet。分类结果如Figure 5所示,横坐标是采样率1024 / m, m表示采样点的数量。FPS是任务无关的,因此随着采样率的增加,精度会大大降低。S-NET优于FPS,SampleNet优于S-NET。
-
simplified points, softly projected points和sampled points
作者基于SampleNet-Progressive,比较了simplified points, softly projected points和sampled points作为PointNet输入时的分类性能,可以看到simplified points在采样率低于16时性能低于softly projected points,在采样率高于16时性能高于softly projected points。而softly projected points和sampled points的方法比较相似,证明了作者之前提到的设想。
-
Temperature profile
论文中研究了温度曲线(temperature profile),即温度系数(temperature coefficient) t 2 t^2 t2对分类性能的影响。作者比较了四种温度曲线: linear rectified, exponential, constant和learned,如Figure 8所示,实验结果如Table 1所示,linear rectified和exponential的性能与learned类似,constant曲线导致性能的严重下降,甚至比FPS还要低。
3.2 点云配准
数据集选用的ModelNet40的Car类,配准网络采用的是PCRNet。要注意的是,在训练SampleNet时,source和template使用了同样的采样。配准性能的指标采用了MRE(mean rotation error)。实验结果如Figure 9所示,基于SampleNet的采样误差明显低于FPS和Random采样;可视化结果如Figure 10所示,FPS采样的点是均匀的,而SampleNet采样的点位于具有语义特征的形状处。
3.3 点云重建
这个任务不熟悉,暂略。
四、对论文的想法
- 缺点:
- PointNet在训练时,对点云没有做random dropout,这样对下采样的对比是不公平的。如果增加了random dropout,FPS的性能应该不会这么差了。
- 仅基于PointNet,比较了不同下采样方法的性能,而且数据集只使用了ModelNet,实验不充分。
- 创新比较小,在论文中引入了Project操作,而且此操作也不算创新,在PointNet++的上采样里也有类似的操作。
- 基于task的网络训练SampleNet,影响了task的上限。
- 优点:
- Project loss L p r o j e c t = t 2 L_{project} = t^2 Lproject=t2: 这个观察很敏锐。
- Progressive 训练,支持不同数量采样点的下采样。