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

LVSM: A LARGE VIEW SYNTHESIS MODEL WITH MINIMAL 3D INDUCTIVE BIAS 论文解读

目录

一、概述

二、相关工作

1、新视角合成

2、优化3D表示

3、可泛化的前馈方法

三、LVSM

1、总体结构

2、encoder-decoder

3、decoder-only  

4、Loss


一、概述

        该论文提出大视角合成模型LVSM,基于Transformer方法,用于场景中或对象级层次从稀疏视角(或单视角)作为输入,进行可扩展和泛化的新视角合成。

        提出了两种新颖的LVSM架构:encoder-decoder LVSM,decoder-only LVSM。

        encoder-decoder LVSM:将输入图像编码到固定长度的潜在表示,并从中解码新视角图像。

        decoder-only LVSM:直接将输入图像映射到新视角输出,完全消除了中间场景表示,减少了3D归纳偏差,decoder-only的方法也实现了更高的质量、可扩展性和零样本泛化能力,在PSNR指标上优于之前的SOTA(GS-LRM)1.5到3.5dB PSNR。

        我觉得LVSM的最大特点在于,依赖Transformer架构完全数据驱动的方法实现高质量新视角合成,不需要再考虑几何,纹理等问题,这也需要进一步的思考。

二、相关工作

1、新视角合成

        基于图像的渲染(IBR)早期一般使用基于图像的渲染使用代理几何,并通过输入参考图像进行加权混合的方式(Modeling and rendering architecture from photographs)。光场方法从密集视图输入中建立4D多视函数切片(Light field rendering)。

        上面两个方法属于20年前老祖级别,近期随着卷积神经网络的发展,将逐渐转变为基于学习的IBR方法来预测深度图或者渲染权重(比如NeRF参数)。另外由于要做更大的场景渲染,所以考虑多视角立体重建。

        而该论文做的事基于大场景,真实数据的可泛化的先验来实现新视角合成。

2、优化3D表示

        NeRF提出可微分的神经辐射场3D表示,通过最小化渲染损失来重建场景。后续工作逐渐在渲染质量、优化速度、放宽输入条件等多方式,来提升NeRF的性能。

        DVGO通过将NeRF于体素信息相结合,Point-NeRF提出基于点的NeRF表示,Gaussian Splatting将3D点引入3DGS来提升渲染速度。

        另外也有一些论文考虑使用稀疏体素,体积分解,哈希技术来降低空间复杂度。

        我们的论文提出不需要3D先验和任何单一场景的优化过程的归纳偏差,来实现LRM的新视角生成。

3、可泛化的前馈方法

        3D归纳偏差(3D Inductive Bias),指在设计前馈网络时,引入一些预定义的3D结构或渲染方程,从而限制了模型的灵活性和泛化能力,无法很好地适应更加复杂多样的场景。3D归纳偏差包括极线约束、平面扫描体积等3D特定先验,尽管这些方法会在某些特定场景取得了一些进展,但是限制了模型的潜在泛化能力和可扩展性。

        可泛化的方法考虑通过NVS推理,并使用神经网络训练场景,来生成3D表示和新视角图像。

        PixelNeRF、MVSNeRF、IBRNet网络考虑使用3D先验来实现可微分的3D渲染。另外,考虑直接学习渲染函数的方法但被证实是不可扩展的且缺乏模型容量,无法捕捉高频细节。SRT方法移除手工设计的3D表示,而学习潜在表示,但他采用的是一个不可扩展的模型+Cross Att.而我们的模型使用完全基于Transformer的模型,有效的学习新视角合成和最小化归纳偏差,不需要学习潜在表示。

        对于以往的方法通过引入3D归纳偏差,而该论文的LVSM考虑完全消除3D归纳偏差,直接从数据中学习渲染函数,提高了模型的可扩展性和渲染质量。

三、LVSM

        LVSM分为两个部分:encoder-decoder部分和decoder-only部分。

1、总体结构

        首先对于输入图像I_i使用Plucker射线\left \{ P_i \right \}对于每一个像素进行嵌入,最后在分解为不重叠的patch中,p个patch\left \{ I_{i,j},P_{i,j} \right \}。之后将这组输入引入线性层得到输入tokenx_{i,j}

        对于目标视图的Plucker光线P^t,通过相机内参和外参计算而来,并且通过一个线性层得到目标视图的每一个patch的Plucker射线嵌入。

                                                                q_t=Linear_t(P_t^j)

        经过一个full-transformer来计算LVSM的输出。

                                                                y_i=M(q_i|x_i)

        之后通过线性层加unpatchify来恢复输出空间结构的新视角生成\hat{I}^t

                                                \hat{I}_j^t=Sigmoid(Linear_{out}(y_t))

2、encoder-decoder

特殊字母含义:

        x:输入图像token序列

        x':编码器处理后的输入token序列

        y:最终合成目标视图

        z:编码器处理后的中间潜在表示

        z':解码器更新后的潜在表示

        e:用于聚合输入token信息的可学习的潜在token,是人为给定的

        q:目标视图中的plucker射线嵌入

        对于encoder-decoder模型是需要潜在表示存在的,而decoder-only不再需要潜在token序列。

        

3、decoder-only  

4、Loss

        损失函数由两部分组成:MSE和\lambda权重的光感损失

参考项目:LVSM: A Large View Synthesis Model with Minimal 3D Inductive Bias 

相关文章:

LVSM: A LARGE VIEW SYNTHESIS MODEL WITH MINIMAL 3D INDUCTIVE BIAS 论文解读

