LDGCN: Linked Dynamic Graph CNN Learning on PointCloud via Linking Hierarchical Features
南方科技大学
代码链接https://github.com/KuangenZhang/ldgcnn
本文是基于DGCNN和PointNet进行改进之后的工作,主要是用于点云特征提取任务,可以很方便的扩展到点云分类和点云分割任务。主要工作就是在DGCNN的基础上加了不同层之间的skip connections,作者称之为"link",使得点云分类精度有了0.7% 的提升,而且由于去掉了点云变换网络,速度比DGCNN更快了。
现有的点云分类任务上精度最好的网络是DGCNN(1024个点,不使用额外的法向量信息等前提下),其主要的问题是:
- DGCNN依赖于transformation network对点云进行预处理(延续了pointnet的思想)但是这个transformation network使得网络的size翻倍,参数量太大
- Besides, the deep features and their neighbors may be too similar to provide valuable edge vectors.
本文在DGCNN的基础上,将dynamic graph的不同level 之间的特征进行级联,以此捕获丰富的边缘向量。
不同于pointnet,为了捕获局部特征,使用KNN进行邻域搜索,然后用MLP对邻域内的点特征进行聚合提取。
为了使得网络能够适应点云分类和点云分割的任务,作者认为网络的分类支以及分割支应该满足:
- Permutation invariance (排列不变性),因为点云是无序的,对不同的输入顺序应当有相同的输出
- Transformation invariance(变换不变性),对一个点云进行任意旋转平移,其结果应当是不变的
- Extracting local features(局部特征), 局部特征是点与其邻居之间的关系,这对于点云识别的成功至关重要。 因此需要学习局部特征,而不是分别处理每个点(点名pointnet和pointnet++)
下面看看LDGCNN是怎样实现的:
Graph 初始化:
We do not construct fully connected edges for the pointcloud because it consumes large memory
这里使用了KNN进行最近邻搜索,然后在邻域内建立 locally directed graph:
左边就是一个local graph
在图卷积的每一个level,都进行KNN搜索并更新边的链接关系,这样就可以在both Euclidean space and feature space 建立local graph
特征提取:
After constructing the local graph, we extract local graph features based on the edge convolutional layer
对每一个点pi,输出其local graph 的local feature :
l
i
=
f
e
(
G
(
p
i
,
e
i
)
)
=
max
{
h
(
p
i
,
e
i
1
)
,
h
(
p
i
,
e
i
2
)
,
…
,
h
(
p
i
,
e
i
K
)
}
\begin{aligned} l_{i} &=f_{e}\left(G\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}}\right)\right) \\ &=\max \left\{\boldsymbol{h}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{1}}\right), \boldsymbol{h}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{2}}\right), \ldots, \boldsymbol{h}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{\boldsymbol{K}}}\right)\right\} \end{aligned}
li=fe(G(pi,ei))=max{h(pi,ei1),h(pi,ei2),…,h(pi,eiK)}
h
(
p
i
,
e
i
j
)
\boldsymbol{h}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{j}}\right)
h(pi,eij)是点pi的边向量
e
i
j
e_{i_{j}}
eij的hidden feature vector.
max操作是顺序不变的
上面hidden feature vector的计算方法:
h
c
′
(
p
i
,
e
i
j
)
=
∑
c
=
1
C
w
c
′
c
i
c
+
w
c
′
(
c
+
C
)
(
p
i
j
c
−
p
i
c
)
+
b
c
′
h
(
p
i
,
e
i
j
)
=
(
h
1
(
p
i
,
e
i
j
)
,
h
2
(
p
i
,
e
i
j
)
,
…
,
h
C
′
(
p
i
,
e
i
j
)
)
\begin{aligned} h_{c^{\prime}}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{j}}\right) &=\sum_{c=1}^{C} w_{c^{\prime}} c_{i c}+w_{c^{\prime}(c+C)}\left(p_{i_{j} c}-p_{i c}\right)+b_{c^{\prime}} \\ \boldsymbol{h}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{j}}\right) &=\left(h_{1}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{j}}\right), h_{2}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{j}}\right), \ldots, h_{C^{\prime}}\left(\boldsymbol{p}_{\boldsymbol{i}}, \boldsymbol{e}_{\boldsymbol{i}_{j}}\right)\right) \end{aligned}
hc′(pi,eij)h(pi,eij)=c=1∑Cwc′cic+wc′(c+C)(pijc−pic)+bc′=(h1(pi,eij),h2(pi,eij),…,hC′(pi,eij))
wc′c,wc′(c+C), 以及bc′是MLP中需要学习的权重.
保持变换不变性
pointnet和DGCNN中都使了变换网络对点云进行对齐,但是本文没有使用.作者通过数学证明得出结论:MLP可以近似的起到变换网络的作用,在训练时注意使用旋转变换的数据扩增方式即可.
对点云进行变换可以表示为:
P
offset
=
[
x
1
y
1
z
1
x
2
y
2
z
2
⋮
⋮
⋮
x
n
y
n
z
n
]
[
r
11
r
12
r
13
r
21
r
22
r
23
r
31
r
32
r
33
]
\boldsymbol{P}_{\text {offset }}=\left[\begin{array}{ccc} x_{1} & y_{1} & z_{1} \\ x_{2} & y_{2} & z_{2} \\ \vdots & \vdots & \vdots \\ x_{n} & y_{n} & z_{n} \end{array}\right]\left[\begin{array}{lll} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{array}\right]
Poffset =⎣⎢⎢⎢⎡x1x2⋮xny1y2⋮ynz1z2⋮zn⎦⎥⎥⎥⎤⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤
而MLP的计算过程可以表示为:
h
(
P
)
=
[
x
1
y
1
z
1
x
2
y
2
z
2
⋮
⋮
⋮
x
n
y
n
z
n
]
[
w
11
w
12
⋯
w
1
C
′
w
21
w
22
⋯
w
2
C
′
w
31
w
32
⋯
w
3
C
′
]
+
[
b
1
b
2
⋯
b
C
′
]
\begin{aligned} \boldsymbol{h}(\boldsymbol{P}) &=\left[\begin{array}{ccc} x_{1} & y_{1} & z_{1} \\ x_{2} & y_{2} & z_{2} \\ \vdots & \vdots & \vdots \\ x_{n} & y_{n} & z_{n} \end{array}\right]\left[\begin{array}{llll} w_{11} & w_{12} & \cdots & w_{1 C^{\prime}} \\ w_{21} & w_{22} & \cdots & w_{2 C^{\prime}} \\ w_{31} & w_{32} & \cdots & w_{3 C^{\prime}} \end{array}\right] \\ &+\left[\begin{array}{llll} b_{1} & b_{2} & \cdots & b_{C^{\prime}} \end{array}\right] \end{aligned}
h(P)=⎣⎢⎢⎢⎡x1x2⋮xny1y2⋮ynz1z2⋮zn⎦⎥⎥⎥⎤⎣⎡w11w21w31w12w22w32⋯⋯⋯w1C′w2C′w3C′⎦⎤+[b1b2⋯bC′]
这里的C’是MLP的通道数.
二者的计算过程是非常i相似的,不同之处在于
The difference is that the transformation network canestimate a specific matrix for each point cloud, whereas theMLP is static for all point cloud.
但是只要MLP的通道数是不少于64的,一个通道意味着将点云进行了一次变换,这使网络近似为旋转不变的.
we also rotate, shift, and scale the input point cloud ran-domly and add random noise on each point. After augmentingthe training data, the network can learn rotation and translationinvariant features
网络结构
- 将DGCNN的不同level的特征进行了级联,原因:
- avoid vanishing gradientproblem for the deep neural network
- learn new features by using current indices to extractedges from previous features
- get informative edge vectors
- 去掉了transformation network.
实验分析:
点云分类结果:
优于DGCNN
点云分割结果:
没有明显的优势,comparable
时间复杂度
比pointnet、pointnet++慢,比DGCNN快
可视化
对提取的特征T-SNE降维后可视化:
最后,作者在训练时使用了freezing 的方法(与DGCNN的相同),即:
After training the whole network,I freeze the feature extractor and retrain the classifier.