DGCNN[1]主要提出了EdgeConv操作,在点云上能够进行类似CNN在图像上所进行的操作,可以适用于分类与分割任务。
EdgeConv
Graph Construction
对于点云中某点
x
i
{x_i}
xi ,利用KNN操作构造有向图
G
=
(
V
,
E
)
G = \left( {V,E} \right)
G=(V,E),其中
V
V
V代表图中各个顶点,
E
E
E代表边。如下图所示:
Graph Convolution
定义EdgeConv的核心操作为:
可以看到,对于中心点
x
i
x_i
xi与
x
j
x_j
xj,EdgeConv不但以中心点
x
i
x_i
xi作为输入,同时以衡量领域信息的
x
j
−
x
i
{x_j} - {x_i}
xj−xi作为输入,能够较好的学习到全局以及局部特征:
以上图为例,对于某个边edge,EdgeConv计算结果为:
e
i
j
m
=
h
θ
(
x
i
,
x
j
m
−
x
i
)
{e_{i{j_m}}} = {h_\theta }({x_i},{x_{{j_m}}} - {x_i})
eijm=hθ(xi,xjm−xi)
其中
h
θ
{h_\theta }
hθ即为MLP操作。
最后使用Max-pooling操作进行聚合,得到对于输入中心点
x
i
x_i
xi经过一次EdgeConv的输出
x
i
′
{x'_i}
xi′:
x
i
′
=
max
j
:
(
i
,
j
)
∈
E
e
i
j
m
{x'_i} = \mathop {\max }\limits_{j:(i,j) \in E} {e_{i{j_m}}}
xi′=j:(i,j)∈Emaxeijm
此即为对于输入
x
i
x_i
xi的一次EdgeConv操作。
Dynamic
DGCNN[1]中的dynamic体现在图graph的建立,具体表现为构造图的操作KNN,在输入点云时,即第一次EdgeConv操作时是在欧式空间中进行KNN操作,而在接下来的EdgeConv中,KNN操作都是在特征空间中进行,即对于输入点 x i x_i xi,每次EdgeConv构造的有向图G均不相同,这便是DGCNN中dynamic的含义。
Overall Architecture
通过以上的EdgeConv操作,可以构造对于点云的分类以及分割pipeline:
在源码中并没有TNet操作,同时在pooling-operation中,同时使用到了max-pooling以及avg-pooling并将两者concatenate起来,这是与文章中的不一致之处。
Experiment
使用DGCNN源码,在ModelNet40上进行分类任务的评估:
Model | Comment | sample | neighbor_k | Acc(%) |
---|---|---|---|---|
DGCNN | reported in the paper | 1024 | 20 | 92.9 |
DGCNN | reported in the paper | 2048 | 40 | 93.5 |
DGCNN | dgcnn_cls_1024.t7 | 1024 | 20 | 92.9 |
DGCNN | dgcnn_cls_2048.t7 | 2048 | 40 | 93.0 |
Reference
[1] Wang Y, Sun Y, Liu Z, et al. Dynamic graph cnn for learning on point clouds[J]. Acm Transactions On Graphics (tog), 2019, 38(5): 1-12.