论文阅读 TripoSR: Fast 3D Object Reconstruction from a Single Image 单张图片快速完成3D重建

前言:

本文为记录自己在NeRF学习道路的一些笔记,包括对论文以及其代码的思考内容。公众号: AI知识物语 B站讲解:出门吃三碗饭

论文地址: https://arxiv.org/abs/2403.02151
代码: https://github.com/VAST-AI-Research/Tr ipoSR
先来看下演示效果

在这里插入图片描述
TripoSR可以在0.5秒内从单张图片重建高质量3D模型,并泛化到不同领域的对象,效果确实不错,但笔者在测试真人图片以及较复杂结构的单个建筑时候,建模效果仍然不够理想。

摘要

TripoSR,这是一种利用 Transformer 架构进行快速前馈 3D 生成的 3D 重建模型,可在 0.5 秒内从单个图像生成 3D 网格。 TripoSR 基于 LRM 网络架构,集成了数据处理、模型设计和训练技术方面的重大改进。 对公共数据集的评估表明,与其他开源替代品相比,TripoSR 在数量和质量上都表现出卓越的性能。 TripoSR 在 MIT 许可下发布,旨在为研究人员、开发人员和具有 3D 生成人工智能最新进展的创意。

1.介绍

近年来,3D 生成式人工智能的发展呈现出多种发展趋势,模糊了单个或少数视图的 3D 重建与 3D 生成之间的界限 。 通过引入大规模公共 3D 数据集 和生成模型架构的进步,这种融合得到了显着加速。 为了克服 3D 训练数据的稀缺性,最近的研究Forts 已经探索利用 2D 扩散模型从文本提示或输入图像 创建 3D 资产。

DreamFusion [20] 是一个著名的例子,它引入了分数蒸馏采样(SDS),采用 2D 扩散模型来指导 3D 模型的优化。 这种方法代表了利用 2D 先验进行 3D 生成的关键策略,在生成详细的 3D 对象方面取得了突破。 然而,由于广泛的优化和计算需求以及精确控制输出模型的挑战,这些方法通常面临生成速度慢的限制。 相反,前馈 3D 重建模型实现显着更高的计算效率。 沿着这个方向的几种最新方法在不同 3D 数据集上的可扩展训练中显示出了前景。 这些方法通过快速前馈推理促进快速 3D 模型生成,并且更有可能对生成的输出提供精确控制,标志着这些模型的效率和适用性的显着转变。 在这项工作中,我们引入了用于快速进给的 TripoSR 模型在 A100 GPU 上从单个图像进行正向 3D 生成只需不到 0.5 秒。 基于 LRM 架构,我们在数据管理和渲染、模型设计和训练技术方面引入了一些改进。 实验结果表明,与其他开源替代方案相比,无论在数量上还是在质量上都具有优越的性能。

2.TripoSR:数据和模型的改进

2.1TripoSR概述

TripoSR的设计基于LRM,在数据管理、模型和训练策略方面有一系列技术进步。 我们现在概述该模型,然后介绍我们的技术改进。

与 LRM 类似,TripoSR 利用 Transformer 架构,专为单图像 3D 重建而设计。 它采用单个 RGB 图像作为输入,并输出图像中对象的 3D 表示。 TripoSR 的核心包括以下组件:图像编码器、图像到三平面解码器和基于三平面的神经辐射场 (NeRF)。 图像编码器使用预先训练的视觉变换器模型 DINOv1 进行初始化,该模型将 RGB 图像投影到一组潜在向量中。 这些向量对图像的全局和局部特征进行编码,并包含重建 3D 对象所需的信息。 随后的图像到三平面解码器将潜在向量转换为三平面 NeRF 表示形式 。 triplane-NeRF 表示是一种紧凑且富有表现力的 3D 表示,非常适合表示具有复杂形状和纹理的对象。 我们的解码器由一堆变压器层组成,每个变压器层都有一个自注意力层和一个交叉注意力层。 自注意力层允许解码器关注三平面表示的不同部分并学习它们之间的关系。 交叉注意力层允许解码器关注来自图像编码器的潜在向量,并将全局和局部图像特征合并到三平面表示中。 最后,NeRF 模型由一堆多层感知器 (MLP) 组成,负责预测空间中 3D 点的颜色和密度。 而不是调节图像到三平面的投影关于相机参数,我们选择允许模型在训练和推理过程中“猜测”相机参数(外部参数和内部参数)。 这是为了增强模型在推理时对野外输入图像的鲁棒性。 通过前述明确的相机参数调节,我们的方法旨在培养一种更具适应性和弹性的模型,能够处理各种现实场景,而不需要精确的相机信息。 架构的主要参数,例如数量Transformer 中的层数、三平面尺寸、NeRF 模型的细节以及主要训练配置详细信息如表 1 所示。与 LRM 相比,TripoSR 引入了多项技术改进。
在这里插入图片描述

