3.3 PointNet layer( 五 )


-> (B, N, 128) -> (B, N, )
上述模块如果能够了解清楚并能写出代码的话,基于的++网络就可以实现了 。
3.++中的一些其它问题
++ 的MSG, MRG架构 ?
上述文章主要介绍了++的SSG( scale ), 为了解决点云中密度分布不均匀的问题,作者提出了MSG(multi-scale )和MRG(multi).
下面这张图是作者论文里的图(在数据集上的实验), 测试了, SSG, MSG, MRG的性能,横坐标表示的是在预测时点云中点的数量,纵坐标表示的是准确率 。从图中可以看到, 在点的数量较多时,SSG, MRG, MSG性能相近,明显高于; 但随着点云中的点的数量下降,准确率明显下滑的有两条线,有轻微下降趋势的有四条线 。明显下滑的两条线是没有采取DP策略的 。即使是网络在采取了DP策略后,其性能在点的数量小于600也会明显高于SSG. 。由此可见,DP在解决点云密度不均匀时发挥了重要作用, 而MSG, MRG貌似显得没那么重要 ? 这里就简单介绍一下MSG的思想 。
MSG是指在每次Set 的时候, 在对某个中心点进行group操作的时候采用不同尺寸(例如0.1, 0.2, 0.4, SSG只有0.2)的半径, 来得到不同大小的局部区域,分别送到不同的网络中,最终把这些学习到的不同尺度的特征进行操作来代表当前中心点的操作 。
点云如何数据增强 ?
点云不同于图像,图像中有随机裁剪、缩放、颜色抖动等数据增强方式 。在点云里,应该如何做数据增强呢?
点云的数据增强主要包括: 随机旋转,随机平移,随机抖动等, 具体实现代码参考:
DP有什么用,是怎么实现的 ?
DP指的是在训练时随机丢弃一些输入点(DP meansinput),这样的训练方式对于预测低密度点云较为有效(相对于输入点云), 即在高密度点云中训练的模型,在低密度点云中进行预测,可以达到和训练集中旗鼓相当的效果 。具体来说,人工设置超参数p(论文中p=0.95), 从[0, p]中随机出一个值dr( ratio), 对于点云中的每一个点,随机产生一个0-1的值, 如果该值小于等于dr则表示该点被丢弃 。这里有一个细节,某些点被丢弃之后,每个batch中的点的数量就不相同了,为了解决这个问题,所有被丢掉的点使用第一个点代替,这样就维持了每个batch中点的数量相同 。具体实现代码如下(代码中的p=0.875)
def random_point_dropout(pc, max_dropout_ratio=0.875):dropout_ratio =np.random.random()*max_dropout_ratio # 0~0.875drop_idx = np.where(np.random.random((pc.shape[0]))<=dropout_ratio)[0]if len(drop_idx)>0:pc[drop_idx,:] = pc[0,:] # set to the first pointreturn pc

基于实现++的博客-CSDN博客
【3.3 PointNet layer】++详解与代码_自动驾驶小学生的博客-CSDN博客_xyz.(0, 2, 1)