基于matlab实现的DnCNN网络
超越高斯去噪器:深度CNN图像去噪的残差学习
新闻: DRUNet
-
最先进的去噪性能
-
可用于即插即用的图像恢复
建议使用PyTorch代码进行训练和测试。MatConvnet和PyTorch的模型参数相同。
-
main_train_dncnn.py
-
main_test_dncnn.py
-
main_test_dncnn3_deblocking.py
合并批量归一化(PyTorch)
import torch
import torch.nn as nndef merge_bn(model):''' 将所有'Conv+BN'(或'TConv+BN')合并为'Conv'(或'TConv')基于 https://github.com/pytorch/pytorch/pull/901作者:Kai Zhang (cskaizhang@gmail.com) https://github.com/cszn/DnCNN2019年1月1日'''prev_m = Nonefor k, m in list(model.named_children()):if (isinstance(m, nn.BatchNorm2d) or isinstance(m, nn.BatchNorm1d)) and (isinstance(prev_m, nn.Conv2d) or isinstance(prev_m, nn.Linear) or isinstance(prev_m, nn.ConvTranspose2d)):w = prev_m.weight.dataif prev_m.bias is None:zeros = torch.Tensor(prev_m.out_channels).zero_().type(w.type())prev_m.bias = nn.Parameter(zeros)b = prev_m.bias.datainvstd = m.running_var.clone().add_(m.eps).pow_(-0.5)if isinstance(prev_m, nn.ConvTranspose2d):w.mul_(invstd.view(1, w.size(1), 1, 1).expand_as(w))else:w.mul_(invstd.view(w.size(0), 1, 1, 1).expand_as(w))b.add_(-m.running_mean).mul_(invstd)if m.affine:if isinstance(prev_m, nn.ConvTranspose2d):w.mul_(m.weight.data.view(1, w.size(1), 1, 1).expand_as(w))else:w.mul_(m.weight.data.view(w.size(0), 1, 1, 1).expand_as(w))b.mul_(m.weight.data).add_(m.bias.data)del model._modules[k]prev_m = mmerge_bn(m)def tidy_sequential(model):for k, m in list(model.named_children()):if isinstance(m, nn.Sequential):if m.__len__() == 1:model._modules[k] = m.__getitem__(0)tidy_sequential(m)
训练 (MatConvNet)
-
Simplenn 版本
- DnCNN_TrainingCodes_v1.1
-
DagNN 版本
- DnCNN_TrainingCodes_DagNN_v1.1
测试 (MatConvNet 或 Matlab)
-
[演示]
Demo_test_DnCNN-.m
。 -
[模型] 包括用于高斯去噪的训练模型;用于高斯去噪、单图像超分辨率(SISR)和去块的单一模型。
-
[测试集] BSD68和Set10用于高斯去噪评估;Set5、Set14、BSD100和Urban100数据集用于SISR评估;Classic5和LIVE1用于JPEG图像去块评估。
新的FDnCNN模型
我基于FFDNet训练了新的灵活DnCNN(FDnCNN)模型。
FDnCNN可以通过单一模型处理[0, 75]范围的噪声级别。
Demo_FDnCNN_Gray.m
Demo_FDnCNN_Gray_Clip.m
Demo_FDnCNN_Color.m
Demo_FDnCNN_Color_Clip.m
网络架构和设计原理
- 网络架构
-
批量归一化和残差学习对高斯去噪有益(特别是对于单一噪声级别)。受加性白高斯噪声(AWGN)污染的噪声图像的残差遵循恒定的高斯分布,这在训练过程中稳定了批量归一化。
- 来自一批训练的噪声块、干净块和残差(噪声)块的直方图。噪声级别为25,块大小为40x40,批量大小为128。
* 来自另一批训练的噪声块、干净块和残差(噪声)块的直方图。噪声级别为25,块大小为40x40,批量大小为128。
* 无噪声图像超分辨率没有这种特性。
-
预测残差可以解释为在起点(即噪声图像)执行一个梯度下降推理步骤。
-
DnCNN中的参数主要代表图像先验(任务无关),因此可以为不同任务学习单一模型,如图像去噪、图像超分辨率和JPEG图像去块。
-
左侧是受不同退化影响的输入图像,右侧是DnCNN-3恢复的图像。
-
结果
高斯去噪
BSD68数据集上不同方法的平均PSNR(dB)结果。
噪声级别 | BM3D | WNNM | EPLL | MLP | CSF | TNRD | DnCNN | DnCNN-B | FDnCNN | DRUNet |
---|---|---|---|---|---|---|---|---|---|---|
15 | 31.07 | 31.37 | 31.21 | - | 31.24 | 31.42 | 31.73 | 31.61 | 31.69 | 31.91 |
25 | 28.57 | 28.83 | 28.68 | 28.96 | 28.74 | 28.92 | 29.23 | 29.16 | 29.22 | 29.48 |
50 | 25.62 | 25.87 | 25.67 | 26.03 | - | 25.97 | 26.23 | 26.23 | 26.27 | 26.59 |
视觉结果
左侧是受AWGN污染的噪声图像,中间是DnCNN去噪的图像,右侧是真实图像。
通过单一(DnCNN-3)模型进行高斯去噪、单图像超分辨率和JPEG图像去块
BSD68数据集上噪声级别15、25和50的高斯去噪、Set5、Set14、BSD100和Urban100数据集上缩放因子2、3和40的单图像超分辨率、Classic5和LIVE11数据集上质量因子10、20、30和40的JPEG图像去块的平均PSNR(dB)/SSIM结果。
高斯去噪
数据集 | 噪声级别 | BM3D | TNRD | DnCNN-3 |
---|---|---|---|---|
15 | 31.08 / 0.8722 | 31.42 / 0.8826 | 31.46 / 0.8826 | |
BSD68 | 25 | 28.57 / 0.8017 | 28.92 / 0.8157 | 29.02 / 0.8190 |
50 | 25.62 / 0.6869 | 25.97 / 0.7029 | 26.10 / 0.7076 |
单图像超分辨率
数据集 | 缩放因子 | TNRD | VDSR | DnCNN-3 |
---|---|---|---|---|
2 | 36.86 / 0.9556 | 37.56 / 0.9591 | 37.58 / 0.9590 | |
Set5 | 3 | 33.18 / 0.9152 | 33.67 / 0.9220 | 33.75 / 0.9222 |
4 | 30.85 / 0.8732 | 31.35 / 0.8845 | 31.40 / 0.8845 | |
2 | 32.51 / 0.9069 | 33.02 / 0.9128 | 33.03 / 0.9128 | |
Set14 | 3 | 29.43 / 0.8232 | 29.77 / 0.8318 | 29.81 / 0.8321 |
4 | 27.66 / 0.7563 | 27.99 / 0.7659 | 28.04 / 0.7672 | |
2 | 31.40 / 0.8878 | 31.89 / 0.8961 | 31.90 / 0.8961 | |
BSD100 | 3 | 28.50 / 0.7881 | 28.82 / 0.7980 | 28.85 / 0.7981 |
4 | 27.00 / 0.7140 | 27.28 / 0.7256 | 27.29 / 0.7253 | |
2 | 29.70 / 0.8994 | 30.76 / 0.9143 | 30.74 / 0.9139 | |
Urban100 | 3 | 26.42 / 0.8076 | 27.13 / 0.8283 | 27.15 / 0.8276 |
4 | 24.61 / 0.7291 | 25.17 / 0.7528 | 25.20 / 0.7521 |
JPEG图像去块
数据集 | 质量因子 | AR-CNN | TNRD | DnCNN-3 |
---|---|---|---|---|
Classic5 | 10 | 29.03 / 0.7929 | 29.28 / 0.7992 | 29.40 / 0.8026 |
20 | 31.15 / 0.8517 | 31.47 / 0.8576 | 31.63 / 0.8610 | |
30 | 32.51 / 0.8806 | 32.78 / 0.8837 | 32.91 / 0.8861 | |
40 | 33.34 / 0.8953 | - | 33.77 / 0.9003 |
要求和依赖
- MATLAB R2015b
- Cuda-8.0 & cuDNN v-5.1
- MatConvNet
或者只需要MATLAB R2015b来测试模型。
https://github.com/cszn/DnCNN/blob/4a4b5b8bcac5a5ac23433874d4362329b25522ba/Demo_test_DnCNN.m#L64-L65
引用
@article{zhang2017beyond,title={Beyond a {Gaussian} denoiser: Residual learning of deep {CNN} for image denoising},author={Zhang, Kai and Zuo, Wangmeng and Chen, Yunjin and Meng, Deyu and Zhang, Lei},journal={IEEE Transactions on Image Processing},year={2017},volume={26}, number={7}, pages={3142-3155},
}
@article{zhang2020plug,title={Plug-and-Play Image Restoration with Deep Denoiser Prior},author={Zhang, Kai and Li, Yawei and Zuo, Wangmeng and Zhang, Lei and Van Gool, Luc and Timofte, Radu},journal={arXiv preprint},year={2020}
}
====================================================================
用于图像去噪和恢复的卷积神经网络
@Inbook{zuo2018convolutional,
author={Zuo, Wangmeng and Zhang, Kai and Zhang, Lei},
editor={Bertalm{\'i}o, Marcelo},
title={Convolutional Neural Networks for Image Denoising and Restoration},
bookTitle={Denoising of Photographic Images and Video: Fundamentals, Open Challenges and New Trends},
year={2018},
publisher={Springer International Publishing},
address={Cham},
pages={93--123},
isbn={978-3-319-96029-6},
doi={10.1007/978-3-319-96029-6_4},
url={https://doi.org/10.1007/978-3-319-96029-6_4}
挑战和可能的解决方案(来自上述书籍章节)
虽然针对AWGN去除的图像去噪已经得到了很好的研究,但关于真实图像去噪的工作却很少。
主要困难在于实际噪声比AWGN复杂得多,并且彻底评估去噪器的性能并非易事。图4.15显示了现实世界中的四种典型噪声类型。
可以看出,这些噪声的特征非常不同,单一的噪声级别可能不足以参数化这些噪声类型。在大多数情况下,去噪器只能在特定的噪声模型下很好地工作。
例如,为AWGN去除而训练的去噪模型对混合高斯和泊松噪声去除无效。
这在直觉上是合理的,因为基于CNN的方法可以被视为公式(4.3)的一般情况,重要的数据保真项对应于退化过程。尽管如此,由于以下原因,AWGN去除的图像去噪仍然很有价值。首先,它是评估不同基于CNN的去噪方法有效性的理想试验台。
其次,在通过变量分裂技术展开推理中,许多图像恢复问题可以通过顺序解决一系列高斯去噪子问题来解决,这进一步拓宽了应用领域。

为了提高CNN去噪器的实用性,最直接的方法可能是捕获足够数量的真实噪声-干净训练对进行训练,以便覆盖真实的退化空间。这种解决方案的优势在于不需要知道复杂的退化过程。然而,由于需要仔细的后处理步骤,如空间对齐和光照校正,推导噪声图像对应的干净图并非易事。或者,可以模拟真实退化过程从干净图像合成噪声图像。但是,准确建模复杂的退化过程并不容易。特别是,不同相机的噪声模型可能不同。尽管如此,为训练粗略建模某种噪声类型然后使用所学的CNN模型进行特定类型的去噪在实践中更受欢迎。
除了训练数据之外,鲁棒的架构和鲁棒的训练对于CNN去噪器的成功也起着至关重要的作用.
对于鲁棒架构,设计涉及由粗到精过程的深度多尺度CNN是一个有前景的方向。
这样的网络有望继承多尺度的优点:
(i) 在较大尺度上噪声级别降低;
(ii) 多尺度过程可以缓解普遍存在的低频噪声;
(iii) 在去噪之前对图像进行下采样可以有效地扩大感受野。
对于鲁棒训练,使用生成对抗网络(GAN)训练的去噪器对真实图像去噪的有效性仍有待进一步研究。基于GAN的去噪的主要思想是引入对抗损失以改善去噪图像的感知质量。此外,GAN的一个显著优势是它可以进行无监督学习。更具体地说,
可以在训练中使用没有真实值的噪声图像。到目前为止,我们已经提供了几种可能的解决方案来提高CNN去噪器的实用性。我们应该注意,这些解决方案可以结合起来进一步提高性能。
源码地址:https://download.csdn.net/download/FL1623863129/92178742