2.2数据改进

我们在训练数据收集中纳入了两项改进:

• 数据管理:通过选择 Objaverse数据集的精心策划的子集(可在 CC-BY 许可下使用),我们增强了 训练数据的质量

• 数据渲染:我们采用了多种数据渲染技术,可以更接近地模拟真实世界图像的分布,从而增强模型的泛化能力,即使在经过专门训练时也是如此。与 Objaverse 数据集密切相关。

2.3模型和数据改进
Triplane Channel Optimization三平面通道优化

由于体渲染的计算成本很高,triplane-NeRF 表示中的通道配置在训练和推理期间管理 GPU 内存占用方面发挥着重要作用。 此外,通道数显着影响模型的详细和高保真重建能力。 为了追求重建质量和计算效率之间的最佳平衡,实验评估使我们采用了 40 个通道的配置。 这种选择允许在训练阶段使用更大的批量大小和更高的分辨率,同时最大限度地减少推理期间的内存需求。

Mask Loss掩模损失

在训练过程中加入了掩模损失函数,可以显着减少“漂浮物”伪影并提高重建的保真度,损失函数如下:
在这里插入图片描述
在训练中,需要最小化的全部损失函数如下:

在这里插入图片描述

Local Rendering Supervision本地渲染监督

模型完全依赖于渲染损失进行监督,因此我们的模型需要高分辨率渲染来学习详细的形状和纹理重建。 然而,高分辨率(例如 512 × 512 或更高)的渲染和监控可能会导致计算和 GPU 内存负载不堪重负。 为了解决这个问题,我们在训练期间从原始 512 × 512 分辨率图像中渲染 128 × 128 大小的随机补丁。 至关重要的是,我们增加了选择覆盖前景区域的作物的可能性,从而更加重视感兴趣的区域。 这种重要性采样策略确保了物体表面细节的忠实重建,有效平衡了计算效率和重建粒度。

3.结果

在这里插入图片描述
定性结果: 我们将 TripoSR 输出网格与 GSO 和 OmniObject3D 上的其他 SOTA 方法进行比较(前四列来自 GSO [6],后两列来自 OmniObject3D [30])。 我们重建的 3D 形状和纹理显着提高了质量以及比以前最先进的方法更好的细节。

在这里插入图片描述
我们在 3D 重建方面优于 SOTA 方法,同时实现了快速的推理时间。 图中,F-Score 与阈值 0.1 是 GSO 和 OmniObject3D 的平均值。
在这里插入图片描述

4.结论

