【转载】细嚼慢咽读论文:点云上采样GAN的实践——PU-GAN

   日期:2024-12-26    作者:sjzcjhg 移动:http://ljhr2012.riyuangf.com/mobile/quote/39142.html

首先我们来分析一下文章题目:PU-GAN: a Point Cloud Upsampling Adversarial Network

【转载】细嚼慢咽读论文:点云上采样GAN的实践——PU-GAN

PU即Point Upsampling,也就是本文要做的任务是点云上采样。关于点云上采样的介绍,我在介绍PU-Net的这篇文章中介绍过,可参考

刘昕宸:细嚼慢咽读论文:点云上采样网络开天辟地PU-Net​zhuanlan.zhihu.com

GAN即现在大名鼎鼎的GAN(生成对抗网络,也就是本文使用的网络是GAN,依赖GAN来实现点云的上采样。上采样任务其实也是一种生成式任务,因此很自然地想到可以使用GAN来尝试一下。关于GAN的基本原理介绍,可参考


上采样的意义我在PU-Net那篇文章中详细介绍过

点云处理任务存在极大挑战,很重要的一点是点云这种数据形式的稀疏性和不规则性。
而本文要做的上采样任务,正是为了解决点云数据稀疏性这一问题,为下游各种特征学习任务提供更“高质”的数据。
点云上采样任务,简单来说就是输入某一点云,生成保持基本形状的“更稠密”点云。

单就上采样效果而言,之前基于深度学习的方法如PU-Net、MPU在现实场景扫描点云上取得的效果均非常有限。我们来看看PU-GAN论文在开头放的图Kitti数据集上测试

点云上采样本质也是一种生成式任务,在视觉领域做生成任务,自然而然地就会想到:不妨试试GAN

  1. 针对点云上采样任务,提出了GAN框架的解决方案,并且取得了非常好的效果。(原文指出:the difficulty to balance between the generator and discriminator and to avoid the tendency of poor convergence.
  2. 局部网络结构设计非常有新意:比如up-down-up unit用来expand point features,self-attention unit用来feature integration quality等
  3. 设计了compound loss,特别是设计了用来约束上采样点云均匀分布uniform loss,让人眼前一亮。
  4. PU-GAN不仅在一般点云模型上做了实验,还在KITTI这样真实扫描的场景点云上做了上采样实验,依然取得了非常好的效果,这也进一步验证了PU-GAN强大的泛化能力。

本文的目标就是上采样,也就是给定有N个点的稀疏点集  ,我们期望生成有 rN 个点的稠密点集 .

Q 并不需要是 P 的超集,但是需要满足以下2个条件

  1. Q 应该能够和 P 表达一样的underlying geometry of latent target object.
  2. Q 内的点应该是在target object surface上均匀分布的,即使甚至输入 P 都是非均匀的。

PU-GAN的网络结构图如下所示

因为是GAN,所以网络分成了Generator和Discriminator两部分。

Generator用于从稀疏点云 P 生成稠密点云 Q .

Discriminator用于区分真实稠密点云和generator生成的点云

看出来了嘛,其实generator的整体框架还是PU-Net那一套patch --> feature extraction --> feature expansion --> coordinate reconstruction ;-)

Generator全局代码

 

Ⅰ Patch Extraction

对每个3D mesh,在表面随机选择200个种子点,对每个种子点根据测地线距离生成patch,并将每个patch normalize到一个unit sphere中。

对每个patch,使用Poisson Disk Sampling生成  ,作为有 rN 个点的目标点云

我们动态地对  随机采样 N 个点生成输入点云 P .

 

Ⅱ Feature Extraction

本模块旨在提取point-wise feature

输入点云 N*d ( d 包括点云的原始数据,坐标、颜色、法向量等, d 一般为 3 ,输出point-wise feature N*C

本模块直接借鉴了论文Patch-based progressive 3D point set upsampling特征提取方法,使用了dense connection集成不同层的特征。

网络结构如下,处理过程非常明晰了:

我们再来看看代码加深理解

 

核心dense_conv的实现

 

Ⅲ Feature Expansion

和PU-Net一样,PU-GAN也设计了自己的feature expansion模块,这也应该是上采样算法的核心了吧

PU-Net的做法是 直接复制点的特征,然后使用不同的 MLP来分别独立处理各自的点特征备份。
即使PU-Net使用了诸如 repulsion loss这样的约束,但这种上采样方式仍然会导致 扩展的点特征过于接近彼此,影响上采样质量。

输入point-wise feature N*C ,输出 

PU-GAN还设计了up-down-up expansion unit增强特征扩展的效果,以实现enabling the generator to produce more diverse point distributions.

网络结构图如下所示,还包括了Up-feature operator和Down-feature operator的结构

看代码是比较明晰的,点特征输入到Up-feature operator生成  ,再输入Down-feature operator将其降采样回.

计算降采样点特征与原输入之间的difference  .

输入  到Up-feature operator生成  ,将 作为  的偏移量,得  . 

 

Up-feature operator

不像PU-Net直接复制,PU-GAN在复制点特征时使用了grid结构(可参考FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation,这等价于在输入点附近增加一些新的点.

整合复制点特征使用了self attention机制

 

1)grid机制

为每个feature-map copy生成一个唯一的2D vector,然后将该2D vector拼接给其对应feature-map copy内的每一个点。

因为该2D vector的存在,因此复制的点特征还是有些细微差别的。

 

2)attention机制

 

Down-feature operator

Down结构比较简单

对expanded features降采样,对特征reshape,然后使用一系列MLPs来拟合原特征

 

Ⅳ Coordinate Reconstruction

最后是坐标重建

 

Discriminator的目标是分辨上采样点云是否是Generator生成的

首先使用一个轻量的网络结构整合local和global信息提取global feature

另外Discriminator还使用了self-attention unitenhance the feature integration and improve the subsequent feature extraction capability

最后使用MLP和pooling得到了最后的confidence value,可以理解成是Discriminator判断输入上采样点云是真实上采样点云的可能性。

 

因为GAN的原因,PU-GAN的loss设计得比较多,主要分为了Generator loss和Discriminator loss

Ⅰdiscriminator loss

 

discriminator_loss只包括了adversarial loss.

discriminator_loss设计的adversarial loss很简单

 是真实点云, Q 是generator生成的fake点云, D(Q) 表示判别器输出的confidence value.

 

Ⅱ generator loss

 

generator loss包括了reconstruction loss,repulsion loss,uniform loss和adversarial loss.

1)adversarial loss

