单图像3D重建AI算法综述【2023】

news2024/12/26 19:14:47

计算机视觉是人工智能的一个快速发展的领域,特别是在 3D 领域。 本概述将考虑一个应用任务:2D 和 3D 环境之间的转换。

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 

1、2D和3D的转换

关于2D和3D的转换,存在两种任务:从3D模型创建2D图像,或者从2D图像重建3D模型。

1.1 正向任务:从3D模型创建2D图像

首先,我们将分析如何解决计算机图形学的正向任务,即使用 3D 模型创建 2D 图像,并熟悉基本概念。

渲染是从 3D 模型转变为 2D 投影的过程。 你可能听说过其中一些方法:

  • 光栅化(rasterization)是最早、最快的渲染方法之一。 光栅化将模型视为多边形网格。 这些多边形的顶点嵌入了位置、纹理和颜色等信息。 然后将这些顶点投影到垂直于透视图的平面上。 光栅化存在重叠对象的问题:如果表面重叠,则渲染时最后绘制的部分将被反射,这将导致显示错误的对象。 这个问题是使用z-buffering解决的(事实上,z-buffer就是深度图)。
  • 射线投射(ray casting)。 与光栅化不同,光线投射期间不会出现重叠表面的潜在问题。 光线投射,顾名思义,就是从相机的角度将光线投射到模型上。 光线输出到图像平面上的每个像素。 它首先碰到的表面将在渲染过程中显示,并且第一个表面之后的任何其他交叉点都不会被绘制。
  • 光线追踪(ray tracing)。 尽管光线投射具有诸多优点,但该技术仍然缺乏正确建模阴影、反射和折射的能力。 光线追踪方法的开发就是为了帮助解决这些问题。 光线追踪的工作原理与光线投射类似,只是它能更好地显示光线。 基本上,从相机的角度来看的主光线被引导到模型上以产生次级光线。 击中模型后,将发射阴影光线、反射光线或折射光线,具体取决于表面属性。

1.2 逆向任务:从2D图像重建3D模型

现在我们已经考虑了从 3D 模型构建 2D 图像的直接问题,让我们看看解决逆问题的方法:从 2D 图像构建 3D 模型。

二维照片是三维场景的投影。 3D 场景是 3D 网格、顶点、面、纹理贴图以及从相机或视点查看的光源的集合。 为简单起见,我们将场景限制为单个 3D 对象。 如果我们能够恢复创建 2D 照片的原始 3D 场景,我们应该能够通过使用与创建输入 2D 照片相同的视点将 3D 对象投影到 2D 来验证这一点。

要重建3D对象,需要计算顶点、面、光源和纹理的所有可能组合,当以 2D 投影时,这些组合应该在给定输入图像的情况下给出等效的 2D 图像,前提是相机位置是 相同的。 这本质上是一个搜索问题。 但暴力破解的问题在于,可以创建的顶点、面、纹理贴图和光照的组合数量巨大,因此我们无法通过暴力破解来解决这个问题。

让我们看看现有的解决这个问题的方法!

2、从2D图像重建3D模型的解决方案

这里我们介绍几种从单张2D图像重建3D模型的解决方案:DIB-R、Im2Struct、ATLAS和Mesh R-CNN。

2.1 DIB-R

DIB-R 是一种差分渲染器,它使用可微分光栅化算法对像素值进行建模。 它有两种分配像素值的方法。 一个用于前景像素,另一个用于背景像素。 在这里,与标准渲染相反,标准渲染将像素值分配给覆盖像素的最近的面,前景光栅化被视为顶点属性的插值。 在每个前景像素上,我们执行 z 缓冲测试并将其分配给最近的覆盖面。 每个像素都只受该面的影响。 因此,前景像素的计算方式是使用每个顶点的权重对最近的三个相邻顶点进行插值。 对于背景像素,即未被 3D 对象的任何面覆盖的像素,该值是根据像素到最近面的距离计算的。

DIB-R可以生成具有传统渲染难以实现的逼真光照和阴影效果的图像。

2.2 Im2Struct:SMN+SRN

结构掩膜网络 (SMN:Structural Masking Network) 根据不同比例的输入 2D 图像创建对象掩膜。 这是一个多层卷积神经网络(CNN)。 它的任务是保存有关表单的信息,同时查看不相关的信息:背景和纹理。

