目录
比较喜欢的一篇工作
project:https://bmild.github.io/rawnerf/
paper:https://arxiv.org/abs/2111.13679
code:https://github.com/google-research/multinerf
video【推荐】:https://www.youtube.com/watch?v=JtBS4KBcKVc
我的理解
使用NeRF直接对Raw图像建模,重构出的场景能够使用各种相机的后处理算法实现多样化的新颖视角合成,比如失焦、曝光程度等
主要核心技术在于一阶线性近似的色调曲线梯度损失和深度正则化;是一篇比较偏向于计算摄影理论的文章,也需要很强的工程基础,比如数据制作流程就比较繁琐了。
通过联合优化许多输入图像上的单个场景表示,NeRF对高水平的图像噪声具有惊人的鲁棒性。我们利用这一事实直接在完全未处理的HDR线性原始图像上训练RawNeRF。在这个仅由单个蜡烛 (a) 照明的夜间场景中,RawNeRF 可以从经过后处理 (b, c) 破坏的噪声原始数据中提取细节。RawNeRF 恢复完整的 HDR 颜色信息,使 HDR 视图合成任务成为可能,例如改变渲染新视图的焦点和曝光。生成的渲染可以像任何原始照片一样修饰:在这里,我们展示了 (d, left) 具有简单全局色调映射的暗全焦曝光和 (d, right) HDRNet后处理的更亮、综合重新聚焦的曝光。
前置知识
- 相机主要由三部分组成:光学镜头、图像传感器和ISP。
- 当相机快门打开时,图像传感器的每个像素将光子转为电子,在未饱和时将电子存在势阱中。当相机快门关闭,传感器的模拟前端读取每个像素存储的电子,并将其转为模拟信号;对这些模拟信号应用增益(可能不均匀);将其转为数字信号并纠正非线性;最终返回图像。
- 在拍照时的感光单元的响应几乎是线性的:
- 当势阱饱和时会产生非线性的相应(过曝)
- 当接近0时也产生非线性响应(噪声)
- High Dynamic Range(高动态范围)是指一种图像或视频的特性,它能够显示更广泛的亮度范围和更丰富的细节。传统的图像和视频通常具有有限的动态范围,即在亮度和对比度方面受到限制,导致在高亮和阴影区域丢失细节。
在高动态范围图像和视频中,亮度范围被扩展到更高的值,使得明亮的区域可以更亮,暗部区域可以更暗。这样,图像和视频中的细节不会在过曝或过暗的情况下丢失。高动态范围技术通常涉及使用多个曝光水平的图像或通过特殊的传感器来捕捉更广泛的亮度范围,并使用合适的显示设备来呈现这些图像或视频。高动态范围能够提供更好的对比度、色彩饱和度和细节表现。
简单来说:HDR就是:亮的地方贼亮,暗的地方贼暗,细节还贼多。
参考链接:什么是HDR(High Dynamic Range)高动态范围成像?——节选自《高兴说显示进阶篇之三》
- Raw图在计算摄影学中的处理管道
摘要
- 现有NeRF 使用相机管道有损的将色调映射的低动态范围 (LDR,8bit) 作为输入(相机未经算法处理过的感知图像被称作Raw图,具有较高的动态范围,一般为10或14bit)
- 该方法在Raw图片集上进行训练,可执行高动态范围(HDR)视图合成任务。除了改变相机视点,还支持操纵焦点、曝光和色调映射。
- 即便Raw图像携带着很多的传感器噪声,但NeRF对原始噪声的零均值分布具有很强的鲁棒性。
- RawNeRF的方法可以从近黑暗中捕获的极噪声图像重建场景
引言
- 光线良好且不包含大亮度变化的场景(信噪比高),现有NeRF方法可以很好的解决
- 排除了许多常见的捕获场景:夜间场景和过亮的室内场景(具有较低信噪比),阴影区域和其他区域具有极高对比度范围的日间场景(如下图,高对比度场景,阴影处的细节都看不到)等
- RawNeRF通过直接监督有噪声的原始输入图像来修改NeRF在线性HDR颜色空间中重建场景,避免了相机的有损后处理和压缩。这有助于各种新颖的新视角合成任务。如修改曝光水平、色调映射、重聚焦、失焦光源周围精确渲染散景。
- 我们利用 NeRF 通过聚合跨帧的信息来减少方差的能力,这表明 RawNeRF 可以从许多嘈杂的原始输入中产生干净的重建。
- 与典型的视频或突发图像去噪方法不同,RawNeRF假设静态场景,期望相机姿势作为输入。有了相机约束,RawNeRF 能够利用 3D 多视图一致性一次平均几乎所有输入帧的信息。
- 贡献点:
- 提出了一种直接在原始图像上训练 RawNeRF 的方法,可以处理高动态范围场景以及在黑暗中捕获的噪声输入。
- RawNeRF 在嘈杂的真实数据集和合成数据集上的表现优于 NeRF,并且是宽基线静态场景的竞争多图像去噪器。
- 展示了由我们的线性HDR场景表示(变化曝光、色调映射和焦点)实现的新颖视图合成应用程序。
相关工作
从计算摄影学和计算机图形学中对HDR的处理,开始优化。
- 简述新视角合成,还没有方法聚焦于HDR数据,存在试图使用LDR恢复HDR的方法,但效果很有限
- 简述去噪声,更关注于不存在GT的时候
- 简述HDR应用:首先计算摄影学领域,许多研究者希望将原始数据到LDR的过程自动化,另外一些侧重于LDR中恢复HDR,比如多组不同曝光条件下对齐拍摄的图像中恢复或反演相机的响应曲线。其次比如合成散焦模糊,大多数机器学习模型使用更快的近似渲染模型,预测深度图,并对每个离散深度层应用深度变化的模糊核
Raw图像处理的简化管道
-
数码相机拍摄照片原始的光电转换结果,即在进行任何后期处理前的数字图像数据,记录了图像最真实的光学信息:
- 当拍摄图像时,光线中的光子击中像素传感器,会产生电荷,记录为数字信号(通常10-14位)。
- 这些值会有一个"黑电平"偏移,用于对抗噪声产生的负值。
- 减去黑电平后,信号yi就是对光子数量xi的噪声测量。
- 光子到达的过程符合泊松分布,产生"射击"噪声。
- 电信号到数字转换也会产生"读出"噪声。
- 总的射击噪声和读出噪声可以用高斯分布很好地建模,其方差是平均值的线性函数。这意味着误差yi - xi的分布是零均值的。【参考文献:Practical Poissonian-Gaussian Noise Modeling and Fitting for Single-Image Raw-Data】
-
原始从图像传感器读取出来的Raw数据,由于采用色彩滤光片采集,每个像素只记录单一颜色通道,所以对于每个像素来说,Raw图像实质上只有1个通道,而不是标准意义上的RGB三通道图像。需要后续去马赛克和插值才能生成完整的RGB三通道图像。
问题:
边缘保持,插值算法容易导致图像中的边缘变模糊,而人眼对边缘特别敏感;
抗伪彩,插值算法如果预测颜色不准就会在图像中引入伪彩,在灰色区域尤其明显。
抗拉链,插值算法如果预测颜色不准容易在图像中引入周期性的模式
抗混叠,插值算法容易在图像中引入低频模式 -
色彩校正(校准图像的颜色分布或调整色彩通道)和白平衡(最通俗的理解就是让白色所成的像依然为白色):
- 每个相机的色彩滤光片的光谱响应曲线都不完全相同,会导致不同相机获取到的原始色彩空间不同。
- 所以需要使用色彩校正矩阵将原始图像从相机特定的色彩空间转换到标准化的色彩空间。
- 人眼对不同光源造成的色调偏移很鲁森,相机需要通过估计白平衡系数来校正各个颜色通道,使白色表面呈现RGB-中性白色。
- 色彩校正和白平衡调整通常合并为一个单独的3x3线性矩阵变换。
- 这一变换会使不同颜色通道之间的噪声产生更强的相关性。
-
伽马压缩和色调映射:
- 相比于亮部,人类更能感知暗部亮度变化
- 伽马压缩利用人眼在暗区辨别能力更强的特点目的是通过非线性曲线更好地编码图像,优先考虑暗区
- 色调映射(ToneMapping)就是将高动态范围(HDR)转换到我们日常显示的屏幕上的低动态范围(LDR)的过程。用于保留高动态范围场景在8位量化后的对比度
-
在本文后续部分,“色调映射”一词将同时指代伽马压缩和色调映射这两个步骤。它表示将线性HDR值映射到非线性LDR空间以实现可视化的整个过程。将这两个步骤合并称为“色调映射”是有些不恰当的,但为了简化描述采用此术语。色调映射前称为高动态范围(HDR),后称为低动态范围(LDR)。在所有后处理操作中,色调映射对噪声分布影响最大:
- 裁剪完全丢弃最亮和最暗区域的信息
- 非线性色调映射曲线作用后,噪声不再保证符合高斯分布,也不再保证为零均值
方法
标准NeRF采用干净、低动态范围(LDR) sRGB颜色空间图像,其值在[0,1]范围内作为输入;将Raw HDR图像转换为LDR图像有两个显著的结果:
- 当值从一个上方裁剪时,明亮区域的细节会丢失,图像中的细节由色调映射曲线压缩,随后的量化压缩为8位
- 逐像素噪声分布在经过非线性色调映射曲线后变为有偏(不再是零均值),并在零处从下方裁剪
RawNeRF的目标是利用这些信息而不是丢弃它,直接在HDR颜色空间的线性原始输入数据上优化NeRF(如下图)。RawNeRF (b)修改NeRF直接在线性原始HDR输入数据上进行训练。生成的场景表示产生新颖的视图,可以像任何原始照片一样编辑。
损失函数
常规L2loss会由于高亮度区域的量级范围更广而导致明亮区域占主导,产生色调映射后暗区模糊低对比度的图像。RawNeRF提出应用一个更强地惩罚暗区域误差的损失函数,以匹配人眼压缩动态范围的特性。
作者首先提出将渲染估计值和观测强度值先通过色调映射曲线ψ进行处理,然后在色调映射后的LDR空间上计算损失:
L
ψ
(
y
^
,
y
)
=
∑
i
(
ψ
(
y
^
i
)
−
ψ
(
y
i
)
)
2
L_{\psi}(\hat{y}, y)=\sum_{i}\left(\psi\left(\hat{y}_{i}\right)-\psi\left(y_{i}\right)\right)^{2}
Lψ(y^,y)=i∑(ψ(y^i)−ψ(yi))2
这样可以实现在计算损失时,给暗区域赋予更大权重。低光照RAW图像中的观测信号y会受到均值为零的噪声严重污染非线性色调映射会引入偏差,改变了带噪信号的期望值(E[ψ(y)] ≠ ψ(E[y])),这会使网络无法收敛到无偏结果。所以作者又设计了加权L2 loss:
L
(
y
^
,
y
)
=
∑
i
w
i
(
y
^
i
−
y
i
)
2
L(\hat{y}, y)=\sum_{i} w_{i}\left(\hat{y}_{i}-y_{i}\right)^{2}
L(y^,y)=i∑wi(y^i−yi)2
对色调曲线ψ在每个ˆyi点进行线性近似:
ψ
(
y
)
≈
ψ
(
ˆ
y
i
)
+
ψ
′
(
ˆ
y
i
)
(
y
−
ˆ
y
i
)
ψ(y) ≈ ψ(ˆy_i) + ψ'(ˆy_i)(y - ˆy_i)
ψ(y)≈ψ(ˆyi)+ψ′(ˆyi)(y−ˆyi)
将这个线性近似代入式(1)中的色调映射损失:
L
(
y
,
y
^
)
=
∑
i
(
ψ
(
y
i
)
−
ψ
(
y
^
i
)
)
2
≈
∑
i
[
ψ
(
y
^
i
)
+
ψ
′
(
y
^
i
)
(
y
i
−
y
^
i
)
−
ψ
(
y
^
i
)
]
2
=
∑
i
[
ψ
′
(
y
^
i
)
]
2
(
y
i
−
y
^
i
)
2
L(y, \hat{y}) = \sum_i (\psi(y_i) - \psi(\hat{y}_i))^2 \approx \sum_i [\psi(\hat{y}_i) + \psi'(\hat{y}_i)(y_i - \hat{y}_i) - \psi(\hat{y}_i)]^2 = \sum_i [\psi'(\hat{y}_i)]^2(y_i - \hat{y}_i)^2
L(y,y^)=i∑(ψ(yi)−ψ(y^i))2≈i∑[ψ(y^i)+ψ′(y^i)(yi−y^i)−ψ(y^i)]2=i∑[ψ′(y^i)]2(yi−y^i)2
可以看出这就是一个带权重ψ’(ˆyi)2的L2损失
所以通过在每个点线性近似色调曲线,我们将式(1)中的色调映射损失近似转换为了带权重的L2损失形式。这种方法可以避免直接使用非线性色调曲线,同时保留了色调曲线对损失的贡献,实现了色调映射损失的近似。
L
~
ψ
(
y
^
,
y
)
=
∑
i
[
ψ
′
(
sg
(
y
^
i
)
)
(
y
^
i
−
y
ˉ
i
)
]
2
\tilde{L}_{\psi}(\hat{y}, y)=\sum_{i}\left[\psi^{\prime}\left(\operatorname{sg}\left(\hat{y}_{i}\right)\right)\left(\hat{y}_{i}-\bar{y}_{i}\right)\right]^{2}
L~ψ(y^,y)=i∑[ψ′(sg(y^i))(y^i−yˉi)]2
sg()表示stop gradient,使得色调曲线不影响反向传播。
(
ˆ
y
i
−
y
i
)
(ˆy_i - y_i)
(ˆyi−yi)是每个像素点的预测误差。权重项
ψ
′
(
s
g
(
ˆ
y
i
)
)
ψ'(sg(ˆy_i))
ψ′(sg(ˆyi))与预测误差的平方进行乘积,得到单个像素点的损失。通过这种方式,色调曲线
ψ
ψ
ψ可以参与定义损失函数的结构,但不影响网络的参数更新。
作者发现使用对数色调曲线
ψ
(
z
)
=
l
o
g
(
y
+
ϵ
)
ψ(z)=log(y+ϵ)
ψ(z)=log(y+ϵ)作为“梯度监督”色调曲线,它可以产生视觉质量高,artifacts少的结果。权重项为
ψ
′
(
s
g
(
y
i
)
)
=
(
s
g
(
y
i
)
+
ϵ
)
−
1
ψ′(sg(y^i))=(sg(y^i)+ϵ)−1
ψ′(sg(yi))=(sg(yi)+ϵ)−1
最终损失为:
L
~
ψ
=
∑
i
(
y
^
i
−
y
i
)
(
s
g
(
y
^
i
)
+
ϵ
)
−
2
\tilde{L}_{\psi}=\sum_{i}\left(\hat{y}_{i}-y_{i}\right)\left(s g\left(\hat{y}_{i}\right)+\epsilon\right)^{-2}
L~ψ=i∑(y^i−yi)(sg(y^i)+ϵ)−2
可变曝光训练
对于动态范围很高的场景,即便是10-14位的原始图像也可能不足以在单次曝光中同时捕捉亮部和暗部。许多数码相机都内置了“曝光组合”模式来解决这个问题。“曝光组合”模式意味着在相同场景下,相机会连续拍摄一系列曝光时间不同的照片。例如:
一个标准曝光
一个过度曝光,捕捉较暗区域
一个不曝光,捕捉较亮区域
通过组合这些不同曝光时间下获取的图像,就可以重构整个动态范围更广的场景。
参照这个思路,给定一组不同曝光时间
t
i
t_i
ti的原始图像
I
i
I_i
Ii(其他拍摄参数保持不变)。RawNeRF输出的线性颜色值可以通过
t
i
t_i
ti作为缩放因子来匹配图像
I
i
I_i
Ii的亮度,但是仅仅用曝光时间
t
i
t_i
ti无法精确对齐,由于传感器校准误差,所以我们添加一个每个颜色通道和每个唯一曝光时间的可学习的缩放因子
α
t
i
c
α^c_{t_i}
αtic,RawNeRF的"曝光"值为
m
i
n
(
y
^
i
c
⋅
t
i
⋅
α
t
i
c
,
1
)
min(ŷ^c_i\cdot{t_i}\cdotα^c_{t_i},1)
min(y^ic⋅ti⋅αtic,1),
α
t
m
a
x
c
α^c_{t_{max}}
αtmaxc为最大曝光缩放为1,上限1是考虑过曝饱和区域。
该缩放和截断值传入前述损失函数。
通过学习每个曝光时间和通道的缩放因子,RawNeRF可以很好地利用不同曝光图像来扩展动态范围,同时校正传感器误差影响。
实现细节
代码基于MipNeRF实现,只改了MLP的激活函数从 sigmoid 到指数函数的颜色,以更好地参数化线性辐射值。
我们使用 Adam 优化器,其中包含在所有训练图像中采样的 16k 个随机射线的批次,学习率从 10−3 衰减到 10−5,超过 500k 步优化。
同时对于噪声很大的场景,应用密度体积正则化损失可以有效防止半透明"浮动"的artifacts产生。
ToDo
由于原始输入数据是镜头拼接的(也就是还需要进行去马赛克才能变为正常的RGB三通道,现在是单通道),每个像素只包含一个颜色值,我们只对每个像素的有效颜色通道应用损失函数。这样通过优化NeRF模型实际上就实现了对输入图像的去镜头拼接,任何重采样步骤都会影响原始噪声分布,所以****加粗样式我们不对输入图像进行畸变校正或下采样而是直接使用完整分辨率的镜头拼接原始图像进行训练。
为了这一点,我们使用内参来生成射线时考虑辐射畸变,同时使用完整后处理的JPEG图像来计算相机姿态,因为COLMAP不支持原始图像。
结果
-
表明RawNeRF对高水平的噪声具有惊人的鲁棒性,在应用于静态场景的宽基线图像时,它可以作为一种具有竞争力的多图像去噪器。
-
通过恢复保留高动态范围颜色值的场景表示来展示 HDR 视图合成应用程序。
去噪
现有去噪方法结合邻域的2-8张图像来聚合图像信息达到去噪目的,NeRF-based方法在更多的图像上建立统一的3D场景表示,效果更好。
数据集
该数据集包含3个不同真实场景,每个场景都有101张图像。
每个场景包含100张手持拍摄的图像作为噪声输入。这些图像使用快门速度快,以突出图像中的噪声。
每个场景还包含1张三脚架拍摄的图像作为基准帧输入。
每个场景还包含50-100张长曝光三脚架拍摄的图像。这些图像使用HDR+技术合并,生成一个干净的参考图像(结合多张图合并而成)。
所有图像都是使用iPhone X拍摄的,分辨率为12MP,保存格式为12位原始DNG文件。
该数据集旨在提供真实场景下的噪声图像和对应的干净参考图像,用于训练和评估去噪方法。手持快门拍摄产生噪声输入,长曝光三脚架拍摄产生干净参考输出
比较
注意:Note that all denoisers require the noisy version of the test image as input, whereas **RawNeRF and its ablations only require its camera pose.**
RawNeRF 取得了与在大型图像数据集上训练的深度去噪方法相媲美的结果。LDRNeRF和Un+RawNeRF是两种消融实验。
消融分析
尽管同时执行去噪和新颖的视图合成,但我们的方法与所有比较的深度降噪器具有竞争力(表 1,图 6)。我们怀疑多图像去噪器很难利用宽基线捕获提供的附加帧,因为相机运动大于典型的亚秒突发或视频剪辑。相比之下,RawNeRF虽然缺乏任何显式学习的图像先验、干净的训练数据,甚至“基本帧”输入图像,但通过结合重建中所有输入图像的信息来产生高质量的输出。尽管 LDR NeRF 直接训练以最小化 sRGB 空间中的均方误差,但 RawNeRF 实现了明显更好的 sRGB 指标。我们还发现,在训练RawNeRF之前对输入应用单个图像降噪器会导致过度平滑的渲染(Un+RawNeRF)。
新视角合成
在表2和图7中,我们展示了噪声水平对RawNeRF图像质量的影响。为了训练,我们使用来自NeRF 的lego场景渲染120张线性HDR图像,借用我们的iPhone拍摄的EXIF元数据中的颜色校正、白平衡和噪声参数,将这些数据“未处理”到原始空间。由于渲染有大量空白空间,我们仅使用提供的alpha遮罩(否则来自背景像素的错误会严重惩罚LDR NeRF)报告对象上的sRGB PSNR。即使在没有相机错误校准问题的这种合成设置中,我们也可以清楚地观察到在后处理的噪声数据上训练LDR NeRF引起的颜色偏差和细节损失。
HDR视图合成应用
由于RawNeRF是在线性HDR空间中进行训练和渲染的,所以支持对结果图像进行类似于数码相机后期处理的各种后处理操作。
图8.合成失焦示例。在这个夜间花园场景(a)中,LDR NeRF无法准确渲染高光区域的失焦,因为它是在已经进行过色调映射和截断的图像上训练的(b)。RawNeRF恢复了光源的线性强度,使应用失焦模糊可以产生正确过度饱和的“散景球”©。由于RawNeRF针对从广基线输入进行视图合成进行了优化,它可以实现单张图像和深度图无法实现的3D失焦效果,例如通过对前景推土机后方进行对焦来展示遮挡部分的背景(d),或者对琴键上方反射的书架进行对焦(e)。
讨论
我们已经展示了直接在线性原始相机图像上训练 NeRF 的好处。然而,这种修改并非没有权衡。大多数数码相机只能以最小的压缩以全分辨率保存原始图像,从而在捕获每个场景的数十或数百个图像时产生巨大的存储要求。我们的方法还依赖于COLMAP对计算相机姿势的鲁棒性,防止我们捕获低于某个光级别的场景。这可以通过联合优化RawNeRF和输入相机姿势来解决。最后,尽管RawNeRF对噪声具有鲁棒性,但它不能被认为是一个通用的去噪器,因为它不能处理场景运动,并且比前馈网络需要更多的计算量。尽管存在这些缺点,但我们相信 RawNeRF 代表了迈向现实世界环境稳健、高质量捕获迈出的一步。对具有可变曝光的原始图像进行训练使我们能够捕获动态范围更宽的场景,对噪声的鲁棒性使得重建暗夜间捕获成为可能。提升这些约束大大增加了可以通过逼真的视图合成重建和探索的世界的比例。
附录
公式方面
使用一阶线性近似,表明loss项的梯度近似于色调曲线的梯度
权重方差正则化器
根据原始NeRF,一条光线上不同区间的颜色权重计算:
w
i
=
(
1
−
exp
(
−
Δ
i
σ
i
)
)
exp
(
−
∑
j
<
i
Δ
j
σ
j
)
w_{i}=\left(1-\exp \left(-\Delta_{i} \sigma_{i}\right)\right) \exp \left(-\sum_{j<i} \Delta_{j} \sigma_{j}\right)
wi=(1−exp(−Δiσi))exp(−j<i∑Δjσj)
使用光线颜色权重w_i定义的不连续概率分布pw后,深度方差正则项的表达式:
L
w
=
Var
X
∼
p
w
(
X
)
=
E
X
∼
p
W
[
(
X
−
E
[
X
]
)
2
]
\mathcal{L}_{w}=\operatorname{Var}_{X \sim p_{w}}(X)=\mathrm{E}_{X \sim p_{W}}\left[(X-\mathrm{E}[X])^{2}\right]
Lw=VarX∼pw(X)=EX∼pW[(X−E[X])2]
使用概率分布pw计算深度的期望值E[X]的推导过程:
E
[
X
]
=
∫
t
∗
p
w
(
t
)
d
t
E[X] = ∫ t * p_w(t) dt
E[X]=∫t∗pw(t)dt
将
p
w
p_w
pw表示为在每段
[
t
i
−
1
,
t
i
]
[t_{i-1}, t_i]
[ti−1,ti]上的均匀分布
p
w
i
p_{w_i}
pwi:
p
w
(
t
)
=
w
i
/
Δ
i
p_w(t) = w_i/Δ_i
pw(t)=wi/Δi
可得平均深度:
E
X
∼
p
W
[
X
]
=
∑
i
∫
t
i
−
1
t
i
w
i
Δ
i
t
d
t
=
∑
i
w
i
Δ
i
t
i
2
−
t
i
−
1
2
2
=
∑
i
w
i
t
i
+
t
i
−
1
2
\begin{aligned} E_{X \sim p_{W}}[X] & =\sum_{i} \int_{t_{i-1}}^{t_{i}} \frac{w_{i}}{\Delta_{i}} t d t \\ & =\sum_{i} \frac{w_{i}}{\Delta_{i}} \frac{t_{i}^{2}-t_{i-1}^{2}}{2} \\ & =\sum_{i} w_{i} \frac{t_{i}+t_{i-1}}{2} \end{aligned}
EX∼pW[X]=i∑∫ti−1tiΔiwitdt=i∑Δiwi2ti2−ti−12=i∑wi2ti+ti−1
深度方差的推导过程:
将深度期望定义为
t
ˉ
\bar t
tˉ。Var(X)表示随机变量X的方差,X随
p
w
p_w
pw概率分布。Var(X)定义为期望值
E
[
(
X
−
E
[
X
]
)
2
]
E[(X-E[X])^2]
E[(X−E[X])2]:
Var
X
∼
p
w
(
X
)
=
E
X
∼
p
W
[
(
X
−
E
[
X
]
)
2
]
=
∑
i
∫
t
i
−
1
t
i
w
i
Δ
i
(
t
−
t
ˉ
)
2
d
t
=
∑
i
w
i
Δ
i
(
t
i
−
t
ˉ
)
3
−
(
t
i
−
1
−
t
ˉ
)
3
3
=
∑
i
w
i
(
t
i
−
t
ˉ
)
2
+
(
t
i
−
t
ˉ
)
(
t
i
−
1
−
t
ˉ
)
+
(
t
i
−
1
−
t
ˉ
)
2
3
\begin{aligned} \operatorname{Var}_{X \sim p_{w}}(X) & =\mathrm{E}_{X \sim p_{W}}\left[(X-\mathrm{E}[X])^{2}\right] \\ & =\sum_{i} \int_{t_{i-1}}^{t_{i}} \frac{w_{i}}{\Delta_{i}}(t-\bar{t})^{2} d t \\ & =\sum_{i} \frac{w_{i}}{\Delta_{i}} \frac{\left(t_{i}-\bar{t}\right)^{3}-\left(t_{i-1}-\bar{t}\right)^{3}}{3} \\ = & \sum_{i} w_{i} \frac{\left(t_{i}-\bar{t}\right)^{2}+\left(t_{i}-\bar{t}\right)\left(t_{i-1}-\bar{t}\right)+\left(t_{i-1}-\bar{t}\right)^{2}}{3} \end{aligned}
VarX∼pw(X)==EX∼pW[(X−E[X])2]=i∑∫ti−1tiΔiwi(t−tˉ)2dt=i∑Δiwi3(ti−tˉ)3−(ti−1−tˉ)3i∑wi3(ti−tˉ)2+(ti−tˉ)(ti−1−tˉ)+(ti−1−tˉ)2
通常在更嘈杂或光线不足的场景,相对于渲染损失,给深度正则项设置较高的权重,因为在这些场景中,更易出现“漂浮”的伪影问题。
直接使用较高的正则权重会导致图像锐度有一定程度的损失。为了减轻这个问题,我们可以采用从0逐渐增加到1的方式,在训练过程中退火深度正则项的权重。也就是说,起初不考虑深度正则,随着训练进行逐步增加其影响,可以在一定程度上兼顾去除伪影和保持图像细节。
损失函数
使用这个函数作为色调曲线,
ϵ
=
1
e
−
3
,
p
=
1
\epsilon=1e-3,p=1
ϵ=1e−3,p=1效果最好
ψ
′
(
sg
(
y
^
i
)
)
=
1
sg
(
y
^
i
)
+
ϵ
\psi^{\prime}\left(\operatorname{sg}\left(\hat{y}_{i}\right)\right)=\frac{1}{\operatorname{sg}\left(\hat{y}_{i}\right)+\epsilon}
ψ′(sg(y^i))=sg(y^i)+ϵ1
我们还尝试使用加权L1损失或实际相机噪声模型的负对数似然函数(使用EXIF数据中的曝光/读取噪声参数),但发现这比加权L2效果更差。使用标准未加权L2或L1损失监督的RawNeRF模型在训练早期,尤其是在很noisy场景下往往会发散。我们试用未截断的sRGB伽马曲线(在零以下作为线性函数延伸,在1以上作为指数函数延伸)作为我们的损失,但发现它会在暗区域引起许多颜色失真。直接应用我们的对数色调曲线(而不是通过其导数重新加权)再加L2损失也会导致训练发散。
限制
正如文章中提到的,我们的方法不能应用于现实场景中的任意数量噪声。对于我们最暗的夜间场景,我们常需多次运行COLMAP或调整其参数获得相机姿态。即使COLMAP重建成功,结果在图像角对齐程度有时差,其中用于相机内参的失真模型可能无法很好拟合。
RawNeRF本身在嘈杂场景或使用少量图像(30张以下)重建时易产生伪影,通常以位置编码网格状出现。这些伪影在视频中比静态帧更明显。在本质上是纯噪声区域,RawNeRF有时会产生“云”模糊,因为没有多视角信息指导几何重建。使用COLMAP点云计算的近远平面边界有时比实际场景边界宽。使用这些边界浪费每条射线前端许多样本,降低清晰度可能导致额外伪影。因此,我们有时会使用比COLMAP报告更严格的深度边界重新训练RawNeRF模型。我们发现需使用梯度裁剪,因为监督数据中的噪声水平高。某些损失(如标准L2)易产生NaN梯度值,需仔细调整裁剪值。我们发现我们的重新加权损失更稳定。
数据捕获和后处理
讲述了拍摄需要、相机参数和后处理pipeline
相机快门速度校正
设计计算摄影学很多内容,看得有点懵逼,后面有机会在补充(挖坑,ToDo)
真实测试数据集
如主文中提到,我们对每个输出图像和ground truth清晰图像之间求解一个仿射颜色对齐。对于除SID和LDR NeRF外的所有方法,这在原始Bayer空间中分别对每个RGGB平面进行。对于SID和LDR NeRF(输出的是调色后的sRGB图像),这对每个RGB平面与调色后的sRGB清晰图像进行。如果ground truth通道为x,需要匹配的通道为y,我们具体计算:
a
=
(
x
y
−
x
y
)
/
(
x
2
−
x
2
)
=
C
o
v
(
x
,
y
)
/
V
a
r
(
x
)
a = (xy - xy) / (x2 - x2) = Cov(x,y) / Var(x)
a=(xy−xy)/(x2−x2)=Cov(x,y)/Var(x)
b
=
y
−
a
x
b = y - ax
b=y−ax
这里计算出仿射变换ax + b ≈ y的最小二乘拟合(z表示z所有元素的平均值)。
简而言之,它通过计算协方差和方差,求解每个输出图像通道与ground truth对应通道之间的线性关系,实现颜色空间之间的仿射对齐
lego合成数据的细节
见E.2
进一步的定性消融实验
合成失焦渲染模型
为了渲染散焦图像,我们使用与先前已经解决此任务的工作类似的渲染模型 [2, 45, 51]。为了避免非常昂贵的渲染速度,我们首先从训练好的RawNeRF模型中预先计算一个多平面图像[53]表示。这个MPI由一系列正面平行的RGBA平面(颜色仍然在线性HDR空间中)组成,在中心相机姿势的相机截锥内线性采样。
给定这个MPI表示,我们的合成离焦渲染算法(包括横向相机平移)在算法1中描述。这里输入MPI平面从后面索引到前面。 i f o c u s i_{focus} ifocus控制焦平面, ∆ r ∆_r ∆r控制模拟孔径大小(离焦强度), ∆ d ∆_d ∆d (2D向量)控制平行于图像平面的相机平移。 b l u r k e r n e l ( r ) blurkernel(r) blurkernel(r)返回半径为 r r r像素的原点的圆形掩模。模糊核实现为二维傅里叶空间卷积,平移是一个连续的二维图像平移(使用双线性重采样)。请注意,颜色在模糊之前被 alpha “预乘”,这就是为什么 alpha 在 C 的累积步骤中不应用于 c t r a n s c_{trans} ctrans
简而言之,它首先通过RawNeRF生成MPI表示,然后根据聚焦平面、光圈大小和相机平移参数在MPI上实现图像对焦模糊效果的渲染。