segment-lidar
使用Meta AI的Segment-Anything模型(SAM)对航空LiDAR数据进行分割的Python包。
这个包专门设计用于对LiDAR数据进行无监督实例分割。它结合了由Meta Research开发的Segment-Anything模型(SAM)的强大功能和Open Geospatial Solutions的segment-geospatial包,以实现3D点云数据的自动化实例分割。
安装
我们建议使用Python>=3.9
。首先,您需要安装PyTorch
。请按照这里的说明进行操作。
然后,您可以轻松地从PyPI安装segment-lidar
:
pip install segment-lidar
或者,您可以通过运行以下命令从源代码安装:
git clone https://github.com/Yarroudh/segment-lidar
cd segment-lidar
python setup.py install
请注意,当前版本仍在测试中。如果您发现任何问题或错误,请在问题部分报告。第二个版本将实现更高级的功能和特性。
文档
如果您正在使用segment-lidar
,我们强烈建议您花时间阅读文档。文档是一个重要资源,将帮助您了解包的功能,并提供如何有效使用它的指导。
基础教程
这里提供了一个基础教程。
您也可以参考API获取有关不同参数的更多信息。
不进行地面滤波
from segment_lidar import samlidar, view
viewpoint = view.TopView()
model = samlidar.SamLidar(ckpt_path="sam_vit_h_4b8939.pth")
points = model.read("pointcloud.las")
labels, *_ = model.segment(points=points, view=viewpoint, image_path="raster.tif", labels_path="labeled.tif")
model.write(points=points, segment_ids=labels, save_path="segmented.las")
进行地面滤波
from segment_lidar import samlidar, view
viewpoint = view.TopView()
model = samlidar.SamLidar(ckpt_path="sam_vit_h_4b8939.pth")
points = model.read("pointcloud.las")
cloud, non_ground, ground = model.csf(points)
labels, *_ = model.segment(points=cloud, view=viewpoint, image_path="raster.tif", labels_path="labeled.tif")
model.write(points=points, non_ground=non_ground, ground=ground, segment_ids=labels, save_path="segmented.las")
注意:segment-lidar
的最新版本支持定义自定义针孔相机,可以选择是否进行交互式可视化,并将视图保存为图像。详情请参阅文档。
示例数据
为了测试目的,您可以在此处下载示例:pointcloud.las。
这些数据来自AHN-4。更多数据请访问GeoTiles.nl。
模型检查点
点击以下链接下载相应模型类型的检查点。
vit_h
:ViT-H SAM模型。vit_l
:ViT-L SAM模型。vit_b
:ViT-B SAM模型。
Docker镜像
segment-lidar也可以作为Docker镜像使用。
以下是将segment-lidar
作为Docker容器运行的步骤:
- 首先使用
docker pull
命令拉取镜像:
docker pull yarroudh/segment-lidar
- 要运行Docker容器并在其中挂载您的数据和脚本文件,请使用
docker run
命令,并使用-v
选项指定主机目录的路径和您想要挂载数据文件夹的容器目录路径。例如:
docker run -d -v 主机数据的绝对路径:/home/user yarroudh/segment-lidar
这个命令将以分离模式启动一个Docker容器,将主机上的ABSOLUTE_PATH_TO_HOST_DATA目录挂载到容器内的**/home/user/data**目录,并运行yarroudh/segment-lidar
镜像。请勿更改容器内目录的路径。
-
找到容器ID并复制它。你可以使用
docker ps
命令列出所有正在运行的容器及其ID。 -
使用
docker exec
在容器内启动命令,使用容器ID或名称以及你想运行的命令。例如:
docker exec 容器ID python 脚本文件
- 要将命令输出从容器复制到本地路径,使用
docker cp
命令,加上容器ID或名称、容器内文件路径和主机上的目标路径。例如:
docker cp 容器ID:/home/user/输出路径 主机上的路径
- 最后,执行完所有命令并将结果复制到本地机器后,你可以使用
docker stop
命令加上容器ID或名称来停止Docker容器:
docker stop 容器ID
相关仓库
我们要对以下仓库的创建者表示感谢:
请访问这些仓库,了解更多关于使用Meta AI的SAM进行图像栅格自动分割的信息。
许可证
本软件采用BSD 3条款"新"或"修订"许可证,这是一种宽松的许可证,只要你在软件中包含BSD版权和许可声明,就几乎可以无限制地使用该软件。请参阅LICENSE文件了解更详细的信息。
引用
开源软件仓库在科学研究中的使用日益普遍。如果你在研究中使用了这个仓库,请确保在你的工作中适当引用它。这个仓库的推荐引用格式在附带的BibTeX引用中提供。此外,请确保遵守与使用本仓库相关的任何许可条款和条件。
@misc{yarroudh:2023:samlidar,
author = {Yarroudh, Anass},
title = {LiDAR Automatic Unsupervised Segmentation using Segment-Anything Model (SAM) from Meta AI},
year = {2023},
howpublished = {GitHub Repository},
url = {https://github.com/Yarroudh/segment-lidar}
}
Yarroudh, A. (2023). 使用Meta AI的Segment-Anything模型(SAM)进行LiDAR自动无监督分割 [GitHub仓库]。从https://github.com/Yarroudh/segment-lidar 获取
作者
本软件由列日大学地理信息单位的研究工程师Anass Yarroudh开发。 如需更详细的信息,请通过ayarroudh@uliege.be与我们联系,我们很乐意向您提供必要的信息。
版权所有 © 2023,列日大学地理信息单位。根据BSD-3条款许可证发布。