SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

2024-09-09 03:44

本文主要是介绍SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要

我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室内场景、室外场景和原始 LiDAR。 对多个 3D 数据集(例如 Objaverse、S3DIS、ScanNet、Semantic3D 和 KITTI)的演示凸显了 SAM2POINT 强大的泛化能力。 据我们所知,我们提出了 3D 中 SAM 最忠实的实现,这可以作为未来快速 3D 分割研究的起点。

1 INTRODUCTION

在之前的工作中发现了三个主要问题,这些问题阻碍了他们充分利用 SAM 的优势:

  • 2D-3D 投影效率低下。大多数现有作品将 3D 数据表示为其 2D 数据,作为 SAM 的输入,并将分割结果反投影到 3D 空间。
  • 三维空间信息的退化。对 2D 投影的依赖会导致细粒度 3D 几何和语义的丢失,因为多视图数据通常无法保留空间关系。此外,2D 图像无法充分捕获 3D 物体的内部结构,从而严重限制了分割精度。
  • 失去prompting灵活性。SAM 的一个引人注目的优势在于其通过各种提示选项进行交互的能力。 不幸的是,这些功能在当前方法中大多被忽视,因为用户很难使用 2D 表示来指定精确的 3D 位置。
  • 有限的域名可转移性。

概述SAM2POINT的三个功能:

  • Segmenting Any 3D as Videos. 用体素化来模拟视频。(体素化(Voxelization):这是一种将三维物体或场景转换为体素(voxel)网格的技术。体素是三维空间中的像素(pixel),类似于二维图像中的像素。体素化可以将复杂的三维物体或场景简化为由体素组成的网格,便于计算机处理和渲染。)体素化3D的数据是这样的维度:w×h×l×3(这通常指的是一个三维图像数据的格式,其中 w 代表宽度(width),h 代表高度(height),l 可能代表深度(length)或者层数(layers),3 通常表示颜色通道数,比如 RGB(红绿蓝)。很像视频的格式w×h×t×3:这通常指的是视频数据的格式,其中 w 同样代表宽度,h 代表高度,t 代表时间(time),也就是视频的帧数,3 同样表示颜色通道数。
  • 支持多种3Dprompts。3D points, bounding boxes, and masks。
  • 可推广到各种场景。可以有效地分割单个对象、室内场景、室外场景和原始 LiDAR,突出了其跨不同领域的卓越可转移性。

2 SAM2POINT

2.1 3D DATA AS VIDEOS

我们的目标是将P转换为一种数据格式,一方面SAM 2可以以零样本的方式直接处理,另一方面可以很好地保留细粒度的空间几何形状。为此,我们采用3D体素化技术,体素化是在 3D 空间中有效执行的,从而避免了信息退化和繁琐的后处理。

如何将三维输入的体素化表示转换为可以被特定系统(SAM 2)处理的视频格式?

  • 与视频格式的相似性

    • 体素化表示的格式与视频数据的格式 w×h×t×3非常相似,其中 t 代表时间帧数。
    • 这种相似性使得体素化数据可以被视频处理系统直接处理

2.2 PROMPTABLE SEGMENTATION

1、3D Point Prompt

使用3D Point Prompt来辅助三维体素分割的过程。

定义一个三维点提示 pp=(xp,yp,zp),这个点在三维空间中作为一个锚点(anchor point)。

②定义三个正交的二维截面:以 pp 为锚点,定义三个相互垂直的二维截面。这些截面在三维空间中分别对应于三个不同的平面。

③分割三维体素:从这些二维截面开始,将三维体素沿着六个空间方向分割成六个子部分,分别是:前面、后面、左面、右面、上面和下面。

④将子部分视为不同的视频:将每个分割得到的子部分视为一个独立的视频,其中二维截面作为视频的第一帧,而 pp被投影为二维点prompt。

⑤应用 SAM 2 进行并行分割:使用 SAM 2 系统对这六个“视频”进行并行的分割处理。SAM 2 系统能够同时处理多个视频流,并对每个视频流进行分割。

⑥整合分割结果:将六个视频的分割结果整合起来,形成最终的三维掩码(mask)预测。这个掩码预测代表了三维空间中目标对象的分割结果。

2、3D Box Prompt

使用3D Box Prompt来辅助三维体素分割的过程。

3D Box Prompt:定义一个三维盒子提示 bp=(xp,yp,zp,wp,hp,lp)其中 (xp,yp,zp)表示三维空间中的几何中心坐标,(wp,hp,lp) 表示盒子的宽度、高度和长度。

使用几何中心作为锚点:将三维盒子的几何中心作为锚点,用于定义三维空间中的分割。

③表示三维体素为六个不同的视频:如前所述,将三维体素沿着六个空间方向分割成六个子部分,每个子部分被视为一个独立的视频。

投影三维盒子到二维截面:对于每个方向的视频,将三维盒子 bp投影到相应的二维截面上,这个投影的盒子用作分割的二维提示点(box point)

支持带有旋转角度的三维盒子:支持三维盒子带有旋转角度,例如 (αp,βp,γp),这些角度分别代表绕 x、y、z 轴的旋转。对于带有旋转的三维盒子,采用投影后的盒子的边界矩形(bounding rectangle)作为二维提示。

分割过程:在每个方向的视频上,使用投影得到的二维提示(无论是单个点还是边界矩形)来辅助分割过程。应用分割算法(如 SAM 2)对每个视频进行处理,以识别和分割出目标对象。

整合分割结果:将六个方向的视频分割结果整合起来,形成最终的三维掩码(mask)预测。

3、3D Mask Prompt

三维掩码提示(3D Mask Prompt):定义一个三维掩码提示 Mp∈Rn×1Mp∈Rn×1,其中 nn 表示点的数量。每个点的值是 1 或 0,1 表示被掩码(masked)的区域,0 表示未被掩码(unmasked)的区域。

使用质心作为锚点:将三维掩码提示的质心(center of gravity)作为锚点。质心是所有掩码区域点的加权平均位置,可以认为是掩码区域的几何中心。

分割三维空间为六个视频:与之前的方法类似,将三维空间沿着六个空间方向分割成六个子部分,每个子部分被视为一个独立的视频。

利用掩码提示与截面的交集:对于每个方向的视频,计算三维掩码提示与相应二维截面的交集,这个交集用作二维掩码提示(2D mask prompt)来辅助分割。

分割过程:使用二维掩码提示来辅助分割算法(如 SAM 2)对每个视频进行处理,以识别和分割出目标对象。

后处理步骤:这种类型的提示可以作为后处理步骤,用于提高之前预测的三维掩码的准确性。通过比较预测的掩码与掩码提示的交集,可以对预测结果进行微调,修正错误或不精确的部分。

整合分割结果:将六个方向的视频分割结果整合起来,形成最终的三维掩码(mask)预测。

未完待续~~~

这篇关于SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150061

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点