当用于训练的数据与用于评估的数据相似时,机器学习技术最有效。这对于学习过的单图像去噪算法来说是正确的,这些算法应用于真实的原始相机传感器读数,但由于实际的限制,通常在合成图像数据上进行训练。虽然从合成图像推广到真实图像需要仔细考虑相机传感器的噪声特性,图像处理管道的其他方面(如增益、颜色校正和色调映射)常常被忽略,尽管它们对原始测量数据如何转换成最终图像有重要影响。为了解决这个问题,我们提出了一种通过反转图像处理管道的每个步骤来反处理图像的技术,从而使我们能够从普遍可用的互联网照片合成现实的原始传感器测量。此外,在评估我们的损失函数时,我们还对图像处理管道的相关组件建模,这使得训练能够意识到去噪后将发生的所有相关光度处理。通过对训练数据和模型输出进行反处理和处理,我们可以训练出一个简单的卷积神经网络,它的错误率在Darmstadt Noise数据集上比之前的技术低14%-38%,快9-18,也适用于这个数据集之外的传感器数据。
传统的单图像去噪算法通常是对图像的性质及其要去除的噪声进行分析建模。相比之下,现代的去噪方法通常使用神经网络来学习从噪声图像到无噪声图像的映射。深度学习能够表示图像和噪声的复杂属性,但是训练这些模型需要大的成对数据集。因此,大多数基于学习的去噪技术依赖于合成训练数据。尽管在设计用于去噪的神经网络方面做了大量的工作,最近的基准测试表明,在对真实的噪声原始图像进行评估时,深度学习模型往往比传统手工设计的算法表现得更好。我们认为,造成这种差异的部分原因是不现实的合成训练数据。由于噪声是加性的、白噪声和高斯噪声的假设,许多经典算法对真实数据的推广效果很差。最近的工作已经发现了这种不准确性,并转移到更复杂的噪声模型,更好地匹配物理图像形成。但是,这些技术没有考虑典型图像处理管道的许多步骤。为了改善人工训练数据与真实原始图像之间的不匹配,一种方法是利用降噪算法所针对的同一摄像机捕获有噪声和无噪声的图像对。然而,捕捉噪声和无噪声的图像对是困难的,需要长时间曝光或多摄图像,以及后处理来应对相机的运动和照明变化。获取这些图像对既昂贵又耗时,而在训练神经网络时,为了防止过度拟合,需要大量的训练数据,这又加剧了这个问题。此外,由于不同的相机传感器表现出不同的噪声特征,将一种学习去噪算法应用到新的相机传感器可能需要捕获新的数据集。
图1 来自Darmstadt噪声数据集的图像,其中我们给出(a)噪声输入图像,(b)地面真值无噪声图像,(c)先前最先进算法的输出,以及(d)模型的输出。四幅图像均由原始Bayer空间转换为sRGB进行可视化。每个结果旁边是三个裁剪的子图像,用最近邻插值渲染。更多结果见补充。
当适当建模时,合成数据是简单和有效的。数字传感器的物理特性和成像管道的步骤已经得到了很好的理解,可以利用它们从几乎任何图像中生成训练数据,只需要使用目标摄像机传感器的基本信息。提出了一种对图像处理管道关键部件建模的系统方法,对一般的互联网图像进行反处理以生成真实的原始数据,并将传统的图像处理操作集成到神经网络的训练中。在Darmstadt Noise数据集中对真实的噪声原始图像进行评估时,我们的模型的错误率降低了14%-38%,比以前的技术水平快了9 -18个百分点。模型输出的可视化结果如图1所示。我们的反处理和处理方法还可以在生成我们的综合训练数据时,泛化没有明确建模设备捕获的图像。本文从以下几个方面展开:第2节对相关工作进行了回顾。在第3节中,我们详细介绍了原始图像处理管道的步骤,并定义了每个步骤的逆过程。在第4节中,我们提出了将一般的网络图像处理为合成原始数据的反处理程序,修改训练损失以适应原始处理,训练我们简单有效的去噪神经网络模型。在第5节中,我们展示了我们的模型在Darmstadt噪声数据集上的改进性能,并提供了一个消融研究,隔离了我们方法的各个方面的相对重要性。
单幅图像去噪一直是计算机视觉和图像处理领域的研究热点。经典的技术,如各向异性扩散、全变差去噪和小波核取心,在信号和噪声都表现出特定统计规律的前提下,使用手工设计的算法从噪声输入中恢复干净的信号。这些参数化模型虽然简单有效,但其容量和表达能力有限,这使得人们对BM3D和非局部均值等非参数、自相似性驱动的技术越来越感兴趣。从简单的分析技术向数据流方法的转变继续以词典学习和KSVD和专家领域等基本搜索算法的形式进行,这些算法通过查找稀疏性保持或统计规律建模良好的图像表示形式进行操作。在现代,大多数单图像去噪算法完全是数据驱动的,由深度神经网络组成,经过训练可以从噪声图像回归到去噪图像。最经典的去噪工作是在图像噪声为加性、白噪声和高斯噪声的假设下进行的。该模型虽然方便、简单,但并不现实,光子到达传感器的随机过程更适合描述为“拍摄”和“读取”噪声。整体噪声可以更准确地建模为包含高斯和泊松信号相关分量或者从一个方差是强度函数的异方差高斯分布中采样。分析建模图像噪声的一种替代方法是使用真实的噪声和无噪声图像的例子。这可以通过捕捉由一对真实照片组成的数据集来实现,其中一张照片是短曝光,因此会产生噪声,而另一张照片是长曝光,因此基本上没有噪声。这些数据集可以观察到,使用合成数据训练的最新技术被老模型(如BM3D)所超越。因此,最近的工作通过收集这些真实的、成对的数据显示出了进展,这些数据不仅用于评估,而且用于训练模型。这些方法显示了巨大的希望,但将这种技术应用于特定的相机需要大量的艰苦的收集与仅需要合成训练数据或校准参数的老技术相比,该摄像机的训练数据需要完全对齐,大大增加了从业者的负担。此外,还不清楚该数据集采集程序如何用于捕捉小运动无处不在的对象,如水、云、树叶或生物。最近的研究表明,可以使用同一场景的多个噪声图像作为训练数据而不是成对的噪声和无噪声图像,但这并没有很大程度上减轻这些大型真实照片数据集的局限性或劳动要求。虽然人们普遍认为,在图像形成过程中对噪声进行正确的建模是学习有效去噪算法的关键,一个较少被深入探讨的问题是用于将原始传感器读数转换成最终图像的图像处理管道的影响。现代图像处理管道由几个步骤组成,这些步骤转换图像强度,从而影响输入噪声如何缩放或修改,以及最终呈现的图像如何作为原始传感器测量的函数出现。在这项工作中,当为我们的模型合成训练数据时,我们对这些步骤进行建模和反求,并证明这样做可以显著提高去噪性能。
现代数码相机试图呈现一种令人愉快的和对世界的准确形象,类似于被感知到的人类的眼睛。然而,来自相机的原始传感器数据还不像照片,需要许多处理阶段才能将其噪声线性强度转换为最终形式。在这一部分,我们描述了一个传统的图像处理管道,从传感器测量到最终图像。为了能够生成真实的合成原始数据,我们还描述了管道中的每个步骤如何被倒置。通过这个过程,我们可以把一般的互联网图像转换成训练对,很好地近似Darmstadt Noise数据集,并推广到其他原始图像。有关我们的反处理步骤的概述,请参见图2。
图2.一个可视化的数据管道和网络训练过程。对MIR Flickr数据集中的sRGB图像进行反处理,加入了真实感的拍摄和读出噪声来合成有噪声的原始输入图像。噪声图像通过去噪神经网络输入,然后在计算L1损失前对网络的输出和无噪声的原始图像进行原始处理。有关详细信息,请参见第3节和第4节。
虽然经过处理的图像中的噪声可能由于像素值之间的非线性和相关性而具有非常复杂的特征,但是原始传感器数据中的噪声是很容易理解的。传感器噪声主要来自两个来源:光子到达统计和读出电路中的不精确。散粒噪声是一个泊松随机变量,其均值为真实光强(以光电子测量)。读出噪声是一个近似高斯随机变量,均值为零,方差固定。我们可以把它们近似成一个单一的异方差高斯分布,把每个观测到的强度y当作一个随机变量,其方差是真实信号x的函数。
(1)
参数和取决于传感器的模拟和数字增益。对于一些数字增益,模拟增益,和固定传感器读出方差
(2)
这两个增益级别由相机设置,作为用户选择的ISO光敏感级别或某些自动曝光算法的直接函数。因此对于特定的曝光和的值可以由相机计算出来,通常作为元数据的一部分存储附带原始图像文件。为了选择合成图像的噪声级别,我们对真实原始图像中不同的shot/read噪声参数对的联合分布进行建模,并从中抽取样本。针对Darmstadt Noise数据集,提出了一种合理的shot/read噪声因子采样方法
有关此过程的可视化,请参见图3
图3. Darmstadt数据集shot和read噪声参数。每个圆大小表示数据集中有多少图像共享shot/read噪声对。为了选择每个合成训练图像的噪声水平,我们从红色的分布中随机抽取shot和read噪声参数。
传统相机传感器中的每个像素都由一个红色、绿色或蓝色滤光片覆盖,滤光片按拜耳模式排列,如R-G-G-B。恢复图像中每个像素的三种颜色测量值的过程是一个被广泛研究的去马赛克。Darmstadt数据集遵循了使用双线性插值进行去马赛克的惯例,我们采用了这种方法。反转这个步骤是很简单的——对于图像中的每个像素,我们根据Bayer滤镜模式省略它的三个颜色值中的两个。
相机通常会对所有图像强度应用数字增益,其中每个图像的特定增益由相机的自动曝光算法选择。这些自动曝光算法通常是专有的“黑匣子”,很难对任何单个图像进行反向工程。但是要将这一步反转为一对合成和真实数据集,合理的启发式方法是简单地找到一个全局缩放,它最能匹配两个数据集中所有图像强度的边际统计量。为了产生这种缩放,我们假设我们的实际和合成图像强度都来自不同的指数分布
(4)
对于x≥0。尺度参数λ的最大似然估计简单地是样本均值的倒数,并且缩放x等于λ的逆缩放。这意味着我们可以通过使用两组样本均值的比率来匹配两组指数均匀分布的强度。使用我们的合成数据和Darmstadt数据集时,此缩放比例为1.25。为了更全面的数据增强,并确保在训练中我们的模型在整个[0,1]中观察像素强度,我们不使用这种常数尺度,而是从以0.8为中心、标准差为0.1的正态分布中抽取逆增益,从而得到大致跨越[0.5,1.1]的逆增益。
相机记录的图像是照亮场景的灯光的颜色和场景中物体的材质颜色的结果。摄像机管道的一个目标是消除光照的一些影响,生成在“中性”光照下被点亮的图像。这是由白平衡算法执行的,它使用启发式或统计方法估计图像中红色和蓝色通道的每个通道增益。从合成数据中反演这一过程具有挑战性,因为像自动曝光一样,相机的白平衡算法是未知的,因此很难进行反向工程。然而,像Darmstadt这样的RAW图像数据集记录了它们图像的白平衡元数据,因此我们可以简单地从该数据集中白平衡增益的经验分布中取样,从而合成一些较为真实的数据。红色增益在[1.9,2.4],蓝色增益在[1.5,1.9],均匀独立采样
在合成训练数据时,我们对数字和白平衡的逆增益进行采样,并利用它们的结果得到用于合成数据的每个通道的逆增益。这种反向增益几乎总是小于联合,这意味着天真地获取合成图像将导致数据集系统地缺少高光,几乎不包含裁剪像素。这是有问题的,因为正确处理饱和图像强度在去噪时是至关重要的。为了说明这一点,我们不把我们的逆增益1/g用简单的乘法应用到某个强度x上,而是我们应用保强变换f(x,g),当g≤1或对于一些阈值t = 0.9 x≤t时是线性的,但是当g > 1,x > t时是一个立方变换:
这个变换被设计成当x<=t时f(x,g) = x/g,当g<=1时f(1,g) =1,f(x,g)是连续可微的。这个函数用图形4表示。
图4 函数f(x,g)(定义在公式6中)我们用于在保持高光的同时降低合成图像的强度x,得到一组具有代表性的增益{g}。
一般来说,相机传感器的滤色器与sRGB颜色空间所期望的光谱不匹配。为了解决这个问题,相机将应用一个3x3颜色校正矩阵(CCM)来将自己的相机空间RGB颜色测量转换为sRGB值。Darmstadt数据集由四个摄像头组成,每个摄像头在进行色彩校正时使用自己的固定CCM。为了生成能够推广到数据集中所有相机的合成数据,我们对这四种CCM的随机凸组合进行采样,对于每一幅合成图像,我们应用采样CCM的逆来撤销颜色校正的效果。
由于人类对图像黑暗区域的渐变更加敏感,伽玛压缩通常用于将更多动态范围的比特分配给低强度像素。我们使用标准gamma曲线,同时注意将输入钳位到的伽马曲线,以防止训练期间数值不稳定:
(7)
在生成合成数据时,我们应用此运算符的(略微近似,由于)逆。
(8)
图5 (a)来自MIR Flickr数据集的sRGB图像的每个颜色通道的直方图;(b)按照第4.1节列举并在第3节详细说明的过程创建的未处理图像;(c)来自Darmstadt数据集的真实原始图像。注意,真实原始强度的分布和我们的未加工强度是相似的。
高动态范围的图像需要极端的色调映射,即使是标准的低动态范围的图像,也经常使用s形曲线来处理,以匹配电影的特征曲线。可以执行更复杂的具有边缘感知的本地音调映射,但是对这种操作进行反向工程是困难的。因此,我们假设色调映射是用一个简单的平滑步长曲线执行的,并且在生成合成数据时使用该曲线的逆。
(9)
其中,两者仅在[0,1]中的输入上定义。
现在我们已经定义了图像处理管道的每个步骤和每个步骤的逆,我们可以构建去噪神经网络模型。用于训练我们网络的输入和真实状况是使用图像处理管道的逆处理的未处理的合成数据,其中输入图像已被噪声损坏。在评估损失最小化之前,我们的网络的输出和地面实况由我们的管道进行处理。
为了生成真实的合成RAW数据,我们通过对图像处理转换进行顺序逆变来对图像进行反处理,如图2所示。这包括逆变,按顺序,色调映射(3.7节),应用伽玛解压(3.6节),将sRGB应用到相机RGB色彩校正矩阵(3.5节),以及逆变白平衡增益(3.4节)和数字增益(3.3节)。得到的合成RAW图像在训练期间用作无噪声真实状况,并且添加了shot和read噪声(第3.1节)以创建嘈杂的网络输入。我们合成的RAW图像更接近真实的原始强度,如图5所示。
图6 我们模型网络结构。输入到网络的是一个4通道噪声拼接图像与一个4通道噪声级图连接,输出是一个4通道去噪拼接图像。
由于RAW图像在被查看之前最终要经过一个图像处理管道(ISP),因此我们模型的输出图像在评估任何损失之前也应该受到这个管道的约束。因此我们RAW处理应用到我们的模型的输出,依次由应用白平衡收益(3.4节),双线性去马赛克(3.2节),应用色彩校正矩阵从相机RGB转换到sRGB(3.5节),和gamma压缩(3.6节)。这个简化的图像处理管道与Darmstadt噪声数据集基准中使用的管道相匹配,对于一般的图像管道是一个很好的近似。在计算损失之前,我们将此处理应用于网络输出和地面真值无噪声图像。将这个管道合并到训练中,可以让网络推断出下游处理将如何影响所需的去噪行为。
我们的去噪网络以Bayer域中的噪声原始图像作为输入,在同一域中输出降噪图像。作为一个额外的输入,我们根据图像的shot和read噪声参数,通过网络对输入图像中的噪声标准差进行逐像素估计。这些信息作为4个额外通道连接到输入端,每个通道对应于R-G-G-B拜耳平面。我们使用U-Net架构,在编码器和解码器块之间具有相同规模的跳跃连接(详见图6),编码时采用盒下采样,解码时采用双线性上采样,PReLU激活函数。我们的模型没有直接预测去噪图像,而是预测一个被添加回输入图像的残差。
为了创建我们的合成训练数据,我们从MIR Flickr扩展数据集的100万张照片开始,留出5%的数据集用于验证,5%用于测试。我们通过使用高斯2x内核(σ= 1)下采样,以减少噪声的影响,量化,JPEG压缩,去马赛克和其他artifact。然后,我们对每个图像随机裁取128x128,随机水平和垂直翻转进行数据增强。我们通过应用4.1节中描述的反处理步骤来合成噪声和干净的原始训练对。我们使用Adam进行训练,学习率为,=0.9,=0.999,=,批大小为16。我们的模型和烧蚀被训练在一个单一的NVIDIA Tesla P100 GPU上集中超过约3.5百万步,这需要3天。
我们训练了两个模型,一个针对sRGB错误度量的性能,另一个针对RAW错误度量的性能。对于我们的sRGB模型,在计算损失之前,网络输出和合成地面真值都被转换到sRGB空间,如4.2节所述。我们“RAW”模型直接计算我们的网络输出和我们的RAW合成地面真值之间的损失,没有这个处理。对于这两种实验,我们都将输出图像与地面真值图像之间的L1损耗最小化。
为了评估我们的技术,我们使用了Darmstadt噪声数据集,它是50幅真实高分辨率图像的基准,其中每幅高iso噪声图像都与(几乎)无噪声的低iso地面真值图像相匹配。Darmstadt数据集代表了对早期去噪基准的显著改进,去噪基准往往依赖于合成数据和合成(通常是不现实的)噪声模型。Darmstadt数据集的额外优势,它包含从四个不同的标准消费相机拍摄的图像在野外的自然场景的内容,在相机元数据捕获和相机仔细校准噪声特性,以及图像的强度代表了RAW未经处理的线性强度。该数据集的另一个有价值的特性是,通过一个精心控制的在线提交系统,对数据集的评估受到了限制:整个数据集是测试集,对公众完全隐藏了地面真实的无噪声图像,提交数据集的频率是有限的。因此,很难与此基准测试集过拟合。虽然这种方法在目标识别和立体的挑战中很常见,但在图像去噪中并不常见。我们在Darmstadt数据集上的模型相对于先前工作的性能如表1所示。Darmstadt数据集将其评估分为多个类别:使用或不使用方差稳定变换的算法,以及使用线性拜耳传感器读数或使用双线性去噪sRGB图像作为输入的算法。每一种对RAW输入进行操作的算法,在转换到sRGB空间后,对原始Bayer图像和经过去噪的Bayer输出进行评估。按照Darmstadt数据集的过程,我们对每种技术的raw和sRGB输出报告PSNR和SSIM。一些算法只对sRGB输入进行操作;为了尽可能公平地对待以前的所有工作,我们提出了这些模型,并在sRGB空间中报告了它们的评估。对于使用和不使用方差稳定变换(VST)进行评估的算法,我们将性能更好的版本包括在内。
表1. 我们的模型及其在Darmstadt噪声数据集上的性能,与提交时从https://noise.visinf.tu-darmstadt.de/benchmark/获得并按sRGB PSNR排序的所有已发布技术相比。对于基准测试方法,无论是否使用方差稳定转换(VST),我们报告哪个版本的性能更好,并相应地在算法名称中表明。我们报告使用RAW数据或sRGB数据作为输入的基线技术,由于这个基准测试没有根据RAW输出评估sRGB-输入技术,因此这些技术缺少RAW错误度量。对于每种技术和度量,我们在括号中报告相对的改进,这是通过将PSNR转换为RMSE,将SSIM转换为DSSIM,然后计算相对于性能最好的模型的误差减少来完成的。我们的模型在一个单独的子表中给出了烧蚀。每个度量的前三种技术(忽略烧蚀)都是彩色编码的。运行时在可用时显示(参见5.1节)
我们模型的两个变体(一个针对sRGB,另一个针对raw)在所有输出中产生的psnr和SSIMs显著高于所有基线技术,每个模型变体在其目标领域的性能都优于其他变体。在PSNR和SSIM上的相对改进很难判断,因为这两个指标都被设计成在错误变得很小时达到饱和。为了帮助解决这个问题,在每个错误的旁边,我们在括号中报告性能最好的模型相对于该模型的错误的相对减少。这是通过将PSNR转换为RMSE (,将SSIM转换为DSSIM (DSSIM = (1-SSIM)/2),然后计算每个相对误差的减少。
我们看到,我们的模型在两个RAW指标上的误差比性能第二好的技术(N3Net)减少了14%和25%,在两个sRGB指标上的误差比性能第二好的技术(N3Net、CBDNet)减少了21%和38%。与其他方法相比,我们模型输出的可视化结果可以在图1和补充中看到。与基线相比,我们模型在输出中低频色度伪影减少,这在一定程度上提高了性能。
为了验证我们的方法适用于其他数据集和设备,我们对HDR+数据集的RAW图像去噪方法进行了评估。图7和补充材料中提供了这些评估的结果。
图7 来自HDR+数据集图像,其中我们以与图1相同的格式表示(a)有噪声的输入图像和(b)模型的输出。更多结果见补充。
除了我们感兴趣的两个主要模型外,我们还对我们的模型(sRGB)进行了消融研究,即移除一个或多个模型组件。无CCM、WB、增益表明,在生成合成训练数据时,我们没有执行sRGB对相机RGB CCM反演的反处理步骤,也没有对白平衡和数字增益进行反演。没有色调映射,Gamma表示我们没有执行逆色调映射或Gamma解压缩的反处理步骤。没有反处理表示我们没有执行任何反处理步骤,4 bigger表示我们将每个conv层的通道数量增加了3倍。Noise-blind是指没有将噪声电平作为输入提供给网络。AWGN表明,不使用我们更现实的噪声模型当合成训练数据时,我们使用的加性高斯白噪声σ在0.001~0.15之间均匀取样。没有残差输出表明我们的模型架构直接预测输出图像,而不是预测添加到输入中的残差。
我们从消融研究中看到,移除我们提出的任何模型组件都会降低质量。性能对我们的噪声建模最为敏感,因为使用高斯噪声会显著降低性能。反处理也有很大的贡献,尤其是在使用sRGB度量进行评估时,尽管它比实际的噪声模型稍微小一些。值得注意的是,增加网络大小并不能弥补未处理步骤的缺失。我们唯一的消融研究,实际上删除了神经网络架构的一个组件(残留输出块),导致最小的性能下降。
表1还包括我们能够找到的尽可能多的模型的运行时间。这些运行时间中的许多都是在不同的硬件平台上以不同的计时约定产生的,因此我们在这里详细介绍这些数字是如何产生的。对于Darmstadt数据集的512x512幅图像,我们的模型的运行时为22ms,使用运行在单个NVIDIA GeForce GTX 1080Ti GPU上的TensorFlow实现,不包括将数据传输到GPU所花费的时间。我们报告平均值超过100次。DnCNN的运行时间取自[41],[41]报告了512x512图像在GPU (Nvidia Titan X)上60ms的运行时间,也不包括GPU内存传输时间。N3Net[31]的运行时间取自该论文,该论文报告的运行时间为[41]的3.5倍,建议运行时为210ms。在[6]中,它们为CPU实现在512x512映像上报告60秒的运行时间,并注意到它们的运行时间小于KSVD[2],我们相应地注意到这一点。CBDNet的运行时间取自[18],BM3D、TNRD、TWSC、MCWNNM的运行时取自[39]。我们无法在表1中找到其他技术的运行时间报告,尽管在[30]中他们注意到许多基准算法太慢,无法应用于百万像素大小的图像。我们的模型是速度最快的技术:比N3Net[31]快9倍,比CBDnet[18]快18倍,这两个是仅次于我们自己的技术。
我们提出了一种通过对摄像机图像处理管道的每个步骤进行建模和逆变,将普通图像处理成类似于真实摄像机传感器捕获的原始测量的数据的技术。这使得我们能够训练卷积神经网络去噪原始图像数据,我们从大量可用的互联网图像中合成了大量真实的噪声/干净的成对训练数据。此外,通过将标准的图像处理操作合并到学习过程中,我们能够训练一个网络,使其在评估输出之前能够明确地知道如何处理输出。当我们得到的学习模型应用于Darmstadt噪声数据集时,它比以前的技术水平低14%- 38%的错误率和9 -18的运行时间。