98、Text2Room: Extracting Textured 3D Meshes from 2D Text-to-Image Models

简介

github
在这里插入图片描述
利用预训练的2D文本到图像模型来合成来自不同姿势的一系列图像。为了将这些输出提升为一致的3D场景表示,将单目深度估计与文本条件下的绘画模型结合起来,提出了一个连续的对齐策略,迭代地融合场景帧与现有的几何形状,以创建一个无缝网格

实现流程

在这里插入图片描述
在这里插入图片描述

Iterative 3D Scene Generation

随着时间的推移而生成场景表示网格 M = ( V , C , S ) M=(V,C,S) M=(V,C,S),V——顶点,C——顶点颜色,S——面集合,输入的文本prompts { P t } t = 1 T \{P_t\}^T_{t=1} {Pt}t=1T,相机位姿 { E t } t = 1 T \{ E_t \}^T_{t=1} {Et}t=1T,遵循渲染-精炼-重复模式,对于第 t 代的每一步,首先从一个新的视点渲染当前场景
在这里插入图片描述
r 是没有阴影的经典栅格化函数, I t I_t It\是渲染的图像, d t d_t dt 是渲染的深度, M t M_t Mt 图像空间掩码标记没有观察到内容的像素

使用文本到图像模型

在这里插入图片描述
在深度对齐中应用单目深度估计器 F d F_d Fd b来绘制未观察到的深度
在这里插入图片描述
利用融合方案将新内容 { I ^ t , d ^ t , m t } \{ \hat{I}_t,\hat{d}_t,m_t \} {I^t,d^t,mt} 与现有网格结合起来
在这里插入图片描述

Depth Alignment Step

要正确地结合新旧内容,就必须使新旧内容保持一致。换句话说,场景中类似的区域,如墙壁或家具,应该放置在相似的深度

直接使用预测深度进行反向投影会导致3D几何结构中的硬切割和不连续,因为后续视点之间的深度尺度不一致

应用两阶段的深度对齐方法,使用预训练的深度网络(Irondepth: Iterative refinement of single-view depth using surface normal and its uncertainty),将图像中已知部分的真实深度d作为输入,并将预测结果与之对齐 d ^ p = F d ( I , d ) \hat{d}_p=F_d(I,d) d^p=Fd(I,d)

(Infinite nature: Perpetual view generation of natural scenes from a single image) 优化尺度和位移参数,在最小二乘意义上对齐预测和呈现的差异来改进结果
在这里插入图片描述
通过 m 屏蔽掉未观察到的像素,提取对齐深度 d ^ = ( y d ^ p + β ) − 1 \hat{d}=(\frac{y}{\hat{d}_p}+\beta)^{-1} d^=(d^py+β)1,在蒙版边缘应用5 × 5高斯核来平滑 d ^ \hat{d} d^

Mesh Fusion Step

在每一次迭代中插入新的内容 { I ^ t , d ^ t , m t } \{ \hat{I}_t,\hat{d}_t,m_t \} {I^t,d^t,mt} 到场景中,将图像空间像素反向投影到世界空间点云中
在这里插入图片描述

K ∈ R 3 x 3 K \in R^{3 x 3} KR3x3 是相机位姿参数,W,H是图像宽高。使用简单的三角测量,将图像中的每四个相邻像素{(u, v), (u+1, v), (u, v+1), (u+1, v+1)}形成两个三角形。

估计的深度是有噪声的,这种简单的三角测量会产生拉伸的3D几何形状。

使用两个过滤器来去除拉伸的面在这里插入图片描述

首先,根据边长对面进行过滤。如果任意面边缘的欧几里得距离大于阈值 δ 边缘,则删除该面。其次,根据表面法线与观看方向之间的夹角对面进行过滤
在这里插入图片描述
S 是面集合, i 0 , i 1 , i 2 i_0,i_1,i_2 i0,i1,i2 为三角形的顶点指数, δ s n \delta_{sn} δsn为阈值, m ∈ R 3 m \in R^3 mR3 是归一化法线, v ∈ R 3 v \in R^3 vR3 为世界空间中从相机中心到三角形起始平均像素位置的归一化视角方向,这是避免了从图像中相对较少的像素为网格的大区域创建纹理

