【NIPS2024】Unique3D:从单张图像高效生成高质量的3D网格

背景(现有方法的不足):

基于Score Distillation Sampling (SDS)的方法:从大型二维扩散模型中提取3D知识,生成多样化的3D结果,但存在每个案例长时间优化问题/不一致问题。
目前通过微调多视角扩散模型或训练快速前馈模型解决上述问题,但它们仍存在一致性问题和分辨率限制,无法实现复杂的几何形状和精细纹理。

贡献:

Uniique3D:
一个多视角扩散模型+对应的法线扩散模型生成带有法线图的多视角图像;
一个多级放大过程来逐步提高生成的分辨率;
ISOMER即时一致网格重建算法将颜色和几何先验整合到网格结果中。
在这里插入图片描述

模型结构:

高分辨率多视角生成
并非从零开始训练,而使用Stable Diffusion[53]的预训练权重进行初始化,并编码多视角依赖关系,对其进行微调,以获得一个能够从单张野外图像生成四张正交视图图像(分辨率为256)的多视角扩散模型。
对多视角感知ControlNet[54]进行微调,以提高图像分辨率。
法线图预测:仅依靠纯RGB图像很难重建正确的几何形状。为了有效捕捉目标3D形状的丰富表面细节,我们微调了法线扩散模型,来预测与多视角彩色图像对应的法线图。
即时一致网格重建算法(ISOMER)

三个主要步骤:
估计3D对象的粗略拓扑结构并直接生成初始网格;
采用由粗到精的策略进一步逼近目标形状;
显式处理多视角之间的不一致性,重建高保真且复杂的细节。整个网格重建过程不超过10秒。

**初始网格估计:**基于网格的重建方法[60,61]在优化过程中难以改变拓扑连接性,这要求在初始化时正确的拓扑构建。整合正视图的法线图,通过积分公式获取深度图:
在这里插入图片描述
积分之前对法线图进行随机旋转,重复多次,然后利用这些积分的平均值来计算深度,提高可靠性。

**由粗到精的网格优化:**迭代优化网格模型以最小化损失函数。包括基于掩码的损失和基于法线的损失。最终的损失由两者加和而成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为了应对在有限视图法线监督下可能出现的表面塌陷问题(如图3-(b)所示),我们在每一步中采用一种称为“扩展”的正则化方法。每个顶点沿着其法线方向移动一小段距离,类似于权重衰减。

**显示目标优化:**为了应对多视角不一致性和几何细化,需要找到一个更合适的优化目标。由于单视图监督下,虽然无法重建完整的模型,但可见区域内的网格形状可以满足监督要求,并且具备高度的细节结构,基于此提出为每个顶点分配一个独特的优化目标,称为ExplicitTarget。
在这里插入图片描述

它是一个网格中顶点集合到颜色集合的映射函数。顶点 v的结果通过监督视图的加权和计算,权重由余弦角度的平方决定。(这是因为投影面积与余弦值成正比,且预测准确度也与余弦值正相关)
目标损失函数定义为:
在这里插入图片描述

衡量网格渲染结果和原始渲染的差异,M代表了不同的视角点。

实验:

数据集:Objaverse数据集的一个子集。所有图像都以2048×2048像素的分辨率进行渲染,对每个物体的水平方向渲染了八个正交投影。
在这里插入图片描述

图像生成:初始级别使用了Stable Diffusion Image Variations Model[53]的权重进行初始化,而后续级别则使用经过ControlNet-Tile[54]微调的放大版本。最后阶段使用了预训练的Real-ESRGAN模型[55]。法线图预测的初始阶段同样从上述Stable Diffusion Image Variations模型初始化。

定性/定量对比:在 GSO[69] 数据集上计算了 PSNR、SSIM、LPIPSandClip-Similarity[68]、ChamferDistance(CD)、VolumeIoUandF 分数的度量。
在这里插入图片描述

消融实验:

比较了有无ExplicitTarget和扩展正则化的样本,验证了ET对于几何重建效果的改善以及扩展正则化对于塌陷现象的避免。
在这里插入图片描述

局限性和未来工作:

多视角预测模型对于倾斜或非透视输入的预测可能不够理想。
当前的几何着色算法尚不支持纹理贴图。
未来计划通过在更大规模且多样化的数据集上进行训练,来增强多视角预测模型的鲁棒性。

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

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

相关文章

手机LCD分区刷新技术介绍

分区刷新也称为分区变频,LCD分区刷新功能的目的是将屏幕分为上下半区,分区显示不同帧率,上方区块High Frame Rate,下方区块Low Frame Rate。使用者可以动态自定义上方高刷显示区的结尾位置。 当前的智能手机屏幕上,显示…

NLP算法具备技能

摘要:好久不看理论,最近把自己学过以及用到过的东西都列了出来,主要是这个大纲体系,详细的内容部分是使用LLM来辅助编写的。 一、大模型 1.1 常用大模型 1.1.1 Qwen ‌Qwen大模型‌是由阿里巴巴开发的系列大语言模型&#xff…

学习日志022 -- python事件机制

