社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

基于深度学习的单幅图像三维物体重建综述

新机器视觉 • 4 年前 • 305 次点击  

点击下方卡片,关注“新机器视觉”公众号

重磅干货,第一时间送达

本文来自开始学AI


摘要:从单幅图像中重建三维目标是计算机视觉领域的一个重要课题。近年来,利用深度学习技术对单幅图像进行三维重建取得了显著的成果。传统的从单幅图像重建三维物体的方法需要先验知识和假设,而且重建的物体被限制在一定的范畴内或很难从一幅真实的图像中完成良好的重建。虽然深度学习凭借自身强大的学习能力可以很好地解决这些问题,但它也面临着很多问题。在本文中,我们首先讨论了应用深度学习方法从单一图像重建三维对象所面临的挑战。其次,我们全面回顾了用于单个图像三维重建的编码器、解码器和训练细节。然后,介绍了近年来单幅图像三维目标重建的常用数据集和评价指标。为了分析不同的三维重建方法的优缺点,我们使用了一系列的实验进行比较。此外,我们简单地给出了一些有关单幅图像三维重建的应用实例。最后,对本文进行了总结,并对未来的研究方向进行了展望。


关键词:单幅图像三维重建;深度学习,计算机视觉,三维形状表示


1 引言


图像的三维重建是计算机视觉、医学图像处理[74,4]和虚拟现实[109]中的一个常见课题。计算机视觉相关理论和技术的主要目的是从图像或多维数据中获取信息,建立人工智能系统。图像的三维重建是计算机视觉的主要任务之一,其目的是研究单幅图像或多幅图像生成相应的三维结构[93,82]。根据重建目标的不同,图像的三维重建可分为三维场景重建和三维物体重建。单视图三维场景重建的一大挑战是从单幅图像中预测不可见的部分[38,108,100]。多视点三维场景重建[36,39]和多视点三维物体重建[18]可以整合多幅图像的信息,弥补单幅图像预测不确定性对不可见部分的缺陷。与传统的多视图三维重建方法[25,95]和模型[14,45]相比,深度学习具有处理大数据的能力。因此,近年来有很多将传统方法与深度学习相结合的研究[114,149,27]。


一些研究回顾了图像三维重建技术[32,143]。Ham等人[32]回顾了单幅静止图像的三维重建、RGB深度图像、二维图像的多视角和视频序列的方法。Ham等人回顾的方法大多使用传统的三维重建算法,少数方法使用深度学习技术。Yuniarti等[143]简要回顾了基于深度学习的单幅或多幅图像三维重建方法。这篇综述不同于Ham等人或Yuniaart等人的综述。我们对基于深度学习的单幅图像三维重建方法进行了较为全面的回顾,包括该方法面临的挑战、不同三维表示的重建算法、三维重建训练体系等。本文的主要研究目标是从单幅图像中重建三维物体。单幅图像的三维物体重建问题类似于单幅视图的三维场景重建问题。由于单幅图像丢失了大量的三维对象信息,重建结果具有不确定性。传统的对单幅图像进行三维物体重建的方法通常是基于已有模型[5,52],或者使用二维标注[49]。这些方法通常局限于某一类物体的重建。例如,假设照明是固定的,形状由阴影恢复[92,20,2]。假设表面平滑,由纹理恢复形状[68]。由于实际数据集的复杂性,这类需要假设的模型在实际应用中效果较差。


