论文笔记《NeuralField-LDM: Scene Generation with Hierarchical Latent Diffusion Models》

论文笔记《NeuralField-LDM: Scene Generation with Hierarchical Latent Diffusion Models》

  • 免责申明
  • 一句话主旨
    • 多说一嘴
  • Method
    • Part 1. Scene auto-encoder
      • Scene auto-encoder architecture: 2D CNN Encoder
      • “Lift” Into a Frustum: Encode \& Get Features Independently For Each Image
      • 后续操作
      • Additional improvements
    • Part 2. Latent Voxel Auto-Encoder
      • Design of the Latent Auto-Encoder (LAE)
      • 一个坑
    • Part 3. Hierarchical Latent Diffusion Models
  • Overview \& Discussion
    • Overview
    • Discussion


paper:https://arxiv.org/abs/2304.09787

code:问就是没有code!

免责申明

三维重建小白,啥也不会被丢了篇n家论文【类似:“你去把唐僧师徒干掉。”“我?(瞳孔地震)”】。看一次忘一次就做点笔记。欢迎交流讨论,问问题只会道歉。
严肃地说,本文主要讨论了这篇论文的实现,因为没有代码所以很费解,本人调研了部分实现,又猜了一部分,非常不严谨,在这里分享仅供参考

一句话主旨

套了两个auto-encoder模型把三维场景编码到潜在空间进而用政治正确的 diffusion做场景生成。

多说一嘴

看过沐神的同学都知道,auto-encoder是一类自模型啊,例如凯明爹大名鼎鼎的MAE。
这类模型主要的特点是输入输出是同一个东西,训练模型的目的只是希望模型学习到如何表征这个东西。举个例子,你看见月亮写下一行诗:“床前明月光”,你的auto-encoder看见月亮写下一个张量:(写了你也看不懂,就像正常计算机看不懂诗一样)。我们期望模型学习到丰富的潜在表达,就像希望一行诗表征丰满的意境一样。
不过如果说MAE更强调tran作为encoder的丰富语义表达的话,N家这次更倾向于解码器的使用。相较于MAE非对称encoder-decoder架构,N家套的两层auto-encoder都是对称的。

Method

论文笔记《NeuralField-LDM: Scene Generation with Hierarchical Latent Diffusion Models》_第1张图片

Part 1. Scene auto-encoder

第一部分auto-encoder用于把图像编码到三维隐式空间,这个隐式表达就能存储一个三维场景,就像矢量图储存一张图片一样。当然渲染矢量图肯定要比渲染sdf之类的三维隐式表达轻松的多。

Scene auto-encoder architecture: 2D CNN Encoder

论文笔记《NeuralField-LDM: Scene Generation with Hierarchical Latent Diffusion Models》_第2张图片
平平无奇的卷积encoder,失望了吧~
当然卷积铁定是不能凭空弄出整整一个维度的信息的(2D -> 3D),这里N家接了自家很久以前弄出来的LSS模型里的“L”。

“Lift” Into a Frustum: Encode & Get Features Independently For Each Image

我知道我讲的不好,给大佬递原论文:https://arxiv.org/pdf/2008.05711.pdf

听我说,这个Lift操作很简单,怎么回事呢?卷积卷不出一整个维度,但是可以扩展一下通道嘛,ResNet不就卷出64个通道了?N家先特别地多卷几个通道出来,规定这些通道不是特征,而是密度(density values σ \sigma σ)。在LSS原论文中多出来的通道是深度,这是因为目的不同,这个其实就可以有挺多值得研究的点了,因为这玩意儿你规定他是啥就是啥,不过问题在于,需要理论支撑才能用起来。
所以三维重建中百用不倒的神经辐射场Nerf出场了,这也是Lift的理论支持和精髓。讲道理,规定卷积的输出通道是啥没有任何diao用,但是Nerf离散化以后说:
C ^ ( r ) = ∑ i = 1 N T i ⋅ ( 1 − exp ⁡ ( − σ i ⋅ δ i ) ) ⋅ c i T i = exp ⁡ ( − ∑ j = 1 i − 1 σ j δ j ) \widehat{C}(r) = \sum_{i=1}^{N}T_i\cdot(1-\exp(-\sigma_i \cdot \delta_i))\cdot c_i \\ T_i = \exp(-\sum_{j=1}^{i-1}\sigma_j\delta_j) C (r)=i=1NTi(1exp(σiδi))ciTi=exp(j=1i1σjδj)
只要拿着一个维度 σ \sigma σ和另一个维度 c c c就能积出空间里面的特征,老的Nerf中这个特征是颜色 c c c因为希望渲染一个物体各个角度的颜色,但是在本文中特征就是特征啦:
O ( h , w , d ) = exp ⁡ ( − ∑ j = 0 d − 1 σ ( h , w , j ) δ j ) ( 1 − exp ⁡ ( − σ ( h , w , d ) δ d ) ) F ( h , w , d ) = [ O ( h , w , d ) ϕ ( h , w ) , σ ( h , w , d ) ] O(h, w, d) = \exp{(-\sum_{j=0}^{d-1}\sigma_{(h, w, j)}\delta_j)(1-\exp{(-\sigma_{(h, w, d)}\delta_d)})} \\ F(h, w, d) = [O(h, w, d) \phi(h, w), \sigma(h, w, d)] O(h,w,d)=exp(j=0d1σ(h,w,j)δj)(1exp(σ(h,w,d)δd))F(h,w,d)=[O(h,w,d)ϕ(h,w),σ(h,w,d)]
O O O是啥,是各个通道的特征,在空间上这个位置的占有率,F是最终特征的表达形式。LSS也是类似的,在这里就不赘述了。

