SA3D:基于 NeRF 的三维场景分割方法
Paper: Cen J, Zhou Z, Fang J, et al. Segment anything in 3d with nerfs[J]. Advances in Neural Information Processing Systems, 2024, 36.
Introduction: https://jumpat.github.io/SA3D/
Code: https://github.com/Jumpat/SegmentAnythingin3D
SA3D 是一种用于 NeRF 表示的三维场景的分割技术,只需要用户在单一视角的图像上给出粗略的分割点作为 prompt,就可以在三维场景中分割出相应物体,以体素的形式表示。

目录
- 一. 研究思路
- 二. mask 逆向渲染
- 三. 跨视角自动 prompt
- 四. 实验
- 五. 总结
一. 研究思路
SA3D 根据用户在单一视图上给出的 prompt,使用 SAM 提取 mask 以筛选场景中的体素,从而分割出场景中的三维目标物体。分割三维场景元素的过程如下:在不同视角之间交替进行 mask 逆向渲染 和 跨视角自动 prompt,迭代地完成基于体素网格构建的 3D mask:
- mask 逆向渲染 (mask inverse rendering):将当前视角 SAM 分割的 2D mask 逆向投影到三维空间,以获取 3D mask;
- 跨视角自动 prompt (cross-view self-prompting):在其他视角下自动提取 prompt 点传入 SAM 提取 2D mask;

记 NeRF 初始渲染的图像为 I in \mathbf{I}^{\text {in}} Iin,用户输入的 prompt 点集为 P in \mathcal{P}^{\text {in}} Pin,SAM 根据 prompt 点集分割的 2D mask 为 M SAM in \mathbf{M}_{\text {SAM }}^{\text {in}} MSAM in。先通过 mask 逆向渲染机制将 M SAM in \mathbf{M}_{\text {SAM}}^{\text {in}} MSAMin 投影到三维空间得到 3D mask V \mathbf{V} V,再将 3D mask 投影到二维空间中新的视角得到粗略的 2D mask M ( n ) \mathbf{M}^{(n)} M(n),然后通过跨视角自动 prompt 机制从 M ( n ) \mathbf{M}^{(n)} M(n) 中继续提取 prompt 点 P ( n ) \mathcal{P}^{(n)} P(n),最后使用 SAM 根据 P ( n ) \mathcal{P}^{(n)} P(n) 分割出更加精确的 2D mask M SAM ( n ) \mathbf{M}_{\text {SAM}}^{(n)} MSAM(n)。重复上面的操作,直到获得完整的 3D mask。
二. mask 逆向渲染
因为 SA3D 的分割结果是用体素 V ∈ R L × W × H \mathbf{V} \in \mathbb{R}^{L \times W \times H} V∈RL×W×H 表示的, L × W × H L \times W \times H L×W×H 表示三维场景的长宽高,所以 mask 逆向渲染就是在三维空间中找到对应的 3D mask。每个体素有一个置信度分数 (soft mask confidence score),表示属于 3D mask 的概率,初始化时将所有体素的置信度置零,体素 r ( t ) \mathbf{r}(t) r(t) 的置信度用 V ( r ( t ) ) \mathbf{V}(\mathbf{r}(t)) V(r(t)) 表示。
3D mask 向二维空间投影时,2D mask M \mathbf{M} M 的置信度为:
M ( r ) = ∫ t n t f ω ( r ( t ) ) V ( r ( t ) ) d t \mathbf{M}(\mathbf{r})=\int_{t_n}^{t_f} \omega(\mathbf{r}(t)) \mathbf{V}(\mathbf{r}(t)) \mathrm{dt} M(r)=∫tntfω(r(t))V(r(t))dt
将 M ( r ) \mathbf{M}(\mathbf{r}) M(r) 和 SAM 分割得到的真实 mask M SAM ( n ) \mathbf{M}_{\text {SAM}}^{(n)} MSAM(n) 计算损失来优化 3D mask 的置信度:
L proj = − ∑ r ∈ R ( I ) M S A M ( r ) ⋅ M ( r ) \mathcal{L}_{\text {proj }}=-\sum_{\mathbf{r} \in \mathcal{R}(\mathbf{I})} \mathbf{M}_{\mathrm{SAM}}(\mathbf{r}) \cdot \mathbf{M}(\mathbf{r}) Lproj =−r∈R(I)∑MSAM(r)⋅M(r)
由于初始阶段 mask 存在较大误差,因此在损失函数中增加一个负的细化项,根据多视图 mask 一致性来优化 3D mask:
L proj = − ∑ r ∈ R ( I ) M S A M ( r ) ⋅ M ( r ) + λ ∑ r ∈ R ( I ) ( 1 − M S A M ( r ) ) ⋅ M ( r ) \mathcal{L}_{\text {proj }}=-\sum_{\mathbf{r} \in \mathcal{R}(\mathbf{I})} \mathbf{M}_{\mathrm{SAM}}(\mathbf{r}) \cdot \mathbf{M}(\mathbf{r})+\lambda \sum_{\mathbf{r} \in \mathcal{R}(\mathbf{I})}\left(1-\mathbf{M}_{\mathrm{SAM}}(\mathbf{r})\right) \cdot \mathbf{M}(\mathbf{r}) Lproj =−r∈R(I)∑MSAM(r)⋅M(r)+λr∈R(I)∑(1−MSAM(r))⋅M(r)
三. 跨视角自动 prompt
跨视角自动 prompt 就是要在不同视角上自动采样 prompt 点,从而提供更多的 2D mask 来优化 3D mask。对于每个视角,3D mask 投影到该平面得到粗略的 2D mask M ( n ) \mathbf{M}^{(n)} M(n),使用 Self-prompting 方法从 M ( n ) \mathbf{M}^{(n)} M(n) 中提取一组 prompt 点 P s ( n ) \mathcal{P}_{s}^{(n)} Ps(n)。这里的 M ( n ) \mathbf{M}^{(n)} M(n) 并不是二位图,而是该像素的置信度,下面使用像素 p \mathbf{p} p 阐述 Self-prompting 的过程。
P s ( n ) \mathcal{P}_{s}^{(n)} Ps(n) 初始化为空集,第一个点 p 0 \mathbf{p}_0 p0 选择具有最高置信度分数的点,即 p 0 = a r g m a x P M ( n ) ( p ) \mathbf{p}_0=\mathrm{arg max}_\mathbf{P} \mathbf{M}^{(n)}(\mathbf{p}) p0=argmaxPM(n)(p)。后续新增的 prompt 点需要同时满足与现有 prompt 点靠近和具有较高的置信度分数,因此引入了一个衰减项来调整每个像素的置信度分数:
Δ M ( n ) ( p ) = min { M ( n ) ( p ^ ) ⋅ d ( G ( p ) , G ( p ^ ) ) ∣ p ^ ∈ P s } \Delta \mathbf{M}^{(n)}(\mathbf{p})=\min \left\{\mathbf{M}^{(n)}(\hat{\mathbf{p}}) \cdot d(\mathcal{G}(\mathbf{p}), \mathcal{G}(\hat{\mathbf{p}})) \mid \hat{\mathbf{p}} \in \mathcal{P}_s\right\} ΔM(n)(p)=min{M(n)(p^)⋅d(G(p),G(p^))∣p^∈Ps}
其中 d ( ⋅ , ⋅ ) d(·,·) d(⋅,⋅) 表示 min-max normalized Euclidean distance。计算现有 prompt 点周围点衰减后的置信度分数,选择最高的加入 P s ( n ) \mathcal{P}_{s}^{(n)} Ps(n):
M ~ ( n ) ( p ) = M ( n ) ( p ) − Δ M ( n ) ( p ) \tilde{\mathbf{M}}^{(n)}(\mathbf{p})=\mathbf{M}^{(n)}(\mathbf{p})-\Delta \mathbf{M}^{(n)}(\mathbf{p}) M~(n)(p)=M(n)(p)−ΔM(n)(p)
四. 实验

