RandLA-Net实现了两个核心指标:一个是利用Random_sampling进行提速,二是设计特征提取模块解决Random_sampling带来的信息丢失问题。
下图为特征提取模块示意图:由三个模块组成,分别为LocSE,Attentive Pooling,Dilated Residual Block

Local Spatial Encoding(局部空间编码)
给定点云P以及每个点的特征(例如原始RGB或中间学习的特征),此局部空间编码单元会明确嵌入所有相邻点的x-y-z坐标,从而使相应的点特征始终知道其相对位置空间位置。这使LocSE单元可以显式观察局部几何图案,有效地学习复杂的局部结构。特别地,该单元包括以下步骤:

Finding Neighbouring Points.
对于采样出的中心点,首先通过K近邻(KNN)算法收集其相邻点。
Relative Point Position Encoding
对于中心点的每个最近的K个点,我们明确编码相对点位置,如下所示:

- 一二是点的xyz位置
- ⊕是串联操作
- || ·||计算相邻点和中心点之间的欧几里得距离。
- ri 是根据冗余点位置信息进行编码的。这倾向于帮助网络学习局部特征并在实践中获得良好的性能。
Point Feature Augmentation.
对于每个相邻点 ,将编码的相对点位置与它的对应近邻点特征串联在一起,从而获得增强的特征向量。
LocSE代码解析
relative_pos_encoding函数
def relative_pos_encoding(self, xyz, neigh_idx):
neighbor_xyz = self.gather_neighbour(xyz, neigh_idx)
xyz_tile = tf.tile(tf.expand_dims(xyz, axis=2), [1, 1, tf.shape(neigh_idx)[-1], 1])
relative_xyz = xyz_tile - neighbor_xyz
relative_dis = tf.sqrt(tf.reduce_sum(tf.square(relative_xyz), axis=-1, keepdims=True))
relative_feature = tf.concat([relative_dis, relative_xyz, xyz_tile, neighbor_xyz], axis=-1)
return relative_feature
neighbor_xyz为获取的中心点的K个近邻点的xyz坐标
xyz_tile将中心点xyz进行扩维,relative_xyz算出中心点与近邻点之间的相对位置
relative_dis为中心点与近邻点之间的欧式距离
relative_feature为将中心点,近邻点,相对位置,欧氏距离全部串联起来,即完成局部空间编码

687

被折叠的 条评论
为什么被折叠?



