(论文)[2012-SIG] SURE-based Optimization for Adaptive Sampling and Reconstruction
SURE-AS
- SURE-based Optimization for Adaptive Sampling and Reconstruction
- 主页
- 作者:Tzu-Mao Li、Yu-Ting Wu、Yung-Yu Chuang
- National Taiwan University
- 我们用了 SURE,用了 cross bilateral filters,各向异性效果做得更好
- SURE 支持对任意重建 kernel 的估计
- 能够一起优化 AS+Recon
Introduction
- MCPT 对于 complex scene with multiple distributed effects,很难
- Adaptive sampling and reconstruction (or filtering) 用于加速 MCPT
- AS:通过统计量(难得到)来分配光线
- Recon:kernel 是 spatially-varying and anisotropic(各向异性之前人没有做)
- 我们
- 引入 SURE
- SURE 可以评估任意形态的 kernel
- SURE 计算的 error 可以用于 guide sampling
- 渲染 distributed effects 时,提出了efficient and memory friendly 的保持高质量双边滤波的方法
- 引入 SURE
Related Work
- Adaptive sampling and reconstruction
- image space methods
- multidimensional methods:由于维度爆炸的问题,只会考虑一两种 distributed effects
- adaptive filtering
- Denoising using SURE
SURE
- Stein’s Unbiased Risk Estimator【1981】
- 根据中心极限定理:\(Y\) 是像素的无偏估计,\(x\) 是真值,\(\sigma\) 是有界样本方差,\(n\) 是样本数,则有
\[ Y\xrightarrow{d} N \left(x, \frac{\sigma^2}{n} \right) \]
- SURE:Blu and Luisier’s SURE formulation 【2007】
- 如果 \(y\) 是 \(x\) 的一个测量值,且服从正态分布 \(N(x,\sigma^2)\), 而且 \(F\) 是一个弱可微函数,那么以下误差的估计是 \(F(y)\) 的 MSE 的无偏估计
\[ \text{SURE}((F(y)) = \|F(y) - y\|^2 + 2\sigma_y^2 \frac{dF(y)}{dy}-\sigma_y^2 \]
- 即
\[ E[\text{SURE}((F(y))] = \|F(y) - x\|^2 \]
- 这告诉我们,如果我们能够计算出 \(\sigma_y\) 和 \(dF(y)/dy\),那么就可以在不知道真值 \(x\) 的条件下,估计出 MSE
- 我们希望将 \(F\) 用于任意的 kernel
- \(y\sim N(x,\sigma^2/n)\),于是,现在只需要计算 \(dF(y)/dy\)(\(\sigma_y\) 可以从样本中获得)
- GEM 论文中也是估计 MSE,但是其二次近似只适用于对称的 kernel;我们适用于任意 kernel
Method
Initial samples
- 8 - 16 spp 均匀采样
Filter selection using SURE
- 实验了 3 种 filter
- isotropic Gaussian
- cross bilateral(这里以交叉双边滤波为例)
- modified non-local means filter with additional scene feature
information
- we call this a “cross non-local means filter”
Cross bilateral filters
- 需要缓存辅助信息:surface normals, depths, and texture colors
- 计算出所有辅助信息的 mean、var,作为 feature vectors
- 双边滤波权重:像素 \(i\),邻居
\(j\)
- \(\sigma_s,\sigma_r\):spatial、range(color)
- \(\sigma_{fk}\):feature vector \(k\)
\[ w_{i,j}=\exp\left(-\frac{\|p_i - p_j\|^2}{2\sigma_s^2}\right) \exp\left(-\frac{\|c_i - c_j\|^2}{2\sigma_r^2}\right) \prod_{k=1}^{m} \exp\left(-\frac{D(\bar{f}_{ik}, \bar{f}_{jk})^2}{2\sigma_{f_k}^2}\right), \]
- filtered pixel color \(\hat{c}_i\)
\[ \hat{c}_i = \frac{\sum_{j=1}^{n} w_{ij} c_j}{\sum_{j=1}^{n} w_{ij}} \]
- 我们的实现中,filterbank 是不同 \(\sigma_s\) 的滤波器(\(\sigma_r\)、\(\sigma_{f_k}\) 固定)
- \(D\) 用于度量距离,用于 distributed effects(Depth of field and motion blur)
Depth of field and motion blur
- 这样条件下,geometric features (surface normal and depth) 会有噪声
- 因此需要设计 \(D\)
- 【Sen2012】通过评估 MC random parameters、the scene features
之间的依赖性,来减少依赖性高的样本的权重
- 需要计算样本之间的 pairwise mutual information【具体原理看论文】
- 计算慢、内存开销大
- 建模为高斯,使用方差归一化
\[ D(\bar{f}_{ik}, \bar{f}_{jk}) = \sqrt{\frac{\|\bar{f}_{ik} - \bar{f}_{jk}\|^2}{\sigma_{ik}^2 + \sigma_{jk}^2}} \]
- 直观上,如果有 distributed effects,则方差大,能够容忍 feature 有更大的区别
Compute SURE and select filter
- 可以直接算出解析解
\[ \frac{dF(c_i)}{dc_i} = \frac{1}{\sum_{j=1}^{n} w_{ij}} + \frac{1}{\sigma_r^2} (F^2(c_i) - F(c_i)^2) \]
\[ F^2(c_i) = \frac{\sum_{j=1}^{n} w_{ij} c_j^2}{\sum_{j=1}^{n} w_{ij}} \]
- 第一项是 \(j=i\) 的结果,\(w_{ii}=1\)
- 后面展开,将 \(W_i=\sum_{j}w_{ij}\) 看作整体
\[ \frac{dw_{ij}}{dc_i} = \frac{(c_j - c_i)}{\sigma_r^2} w_{ij} \]
\[ \dfrac{dF(c_i)}{dc_i} = \left(\left(\dfrac{d(\sum_{j \neq i} w_{ij} c_j)}{dc_i}+1\right) - \dfrac{dW_i}{dc_i} F(c_i)\right)\Big/{W_i} \]
- 噪声:使用 MC 样本会导致 noisy filter selection => noisy results
- SURE 本身作为 estimator 有方差
- 在 SURE 优化之前,先过一遍固定参数的交叉双边滤波
- 如何选择最优的 filter
- 每个 filter 都计算一遍 SURE,选最小的作为最优
filter(看流程图的解说应该是这样)
- 所以他只用了 3 scale 的 filter
- 每个 filter 都计算一遍 SURE,选最小的作为最优
filter(看流程图的解说应该是这样)
Adaptive sampling
- SURE 估计的 MSE 可以用于 AS,理论上应该正比于 MSE
- 但是 SURE 存在噪声(可能为负)
- 启发式
- 加上最后减去的一项,就不会有负数了
- 暗处多打点光线,rel:\(I(F(c_i))^2\) 表示 squared luminance
- \(\epsilon=0.001\)
\[ S(i) = \frac{\text{SURE}(F(c_i)) + \sigma_i^2}{I(F(c_i))^2 + \epsilon} \]
- 采样数 \(\propto S(i)\)
Results and discussions
- 实现在 PBRT2
- Intel dual quad-core Xeon E5420 CPU at 2.5GHz, 32GB of RAM, and using 8 threads
参数设置
- SURE
- \(\sigma_{fk}\)
- normal:0.4
- texture:0.125
- depth:0.3
- \(\sigma_r\):0,不用这个参数;实验效果不好
- \(\sigma_s\):filterbank
- intermediate iteration:\(1,2,4\)(足够了,而且效率高)(GEM 也是如此)
- final iteration:\(1,\sqrt{2},2,\cdots,8\)
- \(\sigma_{fk}\)
- SURE 之前的 prefilter:\(\sigma_s=8\),其余同上
Comparisons
- MC、GEM、RPF【Sen2012】
- relMSE:\((y-x)^2/(x^2+\epsilon)\),0.01
- 场景:4 scenes with a variety of effects
- 所有方法都不能很好的保留高频 bump map
Discussions
- GEM
- 试图最小化 MSE,结果上说 relMSE 比 MC、RPF 更小
- 但是由于其各向同性的高斯核,高频纹理、细节很难保留(oversmoothed artifacts)
- 在比较黑的区域光线太少了【为啥,不太懂,人家是 \(\Delta\)relMSE】
- RPF【还没看论文】
- produce slightly oversmoothed results
- 很慢、内存开销大
Other filters
- 各向同性高斯:能够实现 GEM 差不多的效果
- non-local means filter:pixel \(i,j\) 之间的权重
- \(N\):邻居 \([-2,2]^2\)
- patch-based distance 只用在 color,用在 feature 会抹掉高频细节
- 做了使用相同的 \(\sigma_r\) 和 filter-bank 的 \(\sigma_r\):filterbank 效果好
- 有时效果比交叉双边滤波好,但是慢了10x
\[ \exp\left(-\frac{\sum_{n \in N} \|c_{i+n} - c_{j+n}\|^2}{2|N|\sigma_r^2}\right) \prod_{k=1}^{m} \exp\left(-\frac{D(\bar{f}_{ik}, \bar{f}_{jk})^2}{2\sigma_{f_k}^2}\right). \]
\[ \frac{dF(c_i)}{dc_i} = \frac{1}{W_i} + \frac{1}{|N|\sigma_r^2}(F^2(c_i) - F(c_i)^2) + \frac{1}{|N|\sigma_r^2 W_i} \sum_{n \in N} w_{i,i-n}(c_i - c_{i+n})(F(c_i) - c_{i-n}) \]
- 没仔细推 \(\dfrac{dF(c_i)}{dc_i}\)
Limitations
- 做不了 very high frequency texture
- 苦于 MC noise,低 spp 细节保留不是很好
- 尝试做时序的,每帧独立做,效果还行就是会有 flicking
- future:temporal