【3D分割】Segment Anything in 3D with Radiance Fields

论文链接:Segment Anything in 3D with Radiance Fields

代码链接:GitHub - Jumpat/SegmentAnythingin3D: Segment Anything in 3D with NeRFs (NeurIPS 2023)

作者:Jiazhong Cen, Jiemin Fang, Zanwei Zhou, Chen Yang, Lingxi Xie, Xiaopeng Zhang, Wei Shen, Qi Tian

发表单位:上海交通大学、华为公司、华中科技大学启蒙学院 .

会议/期刊:NeurIPS 2023

一、研究背景

计算机视觉领域一直在追求一个可以在任何场景下执行基本任务(如分割)的视觉基础模型。在这些研究中,Segment Anything Model (SAM) 是代表性工作之一,因为它在2D图像中的分割表现非常出色。然而,将SAM的能力扩展到3D场景仍然是一个未解决的难题。作者指出,尽管可以复用SAM的管道来采集和半自动注释大量3D场景数据,但由于3D数据的获取和密集注释远比2D复杂,采用这种数据驱动的方法变得不切实际。

获取并标注3D数据集的复杂性导致3D场景中数据稀缺,同时训练3D模型的计算开销大。这使得在3D场景中使用类似于SAM的分割模型成为一项巨大的挑战。传统的做法可能是从零开始建立一个3D基础模型,但这并不经济。

论文的作者意识到一个替代且高效的解决方案:通过3D表示模型为2D基础模型(即SAM)提供3D感知能力,而不是从头开始构建3D基础模型。为此,他们借鉴了辐射场(Radiance Fields)的理念,提出了一个名为Segment Anything in 3D (SA3D) 的新方法。

辐射场模型作为一种新颖的3D表示方式,通过可微渲染技术将多视图的2D图像与3D空间连接起来。该研究提出将SAM与辐射场整合,以促进3D分割。

论文的主要贡献总结如下:

  1. 提出了SA3D框架:该框架是一个创新性的3D分割方法,结合了2D分割基础模型Segment Anything Model (SAM)与辐射场模型(如NeRF和3D Gaussian Splatting),无需重新设计或重新训练即可执行3D分割任务。SA3D通过2D分割模型的扩展,提供了一种高效的方式,将2D图像信息提升到3D场景中,实现准确的3D分割。

  2. 设计了掩码逆向渲染和自提示机制:该方法包含两大核心步骤:掩码逆向渲染用于将2D分割结果投影到3D空间,自提示机制通过在不同视角下生成可靠的提示点,进一步优化分割结果。这一双重过程不断迭代,最终生成精准的3D掩码。

  3. 引入了特征缓存机制:为了加快推理速度,SA3D引入了特征缓存机制,通过预缓存SAM提取的特征显著提升了分割速度,特别是在高效表示如3D Gaussian Splatting的场景下,可将分割速度缩短至2秒内。

  4. 适应不同类型的辐射场:论文中展示了SA3D在不同类型的辐射场下的适应能力,证明了该方法的通用性,能够处理从前向视角到360度全景场景的多种复杂场景。

  5. 扩展了实验评估:论文提供了大量实验结果,包括消融研究和对各组件的深入分析,进一步展示了SA3D在不同场景和数据集上的表现,验证了该方法的有效性和高效性。

给定一个预先训练的辐射场,SA3D会从一个将单个渲染视图作为输入,并输出3D分割结果针对特定目标。

二、预备知识总结

2.1 神经辐射场(NeRF)

NeRF(Neural Radiance Fields)是用于表示3D场景的连续函数,通过多层感知机(MLP)将空间坐标 x \in \mathbb{R}^3和视角方向d \in \mathbb{S}^2映射到相应位置的颜色 c \in \mathbb{R}^3和体积密度 \sigma \in \mathbb{R}。渲染图像时,NeRF通过光线投射技术生成每个像素点的颜色,公式如下:

I_\theta(r)=\int_{t_n}^{t_f}\omega(r(t))c(r(t),d)dt

其中,权重 w(r(t))表示在射线路径 r(t)上的透明

### Segment Anything Model在3D应用场景中的扩展 Segment Anything Model (SAM) 主要专注于二维图像的分割任务,其核心优势在于能够高效地对任意对象进行分割[^1]。然而,随着技术的发展,三维(3D)场景下的物体识别与分割需求日益增长。为了满足这一需求,研究者们正在探索将SAM应用于3D环境的方法。 #### 方法一:基于多视角融合的技术路径 一种可能的方式是从不同角度拍摄同一物体或场景的照片,并利用这些视图来构建3D模型。这种方法依赖于高质量的2D到3D转换算法,可以先使用SAM对每张图片执行精确的对象分割操作,之后再通过专门设计的空间映射函数把这些平面区域投影至立体空间内形成完整的表面表示。此过程涉及到复杂的几何变换计算: ```python import numpy as np from scipy.spatial.transform import Rotation as R def project_2d_to_3d(points, rotation_matrix=R.from_euler('xyz', [0, 0, 0]), translation_vector=np.array([0, 0, 0])): """ 将2D坐标系下的一组点集投射回原始3D世界坐标系中 参数: points (numpy.ndarray): 形状为(N, 2) 的数组,代表N个像素位置(x,y). rotation_matrix (scipy.spatial.transform.Rotation): 描述相机姿态旋转的角度. translation_vector (numpy.ndarray): 表示摄像机相对于世界的平移向量. 返回值: projected_points (numpy.ndarray): 转换后的形状为(N, 3)的世界坐标系下的点云数据. """ # 假设已知内部参数矩阵K和深度z=1的情况下简单反解P=[X,Y,Z]^T K_inv = np.linalg.inv(np.eye(3)) # 这里简化处理,默认单位阵作为内参逆矩阵 homogeneous_coords = np.hstack((points, np.ones((len(points), 1)))) unprojected_homogeneous = K_inv @ homogeneous_coords.T * 1.0 rotated_translated = ((rotation_matrix.as_matrix() @ unprojected_homogeneous).T + translation_vector) return rotated_translated[:, :3] ``` #### 方法二:直接针对LiDAR点云或其他形式的3D传感器输入优化 另一种更直接的办法是修改现有的SAM架构使其可以直接接受来自激光雷达(LiDAR)或者其他类型的3D扫描设备所获取的数据流作为输入源。这通常意味着需要重新定义特征提取层以适应新的维度特性,并调整损失函数以便更好地指导网络学习如何区分不同的物质属性比如反射率等物理性质差异显著的目标类别。对于这类应用来说,保持原有的交互式提示机制同样重要,因为用户可能会希望指定某些特定的兴趣区或者提供额外的信息帮助提高最终结果的质量。 尽管上述两种方案都展示了潜在的研究方向,但在实际部署之前还需要克服许多技术和工程上的难题。例如,确保足够的精度、速度以及鲁棒性;解决由于遮挡造成的不完全观测问题;还有就是成本效益方面的考量等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值