ProlificDreamer 论文阅读
Project指路:https://ml.cs.tsinghua.edu.cn/prolificdreamer/
论文简介:截止2023/8/10,text-to-3D的baseline SOTA,提出了VSD优化方法
前置芝士:text-to-3D任务简介
text-to-3D Problem
text-to-3D 解决的问题就是给定一段话,生成视角一致的3D场景,如果了解过这个领域的可以略过不看
研发路线大概是dreamfeild->dreamfusion->polificdreamer
Diffusion Model
text-to-image领域Diffusion Model很厉害,所以基本上就是Extend Diffusion Model to 3D,想看Diffusion Model简介可以看我之前的博文:
生成模型的Basic Idea就是真实图片作为随机分布,每个text是条件。
- Diffusion Model训练出了一个条件分布 p ( x ∣ y ) p(\mathbf x|y) p(x∣y),x是图片,y是条件(text),其Loss Function可以表达为 L D i f f ( ϕ ) : = E x 0 ∼ q ( x 0 ) , t ∼ U ( 0 , 1 ) , ϵ ∼ N ( 0 , 1 ) [ w ( t ) ∥ ϵ ϕ ( α t x 0 + σ t ϵ ) − ϵ ∥ 2 2 ] \mathcal L_{Diff}(\phi) := \mathbb E_{x_0\sim q(x_0),t\sim \mathcal U(0,1),\epsilon \sim \mathcal N(0,1)}[w(t)\|\epsilon_\phi(\alpha_tx_0+\sigma_t\epsilon)-\epsilon\|^2_2] LDiff(ϕ):=Ex0∼q(x0),t∼U(0,1),ϵ∼N(0,1)[w(t)∥ϵϕ(αtx0+σtϵ)−ϵ∥22]
text-to-3D 基本思路
- θ \theta θ是3D表达的参数, c c c是参数,那么3D渲染的本质是 x = g ( θ , c ) \mathbf{x}=g(\theta, c) x=g(θ,c),如果过程是可微的,称为DIP(differentiable image parameterization)
- 对于2D, x 0 ∼ q ( x 0 ) x_0\sim q(x_0) x0∼q(x0)代表Sample过程,是真实图片的分布,而text-to-3D就是把Loss变成 L D i f f ( ϕ , x = g ( θ , c ) ) \mathcal L_{Diff}(\phi,\mathbf{x}=g(\theta, c)) LDiff(ϕ,x=g(θ,c)),去优化 θ \theta θ
Prolific Dreamer Basic Idea
符号
- prolific dreamer这篇文章进一步研究,认为一个合理的3D表达也是一个分布,也就是 θ ∼ μ ( θ ∣ y ) \theta\sim \mu(\theta|y) θ∼μ(θ∣y)
- 渲染出来的图片: q 0 μ ( x 0 ∣ c , y ) : = ∫ q 0 μ ( x 0 ∣ c , y ) p ( c ) d c q_0^\mu(x_0|c,y):=\int q_0^\mu(x_0|c,y)p(c)dc q0μ(x0∣c,y):=∫q0μ(x0∣c,y)p(c)dc
- diffusion model渲染出来的图片: p 0 ( x 0 ∣ y ) p_0(x_0|y) p0(x0∣y)
优化目标
优化一个参数分布,使得它和Diffusion Model生成的结果接近(pretrained)
min μ D K L ( q 0 μ ( x 0 ∣ y ) ∥ p 0 ( x 0 ∣ y ) ) \min_\mu D_{KL}(q_0^\mu(x_0|y)\| p_0(x_0|y)) μminDKL(q0μ(x0∣y)∥p0(x0∣y))
算法
Loss Function
根据上述优化目标,可以提出如下的Loss
BTW,为什么这个等号成立我是不太理解的(原论文说是KL Divergence的性质),占个坑
我认为这个步骤其实就是cover Diffusion Model的步骤, q t μ ( x t ∣ y ) : = ∫ q 0 μ ( x 0 ∣ c , y ) p t 0 ( x t ∣ x 0 ) d x 0 q_t^\mu(x_t|y):=\int q_0^\mu(x_0|c,y)p_{t0}(x_t|x_0)dx_0 qtμ(xt∣y):=∫q0μ(x0∣c,y)pt0(xt∣x0)dx0,也就是给定camera,把某张图片渲染出来之后拿去上t步高斯噪声的分布,让这个分布和Diffsuion Model 第t步的图片分布尽可能接近。
这已经是一个非常形式化的优化目标了。接下来考虑优化手段。
Optimization
采用Wasserstein gradient flow of VSD,简单理解就是,用 { θ } i = 1 n \set\theta_{i=1}^n {θ}i=1n这n个参数"粒子"去模拟 μ ( θ ∣ y ) \mu(\theta|y) μ(θ∣y),然后优化的时候就是优化每个粒子参数。
基于此,问题转化解如下的一个ODE:
第一项是Diffusion Model生成的带噪音的真实图片的score function,所以它由预训练好的 ϵ p r e t r a i n ( x t , t , y ) \epsilon_{pretrain}(x_t,t,y) ϵpretrain(xt,t,y)生成
第二项是渲染出来图片生成的带噪声的图片的score function,它由根据一个新网络 ϵ ϕ ( x t , t , c , y ) \epsilon_\phi(x_t,t,c,y) ϵϕ(xt,t,c,y)生成,这个网络采用LoRA 技术,微调 ϵ p r e t r a i n \epsilon_{pretrain} ϵpretrain再embedding一个c进去。
所以进一步转化:
并得到了如下的算法
这篇文章的做法到这里介绍完毕。
数学原理
占坑代填,孩子暂时不会泛函推不了