基于深度神经网络的3D模型合成【Transformer vs. CNN】
本文介绍用于3D模型合成的transformer网络与深度卷积网络。
推荐:使用 NSDT场景设计器 快速搭建 3D场景。
1、概述
从单一视角合成 3D 数据是一种基本的人类视觉功能,这对计算机视觉算法来说极具挑战性,这是一个共识。 但在 3D 传感器(如 LiDAR、RGB-D 相机(RealSense、Kinect)和 3D 扫描仪)的可用性和可负担性提高之后,3D 采集技术的最新进展取得了巨大飞跃。
与广泛可用的 2D 数据不同,3D 数据具有丰富的比例和几何信息,从而为机器更好地理解环境提供了机会。 然而,与 2D 数据相比,3D 数据的可用性相对较低,而且采集成本较高。 因此,最近提出了许多深度学习方法,以在不依赖任何 3D 传感器的情况下从可用的 2D 数据中合成 3D 数据。 但在我们深入研究这些方法之前,我们应该了解处理 3D 数据的格式。
合成的三维数据可以根据数据的最终用途用不同的格式表示。 一些常用的格式是:
- 深度图像
- 点云
- 体素
- 网格
深度图像包含场景的深度值,其形式为图像帧中每个像素与相机的距离(以米为单位)。 来自场景的深度信息对于自动驾驶汽车、增强现实、机器人技术等许多任务具有巨大价值。此类信息对于诸如在相机扫描静止场景和虚拟相机中的动画时启用运动视差等任务非常有用, 但是当强调 3D 建模场景中的特定对象时,这些信息在目前的技术水平下变得不充分和不准确。
深度图像:
点云是分布在 3D 空间中的三维点的集合。 这些 3D 点中的每一个都有一个由特定 (x, y, z) 坐标以及其他属性(如 RGB 颜色值)表示的确定性位置。 与深度图像不同,点云表示在没有任何离散化的情况下保留了更多高质量的三维空间几何信息。 然而,点云表示没有点与点之间的局部连接,从而导致自由度和高维性非常大,使得准确合成更加困难。
点云表示:
体素或体积像素是空间网格像素到体积网格体素的直接扩展。 简单来说,体素就是三维空间中的一个像素。 每个体素的相对位置共同定义了体积数据的独特结构。 体素可以看作是具有固定大小的量化点云。 然而,对于 3D 建模,体素表示过于稀疏并且在细节和计算资源之间表现出权衡,这使得它更不可行。
体素表示:
多边形网格是边、顶点和面的集合,它们共同定义了多面体对象的形状和体积。 网格的凸多边形面连接在一起以近似几何表面。 与体素类似,网格也可以看作是从一组连续曲面中采样得到的三维点云集(复杂度相对较低)。 网格面可以是三角形(triangle mesh)、四边形(quad mesh)或凸多边形(n-gon mesh)。 接近更真实的表示,网格也可以由带孔的多边形或凹多边形组成,具体取决于表示的普遍性。 然而,与丢失重要表面细节并且重建表面模型非常重要的体素和点云不同,网格对于许多实际应用来说更受欢迎。 因此,考虑到以上几点,与其他格式相比,多边形网格似乎更真实,合成效果更好。
多边形网格表示:
在这篇博客中,我们将讨论三种可用于从 2D 数据合成 3D 数据的方法。 在这三种方法中,一种方法基于基于Transformer的架构,而另外两种方法分别基于自编码器(AutoEncoder)和基于图的卷积神经网络(CNN)。 这两种方法的主要区别在于,基于 Transformer 的深度网络完全依赖于注意力机制来绘制输入和输出之间的全局依赖关系。
下面我们将首先讨论最近提出的两种使用自编码器和基于图的卷积神经网络来合成 3D 数据的方法。
2、基于自编码器的卷积神经网络
为了理解这种方法,我们将以使用自编码器网络进行 3D 人脸重建和人脸对齐为例。
人脸重建和对齐:
自编码器使用卷积网络将输入的 2D 图像降维到潜在空间,然后使用该潜在空间表示来重建原始 3D 数据格式。 许多研究已经使用自编码器(基于编码器-解码器的架构)来估计 3D 面部可变形模型系数和模型变形函数。 这些研究的目的主要是利用这些 3D 模型变形函数从单个 RGB 图像中恢复相应的 3D 形状,从而同时提供密集的 3D 人脸对齐和重建输出。
然而,此类方法的性能受到人脸模型模板定义的 3D 表示空间的限制。 同样,像体积回归网络 (VRN) 这样的方法使用全卷积层架构来估计 3D 二进制体积作为点云的离散版本。 然而,大多数输出点对应于浪费的非表面点,而且这种离散化限制了输出表示的分辨率。 因此,更好的研究应该是像位置图回归网络 (PRN) 这样的网络,它使用 UV 位置和纹理图共同预测密集对齐并重建 3D 面部形状。
UV位置和纹理贴图:
PRN 以 UV 位置图的形式构建 3D 面部结构的 2D 表示。 UV位置是记录面部点云的3D面部坐标的2D图像。 贴图还在表示中的每个位置附加了 3D 坐标的语义特征。 简单来说,UV 贴图是 3D 数据的 2D 表示,它记录了 UV 空间中所有点的 3D 坐标。
计算机图形学领域的研究人员经常使用 UV 空间和 UV 位置图将 3D 空间参数化为 2D 图像平面。 转到 PRN 的网络架构,网络使用简单的编码器-解码器结构(自编码器)获取输入 RGB 图像并将 2D 图像信息传输到 UV 位置图中。
自动码器使用 10 个下采样残差块和 17 个上采样转置卷积块来拟合此传递函数,最终预测 256×256×3 UV 位置图。 学习到的 UV 位置图有助于直接回归要合成的 3D 人脸的最终 3D 结构和语义特征。 对于像 PRN 这样的训练网络,我们只需要像 2D 图像到 3D 点云映射这样的数据集,这使得这种方法更有用,因为网络的输出格式不受特定 3D 模板或 3D 可变形模型线性空间的限制。
PRN架构:
因此,考虑到该方法的简单性和有效性,PRN 似乎是从 2D 图像合成 3D 数据以用于其网络输出格式的最佳选择之一。
3、基于图的卷积神经网络
如前一节所示,大多数基于自编码器的传统深度学习方法都利用点云和体素数据格式来合成 3D 数据。 特别强调这两种数据格式的主要原因是流行的基于网格的网络架构所施加的限制。 然而,点云和体素表示有其自身的缺点,如第一部分所述。
因此,为了避免体素或点云表示的缺点,许多研究已经转向合成 3D 多边形网格数据,从应用的角度来看,这是一种更理想的格式。 一些在合成网格数据方面非常有效的最佳架构设计方法包括基于图形的卷积神经网络。 在本节中,我们将以 Wang 等人提出的Pixel2Mesh方法为例。
使用Pixel2Mesh的实体重建:
Pixel2Mesh 是一个基于图形的端到端深度学习框架,它将单个 RGB 彩色图像作为输入,并将 2D 图像转换为更理想的相机坐标格式的 3D 网格模型。 基于图形的卷积神经网络提取并利用 2D 图像中的感知特征,通过逐渐变形椭圆体直到达到语义正确和优化的几何形状来生成 3D 网格。 采用的策略是一种由粗到精的方法,使椭球变形过程在几何上平滑稳定。 作者还定义了各种与网格相关的损失函数,以帮助网络捕获更多属性,从而保证物理和视觉上吸引人的 3D 几何结果。
图像特征网络和级联网格变形网络:
Pixel2Mesh 的架构主要由级联网格变形网络和图像特征网络组成。
图像特征网络负责从输入的 2D 图像中提取感知特征,并将这些特征逐步传递给基于图形的级联网格变形网络,以逐步将椭球网格的几何形状变形为目标对象的 3D 网格。
网格变形网络的图卷积网络包含三个变形块以及两个中间图解假脱机层。 变形块逐步处理网格模型的输入图,而中间图反池化层逐渐增加图形顶点以增加图形的信息存储容量,同时仍保持数据的三角形网格形成。
除了架构细节之外,Pixel2Mesh 基于图形的架构的主要优势之一是能够执行同步形状分析,这类似于传统的基于图表的方法,这些方法直接针对表面流形进行卷积运算。 这种方法通过合并网格对象的两种自然表示(图形和表面流形),充当基于图表的方法和 3D 重建方法之间的桥梁。
4、基于 Transformer 的深度架构
卷积神经网络被广泛用于计算机视觉任务,因为它们具有端到端的学习能力,可以直接从数据中执行任务,而无需任何手动设计的视觉特征。 然而,尽管 CNN 的架构设计对计算要求很高,但 3D 合成的任务使这种计算更加密集,并为计算优化和效率提升开辟了广阔的空间。
展望下一代神经架构,Transformers 是可扩展视觉模型的最佳家族,它们不仅与领域无关,而且计算高效且经过优化。 此外,最近的研究表明,Transformer在许多基于计算机视觉的任务上取得了最先进的结果。 为了理解 3D 数据合成中转换器的工作原理,我们将以 Deepmind 的 Polygen 为例。
Polygen生成的模型示例:
Polygen 是一种通过使用基于Transformer的架构按顺序预测网格面和顶点来直接建模 n 边形 3D 网格的方法。 模型设计使得它可以调节一系列输入(对象类、体素和 2D 图像)并以概率方式产生输出,以捕获模棱两可场景中的不确定性。
Polygen网络由顶点模型和人脸模型组成。 顶点模型是一个掩码Transformer解码器,它无条件地表达顶点序列上的分布以对网格顶点建模。 而人脸模型是一个基于pointer网络的Transfer,它有条件地表达可变长度输入顶点序列上的分布以对网格面进行建模。 因此,简单来说,这两个 transformer 模型的目标是通过首先生成网格顶点来估计 3D 网格上的分布,然后使用这些顶点生成网格面。
顶点网络和面网络:
Polygen 中使用的Transformer架构的灵感来自 WaveNet、PixelRNN 和Pointer网络等顺序模型。 这项工作还从 Polygon-RNN(使用多边形分割)中获得了重要灵感,而顶点模型类似于 PointGrow 的定制自注意力架构,它使用自回归分解对 3D 点云进行建模。
与顺序自回归模型相比,PointGrow 具有更浅的自我注意架构,通过对固定长度的点云输入进行操作,使用自我注意机制来预测离散坐标分布。 因此,Polygen 可以被认为是通过新颖的基于Transformer的网络设计手段组合的一些最佳想法的均衡集合。
网格变形块及感知特征池化:
Polygen 的关键特性之一是能够根据输入上下文(上下文示例:2D 图像、对象类)调节输出。
为了实现这种条件性质,顶点和面部模型的输入流被改变以合并上下文。 对于 2D 图像和体素等输入格式,输入首先使用适合域的编码器进行编码,以检索 transformer 解码器的上下文嵌入,从而对嵌入序列执行交叉注意。
而对于像对象类这样的输入格式,预学习的类嵌入被投影到一个向量,该向量被添加到位于每个网络块中的自注意层之后的中间Transformer预测表示。 这是可能的,因为顶点模型的通用性质使用简单、表达能力强且建模能力强的Transformer-解码器架构,允许网络对来自不同领域的数据进行建模。 Transformer利用其高效信息聚合的能力来捕获网格顶点和对象几何中存在的强非局部依赖性。
5、结束语
在这篇博客中,我们讨论了两种主要类型的 3D 合成方法,即卷积深度网络和基于变换器的深度网络。 新一代网络的Transformer以计算效率更高和优化的方式设计,因此可以被认为比传统的卷积网络领先一步。
然而,在接近实时推理场景时,Transformer 要赶上我们在自动编码器部分讨论的相对轻量且推理速度快的方法,还有很长的路要走。 尽管如此,Transformer 的研究范围很广,而且它们的注意力机制能够有效地聚合信息并提取输入和输出之间的全局依赖关系,这使它们更有前途。
原文链接:3D合成深度神经网络 — BimAnt
相关文章:

