3D点云分割之SAGA(cvpr2023) 配置及使用

SAGA:基于 GS 的三维场景分割方法 SAGA:基于GS的三维场景分割方法 Segmentany3dgaussians 阅读详情
AI摘要

本文介绍了SAGA在3D高斯点云中的目标分割技术,利用SAM和3DGaussian-splatting的结合进行高效的实时分割。文章详细描述了训练过程中的损失函数、后处理步骤以及nerf_llff_data/fern数据集的使用。此外,还提供了如何配置环境和执行关键脚本如提取特征和训练3DGS模型的指导。

SAGA即segment any 3d Gaussians, 为3D高斯点云下的目标分割。
在第一帧图片点击一个目标,可在3D点云中分割出来。
paper
github

语义分割采用的是SAM (segment anything), SAM和3d gaussian-splatting结合,
通过训练一个MLP,把SAM特征和3D特征进行映射,从而不需要每帧都分割,缩短耗时,达到ms级。

训练的损失函数有2个,SAM-guidance loss和Correspondence loss.
推理时有后处理过程,
后处理有2步,一个是statistical filtering, 一个是growing.
后面会通过点云看到这2步的效果。

数据集用的是nerf_llff_data/fern.

配置环境。

github上面配环境就一步:

conda env create --file environment.yml

这一步在博主的主机上并不好使,会报错,所以这里把它拆开来执行。
根据environment.yml里面的内容。
cudatookit要根据自己的版本来修改。
pytorch3d==0.7.1的版本直接pip安装不了,下载源码装的(下载地址)。

conda create -n gaussian_splatting python==3.7.13
conda activate gaussian_splatting
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113

#安装pytorch3d==0.7.1
cd third_party
unzip pytorch3d-0.7.1.zip
cd pytorch3d-0.7.1
pip install -e .

pip install tqdm

cd submodules/diff-gaussian-rasterization
pip install -e .

cd diff-gaussian-rasterization_contrastive_f
pip install -e .
cd ../simple-knn/
pip install -e .

cd ../../third_party/segment-anything
pip install -e .

cd kmeans_pytorch
pip install --editable .
pip install plyfile==0.8.1
pip install jupyter
pip install opencv-python
pip install matplotlib
pip install numba  #没有写错,不是numpy

提取features和sam_masks

按github要求运行下面2步,
scene data path,比如用nerf_llff_data/fern,那就到这一层,
down_sample这个参数,原则上提取的features和sam_masks用的图片尺寸要一致,
如果用down_sample=4, 那么都用4.

