本节实验所用计算机的处理器为Intel Core i7-7700,内存大小为128 GB,显存大小为12 GB,GPU为NVIDIA TITAN V。本节实验采用Python3.6进行编程,深度学习框架为PyTorch1.0.0。
一般来说,从真实世界中采集大量的无雾图像及对应的有雾图像是非常困难的,因此通常采用合成的有雾图像来评价去雾算法的性能。有雾图像是通过在真实的无雾图像上加入适当的散射系数和大气光值合成得到的。本章首先使用常用的评估去雾性能的合成数据集RESIDE来验证本章算法的性能,该数据集包含NYU Depth V2深度数据集 [21] 和Middlebury Stereo立体数据集。RESIDE的室内训练集(Indoor Training Set,ITS)由1399幅清晰的图像合成而来,生成图像的大气光值范围为[0.7,1.0],大气散射系数范围为[0.6,1.8]。每幅图像产生10幅有雾图像,因此,室内训练集共包含13990幅合成的有雾图像,其中13000幅用于训练,剩余的990幅用于验证。RESIDE的室外训练集(Outdoor Training Set,OTS)由8477幅清晰的图像合成而来,生成图像的大气光值范围为[0.8,1.0],散射系数范围为[0.04,0.2]。室外训练集共包含296695幅合成的有雾图像。本章实验所用的测试集为RESIDE 中的综合目标测试集(Synthetic Objective Testing Set,SOTS),SOTS中包含500幅室内图像和500幅室外图像。另外,为了进一步证明本章算法的有效性和鲁棒性,本章实验还利用大气散射模型把MSD(Middlebury Stereo Datasets)中的2幅色彩较为鲜艳的图像合成有雾图像作为测试集,主要用来验证不同算法对图像去雾后是否会造成图像颜色失真。本章在真实雾图上对比了本章算法与其他几种流行的去雾算法,验证了本章算法在真实场景中的去雾效果。
由于主观判断不能完全说明本章算法的有效性,为了与现有的去雾算法进行对比,本章实验采用峰值信噪比(Peak Signal to Noise Ratio,PSNR)和结构相似性(Structure Similarity,SSIM)来量化去雾图像的恢复质量。PSNR是最大信号量与噪声强度的比值,其值越大,表明去雾图像越接近无雾图像。SSIM是衡量两幅图像相似度的指标,其值越大,表明去雾图像的失真程度越小。
本章实验的重要参数如表1-1所示。
表1-1 本章实验的重要参数
表1-1中,优化器(Optimizer)采用Adam,其中的 β 1 和 β 2 分别采用默认值0.9和0.999;批处理大小(Batch Size)设为1,即每次只训练1幅图像;训练集的迭代轮次(Epoch)设为100;初始学习率(Learning Rate)设为0.0001,并采用余弦淬火函数 [22] 来调整学习率。学习率的变化函数如式(1-10)所示。
式中, η 表示初始学习率; η t 表示当前的学习率; T 表示总批次; t 表示某一批次。
为了验证本章算法的有效性,本章实验对本章算法和其他几种流行的去雾算法的性能进行了定性与定量的比较,对比的算法包括DCP [9] 、DehazeNet [12] 、MSCNN [13] 、AOD-Net [14] 、GFN [15] 等。为了公平地进行比较,所有的算法都采取相同的训练方式,并分别在SOTS、MSD和真实雾图上进行性能测试。
1.3.5.1 在合成数据集上的测试
首先,对本章算法与其他几种流行的去雾算法在SOTS进行定量测试,测试结果如表1-2所示。
表1-2 本章算法和其他几种流行的去雾算法在SOTS上进行的定量测试结果
注:加粗字体为每列的最优值。
由表1-2可以看出,本章算法得到的去雾图像的PSNR和 SSIM大于其他几种流行的去雾算法,表明本章算法的性能优于其他几种流行的去雾算法。
首先,对本章算法与其他几种流行的去雾算法在SOTS上进行定性测试,测试结果如图1-4所示,图1-4(a)到(h)分别是有雾图像、DCP算法在SOTS上的测试结果、DehazeNet 算法在 SOTS 上的测试结果、MSCNN 算法在 SOTS 上的测试结果、AOD-Net算法在SOTS上的测试结果、GFN算法在SOTS上的测试结果、本章算法在SOTS上的测试结果和真实图像。
从图1-4中可以看出,由于DCP算法不能准确估计雾的浓薄,从而导致去雾图像通常比真实图像暗[见图1-4(b)第1幅图像中的桌面区域和墙壁区域],并且会引起严重的颜色失真[见图1-4(b)第3幅图像中的天空区域],最终影响视觉效果。由于DehazeNet、MSCNN和AOD-Net这三种基于深度学习的算法不受先验知识的制约,整体的去雾效果优于传统的算法,但基于深度学习的去雾算法在学习雾图特征的过程中忽略了有雾图像自身的结构信息,所以估计的透射率误差较大,最终导致图像去雾不彻底,去雾图像整体色调偏白[见图1-4(c)、图1-4(d)、图1-4(e)]。GFN算法的去雾效果较好,图像中的大多数雾都可去除,但在雾浓度高的区域,该算法去雾仍然不彻底[见图1-4(f)第1幅图像中的椅子与椅子之间的区域]。相比之下,本章算法的去雾效果最好,由于本章算法加入了特征注意力模块,使得该算法能较好地处理雾浓度高的区域,同时能清晰地保留图像中的细节[见图1-4(g)],减少了颜色失真。
图1-4 本章算法与其他几种流行的去雾算法在SOTS上进行的定性测试
最后,对本章算法与其他几种流行的去雾算法在 MSD 上进行定性测试,测试结果如图1-5所示。图1-5(a)到(h)分别是有雾图像、DCP算法在MSD上的测试结果、DehazeNet 算法在 MSD 上的测试结果、MSCNN 算法在 MSD 上的测试结果、AOD-Net算法在MSD上的测试结果、GFN算法在MSD上的测试结果、本章算法在MSD上的测试结果和真实图像。
图1-5 本章算法与其他几种流行的去雾算法在MSD上进行的定性测试
从图1-5可以看出,DCP算法在去雾后图像的颜色失真严重,图像整体色调偏暗。DehazeNet算法和AOD-Net算法的图像去雾不彻底,去雾图像的整体色调偏白,导致颜色失真。MSCNN算法恢复的图像颜色失真较为严重,整体色调严重偏离真实图像。GFN算法在去雾后图像的色彩保持度较好,但由于有雾图像的雾浓度过高,所以仍存在少量的雾未被去除。本章算法在去雾后图像的色彩保持度最好,去雾效果也较好。
1.3.5.2 在真实雾图上的测试
为了验证本章算法在真实场景中的去雾效果,本节在三幅经典的真实雾图上对本章算法与其他几种流行的去雾算法进行定性测试,测试结果如图1-6所示。图1-6(a)到(g)分别是有雾图像、DCP算法在三幅真实雾图上的测试结果、DehazeNet算法在三幅真实雾图上的测试结果、MSCNN 算法在三幅真实雾图上的测试结果、AOD-Net算法在三幅真实雾图上的测试结果、GFN算法在三幅真实雾图上的测试结果、本章算法在三幅真实雾图上的测试结果。
图1-6 在三幅经典的真实雾图上对本章算法与其他几种流行的去雾算法进行的定性测试
由图1-6(b)可以看出,DCP算法在去雾后图像依然存在着偏暗的问题,这主要是因为该算法无法准确估计雾的浓度,从而导致传输图估计不准确[见图1-6(b)第1幅图像中的女孩皮肤颜色偏暗,第3幅图像中的山峰区域颜色偏暗];另外,该算法会造成去雾图像的颜色严重失真[见图1-6(b)第3幅图像中的天空颜色过蓝],这将影响视觉效果。由图1-6(c)、图1-6(d)和图1-6(e)可以看出,对于DehazeNet、MSCNN和AOD-Net等算法来说,它们的主要问题依然是图像去雾效果较差,特别是在图像的远景处有较多的雾气未被去除。由图1-6(f)可以看出,GFN算法在色彩保持度和去雾效果方面都较好,但依然无法去除浓雾区域的雾气。由图1-6(g)可以看出,本章算法不仅能有效去雾,而且能较好地保持图像的色彩不失真,得到的去雾图像较为自然,视觉效果较好。
本章算法与其他几种流行的去雾算法处理一幅图像所需的平均运行时间如表1-3所示。
表1-3 本章算法与其他几种流行的去雾算法处理一幅图像所需的平均运行时间
从表1-3可以看出,DCP算法的平均运行时间最长,原因在于该算法属于传统的去雾算法,特征提取用时较长。AOD-Net算法的平均运行时间最短,原因在于该算法的网络最为轻便,因此该算法经常与目标检测等高级视觉任务配合使用。本章算法的去雾效率排名第二,去雾效率较高,平均运行时间为0.20 s,仅次于AOD-Net算法,原因在于本章算法的网络结构较为简便,涉及的模块较少。