张梦迪,杨大利
(北京信息科技大学 计算机学院,北京 100192)
实际成像过程中,由于恶劣天气的影响和硬件设备的限制,在成像传输存储等环节往往会出现图像的细节丢失。通过硬件方法提高图像质量的代价较高,图像超分辨率[1]就是将低分辨率的图像通过软件的方法提高分辨率,在医学影像、卫星遥感、刑事侦查等领域都有广泛的应用。图像超分辨率方法分为基于插值的方法[2]、基于重建的方法[3]和基于学习[4]的方法3类。基于插值的方法有邻近插值、双线性插值、双立方插值等,这些方法复杂度低但效果有限,很难修复图像的高频细节。基于重建的方法例如迭代反投影法、凸集投影法、最大后验概率估计法等,是从多帧低分辨率图像中提取图像的高频信息,融合生成高分辨率图像。基于学习的方法是目前研究的热点,通过创建高分辨率图像和低分辨率图像特征的样本库,提取特征,从低分辨率图像中恢复出高分辨率图像。
Dong等[5]构建了一个3层卷积神经网络模型,提出了一种经典的端到端的SRCNN(super-resolution convolutional neural network)算法。SRCNN结构简单,易于收敛,计算复杂度较低,在保证图像质量的前提下可以快速重建高分辨率图像。然而由于网络较浅,不能很好地提取图像特征,利用较大的卷积核可以减小计算量,但是也会丢失很多信息;而且随着网络的加深,计算量也在增加。本文在SRCNN算法的基础上进行了改进,采用较小的卷积核,加深网络结构,改进损失函数,在保证图像边缘纹理细节的同时降低计算量。
基于深度学习的SR(super resolution)重建是目前图像超分辨率的热门方向,依靠外部图像库通过神经网络获得先验知识,再利用先验知识对低分辨率图像重建。大致可以分为3步。
1)处理图像数据集,建立外部图像库。将原始高分辨率图像分割,通过退化模型得到低分辨率图像块,退化过程可表示为
Ilow=SBIhigh+n
(1)
式中:S为下采样过程;B为模糊过程;Ihigh为高分辨率图片;Ilow为低分辨率图片;n为噪声。
在DRCN(deeply-recursive convolutional network)和SRCNN算法中,是将退化后的图像块插值放大到目标图像的大小后作为神经网络的输入,但是这样会造成数据过多,增加了计算量。Shi等[6]提出的ESPCN方法将低分辨率图像块作为输入,提高了图像超分辨率,大大缩短了训练时间。
2)构建神经网络模型。对训练集的数据进行训练,得到低分辨率图片和高分辨率图片之间的映射关系。图像识别效果好的网络模型在图像超分辨率中也有很好的效果。
3)高分辨率图像重建。将低分辨率图像输入网络模型,得到高分辨率图片,并用评价指标评价模型的质量。
目前基于深度学习的图像超分辨率算法取得了不错的成果。近年来随着机器学习的发展,出现了很多基于深度学习的图像超分辨率算法。Dong等[5]提出采用卷积神经网络解决图像超分辨率问题,Kim[7]提出一种20层的网络结构来获取低分辨率图片和高分辨率图片的映射关系,之后又提出了递归模型[8](DRCN)减少网络参数。Goodfellow提出生成对抗网络(generative adversarial network),Leding等[9]将其用于图像超分辨率中,得到效果非常好的高分辨率图片,但是存在网络层数过多难以训练,需要大量的迭代次数和样本数据以及模型难以保存等问题。Dong等[5]已经通过实验证明并非网络结构越深图像重建的效果越好;Simonyan等[10]经过实验证明,采用更小的卷积核可以得到更好的效果。均方误差(MSE)作为损失函数可以很好地平滑图像,提高PSNR指标,然而得到的结果往往会造成图像纹理不清晰,边缘模糊。从损失函数上进行改进是目前深度学习的一个主要的改进思路。
将卷积神经网络用于图像超分辨率,可以有效地简化神经网络,减少神经网络的参数,最具有代表性的就是SRCNN。该网络结构分为3层,分别是特征提取层、非线性映射层以及重构层。网络框架如图1所示。
图1 SRCNN算法框架
算法主要分为3个步骤:
Step1图像块的提取和特征表示。利用卷积神经网络提取图像块的特征:
F1(Y)=max(0,W1·Y+B1)
(2)
式中:W1为卷积核;Y为经过插值放大的原始高分辨率图像。对这2个值进行卷积运算后再加上神经元偏置向量即B1,最后把卷积得到的特征图经过Relu激活函数处理,Relu激活函数取0和卷积结果中最大的值作为最终值。W1的尺寸为f1×f1×c×n1,其中,f1为单个卷积核的大小,c为通道数,n1为第一层卷积核的个数。
Step2非线性映射。从低分辨率空间映射到高分辨率空间:
F2(Y)=max[0,W2·F1(Y)+B2]
(3)
式中W2为卷积核;B2为偏置量。如果有n2个卷积核,W2的尺寸为n1×f2×f2×n2。
Step3重构。利用之前得到的特征图,生成最终图像:
F3(Y)=max[0,W3·F2(Y)+B3]
(4)
式中W3有c个卷积核,尺寸为n2×f3×f3×c。
SRCNN的整个训练过程就是对参数的估计以及优化。通过计算生成的图像和原始高分辨率图像的均方误差,使其最小,得到最优解。均方误差为
(5)
高分辨率图像经过裁剪,得到随机排列的图像块。为了得到低分辨率图像,对得到的子图像经高斯滤波模糊之后下采样,再用双三次插值法将子图像放大至原大小作为初始高分辨率图像,将这些初始高分辨率图像块经过卷积神经网络逐像素计算和高分辨率图像块的均方误差,最小化差值优化神经网络参数。
SRCNN与其他算法相比,在峰值信噪比(PSNR)和结构相似性(SSIM)等评价指标上有明显优势且运算速度较快,但存在边缘和纹理不够清晰等问题。Dong等[5]也做了增加卷积层数和减小卷积核的实验,从中得出卷积层数并非越深越好的结论。SRCNN中第1层采用9×9的卷积核。Simonyan等[10]提出从第1层卷积开始就避免使用大尺寸卷积核,使用小卷积核进行堆叠来增加网络的深度。因此,本文实验所用的神经网络模型采用了更深层的神经网络,尺寸更小的卷积核。
图3 本文算法卷积神经网络模型
本文设计的深度学习模型分为2部分,一部分用来学习低分辨率图片和高分辨率图片的映射关系,这部分参数是变化的,需要通过训练找到参数最优值。另一部分是损失网络部分,参数保持不变。针对逐像素损失函数的缺点,为了确保损失函数能更好衡量图片感知和语义上的差距,采用预训练好的图像分类网络VGG16来定义损失函数,计算生成的图像经过卷积网络提取的特征和目标图像之间的差距。其深度学习的模型如图2所示。
图2 网络模型
低分辨率图像x通过深度卷积神经网络后得到图像y,定义y=fw(x),损失函数计算预测图像和目标高分辨率图像之间的差距,可以从光照、纹理、直方图等多方面考虑,利用式(6)进行梯度下降求得fw的最优解。
(6)
式中λi为每个损失函数的权重。
SRCNN在第1层上选择了9×9的卷积核,文献[10]表明3×3的卷积核就能覆盖图像的特征,一个较大的卷积核相当于几个较小的卷积核连续卷积,同时可以减小计算量。借鉴VGG16的网络结构,本文采用6层的卷积神经网络,使用3×3固定大小的卷积核,这是可以有效地提取图像的边缘信息,最小能表征图像信息的卷积核的大小。
值得注意的是,SRCNN的网络结构中没有池化层。池化层的作用是对卷积后的结果下采样,减少参数,减小计算量。但是SR算法是为了增加图像的细节,因此,SRCNN和本文算法均不采用池化层。
在SRCNN算法中,是将低分辨率图像经过Bicubic插值后的图像作为神经网络的输入。有很多研究表明,这一步并非必要,完全可以将其融入到网络中,将图像放大作为网络学习的一部分。为了避免网络的计算量增大,在网络的最后一层使用反卷积(deconvolution)将图像放大。借鉴文献[11]和Waifu2x的网络模型,本文所设计的神经网络结构如图3所示。
由于人眼对亮度最为敏感[12],并且在SRCNN中已经证明了只对Y通道做变换不会影响图片最终质量,因此本文算法仅对Y通道做训练,这样在保证图片质量的同时可以减少计算开销。
传统的均方误差(MSE)作为损失函数可以很好地平滑图像,其峰值信噪比(Peak Signal to Noise Ratio,PSNR)评价指标也比较高,但是不符合人眼感知,无法恢复细节复杂的图像。
图像风格转换算法的成功为生成图像领域提供了一个重要的思路,可以将从卷积神经网中提取的特征作为目标函数的一部分,将待生成的图像和目标图像通过卷积神经网络得到它们的特征值,通过减小两者特征值的差异使两者更加相似[13]。
损失网络使用的是在ImageNet上训练好的VGG net网络模型,损失函数的计算公式如下:
(7)
式中:j为网络的第j层;CjHjWj为第j层特征图的大小。找到一个图像使它较低层的特征损失最小,往往能得到视觉上近似于原图的图像;而用高层生成的图像虽然内容和全局结构都被保留,但是颜色纹理和精确的形状都将不存在。图像超分辨率的目标是让生成的图片非常接近原图而不是完全匹配。
数据集的大小对深度学习的结果有很大的影响,一般情况下,数据集越大得到的模型其效果越好。SRCNN的作者采用的训练集是从ImageNet中抽取的约4万幅图像。本文选用BSD500作为训练数据集,同时使用Set5和Set14作为本文的测试集。部分测试数据如图4所示。
图4 部分测试集图片
首先要将图片的色彩空间从RGB转换到YCrCb色彩空间,只对Y通道进行训练得到映射关系;其他2个色彩通道使用双三次插值上采样再和Y通道融合,在减小计算量的同时保证了图像的质量。
然后把训练图像随机切割成图像块。训练数据大小为80×80像素,滑动步长为14像素。网络输入的大小是28×28像素,放大倍数是2,从80×80的图像块中截取56×56像素的图像块作为高分辨率图像块。考虑到本文算法比SRCNN多一倍的节点,为了获得更多的训练数据避免过拟合,对其旋转0°、90°、180°和270°扩大数据集。为了得到网络的输入,对这些56×56像素的图像进行降采样。
梯度更新算法使用了Adam,学习率为1e-4,batch size设为8,在迭代次数达到1.3×107时网络基本收敛,迭代次数1.5×107时试验效果最好,而SRCNN需要经过迭代1.2×109才能达到最好效果,如图5所示。
图5 不同算法随迭代次数增加的PSNR值
本文算法训练使用的平台为3.5 GHz Intel i7 CPU,16G内存,4G显存的GTX960 M的显卡一块。
本实验将从客观评价指标和主观视觉效果2个方面对本文实验和主流方法进行评价。客观评价指标采用峰值信噪比:
(8)
式中:P为峰值信噪比;M为计算图像之间逐像素的均方误差;n为每个采样值的比特数;(2n-1)2是信号最大值的平方。M越小时,P的值越大。
通过实验得出在Set5和Set4数据集上本文算法和其他算法的平均PSNR数值,如表1所示,可以看出,本文算法表现均优于其他算法。
表1 五种图像超分辨率算法的PSNR数值比较 dB
图6从左到右依次是原始高分辨率图像、BI插值算法、SRCNN算法、DDSRCNN算法、本文算法的实验结果。从中可以看出,BI插值的结果最模糊,本文算法在大多数情况下优于SRCNN,DDSRCNN,得到的图片边缘和纹理都较为清晰,且在评价指标近似的情况下,本文算法计算量更小,图片生成时间更短。
图6 几种方法的实验结果对比
本文提出了一种改进的基于卷积神经网络的图像超分辨的方法。针对目前深度学习存在的参数过多、计算量大、模型不易训练、细节和纹理效果不显著等问题,采用了一种只在图像Y通道上进行训练的7层卷积神经网络模型,使用感知损失代替传统的均方误差作为损失函数,在保证PSNR指标的前提下减小了计算量,获得了更加清晰的纹理和边缘效果。但是对于边缘不明显纹理多的图像,该算法仍需改进。下一步工作考虑尝试结合图片的光照、颜色、形状等特征信息,共同参与训练学习,使图像的边缘和纹理细节更加清晰。