liuyuan-pal / SyncDreamer

[ICLR 2024 Spotlight] SyncDreamer: Generating Multiview-consistent Images from a Single-view Image
https://liuyuan-pal.github.io/SyncDreamer/
MIT License
905 stars 39 forks source link

不可否认,这是效果比较好的了。 #18

Open yuedajiong opened 1 year ago

yuedajiong commented 1 year ago

不可否认,这是效果比较好的了。

但是,对于one-shot image,仅在shape的重构/生成上,还是只有粗轮廓。 对于没有见过的对象,也远差于smpl对人体的那种约束程度。

  1. 数据上(先验): 利用3D模做先验(objaverse, omniobject3d,ScanObject,ABO,shapenet...),总感觉不够。比如objaverse等中间很多质量不高的数据。

  2. 算法上: 现在主流都一个路数了: colmap算姿态,diffusion为主也有其他vae+gan等存先验,先验都直接zero123从原始数据集上整理和新训练的都不多,多模态融合一下,2d+3d约束等增加约束,主要是网络集成或者增加为condition的方式,... 简单地说: colmap + diffusion + nerf + objaversi/zero123 + 各自发挥

作为一个外行?感觉路是不是在另外的方向: 1)数据: 感觉还是要回到: 有且仅有,原始的:(最好连帧有相对位置关系的) 照片 /视频输入;零标注,但数据量管够。 2)算法: 端到端,核心模块2+1+n:
2:A一个观察者姿态定位的模块,B一个输入若干图片和A估计的位姿然后输出任意位姿的视角图片(diffusion+nerf只是一种目前折腾的比较多但未必最好的网络组合,可能一种单独的能够融和更多的约束和自带向量存储的UNet/ViT类的网络,当然后者在于要如何很好的获取数据和CG中的一些约束表示到网络中,优于diff+nerf), 1:如果需要可以提取mesh, n:就是一定有很多各种小的vision-task本质上代表某种约束能够嵌入到2B中。 比如在mesh重构特别是mesh / human face/body的重构中,大家习惯于重构好后再diff render后去检测五官等。这里render->re-detect这种vision能e2e differentable来不断增加前面重构的约束,只不过是通过e2e bp回来的。

按照我外行的想法,数据不是问题因为太多了,算力肯定需要的多模型肯定不会太小(如果先验存在网络中,那么100个chatgpt都不够;如果现在存在向量存储中,那么可能B级参数主网络就够了)。 但核心的是算法2B,如何在一个ViT?-based U/X-Net + VectorMemory(cat-level/obj-level)网络上,尽可能的通过: 网络组合,正则,Loss,网络特殊结构,... 各种抓先验约束方式,构造的一个现在LLM-GPT那种简单可数据轰炸的网络。

最后,贴一个我的测试:

000

image

liuyuan-pal commented 1 year ago

感谢尝试我们的demo代码以及给出建议! 我个人感觉3D生成这块的瓶颈还是在于数据上,3D的数据没有那么容易获得,因为3D model目前只能靠专业人士,而2D image大家都可以拍,不像图像里面能有那么多text-image pair~ 所以现在大家还是在想如何利用2D generative model来做3D tasks。这里就不可避免还是有一些质量下降,如何继续提高生成的细节和质量也是我们正在努力的~ :) 非常感谢!

yuedajiong commented 1 year ago

客观的说,你们这个很好了。 我把最近几年稍微有点效果的,或者有点代表性的,mesh和nerf方向的,都读了,有代码的都调试测试了。 如果对任意对象,偏one/few shot的,你们这个肯定是最好的几个之一。 如果对于人物来说, e-con算比较好的,得益于他把smpl人体模型这种强先验放在里面,然后把衣服放在外面撑。

1)如果路线走了有3D模型存在的这种,哪怕是端到端自监督,我觉得都不可能走出来理想的unified vision,最终连chatgpt在nlp方向的高度都达不到。 至少这中间需要一个:对于任意对象,有各种视角足够的图片,然后能够通过暴力shape+texture做fit的方式,来扩充哪个3d object的高质量数据集。 即便这么搞,和imagenet当年打标签一样的程度。 这个路线,对海量高质量3D obj就很需要。 这就是个烧钱的事情。 弄各种东西去专业扫描或者暴力高精度基于充分图片视频拟合,包含现在3d game的

