Graph Attention Convolution for Point Cloud Segmentation
论文地址
自己尝试实现的pytorch版本:https://github.com/yanx27/GACNet
(真正的版本还要等原作者开源)
一. 论文简介
1.1 摘要
本文(CVPR2019刚录入)介绍了一种能在点云上端到端进行分割和分类的深度网络,其主要贡献点在于Graph Attention Convolution,其主要通过建立每个点与周围点的图结构,并通过引入注意力机制计算中心点与每一个邻接点的边缘权重,从而使得网络能在分割的边缘部分取得更好的效果。
如图可以看出,点1与五个点相邻接,因此点1上的特征由五个邻接点的特征与它自己本身的特征加权得到。可以看出,通过神经网络的训练,不同类别上的相邻点的边缘权重会比较小,相同类别的邻接边缘权重会比较大。
从分割结果也可以看出,如果去掉这样的结构(图三),在边缘部分就会分割得不够准确。
1.2 相关工作
Pointnet系列
- 如果不知道pointnet系列的可以查看三维深度学习之pointnet系列详解。
图卷积网络系列
- 如果不知道GCN系列的,这里有很全的学习资料。
- 除了GCN,这篇文章的idea也比较像 Edge-Conditioned Convolution,只是将固定的边的权重变为了用Attention去求,图的中心点由体素的中心改为了学习pointnet++随机采样。
二. 模型结构
2.1 Graph attention convolution
- 考虑一个图 ( V , E ) (V,E) (V,E),其中 V V V和 E E E是图的定点vertex和边缘edge,有 V ∈ 1 , 2 , . . . . N V \in {1,2,....N} V∈1,2,....N和 E ∈ ∣ V ∣ × ∣ V ∣ E\in |V|\times |V| E∈∣V∣×∣V∣,我们可以用 N ( i ) N(i) N(i)来代表定点i的邻结点。
- 给定一组点云
P
=
{
p
1
,
p
2
,
.
.
.
,
p
N
}
∈
R
3
P=\{p_1,p_2,...,p_N\}\in R^3
P={p1,p2,...,pN}∈R3,可以用
h = { h 1 , h 2 , . . . , h N } ∈ R F h = \{h_1,h_2,...,h_N\}\in R^F h={h1,h2,...,hN}∈RF来代表每个点的特征,其中 F F F为特征的维度。 - 对于每一个定点
i
i
i,其与邻接点的权重可以这样计算:
a ~ i j = α ( Δ p i j , Δ h i j ) = M L P ( [ Δ p i j ∣ ∣ Δ h i j ] ) , j ∈ N ( i ) \tilde{a}_{ij} = \alpha (\Delta p_{ij},\Delta h_{ij}) = MLP([\Delta p_{ij}||\Delta h_{ij}]),j\in N(i) a~ij=α(Δpij,Δhij)=MLP([Δpij∣∣Δhij]),j∈N(i)其中 Δ p i j = p j − p i \Delta p_{ij} = p_j-pi Δpij=pj−pi, Δ h i j = M g ( h j ) − M g ( h i ) \Delta h_{ij} = M_g(h_j) - M_g(h_i) Δhij=Mg(hj)−Mg(hi), M g M_g Mg为一个维度F到K的映射函数(论文中是MLP), ∣ ∣ || ∣∣为拼接操作。 - a ~ i j \tilde{a}_{ij} a~ij可以表示K个通道上的特征 [ a ~ i j , 1 , a ~ i j , 2 , . . . , a ~ i j , K ] [\tilde{a}_{ij,1},\tilde{a}_{ij,2},...,\tilde{a}_{ij,K}] [a~ij,1,a~ij,2,...,a~ij,K],最后将其对所有的 j j j做一个Softmax的操作使得所有的权重的和为1. α i j , k = e x p ( a ~ i j , k ) ∑ l ∈ N ( i ) e x p ( a ~ i j , k ) ) \alpha_{ij,k} = \frac{exp(\tilde{a}_{ij,k})}{\sum_{l\in N(i)}exp(\tilde{a}_{ij,k}))} αij,k=∑l∈N(i)exp(a~ij,k))exp(a~ij,k)这代表了第j个点对于第i个点在第k个通道上的权重值。
- 所以最后其可以表示成 h i ′ = ∑ l ∈ N ( i ) α i j ∗ M g ( h j ) + b i h'_i = \sum_{l\in N(i)} \alpha_{ij} * M_g(h_j)+b_i hi′=l∈N(i)∑αij∗Mg(hj)+bi其中 ∗ * ∗代表逐项相乘
- 最后其总体的流程可以如下图所示,先计算
Δ
h
\Delta h
Δh和
Δ
p
\Delta p
Δp,再通过拼接这两个向量并反向传播训练得其相互的权重,最后softmax归一化得到最终结果。其具体的代码实现可以参考Graph Attention Networks网络结构+代码
2.2 函数逼近
与pointnet一样,文章证明了该模型可以在Hausdorff空间上逼近任意的连续函数。(这里不细讲)
2.3 总体结构
这张图讲得很清楚,与pointnet++相似,GACNet先在点云中随机的采样(同pointnet++中的Sampling),再划去一个k为半径的区域(同pointnet++中的ball query)随机采样相邻点,最后通过这样的采样点计算attention的权重。最后通过权重加权计算好每个点的特征以后再通过Graph Pooling(其实就是max或者mean池化),进行点云的下采样。在上采样过程中都与pointnet++类似,采用插值+直连的方法。
三. 实验结果
其在室内和室外两个场景的数据集上进行了分割的实验,其中室内的实验结构如下:(不知道为什么没和pointnet++比)
最后作者在论文中说会公布源码,希望早日公开。