结构恢复网络(SRN:Structure Restoring Network)以长方体结构的形式递归地重建对象细节的层次结构。 SRN接收来自SMN的输入数据,添加2D图像的CNN特征,然后将这些函数传递给递归神经网络(RvNN)解码成3D结构。 在输出中,我们得到具有合理空间配置的三维长方体形式的图像。

与传统 3D 扫描方法相比,Im2Struct 具有多个优势,因为它可以从单个 2D 图像恢复物体的 3D 结构,这通常比从多个视点扫描物体更快、更便宜。

2.3 ATLAS

ATLAS将任意长度的 RGB 图像序列作为输入。 每幅图像的内部特征和姿势都是已知的。 这些图像通过 2D CNN 主干进行特征提取。 然后将对象投影回 3D 体素体积并使用当前平均值进行累积。 一旦图像元素以 3D 形式组合,我们就直接使用 3D CNN 对 TSDF 进行回归。

ATLAS 可用于多种行业,包括制造、工程和考古。 ATLAS 3D 的一个限制是它要求被扫描的物体是静止的,这在某些应用中可能并不总是可行。 此外,系统可能难以捕捉具有高反射或透明表面的物体的精细细节和纹理。

2.4 Mesh R-CNN

Mesh R-CNN框架采用两阶段方法:在第一阶段,它使用卷积神经网络 (CNN) 检测和分割图像中的对象,类似于流行的 Mask R-CNN 框架。 在第二阶段,它使用网格预测网络对每个对象实例的一组 3D 顶点进行回归。

Mesh R-CNN 的主要优点之一是它能够重建对象的详细 3D 网格,包括其细粒度的几何形状和纹理。 这使得它对于虚拟现实、增强现实和 3D 打印等应用非常有用

3、从单张2D图像生成深度图

我们介绍了几种解决逆向图形任务的最先进的解决方案。 所有这些解决方案都可以帮助你解决各种任务,例如重建房间、创建 3D 局部地图、从单个图像重建 3D 场景,甚至估计农作物或地形的高度和深度以指导种植、收割和灌溉决策。

请记住,所有这些解决方案都基于不同的渲染、体素预测、网格预测等方法。 但它们都有一个共同的需求,即以一种或另一种形式构建或预测深度图。

这就是为什么我也建议单独考虑构建深度图的问题。

让我们看一下单目图像预测深度图的几种最先进的解决方案。

3.1 GLPN

GLPN单目深度估计网络具有贯穿整个网络的全局和局部特征路径的新架构。 该框架的整体结构如下:transformer编码器使模型能够学习全局依赖性,并且所提出的解码器通过跳跃连接和特征融合模块构建局部路径,成功地将提取的特征恢复到目标深度图中。

3.2 Dense Depth模型

Dense Depth模型的编码环节使用在 ImageNet 中预训练的 DenseNet-169 网络将 RGB 输入图像编码为对象向量。然后将该向量输入到一系列连续的层中,并增加采样,以构建分辨率等于输入一半的最终深度图。 这些上采样层及其相关的带宽连接形成了解码器。

3.3 Midas

Midas架构以视觉多连接transformer为基础来表示。 过去成功预测的整体编码器-解码器结构被保留。 通过提取非重叠部分,然后对其平滑表示(DPT-Base 和 DPT-Large)进行线性投影,或者通过应用 ResNet-50 (DPT-Hybrid),将输入图像转换为标记。 图像嵌入辅以位置嵌入和独立于补丁的标记。 标记要经历几个转换阶段。 从不同阶段收集标记作为多分辨率图像(重新组装)。 Fusion 模块逐渐合并和上采样视图以生成详细的预测。

4、众包之手

在后一种情况下,MIDAS 能够通过链接新的数据源来实现其结果,而这是以前没有人实现过的。 大规模收集不同的深度数据集是很困难的,因此引入了一种工具来组合互补的数据源。 此外,基于 3D 电影的新数据集提供了有关各种动态场景的可靠信息。

因此,我想重点关注3D方向的数据问题。 每个开发人员都面临这个问题,并且必须以某种方式回避它,包括在架构上。 我描述的所有这些解决方案都使用几乎相同的开放数据集。

这还不够,因为由于遮挡、光照条件差、视角有限等多种原因,收集如此复杂和高质量的数据并不是那么简单。 当没有足够的可用数据时,就很难准确估计场景的深度和结构,从而导致 3D 重建不准确或不完整。

