当前位置: 首页 > news >正文

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} VRL×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 =rR(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 =rR(I)MSAM(r)M(r)+λrR(I)(1MSAM(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


  1. Yang Y, Wu X, He T, et al. Sam3d: Segment anything in 3d scenes[J]. arXiv preprint arXiv:2306.03908, 2023. ↩︎

  2. Segment Anything Model 在 3D 视觉方向上有哪些应用? ↩︎

http://www.lryc.cn/news/318891.html

相关文章:

  • mysql实战开发之 mysql 删除一张表某个字段的sql语句
  • Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)
  • 【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里
  • 数据结构——动态顺序表
  • Android Studio实现内容丰富的安卓宠物医院管理系统
  • 华为OD机试真题-启动多任务排序-2024年OD统一考试(C卷)
  • 在没有推出硬盘的情况下,重启mac电脑,外接移动硬盘无法加载显示?
  • C++笔记:从零开始一步步手撕高阶数据结构AVL树
  • CodeSys通过C函数接口调用Qt
  • 线性代数笔记18--行列式公式、代数余子式
  • 最新2024年项目基金撰写与技巧及GPT融合应用
  • Java八股文(Element Plus)
  • 【Hadoop】Hadoop概述与核心组件
  • 3D地图在BI大屏中的应用实践
  • JavaScript 进阶(二)
  • 基于ssm+layui的图书管理系统
  • 2024年最新阿里云和腾讯云云服务器价格租用对比
  • 双指针算法_复写零
  • 自习室预订系统|基于springboot框架+ Mysql+Java+B/S架构的自习室预订系统设计与实现(可运行源码+数据库+设计文档+部署说明)
  • 基于Java+SpringMVC+vue+element宠物管理系统设计实现
  • 用miniconda建立PyTorch、Keras、TensorFlow三个环境
  • 【QT 5 +Linux下qt软件点击.sh脚本运行+Dconf编辑器+学习他人文章+番外篇:点击脚本运行软件】
  • 多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文
  • .NET后端返回File文件,及前端处理直接在浏览器下载
  • 如何压缩图片文件大小?教大家几种方法
  • Qt 如何搭建Lua的运行环境
  • 产品推荐 - ALINX XILINX FPGA开发板 Artix-7 XC7A100T-2FGG484I
  • Github 2024-03-16 开源项目日报Top10
  • 【使用postman测试python接口】
  • 【C++ 】list 类