Google Research

是我组会PPT改来的,可能有一些简略,有任何疑问可以和我讨论🎶

Motivation

  • NeRF使用LDR图片作为输入,对于拍摄光照不足或者过亮的场景,如果继续使用LDR,那么效果会很差。

    • 对于过亮的场景,LDR是被裁剪过的图像,将亮度范围限制在[0,1]中,因此恢复过程中会失去高光(被裁剪)。
    • 对于过暗的场景,相机对原始图像的处理会破坏掉原有的噪声分布,虽然噪声下降了,但是却引入了明显的偏差。将这种图像进行重建时会产生明显的误差,使颜色变得错误。(噪声大)
  • 使用Raw格式图像进行训练,不仅能对噪声有很好的鲁棒性,还能渲染成为HDR的图像,即可以引入HDR的各种合成技术(改变焦距、曝光时间等等)。

Contribution

  1. 提出一种新颖的训练方式,使用原始Raw格式图像进行训练,称之为RawNeRF。
  2. RawNeRF在具有噪声的数据集上表现优于NeRF,可以作为一种多图形去噪器。
  3. 在这种训练方式重建的图像基础上,改变焦点、曝光等参数获得多样的图片。

Method

Raw camera measurements

  • 生成图像时的噪声主要来自于接收光子和
  • 假设减去黑电平后的测量值为y,可以建模为:

yi=xi+δ(xi)ξ(xi)y_{i}=x_{i}+\delta\left ( x_{i} \right ) \xi \left ( x_{i} \right )

​ 其中,x即为真实的到达光子数量(真实值),后两项可以建模为均值为0,方差为1的高斯分布。

  • 当设备接收的光子越多,信噪比也就越大,y越准。将公式移项后,得到y-x为一个零均值的,即误差为零均值的:

E(yixi)=E(δ(xi)ξ(xi))E(y_{i}-x_{i}) = E(\delta\left ( x_{i} \right ) \xi \left ( x_{i} \right ))

Color filter demosaicking

  • 相机的感光元件仅能检测到达的光子数,并不能感受颜色。
  • 因此需要增加一个滤光片(Bayer****阵列),只允许其中某一种光经过,达到分辨颜色的目的。

color filter

  • 经过去马赛克化的处理后,得到正常的图像。

color filter2

Color correction and White balance

  • 一般来讲,相机还会对原始图像进行白平衡与色彩校正。
  • 相机的感光元件与人眼对三原色的感觉不同,需要对颜色进行校正。

color correction

  • 相机试图通过估计的白平衡系数缩放每个颜色通道来解释这种色彩。即,使白色表面看起来像RGB中性白色 (code #FCFAF6)。
  • 这两个步骤通常结合成一个线性3 × 3矩阵变换。

Gamma compression and Tonemapping

  • 人眼的感光(非线性)与相机的感光(线性)不同,人眼对暗光有更强的分辨能力。
  • 伽马压缩利用这一特点,对信号应用非线性建模,以压缩亮区域为代价,将更多的比特用于暗部区域,使得暗区域更加明亮。

gamma cmp

  • Tonemapping(色调映射),将HDR映射到8bit的LDR上。

Pipeline

pipeline

  • RawNeRF的pipeline,使用了原始的马赛克图像来进行训练。
  • 将渲染后的图像进行postprocess操作以可视化。

Train

Loss function

  • 由于HDR每个像素表示为10~14位,亮度大的地方数值较大,如果直接使用L2 loss,会使得损失函数主要受亮度大的区域影响,导致较暗的地方重建效果差。

loss

  • 同时也不能使用映射后的值,因为经过非线性映射后对噪声影响很大,导致其均值不为0。因此提出使用权重来均衡,如下公式的形式:

L(y^,y)=iwi(yi^yi)2L(\hat{y}, y)=\sum_{i} w_{i}(\hat{y_{i}}-y_{i})^{2}

  • 使用映射函数的近似来计算损失,对ψ(y)\psi(y)yi^\hat{y_{i}}处进行泰勒展开:

ψ(yi)=ψ(yi^)+ψ(yi^)(yiyi^)\psi\left(y_{i}\right)=\psi\left(\hat{y_{i}}\right)+\psi^{\prime}\left(\hat{y_{i}}\right)\left(y_{i}-\hat{y_{i}}\right)

  • 将上式移项、平方、相加后得到:

Lψ~(y^,y)=i[ψ(sg(yi^))(yi^yi)]2\tilde{L_{\psi}}(\hat{y}, y)=\sum_{i}[\psi^{\prime}(\operatorname{sg}(\hat{y_{i}}))(\hat{y_{i}}-y_{i})]^2

  • sg()表示stop-gradient(梯度停止),防止ψ\psi的导数影响梯度。

  • 原文说明使用如下映射函数:

ψ(z)=log(y+ϵ)\psi(z)=\log (y+\epsilon)

  • 求一阶导数带入原损失函数内可得:

Lψ~(y^,y)=i(yi^yisg(yi^)+ϵ)2\tilde{L_{\psi}}(\hat{y}, y)=\sum_{i}(\frac{\hat{y_{i}}-y_{i}}{\operatorname{sg}(\hat{y_{i}})+\epsilon})^{2}

Variable exposure training

  • 一次曝光有时不足以获得全部明亮与暗的区域,因此可以通过不同曝光来捕捉明亮与暗的区域。
  • 在RawNeFR中,可以通过按记录的快门速度对其进行缩放来“曝光”RawNeRF 的、颜色输出。但是RGB三通道的曝光时间的标定不准确,即下式子的乘积不为1:

ytictitmaxytmaxc\frac{y_{t_{i}}^{c}}{t_{i}} \cdot \frac{t_{max}}{y_{t_{max}}^{c}}

  • 因此引入一个可学习的参数α(ti)cα_(t_i)^c来限制快门时间,修正后的输出:

min(yi^ctiαtic,1)\min (\hat{y_{i}}^{c} \cdot t_{i} \cdot \alpha_{t_{i}}^{c}, 1)

  • αticα_{t_i}^{c}是快门速度与通道的缩放因子,我们将αtmaxcα_{t_{max}}^c最大限制为1,表示最长的曝光。整个值被限定为1,说明像素在过度曝光区域中饱和的事实。

Details

  • 沿用了mip-NeRF的代码,修改其颜色输出的激活函数为指数函数。
  • 在体积渲染过程中,对用于沿射线累积颜色值的权重分布的方差进行了损失,以缓解“浮影”的效果。
  • 使用全分辨率的JPEG后处理图像来计算摄像机的位置(COLMAP)。
  • 训练数据使用12bit的图像,首先将其转化为32bit的浮点数,然后重新缩放,使黑电平为0,白电平为1。
  • 当进行可视化时,还要进行后处理,包括:去马赛克、颜色校正、白平衡等操作。

Result

  • 看原文啦😎😎