文章学习28“Toward Convolutional Blin
这篇文章是从arxiv上找到的关于图像去噪的文章,今年7月份才放出来,是哈工大和香港理工的合作作品,看作者里显示香港理工的只有 Lei Zhang(DnCNN的作者)自己,所以应该是哈工大做出来的这个去噪的工作然后让Lei Zhang来审阅并增加文章知名度这种。但这篇文章还是很有价值的,首先他在dnd数据集上达到的state-of-the-art就很厉害。
文章首先说明motivation。现存的各种去噪的方法大都是针对AWGN(加性高斯白噪声)来进行的,但是真实世界的噪声图像没有那么理想,所以作者所提出的这个网络可以对真实世界的图像很好的去噪,并且不用对于每一个水平的噪声一个单独的去噪模型,更加泛化。总得来说,本文提出了四点贡献:
1)首先,在模拟合成噪声图像时,不再像DnCNN一样只是加上一个高斯白噪声,而是考虑和信号相关的噪声还有camera本身处理过程来模拟一个更加真实的噪声;
2)提出了一个CBD-Net,由一个噪声水平估计网络和一个非盲去噪网络构成,整体可以完成对真实噪声图像的盲去噪;
3)提出了一个非对称学习的loss,并允许用户交互式调整去噪结果,增强了去噪结果的鲁棒性;
4)将合成噪声图像与真实噪声图像一起用于网络的训练,提升网络的去噪效果和泛化能力。
包含了信号依赖噪声部分ns和平稳噪声部分nc。其中nc常常建模为方差为σ2c的高斯白噪声,而ns常常与图像亮度有关。在此基础上,作者又考虑了相机内部的ISP流程,模拟噪声复杂为下式:
其中y表示合成的噪声图像,f()代表了相机响应函数(CRF),其将辐照度L转化为原始干净图像x。M()表示将sRGB图像转化为Bayer图像的函数,M−1()表示去马赛克函数。既然去马赛克函数中的线性插值运算涉及到了不同颜色通道的像素,所以合成的噪声是通道依赖的。接着作者考虑到JPEG格式下图像的压缩过程,噪声合成变为:
对于RAW图像,可以使用第一个公式合成噪声;对于未压缩图像,可以使用第二个公式合成图像;对于压缩图像,使用第三个公式合成图像。
第二个创新:CBD-Net,网络结构如下图所示,由两部分组成噪声估计子网络和非盲去噪子网络。首先,噪声估计子网络将噪声图像转换为估计的噪声水平图。然后,非盲去噪子网络将噪声图像和估计的噪声水平图同时作为输入得到最终的去噪结果。除此之外,噪声估计子网络允许用户在估计的噪声水平图输入到非盲去噪子网络之前对应进行调整。文章提出了一种简单的策略
两个子网络的结构也都比较简单,噪声估计子网络只有5个卷积层,没有pooling和BN,非盲去噪子网络是仿照U-Net的结构设置的,也没有使用BN层,虽然在DnCNN中BN层起到了关键的作用,但在这里由于噪声不是高斯分布所以去掉BN并没有什么影响。CNND采用了和DnCNN同样的res结构,先拟合出来噪声再去除:
第三个贡献,提出了非对称学习的策略。刚听到这个名称的时候还觉得很厉害,看懂了之后就觉得也就是这样了。
BM3D和FFD-Net都有一个弊端非对称敏感性,就是指你先验知识里给的噪声水平如果小于实际的噪声水平时噪声就不能完全被去除,但如果给这些方法的先验噪声大于图片实际噪声的话,噪声可以被完全去除,就是会过于平滑,缺少一些纹理细节。就比如上图,从上到下分别用σ为5、10、15、25、35、50的BM3D和FFD-Net方法进行去噪,那绿色框就对应着噪声水平一致的去噪情况,就可以看出上述的非对称敏感性。为了解决这个问题,作者提出来了非对称的损失函数:
这个loss的意思就是对mse做一个权重限制,当先验噪声水平小于真实噪声水平时权重就大一点,因为这个效果不好加重惩罚,相应的先验噪声水平大于真实噪声水平时权重就小一点,这个式子中的Ie = 1 当 e < 0 ,α取一个0-0.5之间的数值。然后又对图像的平滑性进行约束:
当然loss里还会有mse存在。最终的loss就是:
第4个贡献,训练数据集,这个就是他在训练网络的时候结合了真实的噪声图像和贡献一里的合成噪声图像。使用了BSD500的400张图像,Waterloo的1600张图像,MIT-Adobe FiveK数据库的1600张图像作为训练数据。对于真实图像,使用RENOIR数据库的120张图像。为了提高网络的泛化能力,交替使用一批合成图像和一批真实图像进行训练。在使用合成噪声图像进行训练时,loss就是上式形式,当使用真实噪声图像时由于真实噪声水平未知所以只采用上loss的第一和第三部分。
参数设置:
损失函数中,α=0.3,λ1=0.5,λ2=0.05;
使用ADAM算法训练网络:β=0.9;
使用Delving deep into rectiers中的方法初始化;
最小batch的大小为32,图像块大小为128×128;
所有模型训练40 epochs,前20epochs使用10−3学习率,然后使用5×10−4的学习率fine tune模型。
实验结果:DND数据集、Nam数据集的结果