作业: 1】思维导图 2】完成闹钟 main.py import sysfrom PySide6.QtCore import QTimerEvent, QTime,Qt from PySide6.QtGui import QMovie,QMouseEvent from PySide6.QtWidgets import QApplication, QWidget from Form import Ui_Formclass MyWidget(Ui_Form,Q…

JAVAWeb中的Servlet学习

一 Servlet简介 1.1动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源.例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Servle…

重生在我在21世纪学C++—赋值操作符、类型转换、单目操作符

一、赋值操作符 在变量创建的时候给一个初始值叫初始化。在变量创建好后,再给⼀个值,这叫赋值。 int a 100 ; //这叫初始化 a 200 ; //这叫赋值, 就是赋值操作符 赋值操作符 是⼀个随时可以给变量(不能是常…

03、Node.js安装及环境配置

1.下载node.js 下载地址:Node.js 2.安装 2.1 自定义安装路径(可以选择默认) 下图根据本身的需要进行,我选择了默认Node.js runtime,然后Next: Node.js runtime :表示运行环境 npm package mana…

【Java】反射简介

框架的核心和架构师的核心 反射和代理是重中之重 反射 反射的作用 在运行的时候由代码获取类的信息 三种获取类信息的方式: 对象.getClass()Class.forName("类的路径")类.class Class :一个用来存储类信息的类 获取类信息是获取的整体的…

Qt入门8——Qt文件

1. Qt文件概述 文件操作是应用程序必不可少的部分。Qt作为⼀个通用开发库,提供了跨平台的文件操作能力。Qt 提供了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件复制或重命名等。 2. 输入输出设备类 在…

常量变量和一些运算符

3.4 变量 常量:!final关键字 final修饰基本类型不可以第二次赋值final修饰的引用类型不可以第二次改变指向final修饰的类不可以被继承final修饰的方法不可以被重写final防止指令重排序,遏制流水线性能优化,保障多线程并发场景下…

内存管理面试常问

为什么要有虚拟内存? 虚拟内存 如果你是电⼦相关专业的,肯定在⼤学⾥捣⿎过单⽚机。 单⽚机是没有操作系统的,所以每次写完代码,都需要借助⼯具把程序烧录进去,这样程序才能跑起来。 另外, 单⽚机的 CPU …

MongoDB分片集群搭建及扩容

分片集群搭建及扩容 整体架构 环境准备 3台Linux虚拟机,准备MongoDB环境,配置环境变量。一定要版本一致(重点),当前使用 version4.4.9 配置域名解析 在3台虚拟机上执行以下命令,注意替换实际 IP 地址 e…

【HarmonyOS】层级轮播卡片效果

【HarmonyOS】层级轮播卡片效果 一、功能效果: 1.上下堆叠由大到小的卡片层叠效果。 2.上层卡片可手势左右滑动,自动左滑动。 3.三层卡片随滑动,内容进行依次切换。 二、开发思路 【完整代码见章节三】 1.最上层使用swiper进行轮播效果…

Python_Flask02

所有人都不许学Java了,都来学Python! 如果不来学的话请网爆我的老师 连接前的准备 安装pymysql 和 flask_sqlalchemy,安装第三下面两个所需要的包才能连接上数据库 pip install pymysql pip install flask_sqlalchemy pymysql是一个Pyth…

实验13 使用预训练resnet18实现CIFAR-10分类

1.数据预处理 首先利用函数transforms.Compose定义了一个预处理函数transform,里面定义了两种操作,一个是将图像转换为Tensor,一个是对图像进行标准化。然后利用函数torchvision.datasets.CIFAR10下载数据集,这个函数有四个常见的…

linux下使用gdb运行程序,查看程序崩溃原因

1.什么是gdb? gdb 是 GNU Debugger 的缩写,是一个功能强大的用于调试程序的开源调试器工具。它可以帮助开发人员诊断和解决程序中的错误、跟踪程序执行过程、查看变量的值等。gdb 支持多种编程语言,包括 C、C、Objective-C、Fortran 等,并可…

鸿蒙arkts怎么打印一个方法的调用堆栈

做鸿蒙开发的时候,也想看一下一个方法到底是哪里调用的,工程太大,断点太麻烦,可以加堆栈日志。 在你的方法中加上这两句,就可以跟到堆栈日志 let err new Error() console.log(>>>>>>err.stack) …

IDE如何安装插件实现Go to Definition

项目背景 框架:Cucumber Cypress 语言:Javascript IDE:vscode 需求 项目根目录cypress-automation的cypress/integration是测试用例的存放路径,按照不同模块不同功能创建了很多子目录,cucumber测试用例.feature文…

如何通过 Windows 自带的启动管理功能优化电脑启动程序

在日常使用电脑的过程中,您可能注意到开机后某些程序会自动运行。这些程序被称为“自启动”或“启动项”,它们可以在系统启动时自动加载并开始运行,有时甚至在后台默默工作。虽然一些启动项可能是必要的(如杀毒软件)&a…

探索自然语言处理奥秘(NLP)

摘要 自然语言处理(NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音,并与人类进行基本的对话交流。 通俗理解 自然语言处理(NLP&#xff09…

# issue 8 TCP内部原理和UDP编程

TCP 通信三大步骤: 1 三次握手建立连接; 2 开始通信,进行数据交换; 3 四次挥手断开连接; 一、TCP内部原理--三次握手 【第一次握手】套接字A∶"你好,套接字B。我这儿有数据要传给你,建立连接吧。" 【第二次…