基于深度神经网络的3D模型合成【Transformer vs. CNN】
本文介绍用于3D模型合成的transformer网络与深度卷积网络。 推荐:使用 NSDT场景设计器 快速搭建 3D场景。 1、概述 从单一视角合成 3D 数据是一种基本的人类视觉功能,这对计算机视觉算法来说极具挑战性,这是一个共识。 但在 3D 传感器&#…...

前端面试题整理之HMTL篇(一)
HTML面试题(一) 前言: 面试题及答案解析,大部分来自网络整理,我自己做了一些简化,如果想了解的更多,可以搜索一下,前端面试题宝典微信公众号或者查百度,另外如果出现错误…...

【论文速递】ICLR2018 - 用于小样本语义分割的条件网络
【论文速递】ICLR2018 - 用于小样本语义分割的条件网络 【论文原文】:CONDITIONAL NETWORKS FOR FEW-SHOT SEMANTIC SEGMENTATION(Workshop track - ICLR 2018) 【作者信息】:Kate Rakelly Evan Shelhamer Trevor Darrell Alexe…...

本地生成动漫风格 AI 绘画 图像|Stable Diffusion WebUI 的安装和局域网部署教程
Stable Diffusion WebUI 的安装和部署教程1. 简介2. 安装环境2.1 Windows2.2 Linux3. 运行4. 模型下载链接5. 局域网部署5.1 Windows5.2 Linux6. 其他资源1. 简介 先放一张WebUI的图片生成效果图,以给大家学习的动力 :) 怎么样,…...

