|
发表于 2023-9-10 23:37:34
|
显示全部楼层
|阅读模式
来自 浙江省温州市平阳县
上一篇文章中,Taichi团队介绍了基于Taichi实现的NeRF在3D重建场景的应用(代码库):从多个视角的2D图片重建出3D内容。作为自然延伸,如果我们能够将NeRF与生成式AI(Generative AI,国内一般称为“AIGC”),或许可以将大红大紫的2D AIGC拓展到3D。目前这个问题并没有被很好地解决,除了一些学术论文以外,我自己也暂时没找到专门讨论这个问题的文章。
因此,在系列的下篇,我想先聊聊(Taichi)NeRF在3D AIGC的应用以及其他团队的学术研究。随后,作为一个创业者,我会花更大的篇幅探讨一下3D AIGC在产品化和商业化的挑战和机遇。
当然,关于3D数字资产的AIGC,大家都处于探索阶段,我们团队目前也只是浅浅尝试(产品在meshy.ai),还没有大投入去做,这样决策的具体的原因后面会分析到。所以,本文的定位更多是分享一些不成熟的早期想法,以讨论为主,很多问题目前我自己也没有答案。一些不足之处欢迎大家批评指正!
选择一个好问题
2D AIGC基本上只有一种选择:生成图片。但是3D资产比2D内容复杂,因为3D资产有很多种:模型、贴图、骨骼、(关键帧)动画等等。这里我们只考虑最主流的资产,也就是3D模型。而3D模型的表示又分为网格(Mesh)、体素(Voxel)、点云、SDF、甚至上文提到的NeRF等等。一旦考虑到实际落地到渲染管线中,基本上只有一种主流表示可以选择:Mesh。
三角网格。这个模型没有带贴图,所以看着是灰色,也就是下文提到的“白模”。
从CG工作流程来看,从文字生成3D模型分两步:
AI建模:给定文字输入,产出3D白模(即无贴图的模型);
AI画贴图:给定文字和白模,画上diffuse贴图或者PBR贴图组合(base color,metallic,roughness等)。
从工业生产可控性的角度来说,用户会希望两步能够分离。而在学术界,大家更喜欢一步到位,对于可控性和PBR追求不高。
Part I.学术研究
学术界通常不太考虑AI建模和AI贴图的分离,往往会一步到位,输入文字,得到带贴图的3D模型。这部分工作有两个“流派”,下面我简单梳理一下。
注意这部分不是文献综述,我也没有花大量的时间去调研全部工作,远达不到学术论文“Related work”的标准。不过如果有什么特别有意思的工作我看漏了,还请大家在评论区留言讨论~
“原生3D派”
这一流派的特点是直接在ShapeNet等3D数据集上进行训练,从训练到推理都基于3D数据。一些有趣的工作如下:
3D-GAN是NIPS 2016比较经典的早期工作了。比较直观,就是GAN的3D版本,以voxel为单位,生成3D模型。用ShapeNet dataset,输入是一个Gaussian noise,2016年的时候还没实现text conditioning。
3D GAN的原理和生成效果
GET3D:通过differentiable rasterizer(NVDiffRast)加上类似GAN的架构,分别生成mesh和texture,质量看起来也挺不错的,后面也会提到differentiable rasterizer会是3D AIGC很重要的基础算法。
GET3D训练架构。
这一类基于3D数据的工作还包括TextCraft(实现了text conditioning)、AutoSDF、MeshDiffusion等等。这类方法生成速度往往较快,但是也有比较直接的问题:由于3D数据集往往相对LAION等巨型数据集都小至少3个数量级(后续有讨论),这一类方法比较难实现数据多样性。比如说,生成数据集中存在的汽车、家具、动物等完全没问题,但是生成需要“想象力”的模型,比如“一只骑在马背上的兔子”、“带着皇冠的鹦鹉”、“手持大锤、生气的牛头怪”等,就比较有挑战了。由于Stable Diffusion等2D AIGC模型的想象力完全可以描述后者,用户自然也会期待在3D空间的AIGC也能做到类似的效果:给出各种奇奇怪怪的文字,AI能够得到高质量的3D模型。这种“想象力”(本质上是在多样的训练数据集中插值)是AIGC的核心价值所在,但是目前3D数据集却较难提供。
“2D升维派”
既然3D数据集无法满足数据多样性的要求,不妨曲线救国,借助2D生成式AI的想象力,来驱动3D内容的生成。这个流派的工作在最近乘着Imagen、Stable Diffusion等2D AIGC基础模型的突破取得了很多进展,因此本文着重讨论。
OpenAI Point·E论文链接)只需要1-2分钟就可以在单块GPU上生成点云。第一步是以文字为输入,用2D diffusion模型(选择了GLIDE)生成一张图片,然后用3D点云的diffusion模型基于输入图片生成点云。
Point-e的算法和生成的效果
DreamFusion:很有意思的工作,大体思路是通过2D生成模型(如Imagen)生成多个视角的3D视图,然后用NeRF重建。这里面有个“鸡生蛋蛋生鸡”的问题:如果没有一个训练得比较好的NeRF,Imagen吐出的图会视角之间没有consistency;而没有consistent的多视角图,又得不到一个好的NeRF。于是作者想了个类似GAN的方法,NeRF和Imagen来回迭代。好处是多样性比较强,问题也比较明显,因为需要两边来回迭代15,000次,生成一个模型就需要在4块TPUv4上训练1.5小时。
DreamFusion:3D NeRF和2D生成模型来回迭代优化
Magic3DreamFields的升级版本,巧妙之处在于将重建过程分为了两步。第一步仅采用NeRF(具体来说,是上一篇提到的InstantNGP)进行比较粗糙的模型重建,第二步则采用一个可微的光栅化渲染器。NeRF比较适合从0到1、粗糙重建,更多的表面细节还需要更加特定的算法,比如说differentiable rasterizer。
Magic3D从text生成的3D模型
目前DreamFusion/Magic3D这一类算法的性能瓶颈有两点:一是NeRF,二是依赖的Imagen/e-diffI/SD等2D生成模型。如果沿着这个算法思路进行优化,可能有下面两点机会:
NeRF是否是最佳的differentiable renderer?从直觉上来说,并不是。NN在NeRF中一开始只是作为一个universal function approximator,如Plenoxel等工作其实说明了NN在NeRF中甚至不是必要的。还有个思路是直接不用NeRF,直接用differentiable rasterizer,比如说nvdiffrast,一方面能够提速,另一方面由于直接在三角网格上优化,能够避免NeRF的结果转化到生产过程中需要用的三角网格的损失。
2D生成式模型,如Stable Diffusion生成速度如果能够更快,那么对提速会相当有价值。GigaGAN让我们看到了希望,生成512x512的图只需要0.13s,比SD快了数十倍。
当然,SDF也是可微性(differentiability)比较好的一种表示。Wenzel Jakob组在这方面有一篇很棒的工作,重建质量非常棒,不过还没有和AIGC结合:
另外,除了生成通用资产,数字人的生成也是一个独立的有科研、商业价值的方向。taichi影眸科技做的ChatAvatar、MSRA的Rodin,都是最近有代表性的工作。taichi https://taichi-lang.cn/
|
|