论文笔记:Toward Convolutional Blind Denoising of Real Photographs

Introduction

这是哈工大与香港理工大Lei Zhang老师课题组合作完成的论文,是今年7月份才在arxiv上放出来。Lei Zhang老师课题组在图像去噪方面一直走在前沿,许多经典工作都是他们提出的,如WNNM、DnCNN等。这一篇也是其在深度图像去噪方面的新的文章。与其前面的工作不同的是,这篇文章主要研究了卷积网络在真实图像上的去噪效果,其主要贡献在于以下几点:

  • 提出了一个更加真实的噪声模型,其考虑了信号依赖噪声和ISP流程对噪声的影响,展示了图像噪声模型在真实噪声图像中起着关键作用。
  • 提出了CBDNet模型,其包括了一个噪声估计子网络和一个非盲去噪子网络,可以实现图像的盲去噪(即未知噪声水平)。
  • 提出了非对称学习(asymmetric learning)的损失函数,并允许用户交互式调整去噪结果,增强了去噪结果的鲁棒性。
  • 将合成噪声图像与真实噪声图像一起用于网络的训练,提升网络的去噪效果和泛化能力。

Proposed Method

真实噪声模型

给定一张干净的图像 x ,一个更加真实的噪声模型 n ( x ) N ( 0 , σ ( y ) ) 可以表示为

σ 2 ( x ) = x σ s 2 + σ c 2

这里, n ( x ) = n s ( x ) + n c 包含了信号依赖噪声部分 n s 和平稳噪声部分 n c 。其中 n c 常常建模为方差为 σ c 2 的高斯白噪声,而 n s 常常与图像亮度有关。
除此之外,文章还进一步考虑了相机内ISP流程,其导致了下面的信号依赖和颜色通道依赖的噪声模型

y = M 1 ( M ( f ( L + n ( x ) ) ) )

其中, y 表示合成的噪声图像, f ( ) 代表了相机响应函数(CRF),其将辐照度 L 转化为原始干净图像 x M ( ) 表示将sRGB图像转化为Bayer图像的函数, M 1 ( ) 表示去马赛克函数。既然去马赛克函数中的线性插值运算涉及到了不同颜色通道的像素,所以合成的噪声是通道依赖的。
另外,进一步考虑图像压缩效应,将JPEG压缩后的合成噪声图像表示为

y = J P E G ( M 1 ( M ( f ( L + n ( x ) ) ) ) )

对于RAW图像,可以使用第一个公式合成噪声;对于未压缩图像,可以使用第二个公式合成图像;对于压缩图像,使用第三个公式合成图像。

网络结构

网络结构
CBDNet包含了两个子网络:噪声估计子网络和非盲去噪子网络。
首先,噪声估计子网络将噪声观测图像 y 转换为估计的噪声水平图 σ ^ ( y ) 。然后,非盲去噪子网络将 y σ ^ ( y ) 作为输入得到最终的去噪结果 x ^ 。除此之外,噪声估计子网络允许用户在估计的噪声水平图 σ ^ ( y ) 输入到非盲去噪子网络之前对应进行调整。文章提出了一种简单的策略 ϱ ^ = σ ^ ( y )
噪声估计子网络使用五层全卷积网络,卷积核为 3 × 3 × 32 ,并且不进行pooling和batch normalization。
非盲去噪子网络使用16层的U-Net结构,且使用残差学习的方式学习残差映射 R ( y , σ ^ ( y ) ; W D ) ,从而得到干净的图像 x ^ = y + R ( y , σ ^ ( y ) ; W D )
另外,虽然在DnCNN中提到,batch normalization成功应用于高斯去噪中,但是对于真实图像的噪声去除并没有多大帮助,这可能是由于真实世界的噪声分别与高斯分布相差较大。

非对称学习(Asymmetric Learning)

