草庐IT

自然语言融入NeRF,给点文字就生成3D图的LERF来了

机器之心 2023-03-28 原文
NeRF(Neural Radiance Fields)又称神经辐射场,自从被提出以来,火速成为最为热门的研究领域之一,效果非常惊艳。然而,NeRF 的直接输出只是一个彩色的密度场,对研究者来说可用信息很少,缺乏上下文就是需要面对的问题之一,其效果是直接影响了与 3D 场景交互界面的构建。

但自然语言不同,自然语言与 3D 场景交互非常直观。我们可以用图 1 中的厨房场景来解释,通过询问餐具在哪,或者询问用来搅拌的工具在哪,以这种方式就可以在厨房里找到物体。不过完成这项任务不仅需要模型的查询能力,还需要能够在多个尺度上合并语义等。

本文中,来自 UC 伯克利的研究者提出了一种新颖的方法,并命名为 LERF(Language Embedded Radiance Fields),该方法将 CLIP(Contrastive Language-Image Pre-training)等模型中的语言嵌入到 NeRF 中,从而使得这些类型的 3D 开放式语言查询成为可能。LERF 直接使用 CLIP,无需通过 COCO 等数据集进行微调,也不需要依赖掩码区域建议。LERF 在多个尺度上保留了 CLIP 嵌入的完整性,还能够处理各种语言查询,包括视觉属性(如黄色)、抽象概念(如电流)、文本等,如图 1 所示。

论文地址:https://arxiv.org/pdf/2303.09553v1.pdf

项目主页:https://www.lerf.io/

LERF 可以实时交互地为语言提示提取 3D 相关示图。例如在一张有小羊和水杯的桌子上,输入提示小羊、或者水杯,LERF 就可以给出相关 3D 图:

对于复杂的花束,LERF 也可以精准定位:

 厨房中的不同物体:

方法

该研究通过与 NeRF 联合优化语言场构建了新方法 LERF。LERF 将位置和物理尺度作为输入并输出单个 CLIP 向量。在训练期间,场(field)使用多尺度特征金字塔(pyramid)进行监督,该金字塔包含从训练视图的图像裁剪(crop)生成的 CLIP 嵌入。这允许 CLIP 编码器捕获不同尺度的图像语境,从而将相同的 3D 位置与不同尺度的语言嵌入相关联。LERF 可以在测试期间以任意尺度查询语言场以获得 3D 相关性映射。

由于从多尺度的多个视图中提取 CLIP 嵌入,因此通过 LERF 的 3D CLIP 嵌入获得的文本查询的相关性映射与通过 2D CLIP 嵌入获得的相比更加本地化(localized),并且是 3D 一致的,可以直接在 3D 场中进行查询,而无需渲染多个视图。

LERF 需要在以样本点为中心的体积上学习语言嵌入场。具体来说,该场的输出是包含指定体积的图像裁剪的所有训练视图的平均 CLIP 嵌入。通过将查询从点重构为体积,LERF 可以有效地从输入图像的粗略裁剪中监督密集场,这些图像可以通过在给定的体积尺度上进行调节以像素对齐的方式呈现。

LERF 本身会产生连贯的结果,但生成的相关性映射有时可能是不完整的,并且包含一些异常值,如下图 5 所示。

为了规范优化的语言场,该研究通过共享瓶颈引入了自监督的 DINO。

在架构方面,优化 3D 中的语言嵌入不应该影响底层场景表征中的密度分布,因此该研究通过训练两个独立的网络来捕获 LERF 中的归纳偏置(inductive bias):一个用于特征向量(DINO、CLIP),另一个用于标准 NeRF 输出(颜色、密度)。

实验

为了展示 LERF 处理真实世界数据的能力,该研究收集了 13 个场景,其中包括杂货店、厨房、书店、小雕像等场景。图 3 选择了 5 个具有代表性的场景,展示了 LERF 处理自然语言的能力。

图 3

图 7 为 LERF 与 LSeg 的 3D 视觉对比,在标定碗里的鸡蛋中,LSeg 不如 LERF:

图 8 表明,在有限的分割数据集上训练的 LSeg 缺乏有效表示自然语言的能力。相反,它仅在训练集分布范围内的常见对象上表现良好,如图 7 所示。

不过 LERF 方法还不算完美,下面为失败案例,例如在标定西葫芦蔬菜时,会出现其他蔬菜:

有关自然语言融入NeRF,给点文字就生成3D图的LERF来了的更多相关文章

  1. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

  2. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  3. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  4. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  5. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  6. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  7. ruby - 字符串文字前面的 * 在 ruby​​ 中有什么作用? - 2

    这段代码似乎创建了一个范围从a到z的数组,但我不明白*的作用。有人可以解释一下吗?[*"a".."z"] 最佳答案 它叫做splatoperator.SplattinganLvalueAmaximumofonelvaluemaybesplattedinwhichcaseitisassignedanArrayconsistingoftheremainingrvaluesthatlackcorrespondinglvalues.Iftherightmostlvalueissplattedthenitconsumesallrvaluesw

  8. python - Ruby 或 Python 的 3d 游戏引擎? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?

  9. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

  10. ruby - 如何在不使用 HERE-DOCUMENT 语法的情况下在 Ruby 中制作多行字符串文字? - 2

    问题总结我想尝试使用Ruby来完成我在Python中所做的事情。在Python中它有r"""syntaxtosupportrawstrings,这很好,因为它允许将原始字符串与代码内联,并以更自然的方式连接它们,而无需特殊缩进。在Ruby中,当使用原始字符串时,必须使用其次是EOT在单独的行中,这会破坏代码布局。你可能会问,为什么不使用Ruby的%q{}?嗯,因为%q{}与Python的r"""相比有局限性因为它不会转义多个\\\并且只处理单个\.我正在动态生成Latex代码并写入一个文件,该文件稍后用pdflatex编译。Latex代码包含类似\\\的内容在许多地方。如果我使用Rub

随机推荐