目录 一、概述 二、相关工作 1、新视角合成 2、优化3D表示 3、可泛化的前馈方法 三、LVSM 1、总体结构 2、encoder-decoder 3、decoder-only 4、Loss 一、概述 该论文提出大视角合成模型LVSM,基于Transformer方法,用于场景中或对象级层次从稀…...

7.《双指针篇》---⑦三数之和(中等偏难)

题目传送门 方法一:双指针 1.新建一个顺序表用来返回结果。并排序数组。 2.for循环 i 从第一个数组元素遍历到倒数第三个数。 3.如果遍历过程中有值大于0的则break; 4.定义左右指针,以及target。int left i 1, right n - 1; int target -nums[i];…...

鸿蒙ArkTS中的布局容器组件(Scroll、List、Tabs)

1、Scroll组件 Scroll组件是一个可滚动的容器组件,用于在子组件的布局尺寸超过父组件尺寸时提供滚动功能。它允许在其内部容纳超过自身显示区域的内容,并通过滚动机制来查看全部内容。这对于显示大量信息(如长列表、长篇文本或大型图像等&…...

mybatis连接PGSQL中对于json和jsonb的处理

pgsql数据库表字段设置了jsonb格式;在java的实体里使用String或者对象转换会一直提示一个错误: Caused by: org.postgresql.util.PSQLException: ERROR: column "xx" is of type jsonb but expression is of type character varying 需要加一…...

Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化

官网文档地址:https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/ 使用版本:Redis7.4.1 什么是 ACL? ACL(Access Control List),权限控制列表,是 Redis 提供的一种…...

内网学习一:windows基础

工作组介绍 按照不同的计算机功能或工作部门将计算机列入不同的工作组。要是想访问某一个工作组的资源 只需要双击该部门的工作组,就可以看到该组内的所有计算机。 目的:在大型网络中,方便管理员去管理设备 加入工作组 右击计算机图标---…...

编译工具与文件学习(一)-YAML、repos、vcstoolcolcon

YAML YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,常用于配置文件、数据交换和存储结构化数据。YAML 的设计目标是简洁、易读,并且能够表示复杂的数据结构。 YAML 文件的基本语法 基本结构: Y…...

使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名

作者:来自 Elastic Jeff Vestal 了解如何使用 Hugging Face 的模型在 Elasticsearch 中托管和执行语义重新排序。 在这篇简短的博文中,我将向你展示如何使用 Hugging Face 中的模型在搜索时在你自己的 Elasticsearch 集群中执行语义重新排序。我们将使用…...

CKA认证 | Day1 k8s核心概念与集群搭建

第一章 Kubernetes 核心概念 1、主流的容器集群管理系统 容器编排系统: KubernetesSwarmMesos Marathon 2、Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8s。 Kubernetes用于容器化应用程序的部署&#x…...

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 审题 猜测备份在www.zip中,输入下载文件。 知识点 反序列化 解题 查看代码 看到index.php中包含了class.php,直接看class.php中的代码 查看条件 当usernameadmin,password100时输出flag 构造反序列化 输入select中&#…...

【c++丨STL】vector模拟实现

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 一、vector底层刨析 二、模拟实现 1. 属性、迭代器以及函数声明 2. 功能实现 交换两个容器的内容 构造函数 拷贝构造 赋值重载 析构…...

SQLAlchemy 介绍与实践

postgresql 实践 pydantic 实践 1. SQLAlchemy 介绍 SQLAlchemy 是一个 ORM 框架。SQLAlchemy 是一个用于 Python 的 SQL 工具和对象关系映射(ORM)库。它允许你通过 Python 代码来与关系型数据库交互,而不必直接编写SQL语句。 简单介绍一下…...

docker进行SRS直播服务器搭建

docker进行SRS直播服务器搭建 docker构建参考地址: 地址: https://github.com/ossrs/srs https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \-p 8000:8000/udp -p 10080:10080/udp ossrs/sr…...

windows server2019下载docker拉取redis等镜像并运行项目

一、基本概念 1、windows server 指由微软公司开发的“Windows”系列中的“服务器”版本。这意味着它是基于Windows操作系统的,但专门设计用于服务器环境,而不是普通的桌面或个人用户使用。主要用途包括服务器功能、用户和资源管理、虚拟化等 2、dock…...

数据结构(8.7_2)——败者树

多路平衡归并带来的问题 什么是败者树 败者树的构造 败者树的使用 败者树在多路平衡归并中的应用 败者树的实现思路 总结...

设计模式-七个基本原则之一-里氏替换原则

里氏替换原则(LSP)面向对象六个基本原则之一 子类与父类的替代性:子类应当能够替代父类出现的任何地方,且表现出相同的行为。行为的一致性:子类的行为必须与父类保持一致,包括输入和输出、异常处理等。接口…...

k8s中基于overlay网络和underlay网络的网络插件分别有哪些

在 Kubernetes 中,不同的网络插件会使用 overlay 或 underlay 网络来连接 Pod 和节点。以下是基于 overlay 网络和 underlay 网络的常见 Kubernetes 网络插件: 1. 基于 Overlay 网络的插件 这些插件通过隧道封装技术(如 VXLAN、GRE 等&#…...

一文详解java的数据类型

1. 题记 Java是一门对数据类型敏感的语言,本博文主要总结介绍java语言的数据类型。 2. java的数据类型 Java 的数据类型分为基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 2.1 基本数…...

Flink API 的层次结构

Apache Flink 提供了多层 API,每层 API 针对不同的抽象层次和用途,使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明:...

lua入门教程:math

在Lua中,math库是一个非常重要的内置库,它提供了许多用于数学计算的函数。这些函数可以处理各种数学运算,包括基本的算术运算、三角函数、对数函数、随机数生成等。结合你之前提到的Lua中的数字遵循IEEE 754双精度浮点标准,我们可…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...