作者观察到非盲去噪方法(如BM3D、FFDNet等)对噪声估计的误差具有非对称敏感性。如下图所示,分别用BM3D和FFDNet使用不同的输入噪声标准差去噪(标准差依次设为5、10、15、25、35、50),其中绿色框代表输入噪声的标准差与真实噪声标准差一致。可以观察到,当输入噪声的标准差与真实噪声的标准差一致时,去噪效果最好。当输入噪声标准差低于真实值时,去噪结果包含可察觉的噪声;而当输入噪声标准差高于真实值时,去噪结果仍能保持较好的结果,虽然也平滑了部分低对比度的纹理。因此,非盲去噪方法对低估误差比较敏感,而对高估的误差比较鲁棒。正是因为这个特性,BM3D可以通过设置相对较高的输入噪声标准差得到满意的真实图像去噪效果。
为了消除这种非对称敏感性,文章设计了非对称损失函数用于噪声估计。给定像素 i 的估计噪声水平 σ ^ ( y i ) 和真实值 σ ( y i ) ,当 σ ^ ( y i ) < σ ( y i ) 时,应该对其MSE引入更多的惩罚,因此

L a s y m m = i | α I ( σ ^ ( y i ) σ ( y i ) ) < 0 | ( σ ^ ( y i ) σ ( y i ) ) 2

e < 0 时, I e = 1 ,否则为0。通过设定 0 < α < 0.5 ,我们可以对低估误差引入更多的惩罚。
另外,引入全变分(TV)正则项约束 σ ^ ( y ) 的平滑性:

L T V = h σ ^ ( y ) 2 2 + v σ ^ ( y ) 2 2

对于去噪网络输入的 x ^ ,定义重建误差

L r e c = x ^ x 2 2

综上所述,整个CBDNet的目标损失函数为

L = L r e c + λ a s y m m L a s y m m + λ T V L T V

在训练中结合合成噪声图像与真实噪声图像

对于合成噪声图像,作为ground-truth的干净图像和噪声水平图是可用的,但噪声模型可能与真实噪声不太相符;而对于真实噪声图像,噪声是真实的,但仅仅可以获得接近无噪声的图像作为ground truth,而噪声水平图是未知的。另外,一般真实噪声图像的ground truth比较难以获取,而合成噪声图像可以比较方便的大规模合成。因此,在训练CBDNet的过程中,结合这两种类型的图像,提高网络的泛化能力。
文章使用上述的噪声模型合成噪声图像。其使用了BSD500的400张图像,Waterloo的1600张图像,MIT-Adobe FiveK数据库的1600张图像作为训练数据。对于真实图像,使用RENOIR数据库的120张图像。
为了提高网络的泛化能力,交替使用一批合成图像和一批真实图像进行训练。当时使用一批合成图像时,所有的损失函数都会被最小化以更新CBDNet;当使用一批真实图像时,由于真实噪声水平未知,仅仅在训练中使用 L r e c L T V

Experiment Results

数据集及参数

使用三个真实噪声图像数据集:NC12、DND和·Nam。
参数设置:
损失函数中, α = 0.3 λ 1 = 0.5 λ 2 = 0.05
使用ADAM算法训练网络: β 1 = 0.9
使用Delving deep into recti ers中的方法初始化;
最小batch的大小为32,图像块大小为 128 × 128
所有模型训练40 epochs,前20epochs使用 10 3 学习率,然后使用 5 × 10 4 的学习率fine tune模型。

实验结果

小的 α (如0.3)有利于去除位置的真实噪声且保持图像结构。
这里写图片描述
只使用合成噪声图像训练网络会使得网络在真实图像去噪中效果受限,一方面是由于噪声模型不能完整的模拟真实噪声,另一方面深度网络容易对训练数据过拟合,从而不能泛化于真实图像。而由于图像场景数量有限且不能完全获取无噪声图像,只使用真实噪声图像也会使得结果过平滑。
这里写图片描述
在多个测试集上与其他方法比较,无论是图像视觉效果还是客观指标都是比较突出。
这里写图片描述

代码地址:github