用一行Python代码,为图片上水印版权!
今天一个朋友跟我吐槽:前段时间,我辛辛苦苦整理的一份XX攻略,分享给自己的一些朋友,结果今天看到有人堂而皇之地拿着这份攻略图片去引流,并声称是自己整理的,真是岂有此理!他自己总结吃一堑长一…...
java中的lambda表达式
java中的lambda表达式java中的lambda表达式语法参数的不同写法代码块的不同写法函数式接口运用方法引用object::instanceMethodClass::staticMethodClass::instanceMethod什么是lambda表达式? 带参数变量的表达式。 java中的lambda表达式 我对java中lambda表达式是这…...

0.1opencv库VS环境配置
opencv环境配置 感谢大家学习这门教程。本系列文章首发于公众号【周旋机器视觉】。 这个这门课程的第一篇文章,主要是opencv环境配置。 本教程的环境为 Visual Studio 2019CMake 3.22.3opencv 4.6.0windows 10 1、opencv的源码下载与安装 直接访问opencv官网&…...

第五十七章 树状数组(二)
第五十七章 树状数组(二)一、差分的缺陷二、树状数组与差分三、例题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示样例 1 解释:数据规模与约定代码一、差分的缺陷 差分的作用是能够在O(1)的时间内给一段区间加上相同的数字&am…...
比特币的网络
比特币的网络 1. DNS-seed 在比特币网络中,初始节点发现一共有两种方式。 第一种叫做 DNS-seed,又称 DNS 种子节点,DNS 就是中心化域名查询服务,比特币的 社区维护者会维护一些域名。 比如 seed.bitcoin.sipa.be 这个域名就是由比特币的核心开发者 Sipa 维护的,如果我…...
ChatGPT的模型介绍及GO语言实现API
ChatGPT除了大家熟悉的GPT3之外,还有其他辅助模型,比如处理代码的以及有害信息过滤的系统。总的来说是下面三个组成:GPT-3:一组能够理解和生成自然语言的模型CodexLimited beta:一组可以理解和生成代码的模型ÿ…...

