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

Brief

这是一篇CVPR18上的文章,虽然表示是说的实例分割;但是听同组的同学的推荐,也可以做定位方面的事情,因此加入到了paperlist。

Abstruct

Instead 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 introduction

In 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 work

2.1 Object Detection and Instance Segmentation

  • 2D检测发展
  • 3D的CNN
  • 特别提了一下CVPR18上的第一篇实例分割的文章,SGPN学习相似度矩阵的方法。作者表示这种自下而上的聚合策略不能很好的保证proposals具有较高的objectness

2.3D Generative Models

 对于做3D检测的我来说。我觉得在3D中改掉anchor_based的方法才是重点,因此这一部分细看。

  • VAE,变分自动编码器是经常用于在图像生成和形状生成上经常使用的,它通过学习采样的数据 x x x来学习一个分布,这样不仅仅可以将采样数据解码为原始数据形式。VAE通过学习数据分布并最大拟合其相似分布。然而,VAE不能像采样的数据中add controls(不太懂,先放一下);因此一个后续的工作CAVE就此诞生了。
  • 因为CAVE和VAE可以学习数据分布的相似性,但是GAN不能,因此作者选择了VAE。(怎么用CVAE生成proposals呢?)

2.3 Deep Learning on Point Cloud

  • pointnet
  • graph

3 Method

两个大部分:

  • GSPN(proposals)
  • R-PointNet(instance segmentation)

GSPN

GSPN的voerview:
在这里插入图片描述
GSPN采用生成object的方法去生成proposal。通过一个采样点生成一个和采样点编码点原始数据类似的proposals。作者称这个GSPN为CVAE方法。
上图由几个子网络组成:

  • prior network和recognition network用于参数化 为一个高斯分布。

  • generation network学习生成表达式

  • center-prediction network用于中心化上下文数据以及提出Location information

中心点 s s s采用球体结构选择三个尺度的scale进行输入。也就是 c 1 , c 2 , c 3 c_1,c_2,c_3 c1,c2,c3

整个过程都是很明显的,就像上图所表示的那样:
1.首先center_network把三个尺度的信息进行编码融合成 t t t(作者这里说的是中心点 t t t的回归)
2.将 t t t进行translate后得到 c ^ \widehat{c} c 送入预先训练好的prior nework.再映射为一个高斯先验分布。
3.Recognition network和prior network共享输入数据

代码

这里是 代码
前面环境搭建和编译pointnet++的操作我就不说了,我的环境是py3.5+tf1.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)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值