PyTorch 应用于3D 点云数据处理汇总和点云配准示例演示

PyTorch 已广泛应用于 3D 点云数据处理,特别是在深度学习驱动的任务中如:
分类、分割、配准、重建、姿态估计、SLAM、目标检测 等。
传统 3D 点云处理以 PCL、Open3D 为主,深度学习方法中,PyTorch 是构建神经网络处理点云的核心框架。


一、为什么用 PyTorch 处理点云?

  • 灵活:自定义神经网络模块、图卷积、注意力机制
  • 强大社区支持:如 PyTorch3D、OpenPCDet、PointNet++ 实现
  • 支持 GPU 加速
  • 可结合 Open3D、PyTorch3D 实现可视化与微分几何计算

二、典型任务 + PyTorch 方案

任务类型应用PyTorch 实现
点云分类对整个点云进行类别判定PointNet、DGCNN、PointMLP
点云语义/实例分割每个点的类别预测PointNet++, RandLA-Net
点云目标检测检测3D目标框OpenPCDet、SECOND、PV-RCNN
点云配准/匹配匹配两个点云的位姿PointNetLK、Deep Closest Point
点云补全/重建补全缺失的点云部分FoldingNet、PCN

三、常用工具包与库(PyTorch生态)

库名简介功能特点
PyTorch3DFacebook 出品 3D工具点云、网格、体素、渲染、对齐、Chamfer 距离等
Open3D + Torch可视化/几何库与 PyTorch 协同训练(支持 Tensor 转换)
torch-points3d多模型集成库集成 PointNet/PointNet++/KPConv/DGCNN
KaolinNVIDIA 出品图形学与几何学习整合,支持点云与三角网格
TorchSparse / TorchPointsKernels稀疏卷积库高效稀疏点云卷积,适合大型点云处理

四、代码示例:用 PointNet 做点云分类(简化版)

