DnCNN降噪器
本文主要介绍去噪的卷积神经网络(Denoising Convolutional Neural Network, DnCNN)的结构和功能,我第一次读到它是在《Learned D-AMP:Principled Neural Network Based compressive image recovery》文章中,它在DAMP算法中担任降噪器的功能,可以单独拿出来训练,也可以独自在DAMP算法中进行端到端训练。
网络结构
在DnCNN神经网络结构设计上,DnCNN源于对VGG网络的修改,包括去除了池化层和全连接层等,在卷积层Conv和ReLU之间加入了批量归一化BN,可以减轻内部协变量移位[ ]带来的影响,从而提高网络的学习收敛速度。在模型学习中,DnCNN借鉴了ResNet的残差学习方法[],并将其与批处理归一化相结合,来提高训练速度和去噪性能。
图1为DnCNN深度卷积神经网络结构。输入矢量的维数为:d*d。给定深度为D的DnCNN网络,有三种不同的层,它们的具体排列顺序为:第1层为卷积层和修正线性单元 (Conv+ReLU):使用64个大小为 的滤波器,生成64个特征图,然后,使用修正线性单元(max(0,·))进行非线性处理。第2~(D-1)层为卷积层+批处理归一化+修正线性单元(Conv+BN+ReLU),使用64个大小为 的滤波器,在Conv层和ReLU层之间加入BN层。最后一层为卷积层(Conv),使用1个大小为 的滤波器重构输出。
训练过程
在训练DnCNN时,本文使用了1267200个 的样本矩阵用于训练,140800个 的样本矩阵用于验证,和1408个样本矩阵用于测试。所有的样本矩阵在生成时都是无噪声样本,而在训练和测试时,会在对应的噪声水平范围内加入噪声。为了获取足够的空间信息进行去噪,我们将DnCNN神经网络的深度设置为10层或10层以上。在5.1节的实验中,我们需要改变神经网络的层数,因此我们训练了多个不同层数的DnCNN神经网络模型。我们采用[34]中的方法初始化DnCNN神经网络权值,并采用权值衰减为0.0001、动量为0.9、小批量尺寸为128的随机梯度下降法(Stochastic Gradient Descent,SGD)训练网络。我们为每个小范围噪声水平下的神经网络设置最大训练次数为50,最大允许无用训练次数(Max Bad Epochs, MBE)为2,初始无用训练次数(Bad Epochs, BE)为0。在训练过程中,初始最小验证误差采用验证集验证未训练的网络得到,后续过程中,网络训练一次就验证一次得到新的验证误差,并将新的验证误差与上一次的验证误差相比,如果小于上一次的验证误差就将此次验证误差设置为最小验证误差并将BE清零,否则最小验证误差不变并将BE加1。当BE大于等于MBE时,网络就减小学习速率,并将BE清零。学习速率变化过程为初始值0.001衰减为0.0001,最后衰减至0.00001。当学习速率衰减为0.00001且BE大于等于MBE时,DnCNN神经网络的训练结束。在实验中,我们使用MATLAB的工具箱MatCovNet来实现DnCNN神经网络。所有实验均在Intel® Core™ i7-8700K CPU 3.70GHz、NVIDIA GeForce GTX 1080 GPU的PC上运行的Matlab (R2018b)环境下进行。所有9个小范围噪声水平下的20层DnCNN网络的GPU训练时间需要59小时左右
图1:网络结构图
测试过程
图2为使用1408个随机样本矩阵分别测试9个小范围噪声水平下的训练后的20层DnCNN得到的误差曲线图。其中,红色实线表示测试前网络输入样本与对应的无噪声样本之间的平均均方误差MSE,虚线表示测试后网络输出样本与对应的无噪声样本之间的平均方误差MSE。蓝色实线是输出误差与输入误差之间的比值变化曲线。从图中可以看出,输出误差低于输入误差且随着噪声标准差的增加,输出误差与输入误差之间的比值逐渐减小,具体数值为从[0 0.005]区间的0.5956减小至[1 2]区间的0.0311。误差比值在低噪声水平下较大的原因主要是,输入误差接近于0,此时输出误差在低于输入误差的同时已经达到足够小的水平。这说明训练后的DnCNN网络拥有良好的去噪效果。
图2:测试误差结果图