点云分析
局部几何结构
适用于点云的深度网络框架
就在最近,由于简洁MLP结构的高效和可扩展性,受到了很多地关注,因此,我们不再盲目跟风。
feed-forward residual MLP network + geometric affine module
给定一组点云 P = { p i ∣ i = 1 , ⋯ , N } ∈ R N × 3 \mathcal{P}=\left\{p_{i} \mid i=1, \cdots, N\right\} \in \mathbb{R}^{N \times 3} P={pi∣i=1,⋯,N}∈RN×3, N N N 表示点云的数量, ( x , y , z ) (x, y, z) (x,y,z)表示笛卡尔坐标系下的坐标。
简单介绍下PointNet++
简单介绍下RSCNN
简单介绍下Point Transformer
整个结构用数学语言表示为:
g i = Φ pos ( A ( Φ pre ( f i , j ) , ∣ j = 1 , ⋯ , K ) ) g_{i}=\Phi_{\text {pos }}\left(\mathcal{A}\left(\Phi_{\text {pre }}\left(f_{i, j}\right), \mid j=1, \cdots, K\right)\right) gi=Φpos (A(Φpre (fi,j),∣j=1,⋯,K))
其中 Φ pre ( ⋅ ) \Phi_{\text {pre }}(\cdot) Φpre (⋅)和 Φ pos ( ⋅ ) \Phi_{\text {pos }}(\cdot) Φpos (⋅)是residual point MLP blocks:
具体而言,残差块里包含了许多一样的MLP组合(MLP ( x ) + x (x)+x (x)+x):MLP(FC)+normalization+ activation layers(重复两次)
A ( ⋅ ) \mathcal{A}(\cdot) A(⋅) 表示max-pooling
上式只表示一个阶段,可以重复 s s s次。
PointMLP有着如下优点:
在没有提前声明的情况下, s = 4 s=4 s=4,2个 Φ pre ( ⋅ ) \Phi_{\text {pre }}(\cdot) Φpre (⋅),2个 Φ pos ( ⋅ ) \Phi_{\text {pos }}(\cdot) Φpos (⋅)。选择k-nearest neighbors算法提取邻居, K = 24 K=24 K=24。
由于点云的局部区域就具有稀疏和不规则性,只使用间的MLP网络的性能并不好。不同局部区域的多个几何结构可能需要不同的提取设备,但共享的残留MLP难以实现这一点。
令 { f i , j } j = 1 , ⋯ , k ∈ \left\{f_{i, j}\right\}_{j=1, \cdots, k} \in {fi,j}j=1,⋯,k∈ R k × d \mathbb{R}^{k \times d} Rk×d表示 f i ∈ R d f_{i} \in \mathbb{R}^{d} fi∈Rd 的邻居,有 k k k个点,每个邻居点 f i , j f_{i, j} fi,j 是一个 d d d维向量。将局部相邻的点变换为:
{ f i , j } = α ⊙ { f i , j } − f i σ + ϵ + β , σ = 1 k × n × d ∑ i = 1 n ∑ j = 1 k ( f i , j − f i ) 2 , \left\{f_{i, j}\right\}=\alpha \odot \frac{\left\{f_{i, j}\right\}-f_{i}}{\sigma+\epsilon}+\beta, \quad \sigma=\sqrt{\frac{1}{k \times n \times d} \sum_{i=1}^{n} \sum_{j=1}^{k}\left(f_{i, j}-f_{i}\right)^{2}}, {fi,j}=α⊙σ+ϵ{fi,j}−fi+β,σ=k×n×d1i=1∑nj=1∑k(fi,j−fi)2,
其中 α ∈ R d \alpha \in \mathbb{R}^{d} α∈Rd, β ∈ R d \beta \in \mathbb{R}^{d} β∈Rd是可学习的参数, ⊙ \odot ⊙表示两个矩阵元素间相乘, ϵ = \epsilon= ϵ= 1 e − 5 1 e^{-5} 1e−5是一个为了数值稳定性的数。 σ \sigma σ 是系数,描述了所有局部和通道的特征差异,并保留了原始的几何特征。
全连接层参数很多,复杂度也很高,提出了bottleneck结构。我们选择将中间FC层的通道数减少 r r r倍,并增加通道数作为原始特征映射。
在PointMLP-elite中, r = 4 r=4 r=4
ModelNet40:40个类别,9843个训练模型,2468个测试模型。
Metric:class-average accuracy (mAcc)和overall accuracy (OA)
训练了300个epochs
模型的复杂度不能直接反应效能。
ScanObjectNN:真实世界中的重建模型,它包含15000个对象,这些对象分为15个类,在现实世界中有2902个唯一的对象实例。数据集中存在噪声、遮挡,选择最难的PB_T50_RS。
e p o c h s = 200 , b a t c h = 32 epochs=200, batch=32 epochs=200,batch=32,训练了四次,并将标准差记录在下表中。
类别整体精度和平均精度很相近,证明方法很鲁棒。
网络深度
Geometric Affine Module
成份消融实验
Loss landscape
ShapeNetPart:16个类别,16,881个形状,每个物体的部分为2-6个。
PointMLP 和 PointMLP-elite有着以下的区别:
ModelNet40
PyTorch + Tesla V100 GPU
epochs =300
batchsize = 32
synchronous SGD
Nesterov momentum = 0.9
weight decay = 0.0002
initial learning rate = 0.1
input point = 1024
ScanObjectNN
epochs =200
其他参数同上
ShapeNetPart
input point = 2048
range = [0.67, 1.5]
其他参数同PointNet一样
Skip connection
试着在PointNet++上加了两个skip connection,在ModelNet40上的分类精度变为92.7%。
Pre-MLP block vs. Pos-MLP block
去掉Pos-MLP block的话效果会变得不好,表明
Geometric Affine Module Applications
将Geometric Affine Module用到PointNet++上,在ModelNet40上的分类精度提高到了93.3%。
将Geometric Affine Module用到DGCNN上的效果反而变差了。
网络深度计算公式:
L = 1 + ∑ i = 1 4 ( 1 + 2 × Pre i + 2 × Pos i ) + 3 L=1+\sum_{i=1}^{4}\left(1+2 \times \operatorname{Pre}_{i}+2 \times \operatorname{Pos}_{i}\right)+3 L=1+i=1∑4(1+2×Prei+2×Posi)+3
Pre i \operatorname{Pre}_{i} Prei表示 Φ pre \Phi_{\text {pre }} Φpre 的重复数量, Pos i \operatorname{Pos}_{i} Posi表示 Φ pos \Phi_{\text {pos }} Φpos 的重复数量,不算Batch Normalization和activation functions,每个块里有两个MLP层,最终的网络深度配置如下图所示。