双11专栏 | 基于神经渲染的商品三维建模技术
淘系技术3D AI团队2021-11-15

2021年双十一,手机淘宝实现了自动化建模和自动化设计技术,可以规模化的针对消费者的个性化需求进行满足,实现商品放我家的效果。看商品不再是看图片、看视频,而是可以把指定商品放到自己家的真实户型中进行展示,AI设计根据指定商品和真实户型进行全屋搭配设计,给消费者呈现整体的设计效果,每个人拥有私人专属设计师的梦想得以实现。

3D样板间:消费者可以在场景中查看商品陈列效果

放我家:消费者可以把商品放到自己家真实户型查看商品效果

基于图像的三维重建技术,首先利用SfM技术进行稀疏重建,利用MVS技术进行稠密重建,然后是表面重建、纹理贴图和材质贴图,最终得到包含物体显式三维表示的形状、纹理、材质等信息,可以支持各种三维应用。其中核心的假设是相机从各个角度拍摄物体照片,物体表面相同点拍摄得到的颜色是一致的。这个假设本身受光照及材质的影响,其实并不成立。

2020年三维建模领域最火的算法就是NeRF,NeRF神经渲染技术突破了这个假设,支持各角度看到不一样的物体。NeRF提出了新的三维表示方式,用神经网络隐式表示物体的形状、纹理、材质,直接端到端的进行训练,从而可以得到高还原度的各角度渲染结果。但NeRF技术还比较初级,训练速度、推理速度、建模鲁棒性以及缺乏显式的三维表示问题都严重影响了技术的应用,世界上的许多科学家都在这一技术基础上进行深入研究探索。

阿里巴巴淘系技术部,发布了Object Drawer产品,将NeRF的推理速度提升了1万倍,训练速度提升10倍以上,解决了光照迁移、三维布局等神经渲染应用问题,解决了高频纹理问题将建模还原度进一步提升,从而使得神经渲染技术达到实用标准。该技术已经对部分淘宝和天猫商家发布,用于商品建模。

本文分为三部分:第一部分对传统三维重建技术以及NeRF神经渲染技术进行分析,第二部分介绍Object Drawer建模方案,第三部分介绍Object Drawer的应用方案。

三维重建技术& NeRF神经渲染技术

传统三维重建技术整体流程为:稀疏重建->稠密重建->mesh重建->纹理贴图->材质贴图。

稀疏重建的算法为Structure from Motion(SfM)。它的主要流程是,首先在每张图片上提取图像特征点,然后建立不同图片特征点之间的匹配关系,之后根据特征点之间的匹配关系生成每张图片的相机位姿。对于纹理比较丰富的物体,能够提取到足够多的特征点。针对弱纹理的物体,我们还可以在物体周围添加强纹理的参照物来增加特征点。因此,相机位姿估计一般精度比较高,目前的算法可以达到1mm以下的定位误差。

稠密重建的算法为Multi-View Stereo(MVS),它的作用是,基于前一步稀疏重建得到的相机位姿和稀疏3D点位置,得到每个像素的3D空间位置,来实现稠密重建。由于单个像素点的颜色没有区分性,传统方法会在像素点周围选取像素块(Patch),再用手工特征去描述这个像素块。2018年提出的MVSNet把深度学习技术引入来解决MVS问题,根据假设的一系列深度可以得到不同图片之间像素的映射关系。根据映射关系而形成的颜色偏差可以构建代价体,代表不同深度下的匹配误差,最后选择匹配误差最小的深度值作为该像素点的最终深度值。MVSNet由于使用了神经网络特征,重建精度比传统方法提升了很多。但是和传统MVS一样,它仍然是基于Patch块的特征来寻找不同图像间的像素匹配关系。对于弱纹理区域,相邻像素的图像特征很接近,这种匹配关系就会出现误差,这种误差会在深度图上所体现。导致最终融合的稠密点云会有较大误差。

2020年三维建模领域的重大突破是NeRF技术。NeRF是一种神经渲染方法,将三维模型的形状纹理材质用神经网络进行隐式表示,可以得到任意角度的三维模型渲染图,具体算法细节如下:


NeRF网络为一个函数,输入为5D坐标包括空间中点坐标x=(x,y,z)以及相机视角方向d=(θ,φ),输出为c=(r,g,b)颜色以及密度σ。写作:

具体细节为,首先将x输入MLP网络输出σ和中间特征,再把中间特征和视角方向d输入全连接层得到RGB值。也就是说,体素密度只和空间坐标x有关,输出颜色和空间坐标及视角方向相关。

