论文简介
本文是19年的论文,网络名为PRIDNet。代码地址为https://github.com/491506870/PRIDNet。在1080ti上,PRIDNet处理512x512图像需要大约50ms;
尽管深度卷积神经网络在特定噪声和去噪方面展示出非凡能力,但对于真实世界的噪声图像仍然表现不佳。主要原因在于真实世界的噪声更加复杂和多样化。为了解决盲去噪问题,本文提出了一种“金字塔真实去噪网络”(Pyranud Real Image Denoising Network,PRIDNet)。网络的设计如下图所示,分为三个阶段:(1)Channel注意力机制模块,来校准输入噪声的Channel重要性;(2)使用金字塔模块提取多尺度特征;(3)特征融合阶段使用内核选择模块自适应融合多尺度特征。
与特定噪声(高斯白噪声、散粒噪声)不同,真实噪声来自于拍摄环境、图像处理管道,所以真实噪声的形势呈现出复杂性和多样性。
在之前,有一些工作致力于消除特定噪声,提出了一些结构。比如为消除高斯噪声,使用带有skip-connect的非常深的全卷积编解码网络,REDNet。也有文章证明了融合残差学习和BN层的去噪CNN(DnCNN)可以比基于非CNN的传统方法要好。但是,上述这些对于特定噪声的方法,如果用于真实世界的噪声上,可能表现比BM3D等具有代表性的传统方法要差。很少有研究盲去噪的方法,特别是针对真实噪声图像的开发。通过交互相对高的噪声水平,FFDNnet可以处理更加复杂的噪声。CBDNet进一步利用噪声估计子网络,所以其整个网络可以实现端到端的盲去噪。Path-Restore使用多路径CNN,可以为每块图像区域动态地选择合适的路径,特别是对真实图像的各种噪声分布。作为Photoshop的商业插件,**Neat Image(NI)**也用于盲降噪。
尽管上述方法对于真实图像去噪获得了巨大的改善,仍有三个问题需要注意:(1)大部分基于CNN的方法,所有的feature map channel都相同对待。(2)前面所提到的方法,都使用了相同的感受野,无法获得多样化的特征。参考传统去噪的方法BM3D,在整张图上进行相似块的搜索,这样可以充分利用上下文信息,而不是局限于小区域范围内。(3)对于多尺度特征的融合,大部分方法使用Add或者Concat算子进行融合,而没有进行区分,忽略了尺度特征的空间和通道特异性。意思是没有使用作者退出的channel attention机制,多尺度特征提取模块,以及特征融合模块。;
网络结构如上图所示,分为三个阶段:噪声估计阶段,多尺度去噪阶段和特征融合阶段。
第一阶段的噪声估计阶段使用没有BN层的五组卷积 + ReLU的方式,每个卷积的输出Channel为32(最后一层为3或1),卷积核大小为3。在最后一层卷积前,使用Channel Attention模块。Channel Attention模块如下图所示:是标准的全局池化层 + FC层的结构,中间有一个通道压缩的过程,FC层中间Cahnnel为2。这个设置为2,有必要去验证一下是否这个attention有效,对比普通的1*1如何。
第二阶段,多尺度特征阶段。需要注意的是,在多层不同尺度池化层之后,使用的是带有skip-connect的深层encoding-decoding的UNet结构。不同Unet结构不共享参数。
第三阶段,特征融合阶段,使用的kernel选择模块结构如下图所示:输入U通过三个不同卷积核大小的卷积,卷积核大小分别为3,5,7。经过element-wise以及Channel Attention(与之前的Channel Attention不同的是,最后没有使用Sigmoid激活函数,而是Softmax算子)后,再与之前卷积进行交互。需要注意的是,这个Softmax算子,不是作用于同一个FC输出上的,而是不同FC的相同Channel上。这种操作,也断绝了速度上的可能性。这Softmax算子的应用,更像是进行了每个Channel的权重赋值操作,所以最后进行了一个element-wise算子进行整合。
论文实验
训练阶段,使用来自智能手机去噪图像数据集(SIDD)的320个图像对,都是在raw-RGB空间和sRGB空间的。然后,使用另外的来自40张图像的1280个256x256截图块作为验证集,用于消融实验。
测试阶段,使用两个广泛使用的基准数据集DND和NC12。DND是由消费级相机拍摄的50张真实高分辨率图像。因为只对外提供了噪声图像,所以只能通过在线提交系统获得PSNR和SSIM。NC12有12张噪声图片,但Ground truth的干净图像无法获得,所以只能展示去噪结果,对这些图像进行定性评估。也就是说,这两个测试集,对于平常实验是无法定量比较的。
本文训练两个模型,一个目标是raw images,一个目标是sRGB images。损失函数为 L 1 L_1 L1,优化器为Adam, β 1 = 0.9 , β 2 = 0.999 , ϵ = 1 0 − 8 \beta_1=0.9,\beta_2=0.999,\epsilon=10^{-8} β1=0.9,β2=0.999,ϵ=10−8。两个模型都训练 4000 4000 4000个epoch,初始学习率为 1 0 − 4 10^{-4} 10−4训练 1500 1500 1500个epoch,然后学习率降到 1 0 − 5 10^{-5} 10−5进行finetune。PatchSize设为256,BatchSize对于raw模型是2,对于sRGB模型是8。所有实现和完成都在GPU 1080ti上tensorflow实现。
在测试集的表现结果如下表所示。需要注意的是,PRIDNet处理512x512图像需要大约50ms;