尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Shape As Points如何把点云变成网格?可微分泊松求解器的完整原理解析

Shape As Points如何把点云变成网格?可微分泊松求解器的完整原理解析 Shape As Points如何把点云变成网格可微分泊松求解器的完整原理解析【免费下载链接】shape_as_points[NeurIPS21] Shape As Points: A Differentiable Poisson Solver项目地址: https://gitcode.com/gh_mirrors/sh/shape_as_pointsShape As PointsSAPNeurIPS 2021 Oral是一个开源的可微分泊松求解器项目它能将无向量的点云直接转化为高质量水密网格mesh。与传统点云重建方法不同SAP 把点云的位置和法线本身当作可学习的参数通过完全可微的泊松曲面重建流水线提取网格从而支持端到端训练——无论是纯优化模式还是学习模式只需一条命令即可跑出可渲染的 3D 网格。为什么需要一个可微分泊松求解器传统 3D 重建流水线通常是点云 → 泊松重建 → 网格但泊松求解和网格提取Marching Cubes这两个环节不可微梯度无法穿透。这带来两个后果❌ 无法把重建结果直接参与损失计算只能依赖监督信号如逐点距离❌ 无法把网格好不好这种全局质量反馈回输入端。SAP 的核心创新是实现了可微分泊松曲面重建Differentiable Poisson Surface Reconstruction, DPSR点云经过它变成网格后网格上的损失还能反向传播回点云本身。这正是它能把点云变成网格且支持学习的根本原因。DPSR 原理拆解4 步把点云变成标量场DPSR 的完整实现位于 src/dpsr.py 的DPSR类中整个前向过程只有四步第 1 步法线栅格化Point Rasterization把每个点的法线向量通过三线性插值散射到 128³ 的网格上对应 src/utils.py 中的point_rasterize函数得到一个法线场。注意是插值散射而非硬分配这保证了后续梯度可以流回每个点。第 2 步FFT 频域平滑对法线场做 3D 快速傅里叶变换乘以频域高斯低通滤波器spec_gaussian_filter。平滑强度由参数psr_sigma控制——这是泊松重建中模糊blur超参的可微版本防止孤立点产生伪影。第 3 步频域解泊松方程泊松方程 ∇²φ ∇·N 在频域里变成了简单的逐频率除法φ̂ -i(ω̂ · N̂) / |ω̂|²也就是说求解一个 128³ 的泊松方程在这套实现里只是几次张量乘法代价极低且处处可微。第 4 步零等值面提取对 φ 做逆 FFT 回到空间域得到有符号指示函数场再做整体平移/缩放保证点在零等面上最后用 Marching Cubesmc_from_psr提取出网格。关键一步让网格提取可微网格提取本身Marching Cubes仍然是不可微的。SAP 在 src/model.py 中用自定义 autograd 函数PSR2Mesh巧妙绕过前向正常提取顶点、面片、法线反向利用顶点移动 场值沿法线方向的位移这一几何关系dV/dPSR -normals把网格顶点的梯度反投影回泊松网格point_rasterize。这样损失 → 网格顶点 → 指示函数场 → 栅格化点云 → 输入点整条链路的梯度都通了。这是整个项目最有含金量的设计。两种使用模式模式一纯优化式重建无需训练没有网络直接把一个球面初始化点云位置法线共 6 维/点当作优化变量损失 到目标点云的 Chamfer 距离 法线方向一致性。跑起来即可看到点云长到目标形状上入口脚本optim.py单分辨率、optim_hierarchy.py32³ → 64³ → 128³ → 256³ 由粗到细示例配置configs/optim_based/teaser.yamlbash scripts/download_demo_data.sh python optim_hierarchy.py configs/optim_based/teaser.yaml模式二学习型重建处理噪声/离群点编码器PointNet 局部池化见 src/network/encoder.py把无方向、带噪声的点云编码成特征两个解码器src/network/decoder.py分别预测法线和位置偏移量修正后的定向点云送入 DPSR 出网格。上图中左侧是散布着大噪声的点云右侧是网络重建出的椅子网格——噪声被 DPSR 的频域平滑天然消化掉了。上图则演示了离群点场景即使点云混入 7 倍比例的随机离群点学到的 7× 偏移量模型仍能重建出结构完整的台灯模型。python generate.py configs/learning_based/demo_outlier.yaml python train.py configs/learning_based/noise_small/ours.yaml # 从头训练快速上手环境搭建与目录导航环境搭建3 步创建环境conda env create -f environment.yaml conda activate sap安装 PyTorch3D0.5与 PyTorch Scatterconda install pytorch-scatter -c pyg下载 demo 数据并运行上述命令即可目录导航模块路径职责可微分泊松求解器src/dpsr.pyDPSR 核心FFT 泊松求解栅格化/网格工具src/utils.pypoint_rasterize、mc_from_psr网络模型src/model.pyEncode2Points、PSR2Mesh反向传播编码器/解码器src/network/PointNet 编码、法线与偏移预测训练入口train.py学习模式训练生成网格generate.py用训练好的模型批量出网格网格评估eval_meshes.py标准化误差评估优化式重建optim.py/optim_hierarchy.py无需网络的点云拟合默认配置configs/default.yaml所有可调超参psr_sigma、grid_res等总结SAP 用一套极简的频域技巧FFT 除法实现了泊松方程的快速可微求解再配合网格→场→点的反向投影打通了点云到网格的端到端梯度链路。对新手而言记住三句话即可DPSR 是核心栅格化 → 频域平滑 → 频域除频 → Marching Cubes可微靠反向投影顶点梯度沿法线散射回网格再流回点云两种玩法不想训练就用optim_hierarchy.py纯优化要抗噪就用generate.py学习模式。【免费下载链接】shape_as_points[NeurIPS21] Shape As Points: A Differentiable Poisson Solver项目地址: https://gitcode.com/gh_mirrors/sh/shape_as_points创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表