最近一直在做基于卷积神经网络的图像去噪~感觉资料比较凌乱,本博文就是整理好经典的论文材料~
同时本博文也结合了阅读论文《Learning a Single Convolutional Super-Resolution Network for Multiple Degradations》时的心得体会
目录
Background
DnCNN
FFDNet
CBDNet
SRMD
Theory
图片的噪声模型
退化参数模型
Dimensionality Stretching(维度拉伸)
维度拉伸的实现细节
SRMD网络结构
Reference
使用了Batch Normalization和Residual Learning加速训练过程和提升去噪性能。网络的结构图如下:
侧重与去除更加复杂的高斯噪声。主要是不同的噪声水平。之前的基于卷积神经网络的去噪算法,大多数都是针对于某一种特定噪声的,为了解决不同噪声水平的问题,FFDNet的作者利用noise level map作为输入,使得网络可以适用于不同噪声水平的图片
网络由噪声估计子网络和去噪子网络两部分组成。同时进行end to end的训练。并采用基于信号独立的噪声以及相机内部处理的噪声合成的图片和真是的噪声图片(所谓“真实”的噪声图片是来自于别人的数据集RENOIR、DND、NC12等,)联合训练。提高去噪网络的泛化能力,也增强去噪的效果
近年来,深度卷积神经网络(CNN)方法在单幅图像超分辨率(SISR)领域取得了非常大的进展。然而现有基于CNN的SISR方法主要假设低分辨率(LR)图像由高分辨率(HR)图像经过双三次(bicubic)降采样得到,因此当真实图像的退化过程不遵循该假设时,其超分辨结果会非常差。此外,现有的方法不能扩展到用单一模型解决多种不同的图像退化类型。
SISR方法主要分为三类:基于插值的方法、基于模型的方法以及基于判别学习的方法。
基于插值的方法(例如:最近邻插值、双三次插值)虽然速度快,但是其效果比较差。
基于模型的方法通过引入图像先验,例如:非局部相似性先验、去噪先验等,然后求解目标函数得到视觉质量较好的HR图像,然而速度较慢。虽然结合基于CNN的去噪先验可以在某种程度上提升速度,但仍然受限于一些弊端,例如:无法进行端对端的训练,包含一些比较难调的参数等。
基于判别学习的方法尤其是基于CNN的方法因其速度快、可以端对端的学习因而效果好等在近几年受到了广泛关注,并且逐渐成为解决SISR的主流方法(如之前博文《 学习笔记之——基于深度学习的图像超分辨率重构》介绍的系列方法)。
然而这些方法都存在一个共同缺点,也就是它们只考虑双三次(bicubic)降采样退化模型并且不能灵活地将其模型扩展到同时(非盲)处理其它退化类型。由于真实图像的退化过程多种多样,因而此类方法的有效实际应用场景非常有限。
一些SISR工作已经指出图像退化过程中的模糊核的准确性对SISR起着至关重要的作用,然而并没有基于CNN的相关工作将模糊核等因素考虑在内。为此引出本文主要解决的问题:是否可以设计一个非盲超分辨率(non-blind SISR)模型用以解决不同的图像退化类型?
因此,SRMD的作者通过提出类似于FFDNet的思想,将degradation model中的两个关键因素(模糊核和噪声水平)跟LR一起作为网络的输入。以此提高网络的泛化能力。注意这里所说的泛化能力,是指网络用于真实的图片上,这真实的图片上具有不同的且不均与的退化类型。而由于模糊核和噪声水平需要跟LR匹配才可以作为网络的输入,为此作者提出了一种维度拉伸的策略,使得其拉伸到跟LR大小一致
LR图像y对应的HR图像x可以通过求解下述问题近似:
简单来说,上述公式包含两点:
估计得到的HR图像不仅要符合SISR的退化过程,并且还要满足清晰图像所具有的先验特征;
对于非盲超分辨率问题,x的求解与LR图像y、模糊核k、噪声水平以及权衡参数有关。
为此,作者得到以下结论:
由于数据保真项(似然项)对应着SISR的退化过程,因此退化过程的准确建模对SISR的结果起着至关重要的作用。然而现有的基于CNN的方法其目标是求解下面的问题:。由于没有将模糊核和噪声等因素考虑在内,因此其实用性非常有限。
为了设计更加有效的基于CNN的SISR模型,应该将更多的图像退化类型考虑在内,一个简单的思路就是将模糊核k和噪声水平也作为网络的输入。由于权衡参数(trade off)可以融入噪声水平之中,因此CNN映射函数可以简化成如下形式:
通过上述分析可以得出非盲SISR应该将退化模型中的模糊核和噪声水平也作为网络的输入。然而LR图像、模糊核和噪声水平三者的维度是不同的,因此不能直接作为CNN的输入。
为了让模型能应用于现实的噪声图像的去噪。Realistic LR Degradation模型的设置非常重要。将信号独立噪声以及相机内部处理噪声都考虑在内,提出了一个更加真实的噪声模型,并让去噪表现有了大幅提高。实际上,就是通过一个更加接近真实的退化参数模型来成pair的去训练一个非盲的网络,使得这个非盲的网络可以适用于blind denoise。
而不仅仅是通过更加接近真实的degradation model,还需要把degradation parameter也一并输入网络里面,提高网络的Generalization ability
真实图像的噪声分布远远不同于高斯噪声,它们更加复杂,并且信号是独立的。因此,可以给定模型如下:
这里,由信号独立的噪声部分(signal-dependent noise)和静态噪声部分(stationary noise)组成.的方差为的高斯白噪声,针对每个像素。而的噪声方差和图像强度相关,也就是注意,此处的x不是clean image应该是L,即clean image的irradiance。
至于相机内部的处理过程,CBDNet的作者提出了下面这个信号独立和通道独立的噪声模型:
degradation moel可以表述如下
当然,也可以换种形式,表述如下
如果加上JPEG,那么将是
假设LR图像大小为,首先将向量化的模糊核PCA降维,然后和噪声水平并在一起得到一个t+1维的向量v,接着将v拉伸为维的张量,我们将此张量称之为退化图(Degradation Maps),其中第i个图的所有元素均为
至此。其实概念是十分清晰的。但是唯一不懂的是如何实现拉伸的过程。。。。幸亏作者有给出代码,接下来找一下代码里面有没有对这个过程的描述
如果是spatially uniform的blur和noise,那这个stretch就是一个repeat的操作,即每一个空间位置的t+1个元素都是相同的。
如果是spatially variant,则需要一个函数,表示每个pixel的噪声~
补充关于FFDNet中的noise level map,将源代码改写如下:
% noise level map
[~,~,noiseSigma] = peaks(size(label,1));%peaks,其实就是一个spatially variant的函数
noiseSigma = 0 + (50 - 0).*(noiseSigma - min(noiseSigma(:)))./(max(noiseSigma(:)) - min(noiseSigma(:)));%把noiseSigma限制在[0, 50]之间,是一个线性的归一化操作
noiseSigma = flipud(noiseSigma);%做翻转的操作
sigmas = imresize(noiseSigma,1/2,'bicubic')/255;
原代码链接(论文阅读笔记——《FFDNet Toward a Fast and Flexible Solution for CNN based Image Denoising》)
noise level map的结果
可以将退化图和LR图像合并在一起作为CNN的输入。为了证明此策略的有效性,选取了快速有效的ESPCN超分辨网络结构框架。值得注意的是为了加速训练过程的收敛速度,同时考虑到LR图像中包含高斯噪声,因此网络中加入了Batch Normalization层。网络结构如下图所示。
在训练阶段,SRMD采用了各向同性和各向异性的高斯模糊核、噪声水平在[0, 75]之间的高斯白噪声以及 bicubic降采样算子。需要指出的是SRMD可以扩展到其它降采样算子,甚至其它退化模型。
https://github.com/cszn/SRMD(SRMD论文的代码)
http://www4.comp.polyu.edu.hk/~cslzhang/paper/CVPR18_SRMD.pdf(SRMD论文)
https://mp.weixin.qq.com/s?__biz=MzUzOTgzMjI5Ng==&mid=2247483795&idx=1&sn=8c485783243920c69054558d56284d5a&chksm=fac33b14cdb4b2025b8c90134700c0539c9740e8904e82c4edca58e64308f027b0203cc77854&mpshare=1&scene=1&srcid=1216c28FC2L59YiiVOczuvDl#rd(关于CBDNet的微信推文)
https://mp.weixin.qq.com/s?__biz=MzIwNjY3NTM3NA==&mid=2247484584&idx=1&sn=e66768cb45586b25e591be7d07eb84cc&chksm=971f4869a068c17f761146034e41ffb67c8f550ce5faef5b8ac13f3b6b3e14e31440b364f5ec&mpshare=1&scene=1&srcid=1216SmMKqqfoM6pXwXGeWMqv#rd
https://mp.weixin.qq.com/s?__biz=MzU5ODUxNzEyNA==&mid=2247483838&idx=1&sn=9b87cc432e0c5ce427b24e8e8feb1428&chksm=fe43b555c9343c43b3bf05d92afc7b1eef617bedd3c949f9a24162ec84577d3b7ac3c5d60a47&mpshare=1&scene=1&srcid=1216nzIiZBJNmlLiqhI21I1P#rd(关于SRMD的微信推文)
https://github.com/2wins/SRMD-pytorch(SRMD的pytorch实现版本)