后续操作

上述过程我们已经把图像拽到三维空间了,但是这只是对单张图的处理,要接利用相机参数merge加体渲染到二维。这个二维特征就能跟图像卷过以后的特征对应,同样用CNN decode一下就还原回原图像了。

Additional improvements

文中做实验用的loss是图像之间的距离以及深度监督损失,深度监督也很好理解,如果我的模型只是把二维图像立起来,就像纸片人一样(卡拉比丘?),对我三维重建的任务那就是毁灭性打击(二向箔?)。我要监督我编码的东西得具备一定的深度,纸片打咩!
然后文中还说了,要是你用中间表达去算损失也不是不行(虽然我觉得这没啥新意,但是N家还是引了一篇文献,我懒得仔细看了,决定:大胆猜测,大胆求证,小心导师

Part 2. Latent Voxel Auto-Encoder

终于到第二个自编码器,这个就介绍从简了。嘻嘻
首先,第一个编码器虽然已经把图像序列放到一个隐式空间了,但是这玩意塞不进diffusion啊,N家就简单粗暴地把它拆成了三个部分——全局信息(1D,g)、精细二维信息(2D,f)、粗糙的三维信息(3D,c)。看下来怎么像是要教会模型制作套皮人的感觉捏?

Design of the Latent Auto-Encoder (LAE)

这个设计就简单了,三个CNN分别给这个隐式表达卷成对应维数就行。其实原文里面描述得很详细了,但是我感觉复现出来还是有点困难吧,源码依赖症属于是。
再说一点实现细节是,他们觉得经验上二维卷积效率高很多,所以都采用二维的CNN,卷完以后再想办法调整。这些调整办法真看不动对应原论文了,也猜不出来,先摆个坑在这吧~

一个坑

Part 3. Hierarchical Latent Diffusion Models

历经磨难终于来到第三部分,也是这篇论文的创新点——把diffusion引入三维。
模型设计非常简单,如下图:
论文笔记《NeuralField-LDM: Scene Generation with Hierarchical Latent Diffusion Models》_第3张图片
我们让模型在“Optional Condition”下从随机噪声中生成一个全局一维特征或者潜在表达反正是人看不懂的东西,然后在以这个全局特征为条件(条件概率看得懂伐)生成三维粗糙特征,最后这些生成的作为条件把没生成的精细二维特征搞出来。至于这个所谓的选择性条件,我感觉就类似一个prompt,论文举的例子是鸟瞰图BEV。
但是众所周知,DDM的采样过程是不需要啥输入的,我们怎么把已有条件塞进去捏。

  • 全局信息g用条件组归一化(conditional group norm,这个条件归一化就是在普通BN的系数上加两个偏置参数,不过这个参数是单独学出来的)
  • 粗糙三维信息就很诡异,文中简单地提到插入连接到 ψ f \psi_f ψf,但是采样过程好像没啥输入啊。这个输入更离谱的点在于相机轨迹也连接进去了?我感觉这个输入它就没做,只是按照它后面说的条件变量用cross attention的方式加入进去了。

Overview & Discussion

讲了这么多应该被我绕晕了吧,那我就放心了,再来回顾一下完整的训练和推理过程。

Overview

训练来说肯定是分三部分分别训,不过后面的部分依赖前面的中间编码表达,第二部分三个编码器可以并行,最后diffusion就是经典的优化任务,也可以并行(应该吧~
推理过程就要反过来,diffusion采样出那三个潜在表达,然后依次调用两个decoder,把这个潜在表达解码回三维隐式表达或者图像。

Discussion

从上述流程看来,三维重建这个领域要蹭diffusion这个政治正确的模型还是有点不容易的。很匪夷所思的是,N家是如何想到把一个三维隐式表达编码成g、c、f三种潜在表达的。
论文笔记《NeuralField-LDM: Scene Generation with Hierarchical Latent Diffusion Models》_第4张图片
从消融实验来看应该是N家一开始想用一个粗糙、精简的三维潜在表达,就像Neural Kernel Surface Reconstruction那种,N家似乎很期望把模型规模做大。但是结果不如他的意就琢磨着加点辅助信息,其实FID 46挺牛了,我之前做过图像修复,FID甚至不如人家三维重建搞的,大寄。
最后就是这个diffusion感觉还是对输入有点难以处理,吧,直观上我个人认为这篇论文里面做的跟prompt差不多,就没法加很强的限制,这点可能我导要失望了呵呵~

The End

你可能感兴趣的:(三维重建纯纯萌新,论文阅读,计算机视觉,人工智能,算法,神经网络)