VAST-AI-Research / TripoSR

MIT License
4.52k stars 522 forks source link

(Clickbait/标题党):Why do we still struggle to obtain commercially viable high-quality 3D models from state-of-the-art TripoSR/LRM/...? #29

Closed yuedajiong closed 7 months ago

yuedajiong commented 8 months ago

作者说TripoSR的算法网络大结构和LRM类似,我也比较了关键模块是可以对应的,所以我借用LRM的算法图来标注TripoSR的实际数据,如下图:

当我们希望通过这样的网络结构,来“学习/记忆/泛化”海量的对象的时候,是困难的。 个人可能不正确的理解。 1)在NeRF中:Render部分是没有parameters的;当海量的对象被训练,NeRF-Decoder/MLP要能应对所有的对象,最终将被训练的非常“平凡”,意思是很难“学习记忆保留”下某些对象很“特定”的特征。我们也可以假定学到了一个“完美”的NeRF-Decoder,只要前面的网络,能够将希望得到的完美的立体,都表示在后面提到的信息流最窄的那480K的表示中。

2)但我们要产生:形态准确,细节非常丰富的模型,其实主要靠那个 backbone/Transformer1D。看这个网络的输入输出,是在相对比较抽象的3M左右的tri-plane tokens上变换;变换完后,被Upsample给压缩(丢失信息)到480K左右的满足后面的表示上。虽然在不同空间,但我们还是可以大概比较480k和mesh空间的数量级的数据差(6M+): 一个高质量的静态人,不含精细的头发,需要100万/1M顶点xyz(其中要40万给人头特别脸),用顶点色来表示纹理,每个点也有rgb三个值,所以不考虑数值精度,得6M个数值点。(480K抽象的表示去指导产生6M+个点位的准确数值)(按照我个人的经验,这里需要说明的是:这种1M顶点的人,顶点位置是相对优化比较好的;反之,如果顶点位置优化的不好,可能需要甚至多一个数量级的点,才表示的差不多准确。对应到E2E的这种学习中,其实很难说学到的latent表示是“有利于”产生“压缩比高”的mesh。) 我也很好奇,TripoSR把triplane那里的维度,从LRM的80降低到40,而grid/64切分并没有更细,效果为啥反而更好。

3)在一种抽象/压缩过的480K空间上,要表示一个“跨越千千万万对象”复杂的物体,既没有没有修改NeRF部分来有short-cut利用原始输入或原始输入编码后的信息,也没有额外的refine步骤(比如估计出相机位置然后直接利用原始image给fit texture),所以必然丢失大量像素空间的的信息。也就是说,给定一个比如人类含人脸这种,大概率会丢失人脸像素空间的一些特征,产生出来的人,就不可能非常“像”。

4)所以,总之,我个人的感觉,就是在红色五角星的细瓶颈的地方,准确的形态/丰富的纹理/比较严格的和输入图片一致,比较难。

image

yuedajiong commented 7 months ago

为什么有的地方,类似于1025这种? 是作者的代码中,把那个image class给弄进来了,这个应该是不要的。没有啥好处。

bennyguo commented 7 months ago

Please use the discussion panel for this, thanks!