众包可以作为解决 3D 重建需要更多数据的问题的潜在解决方案。 通过利用大量个人的集体努力,众包可以提供场景的额外数据和视角,从而提高 3D 重建的准确性和完整性。

例如,众包平台可用于收集大量贡献者从不同角度拍摄的场景的多幅图像。 然后可以使用多视图立体或运动结构技术处理这些图像,以创建更准确的场景 3D 重建。

这正是 Neatsy 项目中为了部分弥补 3D 数据缺乏而实施的内容。 Neatsy 开发了用于虚拟调整鞋子尺寸的人工智能软件。 他们使用 Toloka 众包平台进行额外的数据收集(超过 5 万张新照片),并对模型的指标进行了改进。 他们的软件使用大约 50 种不同的测量方法创建脚的 3D 模型,并帮助你找到一双完美的运动鞋。 该项目已经继续进行,现在他们还可以诊断足部的健康问题,这一切都归功于人群中的数据。 这只是开发 3D 技术的巨大潜力的一个例子。

5、结束语

有许多最先进的解决方案可用于正向和逆向图形任务以及预测深度图。 我们研究了每种方法在实际应用中的情况,并注意到由于缺乏 3D 数据而造成的限制。 众包平台有潜力解决数据收集问题并支持现实计算机视觉应用的 3D 技术开发。


原文链接:单图像3D重建AI综述 - BimAnt

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

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

相关文章

Flink 运行架构和核心概念

Flink 运行架构和核心概念 几个角色的作用: 客户端:提交作业JobManager进程 任务管理调度 JobMaster线程 一个job对应一个JobMaster 负责处理单个作业ResourceManager 资源的分配和管理,资源就是任务槽分发器 提交应用,为每一个…

【C++上层应用】1. 异常处理

文章目录 【 1. C的标准异常 】【 2. 异常转移处理 】2.1 throw 抛出异常2.2 try 捕获异常2.3 catch 捕获异常2.4 实例 【 3. 定义新的异常 】 异常是程序在执行期间产生的问题,比如编译报错、链接错误等。 【 1. C的标准异常 】 C 提供了一系列标准的异常&#xf…

聊一聊go的单元测试(goconvey、gomonkey、gomock)

文章目录 概要一、测试框架1.1、testing1.2、stretchr/testify1.3、smartystreets/goconvey1.4、cweill/gotests 二、打桩和mock2.1、打桩2.2、mock2.2.1、mockgen2.2.1、示例 三、基准测试和模糊测试3.1、基准测试3.2、模糊测试 四、总结4.1、小结4.2、其他4.3、参考资料 概要…

数电实验-----实现74LS153芯片扩展为8选1数据选择器以及应用(Quartus II )

目录 一、74LS153芯片介绍 管脚图 功能表 二、4选1选择器扩展为8选1选择器 1.扩展原理 2.电路图连接(Quartus II ) 3.仿真结果 三、8选1选择器的应用 1.三变量表决器 2.奇偶校验电路 一、74LS153芯片介绍 74ls153芯片是属于四选一选择器的芯片。…

Python---函数的嵌套(一个函数里面又调用了另外一个函数)

函数嵌套调用------就是一个函数里面又调用了另外一个函数。 基本语法: # 定义 函数B def funcB():print(这是funcB函数的函数体部分...)# 定义 函数A def funcA():print(- * 80) # 这一行为了更好区分print(这是funcA函数的函数体部分...)# 假设我们在调用funcA…

FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码

catlog 需求具体步骤工程描述去掉相关调试文件切换顶层模块并导出相应模块为网表文件切换回原顶层模块并添加相应保护模块的qxp文件再次编译工程 参考: 需求 有时需要将源码交付给第三方,但是源码中部分模块涉及到的核心代码无法暴漏给第三方。因此&…

视频转码方法:多种格式视频批量转FLV视频的技巧

随着互联网的发展,视频已成为日常生活中不可或缺的一部分。然而,不同的视频格式可能适用于不同的设备和平台,因此需要进行转码。在转码之前,要了解各种视频格式的特点和适用场景。常见的视频格式包括MP4、AVI、MKV、FLV等。其中&a…

【数据结构与算法】Kadane‘s算法(动态规划、最大子数组和)

文章目录 一、算法原理二、例题2.1 最大子数组和2.2 环形子数组的最大和 一、算法原理 Kadanes算法是一种用于解决最大子数组和问题的动态规划算法。这类问题的目标是在给定整数数组中找到一个连续的子数组,使其元素之和最大(数组含有负数)。…