最后将新生成的网格补丁和现有的几何形状融合在一起,所有从像素中反向投影到绘制蒙版 m t m_t mt 中的面都与相邻的面缝合在一起,这些面已经是网格的一部分,在 m t m_t mt 的所有边缘上继续三角剖分方案,但使用 m t m_t mt 的现有顶点位置来创建相应的面

Two-Stage Viewpoint Selection

一种两阶段的视点选择策略,该策略从最优位置采样每个下一个摄像机姿态,并随后细化空区域

Generation Stage
如果每个轨迹都从一个具有大多数未观察区域的视点开始,那么生成效果最好。这会生成下一个块的轮廓,同时仍然连接到场景的其余部分

将摄像机位置 T 0 ∈ R 3 T_0∈R^3 T0R3 沿注视方向 L ∈ R 3 L∈R^3 LR3 进行均匀的平移: T i + 1 = T i − 0.3 L T_{i+1}=T_i−0.3L Ti+1=Ti0.3L,如果平均渲染深度大于0.1,就停止,或者在10步后丢弃相机,这避免了视图过于接近现有的几何形状

创建封闭的房间布局,通过选择以圆周运动生成下一个块的轨迹,大致以原点为中心。发现,通过相应地设计文本提示,可以阻止文本到图像生成器在不需要的区域生成家具。例如,对于看着地板或天花板的姿势,我们分别选择只包含单词“地板”或“天花板”的文本提示

Completion Stage
由于场景是实时生成的,所以网格中包含了没有被任何相机观察到的孔,通过采样额外的姿势后验完成场景

将场景体素化为密集的均匀单元,在每个单元中随机取样,丢弃那些与现有几何太接近的,为每个单元格选择一个姿态,以查看大多数未观察到的像素,根据所有选择的相机姿势绘制场景

清理绘制蒙版很重要,因为文本到图像生成器可以为大的连接区域生成更好的结果

首先使用经典的绘制算法绘制小的孔,并扩大剩余的孔,移除所有落在扩展区域并且接近渲染深度的面,对场景网格进行泊松曲面重建。这将在完井后关闭任何剩余的井眼,并平滑不连续性。结果是生成的场景的水密网格,可以用经典的栅格化渲染

Result

在这里插入图片描述
在这里插入图片描述

Limitations

方法允许从任意文本提示生成3D房间几何形状,这些文本提示非常详细并且包含一致的几何形状。然而,方法在某些条件下仍然可能失败。首先,阈值方案可能无法检测到所有拉伸的区域,这可能导致剩余的扭曲。此外,一些孔在第二阶段后可能仍未完全完井,这导致在应用泊松重建后出现过平滑区域。场景表示不分解光线中的材料,光线会在阴影或明亮的灯中烘烤,这是由扩散模型产生的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()

单线程模式 之所以采用单线程,而不是多线程,跟历史有关系。原因是不想让浏览器变得太复杂,因为多线程需要共享资源、且有可能修改彼此的运行结果,对于一种网页脚本语言来说,太复杂了。 好处 实现起来比较简单&#…

nginx国密ssl测试

文章目录 文件准备编译部署nginx申请国密数字证书配置证书并测试 文件准备 下载文件并上传到服务器,这里使用centos 7.8 本文涉及的程序文件已打包可以直接下载。 点击下载 下载国密版openssl https://www.gmssl.cn/gmssl/index.jsp 下载稳定版nginx http://n…

访问者模式 (Visitor Pattern)

定义 访问者模式(Visitor Pattern)是一种行为型设计模式,用于将算法与其作用于的对象结构分离。这种模式主要用于执行操作或应用过程,这些操作需要在不同类型的对象上执行,同时避免让这些对象的类变得过于复杂。 关键…

【Python 训练营】N_5 斐波那契数列

题目 输出斐波那契数列 分析 斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。 在数学上,费波那契数列是以递归的方法来定义&#xff…

9.9 Windows驱动开发:内核远程线程实现DLL注入