目前extract_features.py`里面是把原图resize到1024 * 1024的.
所以提取sam_maks时不要用默认的down_sample=4,用1。

python extract_features.py --image_root <path to the scene data> --sam_checkpoint_path <path to the pre-trained SAM model> 

python extract_segment_everything_masks.py --image_root <path to the scene data> --sam_checkpoint_path <path to the pre-trained SAM model>

顺便说一下down_sample使用中会出现的问题:
extract_segment_everything_masks.py它的默认down_sample=4,
如果直接这么用了,意味着它会用images_4下的图片,

但是extract_segment_everything_masks.py中指定的文件夹却是images,
如果你把文件夹名改成images_4, 后面还会报错,因为你提取的sam_masks的文件会跟images_4的图片同名,
你会发现images_4的图片名和images不一样!

所以,不要用downsample=4, 用downsample=1,
你会说,那原图太大了,会出现cuda out of memory。
注意extract_features.py里面是把原图resize到1024 * 1024的,
所以提取的mask也必须是1024 * 1024的,或者只要二者保持一致即可。
因此修改extract_segment_everything_masks.py,加上resize.

if __name__ == '__main__':
    ...
    print("Extracting SAM segment everything masks...")
    for path in tqdm(os.listdir(IMAGE_DIR)):
        name = path.split('.')[0]
        img = cv2.imread(os.path.join(IMAGE_DIR, path))
        img = cv2.resize(img, dsize=(1024, 1024), fx=1, fy=1, interpolation=cv2.INTER_LINEAR) #加上这一句
        masks = mask_generator.generate(img)

训练3DGS

train_scene.py
参数

-s nerf_llff_data/fern

训练3DGS特征
train_contrastive_feature.py

-m SegAnyGAussians/output/XXX

3D分割

这一步在prompt_segmenting.ipynb里面实现,
最后会得到./segmentation_res/final_mask.pt,它是一个mask, 用来过滤点云中的点,以得到分割后的3D点云。
这里面要根据数据的不同改路径,改输入点坐标。

DATA_ROOT = 'your data path'
MODEL_PATH = './output/XXX/'
FEATURE_GAUSSIAN_ITERATION = 30000
SAM_CKPT_PATH = 'your path/sam_vit_h_4b8939.pth'

input_point = np.array([[500, 400]])  #手动选的点坐标
mask_id = 1  #初始有3个mask,选第2个mask作为初始mask

这时可以在后处理第一步filter之后看点云效果

filtered_points, filtered_mask, thresh = postprocess_grad_based_statistical_filtering(pcd=selected_xyz.clone(),
                                                                                          precomputed_mask=mask_.clone(),
                                                                                          feature_gaussians=feature_gaussians,
                                                                                          view=view,
                                                                                          sam_mask=ref_mask.clone(),
                                                                                          pipeline_args=pipeline.extract(
                                                                                              args))

path = './output/XXX/point_cloud/iteration_30000/scene_point_cloud.ply'
colors = load_filtered_point_colors_from_pcd(len(filtered_points), path, filtered_mask)
write_ply_with_color('./segmentation_res/filtered_seg_color.ply', filtered_points,colors)

效果如下,用的是nerf_llff_data/fern

在这里插入图片描述

渲染

根据上面计算出的final_mask.pt渲染点云。

参数如下:
3DGS model: ./output/XXX/
mask: final_mask.pt

python render.py -m <path to the pre-trained 3DGS model> --precomputed_mask <path to the segmentation results> --target scene --segment

这一步结束后会在out/XXX/point_cloud/iteration_30000下面生成这2个文件
它们是没有颜色的点云。

在这里插入图片描述

如果想输出带颜色的点云,可以修改一下prompt_segmenting.ipynb的load_point_colors_from_pcd函数。
用final_mask.pt过滤scene_point_cloud.ply中的点,提取color即可。

这是渲染效果。

在这里插入图片描述

顺带看一下input点云和3DGS之后的点云。

input点云

在这里插入图片描述

3DGS处理后

在这里插入图片描述

SegAnyGAussians(SAGA)项目配置和运行 解决:setup.py中的“cmdclass={'build_ext': BuildExtension}”改为“cmdclass={'build_ext': BuildExtension.with_options(use_ninja=False)}”例如使用下采样4倍后的数据集,那么应该使用images_4的第一张图片来指定提示点。(1)需要把seg_no_mask_point_cloud.ply重命名为point_cloud.ply。(1)mask_id根据需要设置为0或1或2。4、预训练3DGS模型。 阅读详情

相关推荐

当Segment Anything遇上3D高斯溅射:拆解SAGA如何实现‘点一下,分出来’的毫秒级3D分割

SAGA技术将Meta的Segment Anything(SAM)模型与3D高斯溅射结合,实现了毫秒级3D点云分割。这项CVPR 2023的创新通过轻量级MLP桥梁无缝衔接2D与3D特征,支持‘点一下,分出来’的交互体验,解决了传统方法耗时费力的问题。其双损失函数设计和智能后处理流程确保了分割精度与效率,在RTX 3090上响应时间小于60ms,为3D视觉应用带来革命性突破。

weixin_30363981的博客 320

【三维分割】SAGA:Segment Any 3D Gaussians

交互式三维分割技术在三维场景理解和操作中具有重要意义,是一项值得关注的任务。然而,现有的方法在实现细粒度、多粒度分割或争夺大量计算开销方面面临挑战,抑制了实时交互。在本文中,我们引入了分段任意三维gasssin(SAGA),一种新的三维交互分割方法,无缝地将二维分割模型与三维高斯Splatting(3DGS)相结合。SAGA通过设计良好的对比训练,有效地将分割模型生成的多粒度二维分割结果嵌入到三维高斯点特征中。实验评估展现了竞争力的性能。

qq_45752541的博客 7802

从SAM到3D高斯:我是如何用SAGA在NeRF‘蕨类’数据集上实现‘点击即分割’的

本文详细介绍了如何在NeRF‘蕨类’数据集上使用SAGA(Segment Any 3D Gaussians)实现‘点击即分割’功能。从环境配置、数据预处理到训练过程和交互式分割,作者分享了实践中的关键技巧和解决方案,特别是针对down_sample参数一致性和3D高斯点云分割的优化方法。

weixin_42651281的博客 313

【Windows下Segment Any 3D Gaussians(SAGA)的配置及使用 --- 详细版】

3DGS分割一切~windows系统配置

m0_64982248的博客 2454

SAGA:利用3D Gaussian Splatting实现高效三维场景分割

SAGA是一种基于3D Gaussian Splatting技术的高效三维场景分割方法。它通过为每个高斯点学习低维分割特征,将SAM的2D分割知识蒸馏到3D空间,实现了毫秒级的交互式分割。该方法支持点、涂鸦和掩码提示,能快速从复杂三维场景中精准分离目标物体,极大提升了VR/AR、机器人等应用的实时操作效率。

weixin_29057695的博客 251

告别NeRF的漫长等待:用3DGS+SAM实现毫秒级3D物体分割(附SAGA开源代码解读)

本文介绍了SAGA方案如何结合3D高斯泼溅(3DGS)与Segment Anything Model(SAM)实现毫秒级3D物体分割,显著提升实时交互性能。通过开源代码解读,详细解析了3DGS作为理想载体的优势、SAM的2D分割能力迁移到3D空间的方法,以及SAGA的高效推理流程和关键工程实现细节。

weixin_42667269的博客 373

避坑指南:手把手教你用Python 3.7和PyTorch 1.12.1搞定SAGA(CVPR 2023)3D点云分割环境配置

本文详细介绍了在Python 3.7和PyTorch 1.12.1环境下配置SAGA(CVPR 2023)3D点云分割环境的完整流程,包括基础环境准备、PyTorch与CUDA的精确匹配、PyTorch3D源码编译等关键步骤。通过实战经验和避坑指南,帮助开发者高效完成环境搭建,避免常见错误,提升3D点云分割项目的开发效率。

weixin_28701593的博客 296

3D分割之SAGA训练流程解读

3DGS,SAGA训练流程源码解读

蓝羽飞鸟的博客 1125

CVPR 2023新作SAGA实战:手把手教你用3D高斯点云分割任意目标(附完整避坑指南)

本文详细介绍了CVPR 2023新作SAGA(Segment Any 3D Gaussians)的实战应用,从环境配置到3D高斯点云分割的全流程。通过结合3D高斯泼溅与SAM模型,SAGA实现了高效的目标分割。文章提供了完整的避坑指南,包括依赖安装、数据集准备、模型训练与调优等关键步骤,帮助开发者快速掌握这一前沿技术。

weixin_30920597的博客 350

Python逆向实战:突破PDD长连接抓包的技术解析

本文详细解析了如何通过Python逆向技术突破PDD长连接抓包的难点,包括分析PDD的网络机制、绕过SSL证书验证以及完整抓包实战流程。文章重点介绍了使用Frida和VAXposed工具解决长连接和SSL Pinning问题,并提供了Python代码示例和数据分析方案,帮助开发者高效抓取PDD数据。

weixin_28678151的博客 1222

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

当SAM遇上3D高斯泼溅:拆解SAGA如何实现毫秒级3D点云分割(原理+代码解读)

本文深入解析了CVPR 2023提出的SAGA(Segment Any 3D Gaussians)技术,该技术创新性地将Meta的SAM与3D高斯泼溅结合,实现了毫秒级的3D点云分割。通过双向映射桥梁和双损失函数协同训练,SAGA在保持高精度的同时大幅提升处理速度。文章详细介绍了其核心原理、代码实现及配置优化,为3D视觉领域的研究与应用提供了重要参考。

weixin_30892037的博客 435

微信小程序消息推送全攻略:从模板消息到订阅消息的实战避坑指南

本文深入解析微信小程序消息推送机制,对比模板消息、订阅消息与客服消息的核心差异与适用场景。重点提供订阅消息从用户授权设计、前端代码实现到后端稳定发送的完整实战指南,并分享提升消息点击率的文案与运营技巧,帮助开发者构建高效、用户友好的消息推送体系。

b3n4m5q6w7的博客 335

【论文阅读】Segment Any 3D Gaussians

摘要:本文提出SAGA,一种基于3D高斯(3DGS)的高效3D可提示分割方法。SAGA以2D视觉提示为输入,在4ms内完成3D目标分割,其核心是为每个3D高斯附加尺度门控亲和特征,通过尺度感知对比训练策略实现多粒度分割:(1)从SAM提取的2D mask中学习分割能力;(2)采用软尺度门控机制解决多粒度模糊性,根据3D物理尺度动态调整特征通道权重。实验表明,SAGA在保持实时性的同时达到SOTA分割质量。

进阶中的程序员吃吃的博客 1012

用Unity Wheel Collider做坦克转向?3步实现履带式载具物理效果

本文详细解析了如何利用Unity的Wheel Collider组件实现履带式载具的差速转向物理效果。通过思维转换、场景搭建和核心代码实现三步,将Wheel Collider从模拟轮式车辆转向改造为控制履带扭矩差的系统,并深入探讨了参数调试与真实感提升的方法,帮助开发者打造物理反馈扎实的坦克或特种车辆模拟。

weixin_29009971的博客 222

使用Python,OpenCV查找图像中的最亮点

这篇博客展示了,为什么在图像中找到最亮的点之前应用高斯模糊是至关重要的。 通过应用高斯模糊,可以将每个给定半径内的像素平均在一起。取平均值可以去除高频噪声,否则会影响cv2.minMaxLoc函数的结果。 一定要研究高斯模糊半径的恰当值。如果取值太小,将会减轻平均值的影响,而忽略了更大、更亮的区域。但是如果半径太大,将无法探测到小的明亮区域。

qq_40985985的博客 3809

Linux下的Segment Any 3D Gaussians环境配置

解决办法:找到对应的文件,将其删除,然后重新pip install -e . ,比如说我的报错是从diff-gaussian-rasterization中import的文件出现问题,就将diff-gaussian-rasterization文件夹删除,然后重新安装就行。在安装环境之前需先检查cuda版本,在后面安装pytorch3d的时候用的上。在安装完pytorch之后直接进行pytroch3d的安装,pytorch3d的安装算是整个过程最棘手的,但找对链接就还好。(3)pytorch3d安装。

qq_44310990的博客 1582

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

865

SAGA(Segment Any 3D Gaussians)实用操作指南

🔍【核心任务】从零开始搭建可运行的SAGA开发环境,5分钟内完成依赖配置与基础验证 ### 1.1 环境配置三件套 SAGA的环境部署依赖三个关键文件,确保这些文件存在于项目根目录: - **environment.yml**:Conda环境配置清单,包含PyTorch、CUDA等核心依赖 - **prepare_data.sh**:数据预处理脚本,自动下载并格式化训练所需的3D场景数据 -

gitblog_00157的博客 518

第29章:PCL PrincipalCurvatures 曲率估计

PrincipalCurvatures(主曲率估计)是一种用于计算点云表面曲率的算法。曲率描述了曲面局部的弯曲程度,是表面几何特征的重要指标。在点云处理中,估计表面的曲率对于形状分析、物体识别、表面重建等任务非常重要。主曲率是曲面上某一点的最大和最小曲率方向。通过计算点云的主曲率,我们可以获得点云中每个点的局部形状特征。通常情况下,主曲率包括两个主要参数:最大主曲率(最大曲率方向上的曲率)和最小主曲率(最小曲率方向上的曲率)。优点缺点提供了对点云表面局部形状的深入分析。

yumeiguo的博客 211

C# Blazor Server工业监控Web UI:实时数据推送、历史曲线、报警记录,跨浏览器访问(踩坑总结+生产可用)

坑点现象解决方案StateHasChanged()太频繁服务器CPU占用高,浏览器卡顿别100ms刷新一次,1秒刷新一次足够并发高时服务器卡多个用户同时访问,服务器响应慢用Redis做分布式缓存,或者加服务器做负载均衡断线重连后数据丢失浏览器刷新后,实时数据不更新用InfluxDB存历史数据,刷新后重新查询工业现场网络不稳定Blazor Server频繁断线用SQLite本地缓存,断网时数据不丢,联网后补发历史曲线查询慢查询过去7天的数据,要等很久。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 302

【亲测免费】 SAGA(Segment Any 3D Gaussians)安装与使用指南

欢迎来到SAGA的官方实施教程,这是一个用于3D对象分割的强大工具包。本指南将引导您了解项目结构、启动文件以及配置文件的详情,确保您可以顺畅地集成并利用此项目。 ## 1. 项目目录结构及介绍 SAGA的仓库遵循清晰的组织结构以支持易于理解和维护: ``` SegAnyGAussians/ ├── README.md # 项目简介与快速入门指南 ├── enviro...

