Project Icon

Open3D-ML

Open3D 的扩展,用于处理 3D 机器学习任务

Open3D-ML基于Open3D库,扩展了3D机器学习工具,支持语义点云分割和目标检测等应用。提供预训练模型和训练管道,兼容TensorFlow和PyTorch框架,易于集成到现有项目中。同时,提供数据可视化等通用功能,覆盖多种数据集和算法,提高3D数据处理效率和效果。

Open3D-ML 项目介绍

Open3D-ML 是 Open3D 专门为 3D 机器学习任务开发的一个扩展库。它在 Open3D 核心库之上,增加了用于 3D 数据处理的机器学习工具。该项目主要关注语义点云分割等应用,同时提供预训练模型,可以用于常见任务,并包含训练的操作流程。Open3D-ML 支持 TensorFlow 和 PyTorch,以便与现有项目轻松整合,并且提供了与机器学习框架无关的数据可视化功能。

安装

用户指南

Open3D-ML 已集成在 Open3D v0.11+ 的 Python 分发版中,并与以下版本的机器学习框架兼容:

  • PyTorch 2.0.*
  • TensorFlow 2.13.*(macOS,Linux 见下文)
  • CUDA 10.1, 11.*(在 GNU/Linux x86_64 平台上可选)

使用以下命令可以安装 Open3D:

# 确保 pip 是最新版本
pip install --upgrade pip
# 安装 open3d
pip install open3d

也可以根据需要使用以下命令安装与之配套的 PyTorch 或 TensorFlow:

# 安装配套版本的 TensorFlow
pip install -r requirements-tensorflow.txt
# 安装配套版本的 PyTorch
pip install -r requirements-torch.txt

通过以下命令测试安装是否成功:

# 使用 PyTorch
$ python -c "import open3d.ml.torch as ml3d"
# 使用 TensorFlow
$ python -c "import open3d.ml.tf as ml3d"

对于需要使用不同版本的机器学习框架或 CUDA 的情况,推荐从源码构建 Open3D,或者在 Docker 中构建 Open3D。

开始使用

读取数据集

Open3D-ML 提供了读取常见数据集的类。以下示例展示了如何读取 SemanticKITTI 数据集并进行可视化:

import open3d.ml.torch as ml3d  # 或者使用 open3d.ml.tf

dataset = ml3d.datasets.SemanticKITTI(dataset_path='/path/to/SemanticKITTI/')
all_split = dataset.get_split('all')

print(all_split.get_attr(0))
print(all_split.get_data(0)['point'].shape)

vis = ml3d.vis.Visualizer()
vis.visualize_dataset(dataset, 'all', indices=range(100))

加载配置文件

模型、数据集和流程的配置存储在 ml3d/configs 目录中。用户还可以通过创建自己的 yaml 文件来记录自定义配置。以下为加载和构建配置的示例:

import open3d.ml as _ml3d
import open3d.ml.torch as ml3d # 或者使用 open3d.ml.tf as ml3d

cfg_file = "ml3d/configs/randlanet_semantickitti.yml"
cfg = _ml3d.utils.Config.load_from_file(cfg_file)

Pipeline = _ml3d.utils.get_module("pipeline", cfg.pipeline.name, framework)
Model = _ml3d.utils.get_module("model", cfg.model.name, framework)
Dataset = _ml3d.utils.get_module("dataset", cfg.dataset.name)

cfg.dataset['dataset_path'] = "/path/to/your/dataset"
dataset = Dataset(cfg.dataset.pop('dataset_path', None), **cfg.dataset)
model = Model(**cfg.model)
pipeline = Pipeline(model, dataset, **cfg.pipeline)

语义分割

使用预训练模型进行语义分割

在之前的基础上,可以使用一个预训练模型进行语义分割,并在数据集中的点云上运行模型。以下是怎么样实例化一个预训练模型以及在点云上运行的示例:

import os
import open3d.ml as _ml3d
import open3d.ml.torch as ml3d

cfg_file = "ml3d/configs/randlanet_semantickitti.yml"
cfg = _ml3d.utils.Config.load_from_file(cfg_file)

model = ml3d.models.RandLANet(**cfg.model)
cfg.dataset['dataset_path'] = "/path/to/your/dataset"
dataset = ml3d.datasets.SemanticKITTI(cfg.dataset.pop('dataset_path', None), **cfg.dataset)
pipeline = ml3d.pipelines.SemanticSegmentation(model, dataset=dataset, device="gpu", **cfg.pipeline)

# 下载模型权重
ckpt_folder = "./logs/"
os.makedirs(ckpt_folder, exist_ok=True)
ckpt_path = ckpt_folder + "randlanet_semantickitti_202201071330utc.pth"
randlanet_url = "https://storage.googleapis.com/open3d-releases/model-zoo/randlanet_semantickitti_202201071330utc.pth"
if not os.path.exists(ckpt_path):
    cmd = "wget {} -O {}".format(randlanet_url, ckpt_path)
    os.system(cmd)

