本文主要是介绍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 视频分割为视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!