计算机视觉: 基于隐式BRDF自编码器的文生三维技术

news2025/1/11 12:35:16

论文链接: MATLABER: Material-Aware Text-to-3D via LAtent BRDF auto-EncodeR

背景

在这里插入图片描述

得益扩散模型和大量的text - image 成对的图片, 现在文生2D的模型已经比较成熟的框架和模型,主流的技术比如说stable diffusion 和 midjourney 以及工业领域runway 等。当2D技术日渐成熟之后,开发者的眼光逐渐转向了文生3D的领域,开创性的工作由DreamFusion提出的Relying on promising Score Distillation Sampling (SDS) 一文中提出SDS_loss,简单的来说其是一种优化3D表示的技术,通过向不同的方向去渲染图片生成,使得生成的图片更加的逼近真实的图片。



在这里插入图片描述

在Dream Dusion工作之后,又有几项突出性的工作提出:

  1. Magic3D: 第一个将DreanFusion生成模型的分辨率由64 提升至512 ,其大致可以分为两个阶段,第一个阶段用NERF , 第二个阶段将模型转成Mesh的格式再给其上色。
  2. Fantasia3D: 同时实现了一个更好的geometry 和现实纹理的生成
  3. ProlificDreamer: 通过优化SDS loss ,从而实现更加逼真的纹理效果。

但是上述的几种方法中,虽然都取得了不错的效果,但是在这些工作中材质的因素却鲜有人考虑,比如说dreamFusion 只考虑了光照的反射因素。而Fantasia3D虽然使用BRDF的材质进行建模,但是其优化的过程中使用的固定的enviroment map所以导致物体非常容易与环境的光照进行耦合。 而真实理想的环境下,我们应当期望不同的材质能与不同的环境做解耦从而形成更加逼真的真实环境下的3D模型。但是由于少有的文本-材料对数据集,目前仅有一些BRDF材料数据库,因此前人的工作在对材质的因素还是止步不前。



MATLABER

在这里插入图片描述

作者提出了一种隐式的BRDF自编码器去实现一个材质的prior。其工作原理大致如上图,首先作者是在前人公开的一个7维的BRDF材质的数据集上做训练,首先将数据通过一个Encoder得到一个隐式空间上的code然后再通过一个Decoder 得到了一个重建后的BRDF材质, 然后去计算重建的损失。除此之外,作者参考前人的工作通过线性插值的方法得到了一个平滑的latent space 记作Zn, 然后Zn通过一个Decoder-Encoder的结构可以恢复成Zn’ 其中添加了Cyclic Loss 和Smoothness Loss 以及初始的latent code 和 经过插值得到的smooth latent space 中间的KL散度的损失。将上述的这四个Loss通过加权平均加起来之后就是整个BRDF自编码器的损失了。可以看到经过优化后的模型恢复的BRDF的材质跟原始的材质还是比较像的。

在这里插入图片描述

通过上一节介绍的BRDF材质的自编码器训练好后,作者就将其整合到几何建模的3D-generation model (参考Fantasia3D工作)里。其整个pipeline,如上图,材质的MLP首先去预测latnt code Z然后通过前文训练好的Decoder去重塑一个7维的BRDF材质,在通过渲染管线把图片渲染出来,再通过将图片加上SDS loss 再去进行扩散的过程,去更新材质的MLP 以及几何建模里的参数,从而实现整个Pipeline。

在这里插入图片描述

为了解决材质与环境解耦的一些问题,在训练的过程中,作者提出了几个trick:

  • 使用了多个环境地图,人为的去创造多个反应光从而使得模型泛化能力增强
  • 训练过程中,不断的旋转环境光,使其模型多光照角度的解耦能力增加
  • SDS 损失去自适应的针对不同材质的变化
  • 添加材质损失的正则项,使得生成的BRDF材质更加的平滑


下面是几个demo,可以看到整个模型生成的3D模型对环境光的解耦能力还是十分真实的。
在这里插入图片描述


除此之外,由于材质的latent code 是一个十分平滑的空间,所以整个模型还可以通过对atent code 进行线性插值的方法去改变最终生成的结果,下面是几个例子可以将材质由黄金变成银,也可以将颜色进行改变。