Tile防丢器引入全新防盗模式,苹果Find My功能拓展到大众消费电子
Tile 宣布引入全新的防盗模式,Tile 配件启用之后,反跟踪扫描和安全功能就无法检测到该配件。Tile 为了遏制其物品追踪产品用于追踪某人,此前推出了 Scan and Secure 功能。iPhone 和安卓用户可以通过该功能扫描附近的 Tile 设备,以…...

物联网中RocketMQ的使用
物联网中RocketMQ的使用 1. 背景 随着物联网行业的发展、智能设备数量越来越多,很多常见的智能设备都进入了千家万户;随着设备数量的增加,也对后台系统的性能提出新的挑战。 在日常中,存在一些特定的场景,属于高并发请…...

用Three.js搭建的一个艺术场景
本文翻译自于Medium,原作者用 Three.js 创建了一个“Synthwave 场景”,效果还不错,在此加上自己的理解,记录一下。在线Demo. 地形构建 作者想要搭建一个中间平坦、两侧有凹凸山脉效果并且能够一直绵延不断的地形,接下…...

算法导论【字符串匹配】—朴素算法、Rabin-Karp、有限自动机、KMP
算法导论【字符串匹配】—朴素算法、Rabin Karp、有限自动机、KMP朴素字符串匹配算法Rabin-Karp算法有限自动机KMP算法朴素字符串匹配算法 预处理时间:0匹配时间:O((n-m1)m) Rabin-Karp算法 预处理时间:Θ(m),需要预先算出匹…...

