【论文阅读+代码复现】GSPN:Generative Shape Proposal Network for 3D Instance Segmentation in Point Cloud

发布时间:2026/7/28 18:02:02
【论文阅读+代码复现】GSPN:Generative Shape Proposal Network for 3D Instance Segmentation in Point Cloud Brief这是一篇CVPR18上的文章虽然表示是说的实例分割但是听同组的同学的推荐也可以做定位方面的事情因此加入到了paperlist。AbstructInstead of treating object proposal as a direct bounding box regression problem, we take an analysis-by-synthesis strategy and generate proposals by reconstructing shapes from noisy observations in a scene。通过综合分析的方式获得proposals。是不是可以取代anchor_based的方法。1 introductionIn contrast, we take a different perspective for object proposal which emphasizes more on the geometric understanding.**文章的亮点就在于从场景中分析出candidate objects。好处是双重的1.提出的proposals是具有higher objectness的GSPN生成网络是预先会去学习目标长什么样子再去提出候选框的。2.GSPN对自然物体场景下分布的噪声进行观察编码可以看做是一个实例感知提取的过程。有点迷后续解释结合GSPN提出的proposals作者提出了一个R-Pointnet网络。作者类比为Mask-RCNN.2 related work2.1 Object Detection and Instance Segmentation2D检测发展3D的CNN特别提了一下CVPR18上的第一篇实例分割的文章SGPN学习相似度矩阵的方法。作者表示这种自下而上的聚合策略不能很好的保证proposals具有较高的objectness2.3D Generative Models对于做3D检测的我来说。我觉得在3D中改掉anchor_based的方法才是重点因此这一部分细看。VAE变分自动编码器是经常用于在图像生成和形状生成上经常使用的它通过学习采样的数据x xx来学习一个分布这样不仅仅可以将采样数据解码为原始数据形式。VAE通过学习数据分布并最大拟合其相似分布。然而VAE不能像采样的数据中add controls不太懂先放一下因此一个后续的工作CAVE就此诞生了。因为CAVE和VAE可以学习数据分布的相似性但是GAN不能因此作者选择了VAE。怎么用CVAE生成proposals呢2.3 Deep Learning on Point Cloudpointnetgraph3 Method两个大部分GSPNproposalsR-PointNetinstance segmentationGSPNGSPN的voerview:GSPN采用生成object的方法去生成proposal。通过一个采样点生成一个和采样点编码点原始数据类似的proposals。作者称这个GSPN为CVAE方法。上图由几个子网络组成:prior network和recognition network用于参数化 为一个高斯分布。generation network学习生成表达式center-prediction network用于中心化上下文数据以及提出Location information中心点s ss采用球体结构选择三个尺度的scale进行输入。也就是c 1 , c 2 , c 3 c_1,c_2,c_3c1​,c2​,c3​整个过程都是很明显的就像上图所表示的那样1.首先center_network把三个尺度的信息进行编码融合成t tt作者这里说的是中心点t tt的回归2.将t tt进行translate后得到c ^ \widehat{c}c送入预先训练好的prior nework.再映射为一个高斯先验分布。3.Recognition network和prior network共享输入数据代码这里是 代码前面环境搭建和编译pointnet的操作我就不说了我的环境是py3.5tf1.14因此有些地方是需要改进的下面记录一下需要改进的地方在执行第一步时即python data_prep.py ./data/scannet ./data/scannet_preprocessed在文件data_pre.py的第86行会出现问题如下out_sem sem_label[idx] IndexError: too many indices for array也就是数组越界的问题我也不知道为什么会出现这个问题。如下修改第41和42行源码semLabel np.array(map(int, semLabel)) outGroups np.array(map(int, outGroups))改为semLabel np.array( semLabel) outGroups np.array( outGroups)