单张图像3D重建:原理与PyTorch实现

这篇具有很好参考价值的文章主要介绍了单张图像3D重建:原理与PyTorch实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

近年来,深度学习(DL)在解决图像分类、目标检测、语义分割等 2D 图像任务方面表现出了出色的能力。DL 也不例外,在将其应用于 3D 图形问题方面也取得了巨大进展。 在这篇文章中,我们将探讨最近将深度学习扩展到单图像 3D 重建任务的尝试,这是 3D 计算机图形领域最重要和最深刻的挑战之一。

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

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

1、单图像3D重建任务

单个图像只是 3D 对象到 2D 平面的投影,来自高维空间的一些数据必然在低维表示中丢失。 因此,从单视图 2D 图像来看,永远不会有足够的数据来构造其 3D 组件。

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

因此,从单个 2D 图像创建 3D 感知的方法需要先了解 3D 形状本身。

在 2D 深度学习中,卷积自动编码器是学习输入图像的压缩表示的非常有效的方法。 将这种架构扩展到学习紧凑的形状知识是将深度学习应用于 3D 数据的最有前途的方法。

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

2、3D 数据的表示

与只有一种计算机格式(像素)通用表示形式的 2D 图像不同,有多种方法可以用数字格式表示 3D 数据。 它们各有优缺点,因此数据表示的选择直接影响可以使用的方法。

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

2.1 光栅化形式(体素网格)

光栅法表示的3D模型可以直接应用CNN。

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

每个蓝色框都是一个体素,大部分体素是空的。

体素(voxel)是体积像素的缩写,是空间网格像素到体积网格体素的直接扩展。 每个体素的局部性共同定义了该体积数据的独特结构,因此 ConvNet 的局部性假设在体积格式中仍然成立。单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

体素表示的密度低


然而,这种表示是稀疏且浪费的。 有用体素的密度随着分辨率的增加而降低。

  • 优点:可以直接应用CNN从2D到3D表示。
  • 缺点:浪费表示,细节和资源(计算、内存)之间的高度权衡。

2.2 几何形式

几何形式表达的3D模型不能直接应用CNN。

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

  • 多边形网格:是顶点、边和面的集合,定义了物体的 3 维表面。 它可以以相当紧凑的表示形式捕获粒度细节。
  • 点云:3D 坐标 (x, y, z) 中的点的集合,这些点一起形成类似于 3 维物体形状的云。 点的集合越大,获得的细节就越多。 不同顺序的同一组点仍然表示相同的 3D 对象。例如:
# point_cloud1 and point_cloud2 represent the same 3D structure
# even though they are represented differently in memory
point_cloud1 = [(x1, y1, z1), (x2, y2, z2),..., (xn, yn, zn)]
point_cloud2 = [(x2, y2, z2), (x1, y1, z1),..., (xn, yn, zn)]

几何表示法的优缺点如下:

  • 优点:表现紧凑,注重3D物体的细节表面。
  • 缺点:不能直接应用CNN。

3、我们的实现方法

我们将展示一种结合了点云紧凑表示的优点但使用传统的 2D ConvNet 来学习先验形状知识的实现。

3.1 2D 结构生成器

我们将构建一个标准的 2D CNN 结构生成器,用于学习对象的先验形状知识。

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

体素方法并不受欢迎,因为它效率低下,而且不可能直接用 CNN 学习点云。 因此,我们将学习从单个图像到点云的多个 2D 投影的映射,视点处的 2D 投影定义为: 2D projection == 3D coordinates (x,y,z) + binary mask (m) 。

  • 输入:单个 RGB 图像
  • 输出:预定视点的 2D 投影

代码如下:

#--------- Pytorch pseudo-code for Structure Generator ---------#
class Structure_Generator(nn.Module):
    # contains two module in sequence, an encoder and a decoder
    def __init__(self):
        self.encoder = Encoder()
        self.decoder = Decoder()
    def forward(self, RGB_image):
        # Encoder takes in one RGB image and 
        # output an encoded deep shape-embedding
        shape_embedding = self.encoder(RGB_image)
        
        # Decoder takes the encoded values and output  
        # multiples 2D projection (XYZ + mask)
        XYZ, maskLogit = self.decoder(shape_embedding)
 
       return XYZ, maskLogit

3.2 点云融合

将预测的 2D 投影融合到原生 3D 点云数据中。 这是可能的,因为这些预测的观点是固定的并且是预先已知的。单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

  • 输入:预定视点的 2D 投影。
  • 输出:点云

3.3 伪渲染器

我们推断,如果从预测的 2D 投影融合的点云有任何好处,那么如果我们从新的视点渲染不同的 2D 投影,它也应该类似于地面实况 3D 模型的投影。单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

  • 输入:点云
  • 输出:新视点的深度图像

3.4 训练动态

将这 3 个模块组合在一起,我们获得了端到端模型,该模型学习仅使用 2D 卷积结构生成器从一张 2D 图像生成紧凑的点云表示。

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

由 2D 卷积结构生成器、点云融合和伪渲染模块组成的完整架构

这个模型的巧妙技巧是让融合+伪渲染模块纯粹可微,几何推理:

  • 几何代数意味着没有可学习的参数,使模型尺寸更小并且更容易训练。
  • 可微分意味着我们可以通过它反向传播梯度,从而可以使用 2D 投影的损失来学习生成 3D 点云。

代码如下:

# --------- Pytorch pseudo-code for training loop ----------#
# Create 2D Conv Structure generator
model = Structure_Generator()
# only need to learn the 2D structure optimizer
optimizer = optim.SGD(model.parameters())
# 2D projections from predetermined viewpoints
XYZ, maskLogit = model(RGB_images)
# fused point cloud
#fuseTrans is predetermined viewpoints info
XYZid, ML = fuse3D(XYZ, maskLogit, fuseTrans)
# Render new depth images at novel viewpoints
# renderTrans is novel viewpoints info
newDepth, newMaskLogit, collision = render2D(XYZid, ML, renderTrans)
# Compute loss between novel view and ground truth
loss_depth = L1Loss()(newDepth, GTDepth)
loss_mask = BCEWithLogitLoss()(newMaskLogit, GTMask)
loss_total = loss_depth + loss_mask
# Back-propagation to update Structure Generator
loss_total.backward()
optimizer.step()

3.5 实验结果

来自地面实况 3D 模型的新深度图像与来自学习点云模型的渲染深度图像的比较:单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

从一张 RBG 图像 → 3D 点云:

单张图像3D重建:原理与PyTorch实现,3d,pytorch,人工智能

有了详细的点云表示,就可以使用 MeshLab 将其转换为其他表示,例如与 3D 打印机兼容的体素或多边形网格。


原文链接:单图像3D重建原理实现 - BimAnt文章来源地址https://www.toymoban.com/news/detail-765366.html