与上面Discriminator的adversarial loss基本类似

 

2)reconstruction loss

PU-GAN默认使用的是EMD loss,EMD的详细理解见这篇文章

3)repulsion loss

repulsion loss设计来自PU-Net,想详细了解可参考这篇文章

4)uniform loss

PU-GAN这一工作的一大贡献就是设计了uniform loss来控制生成点云分布的均匀性。

首先PU-Net设计了NUC这一评价指标来衡量生成点云的均匀性,但是这一评价忽视了local clutter of points,因此不宜再被采纳。

什么叫“忽视了local clutter of points”呢

下面三个disk包含了相同数量的点(因此NUC都是一样的,但是它们的均匀程度显然是不同的。造成NUC衡量失效的原因,很大可能是局部点分布均匀程度NUC是无法刻画的。

而这里uniform loss的设计就是同时考虑了global和local

第一项

对于有 rN 个点的点集 Q (在实验中实际就是1个patch

step 1. 使用最远点采样(FPS)采样 M 个seed points

step 2. 以每个seed point为球心,使用半径为  的ball query得到point subset  .

分析

严格坐落在 Q 表面面积为  的local disk上。

还记得上面介绍的Ⅰ Patch Extraction?我们通过测地线距离+正则化提取patch,因此patch就已经被我们normalize到一个unit sphere中了,patch的表面积是 

并且  内expected number of points  就应该是 rNp 了

自然而然地,遵循chi-square model设计了uniform loss的第一项,用来衡量  与  的偏差

 

第二项

考虑local point clutter,对  中的每个点,找到其最近邻并计算距离  ( k 表示第  中的第 k 个点

 想象一下,如果  是均匀分布的,那么点与点之间的距离分布应该是这样的

 

此时expected point-to-neighbor distance

因此最终我们可得uniform loss

程序实现

 

PU-Net和MPU的数据集以及Visionair repository中挑选了147个模型,尽可能多地覆盖不同的类型。其中120个模型用于训练,27个用于测试。

训练数据的准备:因为PU-GAN是基于patch的,因此需要先对各个模型提取patch。在每个训练模型上提取200个patch120个模型就一共能提取24000个patch用于训练其中每个patch就是一个(input patch, groundtruth patch)的pairinput patch有256个点groundtruth patch有1024个点

评价指标包括了4类

  1. point-to-surface (P2F) distance
  2. Chamfer distance (CD)
  3. Hausdorff distance (HD)
  4. uniform metrics: 评估方法类同上面的uniform loss

  1. 定量比较

2. 定性比较

3. 真实扫描场景的上采样

针对KITTI数据集

4. 消融实验

PU-GAN基本延续了PU-Net的思路,但是在诸多细节上均做了非常明显的改进gridding, self-attention, dense connection, up-down-up, uniform loss,也确实取得了更加强大的效果。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号