说明:
1.此乃本人阅读论文过程中所记录的笔记,由于本人水平有限,难免会出现遗漏重点或表述不清等问题,请各位见谅。同时希望各位指出我的问题,让我发现问题所在,谢谢大家Thanks♪(・ω・)ノ。
2.有些用词根据原文翻译(或是直接用原文),可能语句不通畅。(毕竟我是一个六级考了五次的憨憨)
3.数据处理部分和结论分析部分没有加入,此处主要为了理清文章描述方法的处理流程。
待填的坑:
[32]Hyeonwoo Noh, Seunghoon Hong, and Bohyung Han. Learning deconvolution network for semantic segmentation. In ICCV, ICCV ’15, pages 1520–1528, Washington, DC, USA, 2015. IEEE Computer Society.
[34]Charles R. Qi, Hao Su, Matthias Nießner, Angela Dai, Mengyuan Yan, and Leonidas J. Guibas. Volumetric and multi-view cnns for object classification on 3d data. In CVPR, pages 5648–5656, 2016
[38]Olaf Ronneberger, Philipp Fischer, and Thomas Brox. U-net: Convolutional networks for biomedical image segmentation. In Nassir Navab, Joachim Hornegger, William M. Wells, and Alejandro F. Frangi,editors, MICCAI, pages 234–241, Cham, 2015. Springer International Publishing.
原文题目:PointCNN:Convolution On X-Transformed Points
-
摘要:点云无法直接使用卷积操作,所以提出X-transform,达到以下两个目的:
— 加强输入特征和点的联系
— 将无序点云重新排列成隐含空间的有序点云
然后使用卷积操作,本文将这套流程命名为PointCNN。 -
介绍:
传统卷积操作不适用于点云的原因:
如图i所示,传统的卷积操作可以作用于图像数据,因为图像本质是矩阵,像素的顺序是固定的,可以直接从潜在的空间结构中获取数据。
但是点云数据是点的集合,在同一区域采样的数据点的顺序可能是任意的,如图ii、iii、iv所示,卷积核为 K = [ k α , k β , k γ , k δ ] T K = [k_{\alpha},k_{\beta},k_{\gamma},k_{\delta}]^{T} K=[kα,kβ,kγ,kδ]T,直接使用卷积的结果如下
由此知,图ii和图iii的显示结果不同,但是卷积操作结果相同;图iii和图iv的显示结果相同,但是卷积操作结果不同。说明传统卷积操作无法适应点云的无序性。
本文提出利用K×K的X-transformation矩阵对K个输入点进行变换,以上图为例,操作变动如下:
其中 χ i i \chi_{ii} χii和 χ i i i \chi_{iii} χiii从不同形状的点中学习得,它们也是不同的,使得 f i i f_{ii} fii≠ f i i i f_{iii} fiii;对于 χ i i i \chi_{iii} χiii和 χ i v \chi_{iv} χiv,如果它们的学习结果满足 χ i i i \chi_{iii} χiii= χ i v × ∏ \chi_{iv}\times\prod χiv×∏ ,其中 ∏ \prod ∏是将(c,a,b,d)排列成(a,b,c,d)的排列矩阵,这样可以满足 f i i i = f i v f_{iii}=f_{iv} fiii=fiv。
(此处的思想和PointNet的T-net是相似的,都是对点云的无序性进行处理。作者也指出,虽然实验结果相对于PointNet和PointNet++有明显进步,但是结果还是不够理想,目前无法找到合适的变换满足N个点的N!种排列)
3.网络架构
PointCNN的输入:
F
1
=
{
(
p
1
,
i
,
f
1
,
i
)
:
i
=
1
,
2
,
.
.
.
,
N
1
)
}
\mathbb{F}_{1}=\{(p_{1,i},f_{1,i}):i=1,2,...,N_{1})\}
F1={(p1,i,f1,i):i=1,2,...,N1)},其中
{
p
1
,
i
:
p
1
,
i
∈
R
D
i
m
}
\{p_{1,i}:p_{1,i}\in\mathbb{R}^{Dim}\}
{p1,i:p1,i∈RDim}为点集,
{
f
1
,
i
:
f
1
,
i
∈
R
C
1
\{f_{1,i}:f_{1,i}\in\mathbb{R}^{C_{1}}
{f1,i:f1,i∈RC1为相应的特征。
输出:
F
2
=
{
(
p
2
,
i
,
f
2
,
i
)
:
i
=
1
,
2
,
.
.
.
,
N
2
)
}
\mathbb{F}_{2}=\{(p_{2,i},f_{2,i}):i=1,2,...,N_{2})\}
F2={(p2,i,f2,i):i=1,2,...,N2)},其中
{
p
2
,
i
}
\{p_{2,i}\}
{p2,i}为
{
p
1
,
i
}
\{p_{1,i}\}
{p1,i}中的具有代表性的点的集合。(
F
2
\mathbb{F}_2
F2比
F
1
\mathbb{F}_1
F1有更小的空间分辨率和更多的特征通道,即
N
2
<
N
1
N_2<N_1
N2<N1,
C
2
>
C
1
C_2>C_1
C2>C1)
注:具有代表性的点的集合
{
p
2
,
i
}
\{p_{2,i}\}
{p2,i}是由有利于信息“投影”或分类的点组成,在本文中,对于分类任务使用随机下采样方法,对于分割任务使用最远点采样方法,因为分割任务更需要均匀点分布。
X-Conv运算:
具体流程如下:
其中p为
{
p
2
,
i
}
\{p_{2,i}\}
{p2,i}中的点,
f
f
f为点p的特征,
N
\mathbb{N}
N为点p在
{
p
1
,
i
}
\{p_{1,i}\}
{p1,i}中的K个邻近点的集合,则X-Conv运算对于点p的输入为
S
=
{
(
p
i
,
f
i
)
:
p
i
∈
N
}
\mathbb{S}=\{(p_i,f_i):p_i\in\mathbb{N}\}
S={(pi,fi):pi∈N}。
S
\mathbb{S}
S可分解为K×Dim矩阵
P
=
(
p
1
,
p
2
,
.
.
.
,
p
K
)
T
P=(p_1,p_2,...,p_K)^T
P=(p1,p2,...,pK)T和
K
×
C
1
K\times C_1
K×C1矩阵
F
=
(
f
1
,
f
2
,
.
.
.
,
f
K
)
T
F=(f_1,f_2,...,f_K)^T
F=(f1,f2,...,fK)T,K表示训练卷积核。
输出特征
F
p
F_p
Fp可归结为以下公式:
F
p
=
χ
−
C
o
n
v
(
K
,
p
,
P
,
F
)
=
C
o
n
v
(
K
,
M
L
P
(
P
−
p
)
×
[
M
L
P
δ
(
P
−
p
)
,
F
]
)
F_{p}=\chi-Conv(K,p,P,F)=Conv(K,MLP(P-p)\times[MLP_{\delta}(P-p),F])
Fp=χ−Conv(K,p,P,F)=Conv(K,MLP(P−p)×[MLPδ(P−p),F])
其中
M
L
P
δ
(
.
)
MLP_{\delta}(.)
MLPδ(.)是应用于每个点上的多层感知机,类似于PointNet。
注意,此处X-Conv运算中的所有操作都是可微的,因此可以插入神经网络进行反向传播训练。
PointCNN结构:
如图a所示,一个有着两层X-Conv层的PointCNN,将所有点的特征聚合到一个点,最后添加全连接层,用于训练神经网络。
由于图a所示,由于训练样本的数目下降过快,不能进行有效训练,所以提出了如图b所示的有着更稠密连接的PointCNN。我们想在保持网络深度的同时,保持感受野的增长率,让更深层的具有代表性的点能够逐渐观察到整体形状(让X-Conv运算的最后输出能保持更多全局特征,聚合到一个点会造成特征信息丢失过多)。此处,我们不取K个邻近点作为输入,我们从K×D个邻近点中随机采样K个输入点,其中D为膨胀率。这样,感受野从K/N增长为(K×D)/N,却没有增长邻近点数目或者卷积核大小。
对于分割任务,需要高维的点输出,这可以通过使用Conv-DeConv结构[32]构建PointCNN,其中DeConv部分负责传播全局信息到高维预测(如图c所示)。注意,“Conv”和“DeConv”都是X-Conv运算。它们的唯一不同是“DeConv”层有更多的点和更少的特征,而且它的高分辨率点来自于前面的“Conv”层,遵循U-Net的设计[38]。
为了减少过拟合,在最后一个全连接层前面应用Dropout。同时,利用[34]中的“subvolume supervision”方法进一步解决过拟合问题。