近年来,随着深度学习的不断兴起,利用深度神经网络从单一的二维图像中重建三维物体成为一个热门方向[147]。基于深度学习的三维物体重建方法是训练神经网络学习二维图像和三维物体之间的映射关系。本文的主要动机是提供近年来使用深度学习从单个图像生成三维形状的概况。重点分析了单幅图像三维重建面临的主要挑战和研究方法。这些挑战和方法代表了未来深度学习在单幅图像三维重建中需要解决的问题和发展趋势。在第2节中,本文首先讨论了基于深度学习从单个图像重建三维对象所面临的挑战。在第3节和第4节中,我们将分别介绍目前在三维多媒体工具和应用中使用的编码器和解码器。第5节介绍了许多文献中公开的训练细节,包括损失函数和网络训练体系结构。在第6节中,我们介绍了用于三维重建实验的数据集和评估指标。在第7节中,我们进行了多次对比实验,分析了不同三维重建方法的优缺点。在第8节中,我们将介绍单幅图像三维重建的相关应用。第9节对全文进行了总结,并展望了未来的发展趋势。


2 单幅图像三维物体重建的挑战


基于深度学习的单幅图像三维重建面临多重挑战,导致这一方向的发展仍处于起步阶段。一般来说,一个图像的三维重建主要有以下挑战:(1)重建物体的形状复杂性,(2)重建对象的不确定性,(3)重建的细粒度对象,(4)内存需求和计算时间,(5)训练数据集,(6)选择性的3 d形状表示。


2.1 挑战1:物体的形状复杂性

首先,物体形状复杂性主要体现在不同类别物体形状的差异上,存在于对同一类别物体进行个体训练和不同类别物体联合训练的重构结果中。因此,一个好的三维重建模型应该具备对不同复杂程度的物体进行表征的能力。此外,模型需要了解不同对象类之间的各种连接,同时在相同的对象类之间保持自己的唯一性。其次,物体的形状复杂性也体现在其本身。一个简单物体的结构通常可以用多个长方体的组合来表示。当小部件占整体结构的比例较小时,简单的物体往往具有较高的重构分数。然而,当复杂对象的结构较小,且有细粒度的部件(如枪扳机)时,重构结果往往较差。在这种挑战下,提高重建的三维物体的分辨率是一个相对简单的解决方案。


2.2 挑战2:对象的不确定性

单幅图像三维重建是一个不适定问题[78]。由于单个图像丢失了大量的三维信息,且缺乏先验知识或假设,其重建结果并不独特。因此,最近一些研究试图通过一些辅助手段来预测正确的形状[31]。对于人类来说,我们可以根据自己丰富的经验积累,从单一的RGB图像中推断出不可见的3D形状。这从侧面反映了基于深度学习的单幅图像的三维重建需要足够的数据集来进行训练。


2.3 挑战3:重构细粒度对象

对于大多数3D重建模型,他们的目标是生成具有细粒度的3D对象,而不仅仅是粗略的3D表示。不同的三维形状表示面临不同的困难。多媒体工具和应用,例如基于体素的三维重建方法,大多数都面临较高的内存使用量和计算成本。基于网格的方法大多受到网格拓扑结构的限制。对于不同的三维重建方法,在第4节中给出了相应的解决方案。然而,他们都有需要解决的问题。因此,如何从单幅图像中重建细粒度的三维物体是一个巨大的挑战。


2.4 挑战4:内存需求和计算时间

对于一个优秀的单幅图像三维物体重建模型来说,参数应该是轻量级的。此外,由于内存要求有限,不仅需要从单个图像中重构出正确的细粒度部件形状,而且需要良好的训练和推理时间。目前,针对这一挑战,第四节介绍了一些解决方案。


2.5 挑战5:训练数据集

深度神经网络能够在大模型、大计算时代发挥其强大的学习能力,这归功于现有的大数据。然而,最近的研究表明,基于深度学习的单幅图像三维物体重建实际上学习了识别能力(搜索和聚类)[112],但很少学习重建能力。ShapeNet[7]数据集是一种常用的三维对象重建数据集。整个数据集通常分为一个训练集,一个验证集和一个测试集。由于测试集和训练集中的3D模型高度相似,神经网络可能会被误导学习识别。此外,野生数据集和合成数据集之间存在很大的差异。对于未被神经网络看到的图像,可能会导致不同的重建结果,选择不同的坐标系统来重建三维形状[99]。真实数据集中的图像内容比较复杂,比如遮挡、多类对象、不同的光照等。因此,在一个干净的合成数据集上训练后,很难在真实数据集上完成目标的三维重建。近年来,很多研究试图使用纹理数据集[16]和nd背景数据集来渲染2D图像[135]。然而,实际渲染的2D图像集与真实场景的2D图像集之间仍然存在较大的差异,对渲染的数据集进行训练后,模型很难适应真实场景中的数据集。最后,利用该模型重建的三维形状较差。因此,如何改进现有的训练数据集,使其适合于三维重建是一个具有挑战性的问题。