体素渲染的过程则是,首先通过相机位姿得到2D图像中每个像素所对应的一条穿过物体空间的射线,然后利用射线上所有连续空间点颜色的积分得到该像素的颜色值。在NeRF中,用层级采样的方式达到近似的效果。具体而言,从每条穿过物体空间的射线上采样n个点,n个点按照如下公式进行积分,可以得到2D图像一个像素的颜色值,对于每个像素重复以上的过程,就可以得到完整的2D图像。采样的时候分为粗采样和细采样,粗采样为随机采样64个点,细采样为按照粗采样概率采样128个点。

NeRF训练的时候,将粗采样和细采样得到的颜色与真实颜色差值作为Loss。

NeRF首先将神经网络用于三维模型的表示,三维模型的形状纹理材质等信息,都隐式存储在神经网络里面,这样的表示方式绕过了直接求解高精度的三维模型形状与材质,直接得到高精度的渲染结果,而渲染是三维模型最广泛的应用。NeRF技术提出了全新的神经渲染技术,渲染过程可微,可以端到端进行训练,这使得NeRF可以准确还原各角度的三维模型渲染效果。NeRF技术假设物体相同点从不同角度观看存在不一致的情况,这个超越了传统MVS方法的假设,使得三维建模鲁棒性得到很大的提升,可以支持各种弱纹理的情况。

NeRF虽然是隐式表示了三维模型,但也可以采用一些方法将NeRF的模型显式提取,并进行可视化分析。我们的分析结果为:第一,NeRF得到的三维模型表面粗糙,但不影响渲染效果。因为NeRF不是将射线与物体表面相交于1个点,而是用一系列点的概率来表示,这样的方法降低了对模型形状精细度的要求,依赖于整体的渲染过程完成颜色的修正。第二,NeRF的三维模型许多时候是有缺陷的。弱纹理区域传统方法很难处理,NeRF生成的模型在弱纹理区域也经常出现凹陷等问题,但是这些凹陷对渲染结果的影响有限。第三,NeRF的形状收敛速度很快。一般训练2~4个epoch,模型形状已经完成收敛与最终结果差异不大,而颜色则需要几十个epoch迭代。

Object Drawer建模方案

Object Drawer在NeRF基础上进行深度优化,提出了完整的产品化解决方案,核心解决的问题包括:1、推理速度&训练速度;2、视觉鲁棒性&高频纹理;3、模型表示&光照迁移。



推理速度

输出1920*1080分辨率的图像,NeRF的推理速度为50s/帧,而实用的要求要达到30帧/s以上,差距为1500倍。我们分析NeRF速度慢的愿意有几个方面,第一,有效像素少,生成得到的2D图像有效像素不到1/3,能够快速得到有效像素可以提升推理速度。第二,有效体素少,采样192个点,其中只有表面附近的点密度σ比较大,其他的点没必要进行推理。第三,网络推理速度慢,需要12层全连接网络推理,才能得到1个体素的颜色和密度,能优化这个性能也可以大大加快推理速度。通过空间换时间的方式,可以进行优化,包括FastNeRF、PlenOctree等方法,但是仅仅是单纯的记住NeRF输出结果,会使得存储空间过大,达到200M~1G的大小,这样的大的模型也是没法实用的。我们分别从3个角度进行分析:

有效像素

我们需要快速得到有效像素从而支持神经渲染。首先我们通过NeRF模型的密度σ可以预先提取mesh模型,mesh模型和神经网络共同表示三维模型。mesh模型支持光栅化渲染,可以快速得到2D有效像素,只针对有效像素渲染可以大大提升渲染速度。

有效体素

空间中大量的点不在物体表面附近,随机采样的效率很低,利用mesh模型,可以快速得到物体表面信息,从而只在表面附近进行采样,这样的话,采样的效率可以大大提升,可以不需要粗采样,直接精采样,精采样也只需要32个点即可达到同样的效果。

网络优化

12层神经网络来进行模型表示,其中蕴含着大量冗余节点。网络加速的方法主要是两种,一种是网络剪枝,另一种是模型蒸馏。我们通过实验验证,网络剪枝的方法在NeRF网络优化方面优于模型蒸馏。通过L1正则,我们可以优化80%的节点,网络规模下降到原来的1/5,效果保持不变。

这几个优化可以达到300倍的优化还远远不够,我们的最新方法在此基础上进一步加速30倍以上,实现了10000倍速度的提升,最新的工作正在整理中,预计未来几个月会进行发表。

视角鲁棒性


NeRF (上)与Object Drawer (下)在Novel View Extrapolation下的表现