在本报告中,我们提出了一种开源前馈 3D 重建模型 TripoSR。 我们模型的核心是在 LRM 网络 上开发的基于变压器(transformer-based)的架构,以及沿多个轴的重大技术改进。 根据两个公共基准进行评估,我们的模型展示了最先进的重建性能和高计算效率。 我们希望 TripoSR 能够帮助研究人员和开发人员开发开发更先进的 3D 生成人工智能模型。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 计算机断层扫描成像光谱仪的图像通常是由许多经过处理的平行射线投影构成的。在 Python 中,你可以使用 NumPy 和 scikit-image 库来模拟这种图像。 首先,你需要将你的 3D 高光谱立方体数据加载到 Python 中。然后,你可以使用 NumPy 的 sum 函数来计算立方体中每一个平面的和。这些平面可以看作是计算机断层扫描成像光谱仪图像中的投影。 接下来,你可以使用 scikit-image 库中的投影还原算法(例如,反投影算法)来重建立方体的图像。这样,你就可以得到一幅模拟的计算机断层扫描成像光谱仪图像。 下面是一段示例代码,假设你已经将 3D 高光谱立方体数据加载到变量 `cube` 中: ``` import numpy as np from skimage.reconstruction import inverse_projection # Calculate projections by summing along the third axis of the cube projections = np.sum(cube, axis=2) # Reconstruct the image using the inverse projection algorithm reconstructed_image = inverse_projection(projections) ``` 希望这能帮助你。 ### 回答2: 要使用Python从3D高光谱立方体模拟计算机断层成像光谱仪图像,我们可以按照以下步骤进行: 1. 导入所需的Python库,如numpy、scipy和matplotlib等。 2. 定义3D高光谱立方体的大小和光谱分辨率。这可以根据实际情况进行调整。 3. 生成一个随机的3D高光谱立方体作为模拟数据。可以使用numpy库的random模块来生成随机数据。 4. 定义计算机断层成像光谱仪的参数,如角度,光谱范围等。 5. 使用双线性插值法将3D高光谱立方体数据投影到计算机断层成像光谱仪平面。 6. 对每个投影平面进行光谱融合,生成计算机断层成像光谱仪图像。 7. 显示和保存生成的图像。 下面是一个基本的代码框架: ```python import numpy as np from scipy import ndimage import matplotlib.pyplot as plt # 定义3D高光谱立方体的大小和光谱分辨率 cube_size = (100, 100, 100) spectral_resolution = 10 # 生成一个随机的3D高光谱立方体作为模拟数据 cube = np.random.rand(*cube_size, spectral_resolution) # 定义计算机断层成像光谱仪参数 angle = 45 # 投影角度 spectral_range = (400, 700) # 光谱范围 # 将3D高光谱立方体数据投影到计算机断层成像光谱仪平面 projection = np.sum(cube, axis=-1) # 对光谱轴进行求和 # 对投影平面进行光谱融合 spectral_fusion = ndimage.zoom(projection, spectral_range[1]-spectral_range[0]) # 生成计算机断层成像光谱仪图像 plt.imshow(spectral_fusion, cmap='gray') plt.colorbar() plt.show() ``` 这段代码通过随机生成一个3D高光谱立方体模拟数据,并将其投影到计算机断层成像光谱仪平面,然后进行光谱融合并显示生成的图像。需要根据实际情况进行参数的调整和优化。 ### 回答3: 在python中通过模拟的计算机断层扫描成像光谱仪图像从一个3D高光谱数据立方体。 要想通过python模拟计算机断层扫描成像光谱仪图像,我们可以按照以下步骤进行操作: 1. 导入所需的python库,包括numpy、matplotlib和scipy等。 2. 在3D高光谱数据立方体中,每个像素都包含一个光谱向量,该向量表示该像素在各个波段上的反射率或辐射强度。因此,我们首先需要创建一个形状为(N,M,L)的3D numpy数组来表示数据立方体,其中N和M表示立方体的行数和列数,L表示立方体中的波段数。 3. 使用适当的算法或函数模拟光谱数据立方体。这可以包括根据现有的成像光谱仪数据或使用物理模型来生成模拟数据。 4. 通过将立方体中的每个像素与计算机断层扫描成像光谱仪的传感器响应函数相乘,可以获得模拟的成像光谱仪图像。传感器响应函数定义了光谱波段与成像设备的响应之间的关系。 5. 可选地,使用适当的图像处理技术(如去噪、增强和调整对比度等)对生成的图像进行后处理,以获得更好的可视化效果。 6. 最后,使用matplotlib库将模拟的成像光谱仪图像显示出来。 需要注意的是,这只是一个简单的示例,实际的代码可能会涉及更多的细节和复杂的算法。希望这个回答可以帮助您开始使用python模拟计算机断层扫描成像光谱仪图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值