2)人类形成立体视觉的时候,除了生理上双目训练(是不是遗传/天生)多了个深度,对所有物体场景,都是看到图片,也是训练(是不是遗传/天生)所得得到,在脑袋里面构造立体的。 纯纯的图片-立体-图片的模式。 如果这个大路线,那么最大的挑战,就是什么网络结构,和如何通过各种方式把对于一个对象的约束给学进去:数据和表示,网络内部的结构,各种子网络组合,各种正则技术,各种loss特别图形学中的一些启发: 形态的轮廓,形态的平滑,纹理的插值等。

3)现在nerf+diffusion这条路,我个人不太看好: 渲染就不说了,就看表示:早不是简单MLP,从原始nerf,为了提速,无论是分解还是hash,表示变完了; 从开始的简单静态到为了支持动态,k-plane之类的,表示又变完了;...... 现在,一个相对完备的立体视觉系统: 要在当前主流的研究中,考虑上: 1非刚体,头发,水波烟花等对象;2动态,3互作(手抓皮球),至少这三大点: 特殊对象,动态,互作。 现在没有一个算法,包含了这些。 不完备的这种视觉任务定义,离unified vision task很远,现在大量paper中的trick其实最后没啥意思,虽然现在有进步。

4)和chatgpt处理符号不清不楚出效果不招人喜欢类似,vision中有显式的mesh对ue,unity3d等很友好;但是,我觉得很多东西其实不适合表示成mesh. 人类最后感受到还是2d,所以,很大可能,以后可以做成implicit object的游戏engine,给定观察者位置(任何形式的表示),交互对象,环境信息,能够实时给出2D的图片即可。 所以我理解最后比较纯粹的是:2+1+n

对unfied vision比较全的主要需求: image

liuyuan-pal commented 1 year ago

很有意思的想法,学习一下!我更多只是在闷头搞技术,暂时还没有想过这么多,尤其是关于unified vision task这种,哈哈

yuedajiong commented 1 year ago

@liuyuan-pal 作者大神,请教一个问题: 假设有一个训练的接近完美的NeRF或者类似模型image=f(pose),在任何观察点(azimuth, elevation, distance)都能给出和3d truthground直接渲染接近的image, 现在的各种mesh构造的技术路线, 能把mesh fit还原的有多好?

liuyuan-pal commented 1 year ago

我不太清楚这里完美能有多好。但是就目前的nerf而言,density不是一个很好的surface表达,从density提取的mesh比较容易坑坑洼洼。然后类似白墙这种ambiguous物体是纯色的,他渲染正确不一定代表geometry是正确的。

yuedajiong commented 1 year ago

谢谢大神。

r530044129 commented 1 year ago

最终的“做成implicit object的游戏engine”是个最终目标,那可能离写轮眼的无限月读也不远了,但是感觉这个还很远

Dragonkingpan commented 1 year ago

我不同意楼主的部分观点。作者的这个结果比zero123已经进步了很多了。我从工程的角度提几个不成熟的想法: 1、可不可以先做分类的重建,比如我就训练一个模型专门用来生成汽车的多个视角的图像,这样同样的模型容量,容纳的种类少了,精度是不是就会提高。 2、可不可以考虑使用2到3张照片,当然从商用的角度来说一张肯定是最完美的,但是当模型还不能猜得像人一样准确的时候,考虑拍摄2张重建一个质量比现在高出一倍的模型还是很值得的。 3、有没有考虑过在重建之前先用图像识别工具把目标是什么检测出来。这应该是一个很重要的先验。 stable duffsion刚刚出来的结果也很糟糕,多给点耐心,慢慢会好起来的。

I disagree with some of the views of the landlord. The author's result has improved a lot compared to zero 123. I propose a few immature ideas from an engineering perspective:

  1. Can we do classification reconstruction first? For example, I will train a model specifically to generate images from multiple perspectives of a car, so that the same model capacity can accommodate fewer types, and the accuracy will be improved.
  2. Can we consider using 2-3 photos? Of course, from a commercial perspective, one is definitely the most perfect one, but when the model cannot guess as accurately as a human, it is still worth considering taking 2 photos to rebuild a model with twice the quality compared to the current one.
  3. Have you ever considered using image recognition tools to detect what the target is before reconstruction. This should be a very important prior. The results of stable congestion just came out are also very bad. Give more patience and it will gradually improve.
yuedajiong commented 1 year ago

@r530044129 不是二次元,居然不懂你说的:写轮眼的无限月读。google了一下,才知道什么意思。

yuedajiong commented 1 year ago