在这里插入图片描述



整体来说,作者提出的模型基于几个trick相比于前人的工作效果还是很好的。作者在原文中从四个方面(1.3维物体和真实的物体是否能对齐 2. 外观是否真实 3. 外观是否细节 4. 材质与环境光的解耦能力)也做了量化对比实验,可以看到作者提出的模型相比于之前的模型在后面三个维度都是最高的。 Algnment 的不足,作者解释是因为stable diffusion不足导致的,是clip model因为其对文本的理解能力相比于Magic3D模型使用的text-iamge-diffusion model 更差,所以导致对齐的能力相比于Magic3D模型更差。

在这里插入图片描述

未来工作

  • 针对形状和外观能力对齐能力的优化
  • 更大的BRDF的数据库
  • 生成的模型与环境更好的解耦能力
  • 基于SDS loss的优化
  • 3D物体拓展到世界场景

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

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

相关文章

Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁

多分支和分支切换 变基和合并 变基是把本项目的所有提交都列出来按顺序一个个提交到目标分支上去 而合并是把两个分支合并起来,但是旧的分支还是可以启动其他分支,在旧的分支上继续开发 master: A -- B -- C -- M/ feature: D -- Emaster: A -…

2023全新小红书图集和视频解析去水印网站源码

2023全新小红书图集和视频解析去水印网站源码 小红书视频图集解析网站源码,在红书看到好看的图片以及好看的头像,但是直接下载又有水印就非常难受,这个可以一键解析去除水印,支持统计解析次数,本地接口。 源码下载&a…

大厂秋招真题【BFS+DP】华为20230921秋招T3-PCB印刷电路板布线(留学生专场)

华为20230921秋招T3-PCB印刷电路板布线(留学生专场) 题目描述与示例 题目描述 在PCB印刷电路板设计中,器件之间的连线,要避免线路的阻抗值增大,而且器件之间还有别的器任和别的干扰源,在布线时我们希望受…

深度学习入门:基于Python的理论与实现【笔记】

深度学习入门:基于Python的理论与实现这本数的阅读笔记 根据自己的情况总结的,可能有些简单的就没做笔记。 目录 NumPyMatplotlib感知机NumPy 在深度学习的实现中,经常出现数组和矩阵的计算。NumPy的数组类(numpy.array)中提供了很多便捷的方法,在实现深度学习时,我们将使…