如何在 Python 中验证用户输入
要验证用户输入: 使用 while 循环进行迭代,直到提供的输入值有效。检查输入值在每次迭代中是否有效。如果该值有效,则跳出 while 循环。 # ✅ 验证用户输入的是否是整数num 0while True:try:num int(input("Enter an integer 1-10: …...

JVM详解——类的加载
文章目录类的加载1、Java程序如何运行2、Java字节码文件3、类加载4、类加载的过程5、类加载器6、类的加载方式7、类的加载机制8、双亲委派机制9、破坏双亲委派机制类的加载 1、Java程序如何运行 首先通过Javac命令将.java文件编译生成.class字节码文件。 Javac是Java编译命令&a…...

Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器及使用教程
目录 一、概述 二、在Ubuntu搭建nfs服务器 👉2.1 安装nfs服务器 👉2.2 创建nfs服务器共享目录 👉2.3 修改nfs服务器配置文件 👉2.4 重启nfs服务器 三、客户端访问nfs服务器共享目录 🎈3.1 在nfs客户端挂载服…...

Python-第九天 Python异常、模块与包
Python-第九天 Python异常、模块与包一、了解异常1. 什么是异常:2. bug是什么意思:二、异常的捕获方法1. 为什么要捕获异常?2. 捕获异常的语法3. 如何捕获所有异常?三、异常的传递性1.异常是具有传递性的四、Python模块1. 什么是模…...

博彩公司 BetMGM 发生数据泄露,“赌徒”面临网络风险
Bleeping Computer 网站披露,著名体育博彩公司 BetMGM 发生一起数据泄露事件,一名威胁攻击者成功窃取其大量用户个人信息。 据悉,BetMGM 数据泄漏事件中,攻击者盗取了包括用户姓名、联系信息(如邮政地址、电子邮件地址…...

初探Mysql反向读取文件
前言 Mysql反向读取文件感觉蛮有意思的,进行了解过后,简单总结如下,希望能对在学习Mysql反向读取文件的师傅有些许帮助。 前置知识 在Mysql中存在这样一条语句 LOAD DATA INFILE它的作用是读取某个文件中的内容并放置到要求的表中&#x…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...