@Dragonkingpan 我不知道你说的楼主是指那位,如果是我,其实我标题也说了,这篇文章效果是比较好的。

我看到的,zero123, magic123,还是有个one2345等等,我做human recon所以关注了econ之类的很多, 因为没有严格的对比,也不好说最好,特别分布外哪些对象。

我只是额外表达了一下我的想法,也是我自己在折腾的unified vision路线。核心也就两个: 1)现在大家的搞法太依赖高质量大量的3d对象,哪怕只用了zero123; 2)现在任务的定义还是太窄,我觉得要把动态+互作至少加上。

大神论文主要是zero123加了个模块来解决一致性问题,多视图更一致后面立体自然就更好。 如果非要在liuyuan大神这个锦上添花,看他的例子,大的形体的准确性,mesh各个部件的联通性等,都比较好,如果纯沿这个路线提升,最后mesh表面过于光滑,zero123又过于不光滑。 很多粗-细两阶段的搞法,或者在提取mesh时对表面增加一些平滑之类的损失项,不仅保持好的大形体,同时能保留一定的细节。

yuedajiong commented 1 year ago

@liuyuan-pal 大神帅哥,几个问题探讨:

  1. 相机位姿部分,除了R+t的形式,如果用方位角/仰角/距离来表示的话,假设在一个比较中庸的距离,那么方位角和仰角是不是都应该考虑。 (PS. 除了colmap,DL-based,match和priori两条路,能搜到的论文我基本都看过试过,其中priori路线上,robust-loc比较不错。
  2. 关于那个主干的zero123的diff-unet,按照你做消融试验,应该至少有2个版本: zero123的原始版本/checkpoint vs. syncdreamer训练时同时调节过的版本; 推理的时候,可以搞出相关的3种组合: a) zero123, b) syncdreamer调节过的zero123部分,c) syncdreamer全部有效的做法全部enable,我想知道:b这种独立推理,相比于a)提升如何?
yuedajiong commented 1 year ago

@liuyuan-pal 大神,回顾camera pose estimation,其路线,一个是match-based,一个是priori-based/laten fetuture regression。 我的问题是,如果将match这种本质照对应的,能够用某种loss,或者就接一个match-subnetwork在后面,很可能一种很强的约束来提升。

yuedajiong commented 1 year ago

@liuyuan-pal 大神,在抛个砖。 也是我自己在做unfied vision研究中的一些尝试或者没有尝试过的: 本质上,本质上,本本本本本质上,我们要的东西是: 学:给定图像,内部做观察者位姿,然后预测新观察者位置的新图像。 用:给观察者定位姿,可选给定参考图像(至少类别),然后推理出目标图像。 类比chatgpt/llm,这么完全laten/implicit的一个网络中,就算输出的目标图像很好了,可能也不能如显式的一个立体模型(其实也是世界模型)让人放心。 所以3d-recon可能是一个中间串联的环节,也可以是一个辅助的旁路的模块,关键看大家怎么看这个问题和怎么用。

继续,如上,本质上,对于观察者位姿:distance, azimuth, elevation,对于单物体来说,distance可能在比较近的时候比较敏感,而比较远的时候其实可以log化给归一了; 而对于azimuth, elevation,对于对象的全方位无死角构建,其实希望的是一个2pi范围的“连续”的,对应到对象也是有相当连续性的。 所以利用微分方程层(比如在某些位置增加ode的层),我个人理解是可以提升质量效果的。

bennyguo commented 1 year ago

@yuedajiong 同意大神的观点!感觉广义相对论的思想也可以结合一下。

yuedajiong commented 1 year ago

@bennyguo 大神,你是人工智能/计算机视觉的专业的:看了你github上你写的于3d recon相关的,特别threestudio我一致关注中。

你直接批评一下我可能还感觉不到,你这么嘲讽式的批评一下,我一下就搞清楚了自己的民科身份。 不开玩笑,此前还真没意识到自己的想法这么不靠谱,还真的以为自己在认真的讨论立体重构更应该什么样子的任务定义和可能怎么走。 你这么一说,我都没想到不靠谱都到了相对论/量子力学都快hold不住的地步了。 相对论没有搞过,和北大清华合作的时候,量子力学的倒是擦边搞过。 去年帮清华物理系教授提供过材料计算的算法支撑,和物理系/材料系的老院士合作过给提供数字电镜的AI算法设计,前者材料设计部分会算薛定谔方程数值近似,算是擦边了。

谢谢点拨,人间清醒。 :-(