1️、准备一个点云数据(如 .txt.ply

# 模拟一个点云 [B, N, 3]
import torch
pointcloud = torch.rand((16, 1024, 3))  # batch = 16, 每个样本1024点

2️、定义一个简化 PointNet 模型

import torch.nn as nn
import torch.nn.functional as Fclass SimplePointNet(nn.Module):def __init__(self, num_classes):super().__init__()self.conv1 = nn.Conv1d(3, 64, 1)self.conv2 = nn.Conv1d(64, 128, 1)self.conv3 = nn.Conv1d(128, 1024, 1)self.fc1 = nn.Linear(1024, 512)self.fc2 = nn.Linear(512, num_classes)def forward(self, x):  # x: [B, N, 3]x = x.transpose(2, 1)          # -> [B, 3, N]x = F.relu(self.conv1(x))      # [B, 64, N]x = F.relu(self.conv2(x))      # [B, 128, N]x = F.relu(self.conv3(x))      # [B, 1024, N]x = torch.max(x, 2)[0]         # [B, 1024]x = F.relu(self.fc1(x))        # [B, 512]x = self.fc2(x)                # [B, num_classes]return x

3️、使用模型分类

model = SimplePointNet(num_classes=40)
out = model(pointcloud)  # 输出为 [16, 40]
pred = torch.argmax(out, dim=1)

五、点云处理核心技术点(适配 PyTorch)

问题技术路线 / 实现
点的顺序不变性max-pooling / attention
点云不规则 & 稀疏使用 k-NN 图、球邻域(如 PointNet++, DGCNN)
下采样/插值FPS、ball query + 特征插值(Open3D / torch)
损失函数设计Chamfer Distance, EMD, Cross Entropy
数据增强旋转、缩放、抖动等(torch + numpy 实现)

六、应用建议与扩展方向

推荐项目模板

  • PointNet-PyTorch
  • Pointnet2_PyTorch
  • OpenPCDet(检测任务)

进阶任务

  • 点云配准(PointNetLK、DCP)
  • 体素网格表示(VoxelNet)
  • 稀疏卷积网络(SPConv、TorchSparse)

七、总结

类型工具库适合任务
点云分类PointNet, DGCNNShapeNet, ModelNet40
分割PointNet++, KPConvS3DIS, SemanticKITTI
检测OpenPCDetKITTI、NuScenes
配准DCP, PointNetLK点云位姿估计
可视化Open3D + PyTorch点云显示、训练监控

八、使用 DCP 进行配准示例演示

使用 DCP(Deep Closest Point) 进行点云配准,是近年来一种较为流行的 基于深度学习的刚性配准方法,它摆脱了传统 ICP 的点-点最近邻和初始化限制,适用于姿态估计、SLAM 前端对齐、三维建图等任务。


1、DCP 是什么?

DCP 全称:Deep Closest Point,由 Yew 和 Lee 在 2019 年提出(CVPR 论文)。

  • 目标:估计两个点云之间的刚性变换(R, t)

  • 与传统 ICP 区别:

  • 不依赖初始配准

  • 利用深度网络提取点的上下文特征

  • 使用注意力机制完成点对匹配

  • 基于特征匹配估计变换


2、整体流程框架

点云A → 特征提取 → 特征匹配 → SVD估计变换 → 应用变换 → 配准B到A
点云B → 特征提取 →   ↑
  • 特征提取器:PointNet / DGCNN(默认用 DGCNN)
  • 匹配方法:Transformer 或注意力匹配
  • 位姿估计:基于匹配特征的 SVD 求解(Umeyama 算法)

3、环境依赖与安装

git clone https://github.com/WangYueFt/dcp.git
cd dcp
pip install -r requirements.txt
# 依赖 PyTorch、torchvision、numpy、scikit-learn、tqdm 等

4、代码核心解析

1️、加载两个点云(例如:ShapeNet 数据)
src = torch.rand((1, 1024, 3)).cuda()  # 源点云
tgt = torch.rand((1, 1024, 3)).cuda()  # 目标点云
2️、调用 DCP 模型
from models.dcp import DCPmodel = DCP(emb_nn='dgcnn', pointer='transformer').cuda()
model.eval()with torch.no_grad():est_R, est_t = model(src, tgt)  # 输出刚体变换aligned_src = torch.matmul(src, est_R.transpose(2,1)) + est_t
3️、配准效果可视化(Open3D)
import open3d as o3d
import numpy as npdef to_o3d(pc, color):pcd = o3d.geometry.PointCloud()pcd.points = o3d.utility.Vector3dVector(pc)pcd.paint_uniform_color(color)return pcdsrc_np = src.squeeze(0).cpu().numpy()
tgt_np = tgt.squeeze(0).cpu().numpy()
aligned_np = aligned_src.squeeze(0).cpu().numpy()o3d.visualization.draw_geometries([to_o3d(src_np, [1, 0, 0]),      # 红色:原始源点云to_o3d(tgt_np, [0, 1, 0]),      # 绿色:目标点云to_o3d(aligned_np, [0, 0, 1])   # 蓝色:配准后的源点云
])

5、DCP 模型结构简要

1. 特征提取(DGCNN) → 全局上下文
2. Transformer 注意力机制 → 匹配源与目标特征
3. 匹配点对求残差 → 使用 SVD 估计 R, t

6、性能特点

项目DCPICP
对初始化敏感❌ 免初始化✅ 需要初始化
特征提取✅ 深度上下文特征❌ 仅几何距离
扩展性✅ 可扩展至非刚性匹配
训练需求✅ 需训练❌ 无需训练
速度中等偏快(GPU)快(CPU)

7、扩展方向建议

场景建议方法
多帧点云连续配准将 DCP 作为配准前端,配合 GTSAM 优化
点云 + 图像联合配准融合 RGB-D 输入,扩展为多模态 DCP
稠密点云(>100k)先 voxel 下采样,再用 DCP
无监督训练 / 弱监督DCP 可以引入 Chamfer 损失代替监督位姿

8、小结

优点缺点
鲁棒特征提取 + 注意力匹配❌ 需要训练数据
免初始化刚体配准❌ 训练时间较长
易与传统系统整合(输出变换矩阵)❌ 对大点云需加速优化

附:项目地址推荐

  • 官方 GitHub(作者原版)
    https://github.com/WangYueFt/dcp

  • 配套 DGCNN 实现
    https://github.com/WangYueFt/dgcnn


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94167.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABP VNext + Quartz.NET vs Hangfire:灵活调度与任务管理

ABP VNext Quartz.NET vs Hangfire:灵活调度与任务管理 🚀 📚 目录ABP VNext Quartz.NET vs Hangfire:灵活调度与任务管理 🚀✨ TL;DR🛠 环境与依赖🔧 Quartz.NET 在 ABP 中接入1. 安装与模块…

[硬件电路-148]:数字电路 - 什么是CMOS电平、TTL电平?还有哪些其他电平标准?发展历史?

1. CMOS电平定义: CMOS(Complementary Metal-Oxide-Semiconductor)电平基于互补金属氧化物半导体工艺,由PMOS和NMOS晶体管组成。其核心特点是低功耗、高抗干扰性和宽电源电压范围(通常为3V~18V)。关键参数&…

0基礎網站開發技術教學(二) --(前端篇 2)--

書接上回說到的前端3種主語言以及其用法,這期我們再來探討一下javascript的一些編碼技術。 一) 自定義函數 假如你要使用一個功能,正常來說直接敲出來便可。可如果這個功能你要用不止一次呢?難道你每次都敲出來嗎?這個時侯,就要用到我們的自…

前端 拼多多4399笔试题目