2.6 挑战6:3D形状表示的选择性

目前的研究大多选择不同的三维形状表示来完成单个图像的三维重建。基于体素表示的方法可以使用三维卷积神经网络(CNN),可以重构任意拓扑结构的对象。然而,大量的内存需求和计算时间限制了大多数方法的重建结果的低分辨率。虽然对这一问题提出了很多改进[111,88,103],但重建结果仍然无法实现超高精度重建。点云表示相对简单,灵活性高。由于点云不是一个规则的结构,它不能很好地适应传统的3D CNN。网格有助于在三维对象、多媒体工具和应用中恢复模型的细节,其表示精度高。同样,网格不是一种规则的几何数据形式,所以它不能直接应用3D CNN。目前基于网格的研究大多采用网格模型变形的方法。然而,该方法不能很好地处理未知拓扑对象。虽然有些方法解决了拓扑问题[83,29],但也引入了一些问题。参数化和隐式曲面表示方法都可以用光滑的表面来表示对象,生成的对象具有更好的视觉吸引力。然而,基于参数曲面表示的三维重建难以适应全局曲面参数化方法重建多属复杂结构对象[101]。用多个局部参数化曲面逼近三维形状也面临曲面之间的拼接问题。基于隐式曲面表示的解码器需要预测三维空间中的所有点,这在推理阶段非常耗时。使用体元来表示三维形状可以预测相对正确的三维结构。由于用于表示三维形状的体元相对简单,该方法目前只能重建简单的三维结构。表面原语使用多个平面贴片来近似三维形状。该方法虽然简化了三维表示,但也需要解决平面间的拼接问题。一般来说,这些3D表示有利有弊。


3 二维编码器


利用深度学习技术对二维图像进行三维重建是近年来的研究热点。深度学习也被称为深度神经网络。深度神经网络的学习能力可以用来完成许多与计算机视觉相关的任务,如图像分类[118,44],图像分割[3,10,11],目标识别[144,126,106],图像超分辨率[54,47,61,665]。深度学习方法在二维图像领域的成功应用也促进了三维重建任务的发展[91,19,87,48,97,13,24,77,1,151]。一般来说,基于深度学习的三维重建模型可以将输入图像集表示为I = {I1, I2,…,In},设对应的真三维形状为Y,重构后的三维形状可通过式(1)进行优化:

其中fσ(·)表示重构器,包括2D编码器和3D解码器,σ表示f(·)参数集。重构器从输入图像中重构出三维形状。dis是重建形状与地真形状之间距离的度量,当两者达到最小值时表示为L。


在二维编码器阶段,输入图像被编码到一个潜在空间进行特征压缩。根据编码方法,可分为编码到离散潜空间的图像和编码到连续潜空间的图像。对输入图像进行编码的方法可进一步分为直接编码和中间表示编码。对离散空间进行图像编码的常用网络有标准卷积(Conv)网络、残差网络(ResNet)、递归神经网络(RNN)和全连接(FC)网络。将输入图像编码到一个连续的潜在空间中,通常使用变分自编码器[55](VAE)的编码器部分。将输入图像编码到潜在空间的比较结果如表1所示。


3.1 图像到离散潜在空间

