编者按:近年来随着关于三维数据的研究与深度学习的紧密结合,三维内容(如物体与场景)的生成也成为这股三维深度学习浪潮中的热点与亮点。针对这方面的核心部分——三维几何解码器的工作,我们邀请了微软亚洲研究院主管研究员刘洋为大家做了全面的梳理和分析。
基于数据驱动的三维生成
基于数据驱动的三维解码器简而言之是从大量数据中学习一个映射,该映射将编码空间里的向量转换为三维数据,如三维形状和场景。这里的编码空间可以是大量的图像、文字、声音或三维信息通过某种编码构成一个隐表达空间;这里的转换指的是用三维解码器将隐表达空间的点翻译成三维内容。目前常用的三维解码器多用神经网络来完成,如卷积神经网络。下图展示三维编解码的一个概念架构。
对于不熟悉编解码架构的读者,可用如下一个例子来理解。对于一个球形曲面, 编码器提取球体的中心位置与半径大小构成一个隐表达空间中的四维向量;给定一个四维向量,解码器用前三维向量当成球体的中心,第四维数值当成球半径以构造球体。对于大量纷杂的三维数据,往往很难直接构造编解码器,这就需要从大量数据上来学习并构建功能强大的编解码器。
如何构造编码空间、解码向量、设定合适的三维表达,都是三维编解码里需要研究的问题,而解码出来的数据质量是衡量三维解码器优劣的一个重要指标。
除此之外,一个好的三维解码器还应该有以下三个性质:
- 形神兼备 ——形似指的是三维生成的形状符合期望、几何细节逼真、纹理符合现实。神似指的是三维生成内容的功能及结构符合设计、可控并便于调节。 传统的几何建模工作在这两点上可以做的很好,但耗时费力;相较而言,目前基于数据驱动的工作虽然在效率上有极大提升,但在形似这个方面上还差强人意,神似方面的工作也是刚刚起步。
- 形状空间 ——好的编解码器可以很好地用学习出来的低秩空间来刻画形状空间,通过在空间中合理采样以增加形体的多样性并建立形体类间及跨类之间的各种联系。
- 效率 ——对于一个算法而言,它的时间复杂度和空间复杂度大小决定了其效率优劣。对于以神经网络为结构的三维解码器,还有它对训练集的需求、训练难易、可扩展性等方面的各种考量。
三维几何表达
在三维几何的处理与分析中,三维数据的表达起着非常重要的作用。不同的表达在不同的任务以及与神经网络技术的结合上各有优劣。在三维内容的生成与合成任务上,由于输出的内容就是三维数据,因此选择不同的表达也直接关系到网络的构建、损失函数的设计及输出内容的质量。在此我们以三维的几何表达来分析目前已有的基于神经网络的三维解码器。关于三维数据的其它属性如纹理、表观、物体弹性相关等属性的生成,本文不做讨论。
表达方式与表达层次
在图形学及其相关领域,三维几何表达可以大体分为 连续表达 和 离散表达 。其中连续表达包括参数曲面、隐式曲面等;离散表达有诸如点云、多边形网格、多面体网格、体素等。这类分类方式相对比较底层,对物体缺乏语义层次的理解,我们统称为低层次表达。如果将三维内容看做结构体或体元的集合,可以对物体有更好的认识,这种归类方法可以称之为为中低层次的表达。在此基础上,如果三维内容的功能也有体现,如一把椅子的组成结构明确,组件功能清晰(如手臂支撑、腰部支撑等),那么这个表达可以称之为具有中高层次。同样对于三维场景而言,如果有着布局、物件之间关系等表示,其表达也是属于中高层次。 低层次表达和中低层次的表达方式在基于数据驱动的三维生成中研究较多,我们接下来对基于它们的三维编码器逐一介绍。
低层次表达
规则体素
将二维规则网格直接推广到三维,即体素表达,可以方便地将图像域的各种方法推广到三维空间——比如在分辨率N^3 的规则网格上每个单元(即体素)上定义一个布尔值0表示该体素位于三维形体之外,1表示其在三维形体内部。常见的基于体素的三维解码器通过学习三维卷积网络来预测空间中N^3个布尔值,以构建三维内容。这方面几个代表性的工作包括:(1)利用循环神经网络来重建三维物体的3D-R2N2 [Choy2016]; (2)基于体素表达上的3D-GAN和3D-VAE-GAN [WU2016]。然而由于规则体素的内存与计算开销呈立方级增长,基于体素的神经网络对于高分辨率的支持受限于GPU内存大小与训练时间,使得体素表达的三维生成常局限于32^3、64^3这类低分辨率上,不易生成较高质量的结果。
稀疏体素
注意到三维内容大都与物体表面相关,空间中绝大部分区域实则为空的事实,不少研究者开始用稀疏体素的方式来表达三维内容,从而极大地减少内存与计算开销,使得高分辨率体素输出(如256^3、512^3)成为可能。这类方法中以八叉树结构为代表的三维解码器,空间及时间复杂度降为O(N^2)。这方面的主要工作有OctGen [Tatarchenko2017]、OctNetFusion [Riegler2017]、HSP [Hane2017]。它们的解码器动态生成给定深度的八叉树,在八叉树的节点上预测该体素是否属于哪种状态:1. 在物体外部;2. 在物体内部;3. 含物体表面。对于第三种状态八叉树继续剖分。
点云
将三维物体离散成无结构的点云也是一种直接的方式。由于没有体素方法里剖分空间的束缚,点云表示有着更好的灵活性。 最近关于点云生成工作主要包括[Su2017]、[Achlioptas2018]。这些工作中解码器直接预测给定数目的点云三维坐标,在从单幅图像生成三维物体的任务上取得比3D-R2N2更好的效果。但将点云转化为体素或其它表达以用于造型等任务还需进一步的处理。
网格表示
多边形网格是三维图形学里常见的表达,相较之前介绍的各种表示,它既有较高的表示精度也有足够的灵活度。最近很多工作都将网格直接作为三维解码器的输出。这类工作假定网格有个初始形态,解码器实质上是预测初始网格顶点的变形。其中很多工作假定初始网格和球形或矩形网格同胚,如SurfNet [Sinha2017]、Pixel2Mesh [Wang2018]、Neural 3D Mesh Renderer [Kato2018]、FoldingNet [Yang2018b]。然而受到网格拓扑的限制,这些解码器不能生成多亏格的曲面。最近一个名为AtlasNet [Groueix2018]的工作假定有指定数目的矩形网格作为初始,解码器预测每个网格的顶点的三维位置。这些网格的并集近似出一个三维形体,这样也解决了拓扑限制的问题。基于网格表示的三维生成结果的视觉效果目前来说是最好的,当然网格的扭曲和多片合成完整网格的问题还是亟待解决。
多视图表示
通过多个方向观察物体可以极大程度地恢复物体的整体结构和细节,这就是多视图表示的原理。基于多视图表示的三维解码器预测若干给定视点下的物体的深度图像来构造三维形体。最近这方面的工作有[Lun2017]和[Lin2018]。前者用训练数据已知视点的深度图来训练解码器,后者用预测出的深度图合成的三维点云在多视点下投影和真实值的差异来指导训练,从而进一步提高解码器的预测水准。
中低层次表达
型元表示
一个三维形体可以看做若干个简单元素的集合。我们把这简单元素分成两类:面元、体元,统称为型元。 广义上讲点云、三角面也是型元表示。 这里我们把简单元素定义为具有固定类型的几何元素:如平面、球面、长方体、球体等。
将物体抽象为若干个简单实体——即体元的集合是种简单且有效的三维表达方式。通过在大量数据上的学习,体元在类似数据上还具有一定的共同性,并呈现对应关系,在形状理解和编辑上带来不少好处。长方体作为简单体元已经在最近的两个工作中使用——[Tulsiani2017]、[Zou2017]。这些工作用无监督或有监督的学习来预测若干数目长方体的大小、朝向、位置。通过学习可以把同类物体的共性、相似结构提取出来。目前的工作还局限于单一体元,拓展到多类型体元和建立体元之间的关系可能是未来研究的一个重点。
用尽量少的简单面元可以逼近三维形体,可简化三维表示并方便处理。我们最近在这方向做了一些探索[Wang2018a]——利用平面片表示构造了自适应八叉树结构以表达三维物体,极大地减少网络训练的内存与实践开销,并训练解码器生成自适应八叉树结构以产生三维形体:解码器预测当前八叉树结点状态:1. 不含三维形体表面的任一部分;2. 含三维形体表面的某一部分且能用平面片很好近似;3. 含三维形体表面的某一部分且不能用平面片很好近似。对于第三种状态八叉树继续剖分。最后所有层的八叉树里估计的平面片集合构成了三维形体。下图中展示了一个三维兔子模型在平面片表示下的自适应八叉树表达:(a)-(d) 是八叉树不同层上叶子节点的平面片元集合,(e)是所有平面片元的集合,它重构了输入的兔子模型。
下图中展示了用自适应八叉树解码器将单幅图片变成三维形状的部分结果。相较其它生成算法,我们的方法在同等分辨率下可以恢复更多的细节。
树形生成结构
树形生成结构是将三维内容看做一个树状层次性结构,叶节点是内容的一部分,如物体的一个组件/场景中的一个物体等。这种结构比较适合由组件构成的物体或场景,并且组件之间有层级关系。Siggraph2017上一个名为GRASS的工作展示了此种结构在三维生成中的优越能力[Li2017]。其中的三维解码器递归地生成树形结构并预测节点上的定义的关系和叶节点中的内容。论文作者最近也在GRASS基础上开展了图像到三维,场景生成等有意义的工作。
过程式建模
过程式建模是通过一系列既定规则来生成三维模型,其中包括L-system、分型、GML、CSG等造型方式。广义地讲,用户通过组合软件里给定的命令操作生成期望的模型,都可以称之为过程式建模。过程式建模的好处是建模成为一个白盒,每一步都可以有相应的语义。目前这方面最近的工作包括[Huang2017]和CSGNet [Sharma2018]。前者工作预测指定规则集的参数(包括离散和连续变量),后者生成一棵CSG树——哪些基本体元参与其中、体元的参数、体元之间的布尔操作(交并补)与操作序列顺序。
基于数据驱动来学习过程式建模才刚刚起步,我认为它的发展会是未来三维建模的一个新趋势,其可以更大程度地降低建模门槛,便于添加创意以及编辑,并能够保证建模质量,将依赖机器学习的建模做到"知其然知其所以然"的层次。
典型应用
三维生成不是凭空而生,大量的工作是依据用户给定输入来构建,如常见的基于单幅或多幅图像进行三维生成、三维补全等方面的工作。下面介绍其它几种有潜力的典型应用。
基于草图的三维生成
不少设计者习惯用草图来快速粗略地描绘目标形状或场景,这在概念设计里比较常见。如果能把草图直接转换成三维内容,那么对于设计者和一般用户而言,三维生成将变得容易。基于草图的三维生成在图形学领域已经有很多工作,但大多基于几何规则来构造。 2007年有一个工作[Lun2017]从数据驱动出发在卡通形象数据集上做了一个尝试。给定卡通形象的正面和侧面的二维草图,网络通过学习可以预测出卡通形象的三维形状。 今年我们也在这方面做了进一步研究[Li2018](链接:http://t.cn/EPkkHf0),我们借助草图中的线条和曲面的曲率方向的相关性,利用卷积网络预测出高质量的曲面形状,而且对于曲面数据集类型无强的假设。下图中展示了我们方法从一个或多个视角的草图生成曲面的结果。相较传统方法而言,基于数据驱动的草图建模有着更鲁棒、更迅捷的优势。
基于文字的三维生成
对于普通用户而言,绘制草图也显得太过专业,能否利用文字描述来生成三维内容呢?Text2Shape [Chen2018]将三维生成和自然语言处理结合起来。网络把文字编码解码为符合描述的三维实体。比如输入"Dark brown wooden dinning chair with red padded seat and round red pad back",解码器不仅生成三维几何也生成相应的颜色去尽量符合文字描述。随着这方面的进一步研究,相信人们利用语言文字来快速构建虚拟世界、调整家装布局等个性化的场景会变得可能。
展望
目前基于数据驱动的三维生成工作还有很多不足。首先在生成模型的完整度、精细度还与传统三维建模有着相当差距。生成结果离实用领域,尤其是加工制造上方面,还有很长的路要走。对于三维结构和功能的理解与生成也是刚刚起步,还需要更多的研究。另外现有的工作还主要是从数据中归纳经验指导生成,如何利用数据进行推理生成还需要更多的关注。
笔者对未来基于数据驱动的三维生成做一些展望。
- 形(shape)神(functional)兼备。 目前基于数据驱动的三维生成在形状和功能方面还差强人意,离实用的地步还相去胜远,未来这方面还需更多更深入的研究。最近胡等人的工作[Hu2018] 在功能分析与三维生成方向做了一个很好的结合与尝试。
- 三维表达。 合适的三维表达对于不同的应用非常重要,如骨架之于动画、图之于场景分析。 选择合适的三维表达还将是未来三维生成的重点研究课题。
- 形状空间的构建及生成的多样性。 利用各种对抗生成网络及类似的思想寻找最优的形状空间一直是众多研究人员感兴趣的课题。 构建好的形状空间可以生成更多样的三维内容、建立形状之间的联系、挖掘三维内容的各种关系。
- 不同媒体空间的联合嵌入。 图像、文字、声音等媒介是人们常用的交互沟通手段,每种媒介都已有大量样本和学习出来的空间。建立这些空间之间的联系,将为三维生成打开方便之门,使得其早日步入实用阶段。这里有大量的机器学习成果可以借鉴。
- 表观属性和物理属性。 三维内容除了几何,它的观感、物理属性(如弹性、密度)等也非常重要, 这些属性的生成,对渲染、物理仿真和制造等方面都有着重要意义。
- 数据集的体量与质量。 目前三维数据在体量和质量上处于初级阶段,无法与图像领域的ImageNet相比。拥有大量和高质量的数据,对于未来研究尤为重要。如何采集、清洗、分享、协同使用数据也是三维生成工作必不可少和极为重要的环节。
- 专注特定类别的应用, 如人脸动画、人体动画、室内布局、服装设计等与人的生活相关的 三维生成工作将进一步走向产业化。
小结
本文简介了目前基于数据驱动的三维几何生成的部分工作,希望起到抛砖引玉的作用。更多内容可参考笔者在第二十一届中国计算机辅助设计与图形学(CAD&CG 2018)、第十一届全国几何设计与计算(GDC 2018) 联合学术会议上所作的前沿进展报告《基于数据驱动的三维几何生成》,点击“阅读原文”即可下载该报告的PDF版内容。
以数据的名义——浅谈三维几何的处理与分析(下) , 微软亚洲研究院公众号文章, 2017.6.
[Achlioptas2018] Learning representations and generative models for 3D point clouds , ICLR 2018.
[Brock2016] Generative and discriminative voxel modeling with convolutional neural networks , 3D deep learning workshop (NIPS), 2016.
[Chen2018] Text2Shape: Generating Shapes from Natural Language by Learning Joint Embeddings , arXiv 2018.
[Choy2016] 3D-R2N2: A unified approach for single and multi-view 3D object reconstruction , ECCV 2016.
[Dai2018] ScanComplete: Large-Scale Scene Completion and Semantic Segmentation for 3D Scans , CVPR 2018.
[Groueix2018] AtlasNet: A Papier-Mâché approach to learning 3D surface generation , CVPR 2018.
[Hane2017] Hierarchical surface prediction for 3D object reconstruction , 3DV 2017.
[Hu2018] Predictive and Generative Neural Networks for Object Functionality , SIGGRAPH 2018.
[Huang2017] Shape Synthesis from Sketches via Procedural Models and Convolutional Networks , TVCG 2017.
[Kato2018] Neural 3D Mesh Renderer , CVPR 2018.
[Li2017] GRASS: Generative recursive autoencoders for shape structures , SIGGRAPH 2017.
[Li2018] Robust flow-guided neural prediction for sketch-based freeform surface modeling , Siggraph Asia 2018.
[Lin2018] Learning Efficient Point Cloud Generation for Dense 3D Object Reconstruction , AAAI 2018.
[Lun2017] 3D Shape Reconstruction from Sketches via Multi-view Convolutional Networks , 3DV 2017.
[Nash2017] The shape variational autoencoder: A deep generative model of part‐segmented 3D objects, Computer Graphics Forum, 2017.
[Niu2018] Im2Struct: Recovering 3D Shape Structure from a Single RGB Image , CVPR 2018.
[Riegler2017] OctNetFusion: Learning depth fusion from data , 3DV 2017.
[Sharma2018] CSGNet: Neural shape parser for constructive solid geometry , CVPR 2018.
[Sinha2017] SurfNet: Generating 3D shape surfaces using deep residual networks , CVPR 2017.
[Smith2017] Improved adversarial systems for 3D object generation and reconstruction , arXiv, 2017.
[Song2017] Semantic Scene Completion from a Single Depth Image , CVPR 2017.
[Su2017] A point set generation network for 3D object reconstruction from a single image , CVPR 2017.
[Tatarchenko2017] Octree generating networks: efficient convolutional architectures for high-resolution 3D outputs , ICCV 2017.
[Tulsiani2017] Learning shape abstractions by assembling volumetric primitives , CVPR 2017.
[Wang2018] Pixel2Mesh: Generating 3D mesh models from single RGB images , CVPR 2018.
[Wang2018a] Adaptive O-CNN: A patch-based deep representation of 3D shapes , Siggraph Asia 2018.
[Wu2016] Learning a probabilistic latent space of object shapes via 3D generative-adversarial modeling , NIPS 2016.
[Wu2017] MarrNet: 3D Shape Reconstruction via 2.5D Sketches , NIPS 2017.
[Yang2018] 3D object dense reconstruction from a single depth view , arXiv, 2018.
[Yang2018b] FoldingNet: Point cloud auto-encoder via deep grid deformation , CVPR 2018.
[Zou2017] 3D-PRNN: Generating shape primitives with recurrent neural networks , ICCV 2017.
作者简介
刘洋,微软亚洲研究院网络图形组主管研究员。研究兴趣包括几何建模与处理、计算机图形学、CAGD、建筑几何等方向。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Netty-解码器架构与常用解码器
- 解码器 与 编码器
- 用Pytorch构建一个自动解码器
- 开源编解码器 SOLO 源码解读(一):带宽扩展
- grpc-go编解码器使用说明
- 更深的编码器+更浅的解码器=更快的自回归模型
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript设计模式与开发实践
曾探 / 人民邮电出版社 / 2015-5 / 59.00元
本书在尊重《设计模式》原意的同时,针对JavaScript语言特性全面介绍了更适合JavaScript程序员的了16个常用的设计模式,讲解了JavaScript面向对象和函数式编程方面的基础知识,介绍了面向对象的设计原则及其在设计模式中的体现,还分享了面向对象编程技巧和日常开发中的代码重构。本书将教会你如何把经典的设计模式应用到JavaScript语言中,编写出优美高效、结构化和可维护的代码。一起来看看 《JavaScript设计模式与开发实践》 这本书的介绍吧!