扩散模型(Diffusion Model)原理详解
Diffusion Model的基本原理(DDPM)
Denoising Diffusion Probabilistic Models(DDPM)在流程上分为两个步骤 - Forward (diffusion) process: 在输入的数据上逐步的增加噪声 - Backward (denoising) process: 在噪声图上进行降噪,从噪声中恢复出原来的图像
Denoising Diffusion Probabilistic Models(DDPM)在流程上分为两个步骤 - Forward (diffusion) process: 在输入的数据上逐步的增加噪声 - Backward (denoising) process: 在噪声图上进行降噪,从噪声中恢复出原来的图像
RIS流程:
\[ \langle L \rangle = \frac{f(y)}{\hat p(y)} \cdot \left( \frac{1}{M}\sum\limits_{j=1}^{M}w(x_{j}) \right) \]
\[ \langle L \rangle = \frac{1}{N} \sum\limits_{i=1}^{N}\left(\frac{f(y_{i})}{\hat p(y_{i})} \cdot \left( \frac{1}{M}\sum\limits_{j=1}^{M}w_{i}(x_{ij}) \right) \right) \]
全局光照对于渲染真实的场景起到至关重要的作用。通常情况下,整个场景被照亮是一个非常复杂的过程,一个shading point可能会受到直接光照、间接光照、散射、焦散、阴影等等的影响,如上图所示。所以没有全局光照只有直接光照会导致渲染的结果不真实,最直观的效果就是阴影区域非常黑,而有了间接光照,阴影区域就会有一个合理的亮度。
在光追渲染中,我们需要对物体和射线的相交进行判断;在物理模拟中,我们需要对物体之间的碰撞进行检测。如果我们采用暴力算法,那么每一帧都需要大量时间计算射线或者碰撞检测。所以我们需要一些更加高效的方式来进行检测,这就需要我们用空间加速结构进行加速。 今天主要记录几种在渲染和模拟中比较常用的方法
四元数(Quaternion)是用于表示旋转的一种方式,其相比于Rotation Matrix的好处在于能够更轻松的插值、不存在万向节(gimbal lock)的问题。其定义如下: \[ q=a+bi+cj+dk \] 其中\(i^{2}=j^{2}=k^{2}=ijk=-1\)。同时也可以用以下方式表示: \[ q=\left(a, \mathbf{v}\right), \text{where }\mathbf{v}=\begin{bmatrix}b\\c\\d\end{bmatrix} \] \(a\)是实部,\(\mathbf{v}\)是向量。四元数的旋转可以理解为四维坐标在三维空间中的投影,具体可以参考3b1b的视频
在position based dynamics中,物体由许多的粒子组成,这些粒子之间有许多约束,比如说距离约束、体积约束等等。在物体运动的过程中,通过解这些约束来更新粒子的位置。大致的伪代码如下(这是XPBD的伪代码,XPBD的区别在于XPBD使用了substep加速收敛)
The scene that we want to render is a dimly lit, smoky bar, inspired by the following two images. Rows of exquisite liquor bottles line the shelves, their labels veiled in the subtle play of light and shadow. An ashtray rests nearby, adorned with an unlit cigarette. A dim spotlight bathes the ashtray and the wine bottles. The scene is to capture the essence of the bar's mystique, inviting participants to let their imagination run wild as they bring out the richness of the hidden stories within the rendering. The following two images are our motivation images.
Based on the motivation images, we rendered our final images.
GAN的全称是Generative Adversarial Nets,是一种生成模型,目的是为了训练出一个生成器,使得生成器能够生成我们想要的数据,比如说一张图片。GAN在刚推出的时候成功生成了简单的手写数字和人脸照片,虽然现在看来生成的图片质量也比较一般,但是也开创了一个生成模型的新时代。
在以前的生成网络中,需要有大量的概率计算, 极大似然估计, 比较麻烦i。GAN就成功的避免了概率计算的问题,不需要马尔科夫链、极大似然估计等等。GAN的思想非常简单,总的来说就是一个生成器和一个判别器进行对抗,最终达到一个纳什均衡的状态。
CycleGAN主要解决的问题是一个Image to Image Translation的问题,也就是从一个图像域转化到另一个图像域的问题,比如说给一张人脸图片,生成对应的动漫头像,还有比如说我们给一个cartoon的图像,需要生成对应的像素化后的图像 (pixel image)。 其次,传统的Image to Image Translation的算法通常需要我们有配对的图像组,但是很显然这是很耗费时间的,也很难获得配对图像。所以CycleGAN提出了一种使用unpaired training set的方法,只需要给定对应两个图像域而不需要配对的图像,我们就可以实现Image to Image的转化。