通过这种方式,编码器将输入图像编码成一个低维的潜在层向量。然后解码器将潜在层向量映射到3D形状。将图像编码到离散的潜在空间中,大致可以分为两种方法。第一种方法是二维卷积神经网络直接将输入图像编码为一个固定的低维潜在向量。第二种方式,首先对输入图像进行编码以生成一个中间表示(如2.5D表示),然后对中间表示进行类似于第一种方式的编码。


3.1.1直接编码

对于大多数三维物体重建方法,它们直接将输入图像编码到一个低维的离散潜在空间中。编码示意图如图1所示。


Choy等人[15]提出了浅残差网络和深残差网络。浅网络使用标准的卷积神经网络将输入图像编码为低维特征。深度残差网络采用一种快捷连接方式对标准卷积神经网络进行改进。类似地,Shin等人[99]使用了带有残余单元的编码器。此外,还有关于循环2D编码器的研究[138]。


随后,Girdhar等人[28]引入了TL-embedding网络。在T-network的底部,使用5个标准卷积层将输入图像编码到一个64D嵌入空间中。在T-network的顶部,一个输入的20×20×20体素网格通过3D自动编码器编码到一个64D嵌入空间中,输出的相同大小的体素网格被解码。此外,也有很多研究使用标准的卷积网络进行直接将输入图像编码到离散的隐藏空间。[137, 86, 115, 136, 122]。除了使用卷积神经网络,一些研究还使用了全连接网络[26]。

3.1.2 中间表示编码

许多研究首先试图通过2D编码器-解码器网络生成输入图像的中间表示。然后,使用2D编码器将中间表示编码为潜在向量,基本编码图如图2所示。Wu等129] 提出了MarrNet。他们首先使用ResNet-18[34]将一张256×256 RGB图像编码成多个特征映射。然后,通过解码器输出相应的中间表示(深度映射、表面法线和轮廓图像)。然后,中间表示被编码成一个200维向量。最后,该矢量通过解码器输出128×128×128体素网格。此外,也有一些类似的研究[110,130,148]。

3.2 图像到连续的潜在空间

与将图像编码到离散的潜在空间不同,将图像编码到连续的潜在空间更注重学习潜在特征空间中的概率密度函数,基本编码图如图3所示。VAE的编码器所观察到的样本的目标分布和产生一个向量意味着均值µ和方差σ参数化的高斯分布,采样产生潜在的向量。能够使用反向传播技术优化网络参数,网络需要使用reparameterization技巧,从单位ɛ高斯随机样本。Wu等人[128]使用VAE中的编码器将输入图像编码为一个潜在的表示向量,然后将其输入到3D生成对抗网络(3D GAN)中,完成单个图像的3D体积重建。此外,也有一些研究使用VAE将图像编码到一个连续的潜空间中[102,071]。


4 3D解码器


基于神经网络的2D编码器从大量数据中学习将输入图像编码为潜在向量。然后一个3D解码器将潜在向量转换成三维数据。为了从输入图像中生成三维形状,整个网络需要将低级图像特征与高级特征相结合。基于单幅图像的三维物体重建方法大多选择使用低层图像特征进行推理。但是,这些方法缺乏对对象结构或表达式级别的结构关系的理解。它们有几种输出表示:体素网格、点云、网格、参数曲面和隐式曲面。此外,一些作品试图理解对象结构的高级表示,他们将3D对象视为两个基元(体积基元或表面基元)的集合。进一步的研究试图在更高的层次上理解各部分之间的对称关系[76]。三维解码器分类如表2所示。


以下内容回顾了基于不同3D表示的3D解码器。为了更好地展示基于不同表示的3D解码器之间的差异,我们根据它们的表示水平分别进行评测。


4.1 低级表示的解码

在低级表示中,研究较多的是离散形式的体素网格、点云和网格,研究较少的是连续形式的参数面和隐式面。


4.1.1 基于体素的表示解码

基于体素表示的三维解码可分为密集体素解码、中间表示体素解码、稀疏体素解码和其他解码。