拼多多 3 选择题 opacity|visibity|display区别 在CSS中,opacity: 0 和 visibility: hidden 都可以让元素不可见,但它们的行为不同: ✅ opacity: 0(透明度为0) 元素仍然占据空间(不移除文档流&#xff0…

数琨创享:全球汽车高端制造企业 QMS质量管理平台案例

01.行业领军者的质量升级使命在全球汽车产业链加速升级的浪潮中,质量管控能力已成为企业核心竞争力的关键。作为工信部认证的制造业单项冠军示范企业,万向集团始终以“全球制造、全球市场、做行业领跑者”为战略愿景。面对奔驰、宝马、大众等“9N”高端客…

GaussDB 约束的使用举例

1 not null 约束not null 约束强制列不接受 null 值。not null 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。GaussDB使用pg_get_tabledef()函数获取customers表结构,如:csdn> set sea…

自动驾驶中的传感器技术13——Camera(4)

1、自驾Camera开发的方案是否归一化对于OEM,或者自驾方案商如Mobileye如果进行Camera的开发,一般建议采用Tesla的系统化最优方案,所有Camera统一某个或者某两个MP设计(增加CIS议价权,减少Camera PCBA的设计维护数量&am…

开源利器:glTF Compressor——高效优化3D模型的终极工具

在3D图形开发领域,glTF(GL Transmission Format)已成为Web和移动端3D内容的通用标准。然而,3D模型的文件体积和纹理质量往往面临权衡难题。Shopify最新开源的glTF Compressor工具,为开发者提供了一套精细化、自动化的解决方案,让3D模型优化既高效又精准。本文将深入解析这…

LeetCode Hot 100,快速学习,不断更

工作做多了有时候需要回归本心,认真刷题记忆一下算法。那就用我这练习时长两年半的代码农民工来尝试着快速解析LeetCode 100吧 快速解析 哈希 1. 两数之和 - 力扣(LeetCode) 这题很简单啊,思路也很多 1. 暴力搜索,…

MySQL的子查询:

目录 子查询的相关概念: 子查询的分类: 角度1: 单行子查询: 单行比较操作符: 子查询的空值情况: 多行子查询: 多行比较操作符: ANY和ALL的区别: 子查询为空值的…

Python批处理深度解析:构建高效大规模数据处理系统

引言:批处理的现代价值在大数据时代,批处理(Batch Processing) 作为数据处理的核心范式,正经历着复兴。尽管实时流处理备受关注,但批处理在数据仓库构建、历史数据分析、报表生成等场景中仍不可替代。Pytho…

是德科技的BenchVue和纳米软件的ATECLOUD有哪些区别?

是德科技的BenchVue和纳米软件的ATECLOUD虽然都是针对仪器仪表测试的软件,但是在功能设计、测试场景、技术架构等方面有着明显的差异。BenchVue(是德科技)由全球领先的测试测量设备供应商开发,专注于高端仪器控制与数据分析&#…

线上redis的使用

一.String1.缓存玩家单个数据,但是我觉得还是用hash好2.结合过期时间,比如:某个东西结算了,redis记录一下,并设置过期时间3.分布式锁二.Hash1.缓存一个单位的数据,比如:联盟信息2.被封禁的列表,…

【实践记录】github仓库的更新

首先登录,参考:记一次github连接本地git_如何连接github-CSDN博客 SSH: git config --global user.name "GitHubUsername" git config --global user.email "emailexample.com" ssh-keygen -t ed25519 -C "emailex…

Nature图形复现—Graphpad绘制带P值的含数据点的小提琴图

带 P 值的含数据点的小提琴图是一种科研数据可视化图表,它同时呈现数据的分布特征、原始观测值和统计显著性:通过小提琴形状展示概率密度分布(反映数据集中趋势和离散程度),叠加抖动散点显示所有原始数据点&#xff08…

mongodb源代码分析createCollection命令由create.idl变成create_gen.cpp过程

mongodb命令db.createCollection(name, options)创建一个新集合。由于 MongoDB 在命令中首次引用集合时会隐式创建集合,因此此方法主要用于创建使用特定选项的新集合。例如,您使用db.createCollection()创建:固定大小集合;集群化集…

达梦(DM8)常用管理SQL命令(3)

达梦(DM8)常用管理SQL命令(3) 1.表空间 -- 查看表空间信息 SQL> SELECT * FROM v$tablespace;-- 查看数据文件 SQL> SELECT * FROM v$datafile;-- 表空间使用情况 SQL> SELECT df.tablespace_name "表空间名称",df.bytes/1024/1024 "总大小(MB)&q…

【Django】-5- ORM的其他用法

一、🚀 ORM 新增数据魔法!核心目标教你用 Django ORM 给数据库 新增数据 !就像给数据库 “生小数据宝宝”👶方法 1:实例化 Model save(一步步喂数据)obj Feedback() # 实例化 obj.quality d…

Flink Checkpoint机制:大数据流处理的坚固护盾

引言在大数据技术蓬勃发展的当下,数据处理框架层出不穷,Flink 凭借其卓越的流批一体化处理能力,在大数据流处理领域占据了举足轻重的地位 。它以高吞吐量、低延迟和精准的一次性语义等特性,成为众多企业处理实时数据的首选工具。在…

【STM32-HAL】 SPI通信与Flash数据写入实战

文章目录1.参考教程2. 4种时间模式3. 3个编程接口3.1 HAL_StatusTypeDef HAL_SPI_Transmit(...) :3.1.1 参数说明3.1.2 例子3.2 HAL_StatusTypeDef HAL_SPI_Receive(...) :3.2.1参数说明3.2.2 例子3.3 HAL_StatusTypeDef HAL_SPI_TransmitReceive(...) &…