力扣 -- 516. 最长回文子序列

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {int ns.size();vector<vector<int>> dp(n,vector<int>(n));//记得从下往上填表for(int in-1;i>0;i--){//记得i是小于等于j的for(int ji;j&l…

reactjs开发环境搭建

Reactjs是一个前端web页面应用开发框架工具集&#xff0c;其支持前端构建页面以及后端构建页面两种常用的开发场景&#xff0c;其中&#xff0c;支持reactjs的开发框架包括next.js、remix、gatsby以及其他&#xff0c;本文主要描述next.js开发环境的搭建&#xff0c;next.js是一…

java docker图片叠加水印中文乱码

java docker图片叠加水印中文乱码 技术交流博客 http://idea.coderyj.com/ 1.由于项目需要后端需要叠加图片水印,但是中文乱码,导致叠加了之后 中文是框框 2.经过多方查找基本都说在 linux下安装字体就解决了,但是尝试了均无效 3.后来忽然想到我的项目是用docker打包部署的,不…

seata框架

Seata简介&#xff1a;&#xff08;Seata | Seata&#xff08;官方网站&#xff09;&#xff09; Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 相关术语&#xff1a; TC (Transaction Coordinator) - 事务…

嵌入式养成计划-32-网络编程----域套接字模型------抓包工具--wireshark

六十九、 域套接字模型 69.1 域套接字的概念 只能做一台主机内的进程间通信&#xff0c;协议族&#xff08;地址族&#xff09;指定为&#xff1a;AF_UNIX AF_LOCALbsp-lcd&#xff1a; s类型文件&#xff0c;就是域套接字如果客户端不手动绑定&#xff0c;则操作系统不会创建…

力扣刷题 day37:10-07

1.二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 方法一&#xff1a;二分法 #方法一&#xff1a;二分法 def…

数百个下载能够传播 Rootkit 的恶意 NPM 软件包

供应链安全公司 ReversingLabs 警告称&#xff0c;最近观察到的一次恶意活动依靠拼写错误来诱骗用户下载恶意 NPM 软件包&#xff0c;该软件包会通过 rootkit 感染他们的系统。 该恶意软件包名为“node-hide-console-windows”&#xff0c;旨在模仿 NPM 存储库上合法的“node-…

vue3+elementPlus ElMessageBox消息框取消按钮位置调整

要求所有的ElMessageBox消息弹出框的取消按钮放在右边&#xff0c;如图 代码如下 <script lang"ts" setup> import { ElMessageBox } from element-plus const btnHandle () >{ElMessageBox.confirm(确定要删除该人员吗&#xff1f;,提示,{cancelButtonCl…

嵌入式养成计划-35------C++绪论------C++数据类型------array容器------命名空间

七十三、 工具QT 73.1 安装步骤 73.2 什么是 Qt Qt 是一个跨平台的 C图形用户界面应用程序框架。 它为应用程序开发者提供建立艺术级图形界面所需的所有功能。 它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组件编程。 73.3 Qt 的优点 跨平台&…

深入了解快速排序:原理、性能分析与 Java 实现

快速排序&#xff08;Quick Sort&#xff09;是一种经典的、高效的排序算法&#xff0c;被广泛应用于计算机科学和软件开发领域。本文将深入探讨快速排序的工作原理、步骤以及其在不同情况下的性能表现。 什么是快速排序&#xff1f; 快速排序是一种基于分治策略的排序算法&am…

【虚拟机栈】

文章目录 1. 虚拟机栈概述2. 局部变量表(Local Variables)3. 操作数栈4. 动态链接4.1 方法的调用&#xff1a;解析与分配 1. 虚拟机栈概述 每个线程在创建时都会创建一个虚拟机栈&#xff0c;其内部保存一个个的栈帧&#xff08;Stack Frame&#xff09;&#xff0c;对应着一次…

【Solidity】智能合约案例——①食品溯源合约

目录 一、合约源码分析&#xff1a; 二、合约整体流程&#xff1a; 1.部署合约 2.管理角色 3.食品信息管理 4.食品溯源管理 一、合约源码分析&#xff1a; Producer.sol:生产者角色的管理合约&#xff0c;功能为&#xff1a;添加新的生产者地址、移除生产者地址、判断角色地址…

阿里云轻量应用服务器流量价格表(计费/免费说明)

阿里云轻量应用服务器套餐有的限制月流量&#xff0c;有的不限制月流量&#xff0c;限制每月流量的套餐&#xff0c;如果自带的免费月流量包用完了&#xff0c;流量超额部分需要另外支付流量费&#xff0c;阿里云百科aliyunbaike.com分享阿里云轻量应用服务器月流量超额收费价格…

信号量机制实现进程互斥,进程同步,进程的前驱关系

信号量机制 一个信号量对应一种资源。 信号量的值这种资源的剩余数量&#xff08;信号量的值如果小于0&#xff0c;说明此时有进程在等待这种资源) P(S )&#xff1a;申请一个资源S&#xff0c;如果资源不够就阻塞等待V(S)&#xff1a;释放一个资源S&#xff0c;如果有进程在…

Linux 磁盘管理+实例

目录 一、文件系统 二、添加磁盘 三、查看磁盘信息&#xff08;块设备&#xff09; 四、分区 1、格式 1&#xff09;MBR分区 2&#xff09;GPT分区 2、管理分区 1&#xff09;使用fdisk 2&#xff09;使用gdisk 3&#xff09;使用parted a.交互式 b.非交互式 3、…

Django 前端模板显示换行符、日期格式

linebreaksbr 显示换行符 <td>{{ data.sku_list|default:"无"|linebreaksbr }}</td> date:"Y年m月d日 H:i" 设置日期格式 <td>{{ data.submit_time|date:"Y年m月d日 H:i" }}</td> 其他语法 forloop 获取循环的索引 …