稠密体素解码 随着深度学习研究的发展,基于CAD数据库的深度学习模型被提出用于单个图像的三维建模。Wu等人[127]开始提出3D ShapeNets模型,该模型使用深度卷积信念网络以数据驱动的方式学习所有3D体素的联合分布。这项工作是早期使用体素形式的三维形状表达模型之一。虽然重建结果比较粗糙,但实验结果表明这是一个良好的开端。Choy等[15]先将潜在层向量送入中间模块(3d long -term memory),再通过残差网络解码器生成3d形状(见图4c)。同样,Yang等[141]在潜在层向量和解码器之间引入了注意聚集模块(AttSets)。这两种方法都可以利用中间模块完成单视图图像或多视图图像的三维重建。此外,Yang等[138]提出了一种循环三维解码器来解码潜在层单元以生成三维体积网格。


与上述方法不同的是,也有一些研究将潜在层向量直接解码成三维形状[28,137,86,115,136,26,128,102]。这些方法使用类似的解码器架构(见图4b)。


中间表示体素解码 近年来,许多研究在二维图像和三维形状预测之间增加了一个中间表示(2.5D草图)。 与直接从单个二维图像预测三维形状相比,该方法更容易表达三维物体。Wu等人[129]提出了MarrNet,该算法首先估计输入RGB图像的2.5D草图(深度、法线贴图和轮廓)。随后,一个3D encoder decoder被用来从中间表示的2.5D草图估计一个3D形状。同样,Sun等人[110]和Wu等人[130]从输入的RGB图像中依次估计2.5D表示和3D形状。与直接从2.5D估算三维形状的方法不同,Zhang等[148]将2.5D到三维形状过程分解为部分三维完井和全三维完井两个阶段。他们依次用部分球面图和着色球面图来处理深度图,以代表物体的全部表面。最终,体素重建网络将深度图和修补的球形图的反投影结合起来以输出3D形状。实验结果表明,该网络在未经训练的类上也能获得更接近真实的结果。这些方法重建的三维物体的分辨率可以达到128×128×128,重建结果也更加详细。然而,与真实3D模型的外观相比,还有很大的差距。


稀疏的体元解码 在三维空间中,三维形状的表示与重建对象的表面分辨率密切相关。近年来,人们提出了一种稀疏体素表示八叉树的方法[89,119,90]。粗分辨率体素预测可用于空间中大部分为空且完全被占用的对象。混合部分需要进一步细分。采用八叉树方法进行体素稀疏表示可以使重建对象的分辨率达到512×512×512。Tatarchenko等[111]提出了八叉树生成网络(OGN)(图4a)。整个网络从某一层开始,卷积网络放在八叉树上运行,直到输出的分辨率满足设定的条件。与密集体素解码方法相比,OGN可以在有限的存储空间内表示更高分辨率的3D输出。然而,当分辨率增加到一定值时,网络很难适应大数据训练。在这种情况下,模型的性能会下降。同样,Hane等人[33]也提出了一种分层表面预测(HSP)网络。


其他的解码 除了使用中间表示法和八叉树法生成高分辨率三维对象外,还有将三维形状的生成视为二维预测的方法[88,103,98]。Richter等[88]在考虑二维预测而不是三维物体重建后,提出了一种三维几何的二维编码方法。为了更有效地表达低分辨率的3D形状,他们开发了一种方法,从参考视图的每个像素预测整个体素管。此外,6个嵌套深度图的融合用于扩展生成的3D对象分辨率。Smith等人[103]f i r st通过低分辨率的3D编解码器重建了一个粗略的3D形状。然后,利用三维超分辨率网络对六幅高分辨率正交深度图进行恢复。最后,利用高分辨率深度图对上采样的粗糙三维形状进行切割,完成高分辨率三维形状(图4d)。此外,Shen等[98]提出了一种基于傅里叶变换的三维重建方法,在频域预测切片,从二维空间重构三维形状。


本文仅做学术分享,如有侵权,请联系删文。

—THE END—
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132526