learning3d
PyTorch实现的3D点云深度学习库,集成15+前沿算法,支持分类/分割/配准等核心任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PyTorch实现的3D点云深度学习库,集成15+前沿算法,支持分类/分割/配准等核心任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

想象一下:你在研究自动驾驶的场景理解,需要让 AI 理解一辆车周围密密麻麻的激光雷达点云;或者在做机器人抓取,需要让机械臂从散乱堆叠的零件中识别出目标物体。这类任务的核心挑战是点云数据天然无序,不像图片那样规整,必须用特殊的方法处理。
Learning3D 正是为解决这一痛点而生。这是一个专注于 3D 点云深度学习的开源 PyTorch 库,将近年来点云领域的核心算法封装为即用型模块,让研究者和工程师不必从零手写复杂的点云处理逻辑。
3D 点云是现实世界的一种重要数字化表达方式。激光雷达(LiDAR)、深度相机、SLAM 系统都会输出点云数据——本质上就是空间中一组组 (x, y, z) 坐标的集合,附带着颜色、法向量等附加信息。与 2D 图片相比,点云的优势在于精确的深度信息和完整的空间几何结构,因此在自动驾驶、机器人导航、工业检测、AR/VR 等领域扮演核心角色。
然而,点云的深度学习长期面临一个基础问题:点是无序的。一张图片可以用固定大小的矩阵表示,点云却不一样——同一个物体可以有两万个点也可以有五万个点,而且点的排列顺序不影响物理意义。这使得经典的 CNN 架构无法直接应用。2017 年斯坦福大学的 PointNet 开创性地解决了这一问题,此后各种改进架构层出不穷,但每篇论文都有自己的一套代码实现,代码风格、数据格式、训练流程各异。Learning3D 的作者 Vinit Sarode 正是看到了这个碎片化痛点,决定打造一个统一框架。
Learning3D 提供了 3D 点云领域最核心的五大深度学习任务支持:
| 任务 | 说明 | 代表算法 |
|---|---|---|
| 分类(Classification) | 识别点云所属类别,如分辨椅子和桌子 | PointNet, DGCNN, PPFNet, PointConv, CurveNet |
| 分割(Segmentation) | 点级别语义标注,如识别场景中每个点属于墙/地板/窗户 | PointNet, DGCNN |
| 点云补全(Reconstruction) | 从残缺点云恢复完整形状 | Point Completion Network (PCN) |
| 配准(Registration) | 将两团点云对齐到同一坐标系,是 SLAM 后处理的核心 | PointNetLK, PCRNet, DCP, PRNet, RPM-Net, DeepGMR |
| 光流估计(Flow Estimation) | 估计动态场景中点的运动矢量 | FlowNet3D |
| 遮挡估计(Inlier Estimation) | 在被遮挡的点云中识别有效对应点 | MaskNet, MaskNet++ |
值得注意的是,配准是其中技术门槛最高、也最有实际价值的任务。想象机械臂从料筐里抓零件——首先需要将实时扫描的点云与 CAD 模型对齐(配准),才能精确定位目标位置。DeepGMR 引入高斯混合模型的概率方法,比传统 ICP 算法在遮挡场景下鲁棒得多。
Learning3D 的代码结构非常清晰——整个项目只有 8 个核心目录:
models/ — 所有神经网络模型,每个文件对应一篇论文的官方实现。所有模型继承自 torch.nn.Module,可无缝融入 PyTorch 生态。losses/ — 损失函数集合,含分类损失、Chamfer Distance(倒角距离)、Earth Mover's Distance(推土机距离)、Correspondence Loss 等。data_utils/ — 数据加载器封装,目前支持 ModelNet40 等主流 3D 数据集,也支持用户自定义数据。ops/ — GPU 算子底层操作:SE(3) 变换、四元数操作、旋转矩阵、Sinc 函数等。examples/ — 24 个完整训练/测试脚本,覆盖所有模型的完整训练流程。pretrained/ — 预训练权重,拿来直接推理。以 PointNet 为例:输入 B x N x 3(批量 x 点数 x 坐标)的原始点云,经过多层 1D 卷积(Conv1d + BatchNorm + ReLU)提取逐点特征,最后用对称函数(max pooling)获得全局特征向量。代码逻辑与论文高度一致,但做了模块化封装,方便复用。
DGCNN(动态图卷积网络)则更进一步,不仅提取逐点特征,还通过 KNN(K近邻)构建局部邻接图,利用图结构捕捉点之间的几何关系。get_graph_feature 构建 k-NN 图,Conv2d(6, 64) 中的 6 通道来自每个点的局部相对坐标差。这使得 DGCNN 在分类和分割任务上通常优于 PointNet。
最推荐的安装方式是 PyPI:
pip install learning3d
不过需要注意几个硬性依赖:
安装完成后,用自己数据的流程很清晰:参考 README 中的 UserData 功能,准备好 .ply 或 .pcd 格式的点云文件,填入 data_utils 中的数据格式即可。
必须坦诚地说,Learning3D 作为个人维护项目,存在以下局限:
flownet3d.py 依赖 pointnet2_utils,在某些 CUDA 版本下会报错。这是点云领域 CUDA 算子兼容性的老问题了。Learning3D 所在的 3D 点云深度学习方向正处于快速上升期。随着 Lidar 成本下降(千元级 Lidar 已出现)和自动驾驶规模化落地,大量工程团队需要快速验证点云算法。Learning3D 的价值在于降低了学术到工程的迁移成本——论文代码往往只保证能跑通,Learning3D 提供了统一的接口和测试脚本,可以快速集成到生产流程中。
与此同时,3D Gaussian Splatting(3DGS)和 NeRF 等新技术的崛起也在推动 3D 感知领域的范式转变。Learning3D 目前以传统点云方法为主,后续如何融入这些新技术,将是决定其长期价值的关键。
项目信息