到了这里,关于单张图像3D重建:原理与PyTorch实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【3D图像分类】基于Pytorch的3D立体图像分类--基础篇

    在我们一般的图像数据的采集场景中,得到的大多是二维图像。比如手机拍照,所以大多数深度学习网络的雏形都是基于二维图像展开的工作。 但是,在某些场景下,比如 医学影像CT数据 ,监控场景 连续拍摄的视频 和自动驾驶使用到的 激光点云 等等,多是连续的、多层的

    2023年04月09日
    浏览(54)
  • 【3D图像分类】基于Pytorch的3D立体图像分类1--基础篇

    在我们一般的图像数据的采集场景中,得到的大多是二维图像。比如手机拍照,所以大多数深度学习网络的雏形都是基于二维图像展开的工作。 但是,在某些场景下,比如 医学影像CT数据 ,监控场景 连续拍摄的视频 和自动驾驶使用到的 激光点云 等等,多是连续的、多层的

    2023年04月26日
    浏览(45)
  • 【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割7(数据预处理)

    在上一节:【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割6(数据预处理) 中,我们已经得到了与 mhd 图像同 seriesUID 名称的 mask nrrd 数据文件了,可以说是一一对应了。 并且, mask 的文件,还根据结节被多少人同时标注,区分成了4个文件夹,分别是标注了一、二、三、四次,

    2024年02月07日
    浏览(52)
  • 【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割2(基础数据流篇)

    构建 pytorch 训练模型读取的数据,是有模版可以参考的,是有套路的,这点相信使用过的人都知道。我也会给出一个套路的模版,方便学习和查询。 同时,也可以先去参考学习之前的一篇较为简单的 3D 分类任务的数据构建方法,链接在这里:【3D图像分类】基于Pytorch的3D立体

    2024年02月05日
    浏览(54)
  • 【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割9(patch 的 crop 和 merge 操作)

    在做 3D 分割任务中,多数的方法多采用整体缩放,或裁剪成一个个小的 patch 操作,这样做的一个主要原因是内存问题。还有就是有些目标太小,比如分割结节,用整图直接输入网络,正负样本的不均衡是非常大的。 相较于整体缩放,采用裁剪成 patch 的方法,对于小目标会更

    2024年02月06日
    浏览(48)
  • 如何实现基于图像与激光雷达的 3d 场景重建?

    智影S100是一款基于图像和激光点云融合建模技术的 高精度轻巧手持SLAM三维激光扫描仪。 设备机身小巧、手持轻便,可快速采集点云数据;支持实时解算、实时预览点云成果,大幅提高内外业工作效率;同时支持一键生成实景三维Mesh模型,实现城市建筑、堆体、室内空间等

    2024年02月21日
    浏览(53)
  • 【3D 图像分割】基于 Pytorch 的 3D 图像分割6(数据预处理之LIDC-IDRI 标签 xml 标签转储及标记次数统计 )

    由于之前哔站作者整理的 LUNA16 数据处理方式过于的繁琐,于是,本文就对 LUNA16 数据做一个新的整理,最终得到的数据和形式是差不多的。但是,主要不同的是代码逻辑比较的简单,便于理解。 对于 LUNA16 数据集的学习,可以去参考这里:【3D 图像分类】基于 Pytorch 的 3D 立

    2024年02月04日
    浏览(53)
  • 睿智的目标检测——Pytorch搭建YoloV7-3D单目图像目标检测平台

    睿智的目标检测——Pytorch搭建YoloV7-3D单目图像目标检测平台 学习前言 源码下载 YoloV7-3D改进的部分(不完全) YoloV7-3D实现思路 一、整体结构解析 二、网络结构解析 1、主干网络Backbone介绍 2、构建FPN特征金字塔进行加强特征提取 3、利用Yolo Head获得预测结果 三、预测结果的解

    2024年02月16日
    浏览(44)
  • 图像超分辨率重建(pytorch)

             本文代码主体来自CVPR2020论文《Closed-loop matters: Dual regression networks for single image super-resolution》,但原作者并未提供论文亮点--如何使用unpair数据进行训练的代码,所以我在其基础上补齐了该过程的代码。         代码仓库:https://github.com/VitaminyW/Super_Solution      

    2024年01月16日
    浏览(46)
  • 【三维生成】Make-it-3D:diffusion+NeRF从单张图像生成高保真三维物体(上交&微软)

    题目 : Make-It-3D: High-Fidelity 3D Creation from A Single Image with Diffusion Prior Paper : https://arxiv.org/pdf/2303.14184.pdf Code : https://make-it-3d.github.io/ 在本文中,研究者的目标是: 从一个真实或人工生成的单张图像中创建高保真度的3D内容 。这将为艺术表达和创意开辟新的途径,例如为像Stable

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包