在笔者上一篇文章《内核RIP劫持实现DLL注入》介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探索全新的注入方式,通过NtCreateThreadEx这个内核函数实现注入DLL的目的,需要注意的是该函数在微软系统中未被导出使用时需要首…

用XMind2TestCase,测试更轻松

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

C++ Qt QByteArray用法介绍

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 一、QByteArray的基本用法1、初始化和赋值2、访问和修改元素3、 常用方法4、数据转换二、QByteArray与文件操作三、QByteArray与网络编程四、QByteArray数据编码1、Base64 编解…

数据库-MySQL之数据库必知必会10-13章

第10章 创建计算字段 拼接字段 使用Concat()函数 执行算术计算 示例:从 Products 表中返回 prod_id、prod_price 和 sale_price。sale_price 是一个包含促销价格的计算字段。提示:可以乘以 0.9,得到原价的 90%(即 10%的折扣&…

2023.11.24 海豚调度,postgres库使用

目录 海豚调度架构dolphinscheduler DAG(Directed Acyclic Graph), 个人自用启动服务 DS的架构(海豚调度) 海豚调度架构dolphinscheduler 注:需要先开启zookeeper服务,才能进行以下操作 通过UI进行工作流的配置操作, 配置完成后, 将其提交执行, 此时执行请求会被…

数组基础知识

数组基础(不定时更新) 数组基础 数组基础 (1)数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标下对应的数据。数组下标都是从0开始的。数组内存空间的地址是连续的。 (…

【科普知识】什么是步进电机?

德国百格拉公司于1973年发明了五相混合式步进电机及其驱动器,1993年又推出了性能更加优越的三相混合式步进电机。我国在80年代以前,一直是反应式步进电机占统治地位,混合式步进电机是80年代后期才开始发展。 步进电机是一种用电脉冲信号进行…

Verilog基础:时序调度中的竞争(一)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言,Verilog HDL常常需要使用语句描述并行执行的电路,但其实在仿真器的底层,这些并行执行的语句是有先后顺序…

机器学习数据集整理:图像、表格

前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 表格数据 Sklearn 提供了 13 个表格型数据,且数据处理接口统一;LIBSVM 提供了 131 个表格型数据&a…

【TypeScript】常见数据结构与算法(二):链表

文章目录 链表结构(LinkedList)链表以及数组的缺点数组链表的优势 什么是链表?封装链表相关方法源码链表常见面试题237-删除链表中的节点206 - 反转链表 数组和链表的复杂度对比 链表结构(LinkedList) 链表以及数组的缺点 链表…

AcWing103.电影——离散化

题目 莫斯科正在举办一个大型国际会议,有 n n n 个来自不同国家的科学家参会。 每个科学家都只懂得一种语言。 为了方便起见,我们把世界上的所有语言用 1 到 109 之间的整数编号。 在会议结束后,所有的科学家决定一起去看场电影放松一下。…

Interactive Visual Data Analysis

Words&Contents Home | Interactive Visual Data Analysis Book Outline 这本书对视觉、互动和分析方法进行了系统而全面的概述,作为数据可视化方面比较好的读物; 目录 Words&Contents Book Outline (一)Introduct…

AIGC 3D即将爆发,混合显示成为产业数字化的生产力平台

2023年,大语言模型与生成式AI浪潮席卷全球,以文字和2D图像生成为代表的AIGC正在全面刷新产业数字化。而容易为市场所忽略的是,3D图像生成正在成为下一个AIGC风口,AIGC 3D宇宙即将爆发。所谓AIGC 3D宇宙,即由文本生成3D…

VBA_MF系列技术资料1-227

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-04属于定…

安装compiler version 5

这个compiler version5 在我的资源里面可以免费下载; 另外这个东西还需要安装,安装教程在这里:Keil最新版保姆教程(解决缺少V5编译器问题) - 哔哩哔哩 (bilibili.com) 看吧安装好了year

C语言链表使用

目录 双链表增删改查链表带功能函数 双链表增删改查 #include <stdio.h> #include <stdlib.h>// 双链表结点的定义 typedef struct DNode{int data;struct DNode *prev;struct DNode *next; } DNode;// 创建双链表 DNode *createDoublyLinkedList() {int n, i;pri…