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

相关文章

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分