采集1688整店商品(店铺所有商品、店铺列表api)

返回数据: 请求链接 {"user": [],"items": {"item": [{"num_iid": "738354436678","title": "国产正品i13 promax全网通5G安卓智能手机源头厂家批发手机","pic_url": "http…

elementui表格自定义指令控制显示哪些列可以拖动

Vue.directive(tableBorder, function (el, {value}) {// value允许传字符串数字和数组el.classList.add(z_table_hasBorder)let hasStyle el.querySelector(style)if(hasStyle){hasStyle.remove()}let style document.createElement(style)let str .z_table_hasBorder .el…

基于ResNet框架的CNN

数据准备 DATA_URL http://download.tensorflow.org/example_images/flower_photos.tgz 一、训练集和验证集的划分 #spile_data.pyimport os from shutil import copy import randomdef mkfile(file):if not os.path.exists(file):os.makedirs(file)file flower_data/flower…

代码随想录算法训练营第四十九天| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

文档讲解:代码随想录 视频讲解:代码随想录B站账号 状态:看了视频题解和文章解析后做出来了 123.买卖股票的最佳时机III class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices) 0:return 0dp [[0] * 5 for _ in…

【监控系统】日志可视化监控体系ELK搭建

1.ELK架构是什么 ELK是ElasticsearchLogstashKibana的简称。 Elasticsearch是一个开源的分布式搜索和分析引擎,可以用于全文检索、结构化检索和分析,它构建在Lucene搜索引擎库之上,是当前使用较为广泛的开源搜索引擎之一。 Logstash是一个…

Linux从 全栈开发 centOS 7 到 运维

Linux从 全栈开发centOS 7 到 运维 一 Linux 入门概述1.1 操作系统1.2 Linux 简介1.3 Linux 系统组成1.4 Linux 发行版1.4 Linux 应用领域1.5 Linux vs Windows 二 环境搭建【狂神说Java】服务器购买及宝塔部署环境说明为什么程序员都需要一个自己的服务器服务器如何购买买完服…

gitlab利用CI多工程持续构建

搭建CI的过程中有多个工程的时候,一个完美的构建过程往往是子工程上的更新(push 或者是merge)触发父工程的构建,这就需要如下建立一个downstream pipeline 子仓库1 .gitlab-ci.yml stages:- buildbuild_job:stage: buildtrigger:project: test_user/tes…

远程文件包含演示

远程文件包含 基本介绍 受害机器 10.9.47.181 攻击者机器1 10.9.47.41 攻击者机器2 10.9.47.217 实现过程 受害者机器开启phpstudy 并且开启允许远程连接 攻击者机器1上有一个文件,内容是phpinfo(); 攻击者机器1提供web服务使得受害者机器能够访问到攻击者…

APP源码|智慧校园电子班牌源码 智慧校园云平台

智慧校园云平台电子班牌系统包括:智慧校园信息管理平台、saas后台管理平台、微信客户端平台、智慧班牌智能终端软件。主要用于构建学校基础架构,进行成员管理、权限分配以及运营数据监管等,是“智慧校园”的“根基”,是各项应用和…

buildadmin+tp8表格操作(8) 表格下方添加 合计行

表格的下方可以自定义添加一个合计行&#xff0c;如果有其它的需求&#xff0c; 我们可以添加我们自已需要的行&#xff0c; 并不局限于合计行 以上就可以给表格的最下方添加一个合计行了 完整代码如下 <template><div class"default-main ba-table-box"&…

python 就是随便玩玩,生成gif图,生成汉字图片,超级简单

文章目录 主方法调用LetterDrawingWordDoingImage 上图 你也想玩的话&#xff0c;可以直接上码云去看 码云链接 主方法调用 import analysisdata.WordDoingImage as WordDoingImage import analysisdata.LetterDrawing as LetterDrawingif __name__ __main__:# 输入的文本&a…

矩阵理论——Gerschgorin定理,以及用python绘制Gerschgorin圆盘动图

矩阵理论——Gerschgorin定理&#xff0c;以及用python绘制Gerschgorin圆盘动图 在矩阵的特征值估计理论当中&#xff0c;有一节是盖尔圆盘定理&#xff1a; 对于一个n阶复数矩阵A&#xff0c;每个特征值lambda位于至少一个Gerschgorin圆盘中&#xff0c;这些圆盘的中心为矩阵…