# 加载参数
pipeline.load_ckpt(ckpt_path=ckpt_path)

test_split = dataset.get_split("test")
data = test_split.get_data(0)

# 在单个示例上进行推断
result = pipeline.run_inference(data)

# 在测试集上评估性能
pipeline.run_test()

训练模型进行语义分割

与推断类似,Open3D-ML 提供了在数据集上训练模型的接口:

dataset = ml3d.datasets.SemanticKITTI(dataset_path='/path/to/SemanticKITTI/', use_cache=True)

model = RandLANet()

pipeline = SemanticSegmentation(model=model, dataset=dataset, max_epoch=100)

# 在控制台中打印训练进度。
pipeline.run_train()

3D 目标检测

使用预训练模型进行 3D 目标检测

3D 目标检测模型与语义分割模型类似,可以通过实例化一个预训练模型来进行目标检测。以下为示例代码:

import os
import open3d.ml as _ml3d
import open3d.ml.torch as ml3d

cfg_file = "ml3d/configs/pointpillars_kitti.yml"
cfg = _ml3d.utils.Config.load_from_file(cfg_file)

model = ml3d.models.PointPillars(**cfg.model)
cfg.dataset['dataset_path'] = "/path/to/your/dataset"
dataset = ml3d.datasets.KITTI(cfg.dataset.pop('dataset_path', None), **cfg.dataset)
pipeline = ml3d.pipelines.ObjectDetection(model, dataset=dataset, device="gpu", **cfg.pipeline)

# 下载模型权重
ckpt_folder = "./logs/"
os.makedirs(ckpt_folder, exist_ok=True)
ckpt_path = ckpt_folder + "pointpillars_kitti_202012221652utc.pth"
pointpillar_url = "https://storage.googleapis.com/open3d-releases/model-zoo/pointpillars_kitti_202012221652utc.pth"
if not os.path.exists(ckpt_path):
    cmd = "wget {} -O {}".format(pointpillar_url, ckpt_path)
    os.system(cmd)

# 加载参数
pipeline.load_ckpt(ckpt_path=ckpt_path)

test_split = dataset.get_split("test")
data = test_split.get_data(0)

# 在单个示例上进行推断
result = pipeline.run_inference(data)

# 在测试集上评估性能
pipeline.run_test()

训练模型进行 3D 目标检测

除了推断,Open3D-ML 还允许用户训练 3D 目标检测模型:

dataset = ml3d.datasets.KITTI(dataset_path='/path/to/KITTI/', use_cache=True)

model = PointPillars()

pipeline = ObjectDetection(model=model, dataset=dataset, max_epoch=100)

# 打印训练进度
pipeline.run_train()

使用预定义脚本

Open3D-ML 提供的 scripts/run_pipeline.py 脚本为在数据集上训练和评估模型提供了简化的界面。具体命令如下:

python scripts/run_pipeline.py {tf/torch} -c <path-to-config> --pipeline {SemanticSegmentation/ObjectDetection} --<extra args>

脚本适用于语义分割和目标检测任务。脚本中 pipeline 参数必须指定为 SemanticSegmentation 或 ObjectDetection。

项目结构

Open3D-ML 的核心模块在 ml3d 子目录下,已经整合在 Open3D 中的 ml 命名空间中。除此之外,目录中还包含 examplesscripts,为用户提供了入门脚本及示例程序:

├─ docs                   # 文档相关的 Markdown 和 rst 文件
├─ examples               # 示例脚本和 notebooks
├─ ml3d                   # 包含主要的实现,集成在 open3d 中
     ├─ configs           # 相关配置文件
     ├─ datasets          # 通用数据集代码
     ├─ metrics           # 评估模型效果的指标
     ├─ utils             # 与框架无关的工具
     ├─ vis               # 视觉化函数
     ├─ tf                # TensorFlow 的代码实现
     ├─ torch             # PyTorch 的代码实现,细分为数据加载器、模型、模块、流程和工具
├─ scripts                # 示例训练脚本与数据集下载脚本

任务与算法

Open3D-ML 主要处理的任务包括语义分割和目标检测,其提供的模型及性能经过广泛测试。

数据集

Open3D-ML 的代码库支持多种常见数据集的读取,如 SemanticKITTI、Toronto 3D、Semantic 3D、S3DIS 等。

如何使用

项目文档提供了一系列指南,帮助用户在 Open3D-ML 中进行数据可视化、添加新模型、新数据集以及进行分布式训练等操作。

参与贡献

参与 Open3D-ML 项目有多种方式:实现新模型、提供新数据集的读取代码、分享现有模型的参数和权重、报告问题和错误等等。Open3D-ML 鼓励并欢迎社区的积极参与。如果有兴趣分享自己训练的模型权重,可以在拉取请求中附上或链接权重文件。

交流渠道

  • 论坛和在线聊天:用户和开发者可通过论坛与 Discord 等渠道进行讨论和互动。

引用

如果您在研究中使用了 Open3D,请在文末清单中注明引用。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号