PU-GAN a Point Cloud Upsampling Adversarial Network

本文深入探讨了ICCV2019上一篇关于点云上采样的论文,介绍了GAN和Patch-based Upsampling在处理点云稀疏、噪音及不均匀分布问题上的应用,以及其创新的上采样、自注意力和复合损失机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇是ICCV2019的一篇上采样论文。

Ps:学习论文时,我只备注重要的知识点。

一、Abstract

1、概括

存在问题点云是稀疏、有噪音(outlier points)、不均匀的
作者目的学习已有点的特征, 从而增加点, 并且使点的分布要均匀
采取方法generative adversarial network (GAN)、Patch-based Upsampling
理由GAN能够探索潜在空间中的各种点分布,能够更好的生成否合特征的点

2、文章的创新点

  • Up-down-up expansion unit -------主要用上采样之后的结果和最初数据进行比较,得出误差
  • Self-attention unit---------------------使点的特征靠的更近,提取到更多的特征
  • Compound loss-----------------------处理点和点之间的距离,使得更加均匀

3、Question:GAN为何能够充分探索点的分布空间?它有什么特质?

二、Introduction

1、一些碎碎念的知识点(可忽略)

~fill small holes and gaps使点分布均匀来填补孔洞和缝隙

2、对以前的论文,作者认为它们网络的效果并不好,并不能从低质量的点云中生成完整、密集、分布均匀的点云。

  • PU-Net生成的点太相似,即靠的太近,并且多次重复卷积造成特征冗余。
  • MPU训练步骤太复杂,并且当上采样率更高时,需要划分更多的子集。

3、GAN网络的generator充分探索点的分布,discriminator评估生成的点分布,双方达到一种制衡的目的。但是GAN网络很难收敛,所以Generator必须采集到更多有效的特征。
所以作者采用以上三点创新点。

三、Method

1、Q should describe the same underlying geometry of a latent target object as P, so points in Q should
lie on and cover the target object surface 生成的点云Q应该和初始点云P的几何结构一样,所以Q应该位于并且覆盖点云P的表面。PU-Net和MPU都没有提出这个要求,它们下意识利用了loss体现了这个思路,但是在网络架构中没有采取方法。
Tips:能不能采用一些Shape Analysis的方式,解决这个问题。

**Generator

1、Network Architecture
在这里插入图片描述

1. The feature extraction component
特征提取单元使用了MPU的方法,简单概括:假设点云有N个点,使用KNN为每个点采集特征,然后和上一步特征结合后,继续采用此方法循环几次,最后给每点加上grid value。每一层和每一层之间使用skip connection来传递信息。

2. The feature expansion component
在这里插入图片描述
增加这一步的目的:是为了增加不同的特征,使得点分布更加多样化。
~ 主要步骤:we compute the difference (denoted as ∆) between the features before the upsampling and after the downsampling. By also upsampling ∆ to ∆up, we add ∆up to Fup to self-correct the expanded features。
~好处:这样做不仅避免了繁琐的多步卷积,并且促进了细粒度特征的产生。

2.1 Up-feature operator
~为了上采样r次,我们要为重复学习的特征增加差异,这相当于使生成的点远离原来的点。所以我们将特征复制 r 份 (rNC), 然后使用FoldingNet中的2D Grid mechanism,使得 r 份特征变得不一样,接着使用 self-attention 使特征紧密联系,最后使用一系列的MLPs继续对特征进行学习,得到我们想要的结果。

2.1.1 Self attention
为了引入长距离依赖 ,取集结连接之后的特征,引入了注意力机制。
~将从已有点中学习出的weight再次应用到这些点中。

四、Training Process

1、它找了200个Patch,每个Patch中有5%点, 使用Poisson disk sampling 找target points
2、采用的loss函数

  • Adversarial loss: 采用的是最小二乘法
  • Uniform loss + replusion loss
    PU-Net的NUC 度量并不能区分不同分布下点的均匀性。所以它加入一个分布的比例,这个比例是按照平均分布计算出来的。
### PU-Net概述 PU-Net是一种专门用于点云上采样的神经网络架构,旨在提高稀疏点云的密度并保持几何细节[^4]。该方法通过学习点云数据中的局部结构特征,生成高分辨率且高质量的密集点云。与传统的插值或规则网格重建技术相比,PU-Net能够更好地保留复杂形状和边界特性。 #### 架构特点 PU-Net的核心设计理念在于利用卷积神经网络(CNN)提取点云的局部特征,并结合多尺度上下文信息完成上采样任务。具体而言: 1. **局部特征提取模块** 输入点云经过一系列逐点卷积操作以捕获每个点及其邻域的信息。这些卷积核会自动调整权重参数,从而适应不同的几何模式[^5]。 2. **全局特征融合机制** 除了关注局部区域外,PU-Net还引入了一个全局池化层来获取整个模型的整体属性。这种组合方式有助于增强最终预测结果的一致性和连贯性[^6]。 3. **渐进式细化策略** 上采样过程并非一次性完成,而是采用逐步增加点数的方式实现。每次迭代都会依据当前状态重新评估最佳位置候选集,并据此扩展原始集合规模[^7]。 ```python import torch.nn as nn class PUNet(nn.Module): def __init__(self, input_dim=3, output_dim=3, upsample_rate=4): super(PUNet, self).__init__() # Local feature extraction layers self.conv1 = nn.Conv1d(input_dim, 64, kernel_size=1) self.conv2 = nn.Conv1d(64, 128, kernel_size=1) # Global context aggregation layer self.global_pooling = nn.AdaptiveMaxPool1d(output_size=1) # Upsampling module self.fc_upsample = nn.Linear(128, output_dim * upsample_rate) def forward(self, x): batch_size, num_points, _ = x.size() # Convert to channel-first format for convolutions x = x.permute(0, 2, 1).contiguous() local_features = F.relu(self.conv1(x)) global_feature = self.global_pooling(local_features).view(batch_size, -1) dense_output = self.fc_upsample(global_feature) return dense_output.view(batch_size, -1, output_dim) ``` 上述代码片段展示了简化版PU-Net的主要组成部分,包括局部特征提取器、全局最大池化以及全连接映射函数等部分[^8]。 --- ### 实现注意事项 为了确保PU-Net的有效运行,需注意以下几个方面: - 数据预处理阶段应对输入点云实施标准化变换,使其集中分布在单位球范围内; - 训练过程中建议选用Adam优化器配合适当的学习率调度计划; - 测试时可通过计算 Chamfer 距离或者 Earth Mover’s Distance (EMD) 来量化生成质量优劣程度[^9]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值