视角鲁棒性问题是神经渲染的关键问题之一。拍摄的图片无法覆盖所有视角,当输出视角发生变化和拍摄视角有一定差异时,需要神经渲染有很好的泛化能力,支持新视角图片的生成。Object Drawer提出RapNeRF技术,利用随机视角增强与平均视角embedding技术,改进了视角鲁棒性效果。实验表明,随着视角差异的增大,NeRF等模型都出现了PSNR的大幅下降,而Object Drawer的结果,PSNR基本保持不变,case 分析可以看到视角差异很大的时候,Object Drawer也能够给出高清图像,很好的解决了这一问题。

部分方法在Novel View Extrapolation问题的结果对比

三维模型表示&光照迁移

Object Drawer光照迁移方案(LighTNet)

三维模型,需要能够支持各种三维应用,包括三维布局、渲染出图、三维互动等等。神经渲染技术通常只能支持物体或场景任意角度的渲染,使得应用受到很大的限制。Object Drawer提出了将隐式表达与三维网格模型融合的解决方案。具体方案为,从隐式表达中提取模型的显式空间几何表达,建立mesh模型,并且通过texture mapping、材质识别等方法,形成可以应用于现有渲染引擎的三维粗模,三维粗模和神经网络共同表示一个商品。一方面,三维粗模可直接导入图形学工具,如标准高精CAD模型一般用于三维场景设计等现实应用。另一方面,神经渲染可以得到物体任意视角的高清渲染图。为了反应物理渲染作用于三维粗模的光照效果,如反射,阴影等,我们提出LighTNet, 将物理渲染反应在物体上的逼真光照效果迁移到神经渲染生成的物体视角图上。LighTNet以三维粗模PBR渲染得到粗糙shading、mask、depth等信息以及神经渲染结果为输入,预测相应的shading和神经渲染的修正值,修正后的shading和神经渲染可以通过本征融合得到具有光照效果的神经渲染结果;进一步用得到的带有光照效果的高清合成图替代物理渲染结果中的粗模投影可以实现逼真的场景渲染效果。在实验数据的结果表明,新方法能够适应各种复杂光源条件以及细节的阴影效果的迁移,视觉效果远超其他替代方案,在3D-FRONT测试数据集平均PSNR为30.17。

光照迁移建模效果示意

Object Drawer的建模流程

考虑到3D建模服务的使用成本、用户的便捷性以及重建质量,Object Drawer采用绕物体环拍的360度视频作为输入,并从拍摄时长、距离、角度、清晰度、拍摄环境、物体占比等方面制定了拍摄视频的标准化规范。Object Drawer通过视频完成模型重建,并支持将重建模型应用到PBR场景渲染中。

用户首先在Object Drawer建模Web平台上手动提交待重建模型的视频、模型信息(实际尺寸、类目、名称等);Object Drawer将会自动触发模型重建任务,开始对视频解码,并对数据进行可行性校验,过滤拍摄质量不佳或物体不完整的片段,以保证重建的准确性;然后利用校验后的图像序列完成物体的神经渲染重建;根据重建的神经网络提取Mesh,并对模型进行扭正确定朝向;最后上传至模型数据库,至此完成模型重建阶段的处理。相比传统建模链路,形状、纹理、材质的处理都在神经渲染重建中一步完成,端到端优化,整体鲁棒性和还原度表现更好。

在模型应用时,Object Drawer对渲染引擎进行改造,从而支持模型的神经渲染,并且将PBR场景光照迁移到模型的神经渲染中,完成重建模型与场景的合成。

Object Drawer应用方案

三维模型能够搭建虚拟场景,在场景内展示商品,甚至是虚拟摆放到消费者真实房间中,带来全新的体验。场景的搭建以及针对真实户型的设计,需要依赖于设计师,每次设计花费的时间精力都很多,耗费大量的成本,很难在商品展示领域规模化。阿里巴巴淘系技术部提出了3D神笔产品,能够自动化的进行户型重建、AI布局、AI搭配等工作,将家具商品展示与消费者个性化场景需求进行自动化融合,从而实现了设计规模化,目前已经完成百万套以上的AI设计,在手机淘宝和每平每屋进行应用。具体技术包括户型重建、AI布局、AI搭配几个核心的技术模块。

户型重建,需要根据2D图像表示的户型图,生成矢量表示的3D户型图。其中的难点一是建筑元素、比例尺、房间名称等都需要完成识别,而且这些信息之间是有关联关系的;二是识别的结果需要矢量化,而不能是通常像素表示的分割结果。目前的分割算法可以做到比较高的精度,但是在户型图识别中,即使是很高的IOU结果,因为一些噪声的误差矢量化时就会出现多墙或少墙的情况,无法直接使用。我们首先通过检测方法得到户型区域, 对于检测得到的户型区域我们会通过分割模型进行逐元素的分割,通过文本检测和符号检测来进一步得到准确的房间类型信息。比例尺模块会计算得到比例尺线段的端点和数字。重建模块会综合上述检测分割得到的元素来进行基于微分渲染的矢量化优化。最终,综合比例尺模块信息得到一个准确的3D重建结果。