gitblog_00289的博客 1261

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【亲测免费】 探索SAGA:高效交互式3D高斯体分割框架

>SAGA - Segment Any 3D GAussians,是针对3D场景的一种新颖的、细粒度的、交互式的分割工具。 ![SAGA示例图](./imgs/teaser.png) **SAGA** 是一个基于深度学习的3D高斯体分割框架,能够以毫秒级的速度实现对任意3D高斯分布的精细分割。这个项目的设计灵感来源于其论文[Segment Any 3D Gaussians](https://j...

gitblog_00056的博客 1058

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

标题:**探索3D空间的边界:Segment Anything 3D**

--- **1、项目介绍** --- Segment Anything 3D是由上海人工智能实验室和香港大学的研究者们开发的一个创新性项目。该项目将著名的Segment Anything技术扩展到三维感知领域,通过将2D图像的分割信息转换至3D空间,以期在传统3D感知任务和开放世界感知中发挥作用。尽管项目仍在进行中,但已计划融入其感知代码库Pointcept。 **2、项目技术分析** ---

gitblog_00037的博客 667

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

3DGS语义分割之LangSplat

3DGS + clip分割

蓝羽飞鸟的博客 4168

3DGS 其二:Street Gaussians for Modeling Dynamic Urban Scenes

基于场景表达的不同,可以将场景重建分为和我感觉这里说的其实是隐式辐射场和显式辐射场更贴切。:用 MLP 网络表示连续的体积场景,如 Mip-NeRF360、DNMP 等将其应用场景扩展到了城市街景,已去的不错的渲染效果。:在点云上定义学习神经描述符,并使用神经渲染器执行可微分的光栅化,大大可以提高了渲染效率。然而,它们需要密集的点云作为输入,并在点云稀疏区域的结果相对模糊。

泠山的博客 4670
上一篇: 自定义数据实现SA3D
下一篇: 3d gaussian splatting笔记(paper部分翻译)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论 27
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值