五. 总结
因为三维场景是由 NeRF 隐式表达的,所以 SA3D 在表示分割出的物体时需要引入新的表达 —— 体素。SA3D 的思路和 SAM3D 1 相似,通过不同视角之间交替进行 mask 逆向渲染和跨视角 Self-prompting,迭代地完成基于体素网格构建的 3D mask。由于是 NeRF 的隐式表达,SA3D 在优化时需要一定时间,从几十秒到几分钟不等,难以做到实时的分割。2
Yang Y, Wu X, He T, et al. Sam3d: Segment anything in 3d scenes[J]. arXiv preprint arXiv:2306.03908, 2023. ↩︎
Segment Anything Model 在 3D 视觉方向上有哪些应用? ↩︎
相关文章:
SA3D:基于 NeRF 的三维场景分割方法
Paper: Cen J, Zhou Z, Fang J, et al. Segment anything in 3d with nerfs[J]. Advances in Neural Information Processing Systems, 2024, 36. Introduction: https://jumpat.github.io/SA3D/ Code: https://github.com/Jumpat/SegmentAnythingin3D SA3D 是一种用于 NeRF 表…...
mysql实战开发之 mysql 删除一张表某个字段的sql语句
有一张表, 我需要删除这张表其中的某一个或者某几个字段, 相信大家在日常开发中应该会遇到这种情况, 然后刚好自己接触的项目安装的mysql关闭了允许远程连接的设置, 也就是说不允许使用类似于navicat 等可视化工具连接, 那么就没办法通过可视化工具直接去通过鼠标操作就可以 完…...
Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)
文章目录 前期准备1. 浏览器开启远程控制指令(1)Edge(2)Chrome 2. 执行python代码(1)先启动浏览器后执行代码(2)通过代码启动浏览器(3)Bug问题记录1ÿ…...
【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里
【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到…...
数据结构——动态顺序表
数据结构的动态顺序表有以下几个操作:创建,销毁,初始化,增删查改和打印以及内存空间不够时的扩容 本文的宏定义: #define SeqTypeData int 1.动态顺序表的创建 typedef struct SeqListInit{//动态顺序表的创建SeqT…...
Android Studio实现内容丰富的安卓宠物医院管理系统
获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.系统公告 3.宠物社区(可发布宠物帖子…...
华为OD机试真题-启动多任务排序-2024年OD统一考试(C卷)
题目描述: 一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。 现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则…...
在没有推出硬盘的情况下,重启mac电脑,外接移动硬盘无法加载显示?
一、mac磁盘工具显示未装载 1.打开终端,输入 diskutil list查看当前硬盘列表,大多数时候,可以解决。 二、使用命令行装载硬盘 执行上面命令后,仍不起作用,则手动挂载,在命令行输入如下内容: …...
C++笔记:从零开始一步步手撕高阶数据结构AVL树
文章目录 高度平衡二叉搜索树实现一颗AVL树结点与树的描述——定义类AVL树的插入操作步骤1:按照二叉搜索树的方法插入结点步骤2:自底向上调整平衡因子步骤3:触发旋转操作(AVL树平衡的精髓)右单旋左单旋左右双旋右左双旋…...
CodeSys通过C函数接口调用Qt
文章目录 1.背景介绍2.修改makefile2.1.将编译器由c改成c2.2.使能opencv库2.3.使能Qt库 3.在代码中使用Qt库函数 1.背景介绍 建议先查看之前的文章【CodeSys中调用C语言写的动态库】,了解如何创建一个能够被codesys调用的动态库。 假如想要在函数中使用Qt或者第三方…...
线性代数笔记18--行列式公式、代数余子式
1. 行列式公式推导 二阶行列式推导 [ a b c d ] [ a 0 c d ] [ 0 b c d ] [ a 0 0 d ] [ a 0 c 0 ] [ 0 b c 0 ] [ 0 b 0 d ] [ a 0 0 d ] − [ b 0 0 c ] a d − b c \begin{align} \begin{bmatrix} a & b \\ c & d \end{bmatrix}& \begin{bmatrix} a &…...
最新2024年项目基金撰写与技巧及GPT融合应用
随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…...
Java八股文(Element Plus)
Java八股文のElement Plus Element Plus Element Plus 什么是Element UI 和 Element Plus? Element UI 和 Element Plus 是基于 Vue.js 的一套非常受欢迎的开源 UI 组件库,用于快速构建具有现代化设计和丰富交互效果的前端界面。 Element UI 和 Element…...
【Hadoop】Hadoop概述与核心组件
目录 Hadoop概述Hadoop 发展历史Hadoop 三大发行版本1.Apache Hadoop(常用)2.Cloudera Hadoop3.Hortonworks Hadoop优势优势总结——4高(高可靠、高扩展、高效、高容错) Hadoop组成1.HDFS管理者:NameNode(n…...
3D地图在BI大屏中的应用实践
前言 随着商业智能的不断发展,数据可视化已成为一项重要工具,有助于用户更好地理解数据和分析结果。其中,3D地图作为一种可视化工具,已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合,以更加直观…...
JavaScript 进阶(二)
一、深入对象 1.1创建对象三种方式 1. 利用对象字面量创建对象 2. 利用 new Object 创建对象 3.利用构造函数创建对象 1.2 构造函数 构造函数 : 是一种特殊的函数,主要用来初始化对象。 使用场景: 常规的 {...} 语法允许创建一个对象。…...
基于ssm+layui的图书管理系统
基于ssmlayui的图书管理系统 账户类型分为:管理员,用户管理员私有功能用户私有功能公共功能技术栈功能实现图 视频演示 账户类型分为:管理员,用户 图书管理系统主要登录账户类型为管理员账户与用户账户 管理员私有功能 账户管理…...
2024年最新阿里云和腾讯云云服务器价格租用对比
2024年阿里云服务器和腾讯云服务器价格战已经打响,阿里云服务器优惠61元一年起,腾讯云服务器61元一年,2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比,阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…...
双指针算法_复写零
题目: 给一个固定长度的数组arr,将数组中出现的每一个0都复写一遍,并且将其余元素都往右移动 且不要再超过数组长度的位置写入元素,在数组上直接修改 示例: 双数组模拟操作: 从示例来看,因为…...
自习室预订系统|基于springboot框架+ Mysql+Java+B/S架构的自习室预订系统设计与实现(可运行源码+数据库+设计文档+部署说明)
推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 学生功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