AI布局,需要根据户型图,生成合理的设计方案,考虑功能区划分,功能区内布局,包括硬装布局、软装布局、配饰布局。AI布局生成可描述为具有硬性的空间约束和多样性的语义元素输入条件下,实现不同元素层次化的布局优化或场景生成问题。学术界将其作为一种scene synthesis开展研究,现有的研究和框架一般落在object oriented和space oriented这两个阶段或方向,前者实现物物关系的分析或生成(基于relation graph或语义约束等),后者基于空间约束实现物体在空间中位置、尺寸、姿态的预测,实际对应着上述提到的局部布局和整体布局模块。从业务落地角度看,这些研究往往过于侧重object oriented层面的图论范式表达,却轻视space oriented方法的泛化能力,实验结果基于的户型数据过于简单(或者做了过于理想的假设),跟实际户型的结构复杂程度差距过大,也导致了开放户型数据下布局和场景生成的可行性、精准度、丰富度都无法达标,基本停留在From Paper to Paper的阶段,并没有真正解决这一问题。我们将户型和家具的原始数据转化为层次化的几何特征描述(空间特征、组合特征),户型空间约束使用关联部件和共享缓冲区进行描述,家具空间度量使用层次化的组合角色和冗余度进行描述,整体问题转化为两者间分层次的匹配优化问题,通过保证每层问题可解实现整体算法可行。最终实现了真实户型的AI布局全自动生成。


AI软装搭配,为了给消费者提供3D场景化的购物体验,将查看商品从传统的看图片、看视频升级成在场景中看搭配、看效果,AI软装搭配算法核心解决的问题是将单品家具场景化,通过一件家具生成全屋软装,即解决家装行业中的从1生成N问题。在搭配领域,目前学术界研究得比较多的是两两搭配问题、N生成1问题、跨类目搭配如何度量问题,且研究主要集中在服饰领域,鲜有涉及家装领域。相对以上问题,1生成N问题也是搭配问题中较难的一种,我们第一版软装搭配模型也是采用从两两搭配扩展到全屋搭配的方法,这种方法先天缺少对全屋整体搭配效果的考量,会出现局部家具和整体不协调的问题。在此基础上,我们重新梳理了软装搭配问题,采用序列生成框架替代两两比较式的搭配生成,从而提高了全屋整体搭配的协调性。虽然目前学术界也有一些基于序列生成的搭配方法,但都没有针对家具搭配的特点进行建模,缺少对家具细节、搭配一致性和多样性的思考,缺乏对不能功能区之间搭配强弱关系的表达能力,因此效果都不太理想。我们采用基于transformer的序列生成模型作为基础框架,将搭配问题转化成每件家具逐个生成问题。每一件家具的生成,都会考虑前序生成的所有家具,因而提高了全屋搭配的协调性。我们采用三个transformer模块级联的方式,每个模块负责不同的功能,对不同功能区内外家具搭配的强弱关系进行了有效的表达。

总结和展望


商品建模和应用问题,Object Drawer已经给出了初步的解决方案,在推理速度、高频纹理还原度、光照迁移、视角鲁棒性等方面达到业内领先的效果,在鞋、家具、包等类目可以支持规模化的应用。新的模型表示和渲染过程也带来了新的挑战:

模型可编辑

神经网络表示的模型缺乏显式的三维表达,而模型编辑是需要所见即所得的对三维模型进行修改,目前的表示需要新的编辑范式才能支持模型编辑的需求。

模型仿真

仿真是需要让三维模型能够动起来,传统的实现方式是对每个物理现象或规律使用数学函数进行拟合计算,得到仿真结果。原来的仿真算法都是在显式三维模型上开展的研究,针对隐式三维表达,如何进行仿真,也需要新的仿真范式设计。同时原来大量的仿真工作全部重建是工作量巨大的,如何能够将原有的仿真能力迁移到隐式表达,也是我们需要探索的方向。

神经渲染对静态物体建模给出了很好的解决方案,但规模化的应用需要更多新产品出现的推动,这方面我们才刚刚开始。新的三维模型表示和新的渲染范式带来了新的问题和新的解决方案,欢迎业内同学大家一同交流,开创三维新世界。