DD-CycleGAN: Unpaired image dehazing via Double-DiscriminatorCycle-Consistent Generative Adversarial Network✩通过双鉴别器循环一致生成对抗网络进行非配对图像去雾(Cycledehaze扩展)2019
摘要:
尽管近年来在图像去雾方面取得了进展,但这项任务仍然具有巨大的挑战性。为了提高雾霾去除的性能,我们提出了一种基于双鉴别器循环一致生成对抗网络(DD-CycleGAN)的雾霾去除方案,该方案利用CycleGAN将雾霾图像转换为相应的无雾图像。与其他方法不同的是,它不需要对雾霾及其对应的无雾图像进行训练。大量的实验表明,该方法在定量和定性上都比现有方法有了显著的改进。并且我们的方法应用到真实场景中也能获得很好的定性效果。
受周期一致对抗网络的启发,本文提出了一种新型的道路场景除雾网络,称为双鉴别器周期一致对抗网络(dd - cyclegan)。该方法只需要少量的未配对数据,大大降低了数据收集的难度。
本工作的主要贡献如下:
(1)传统gan中生成器和鉴别器难以平衡,容易出现模式崩溃。因此,我们使用权值裁剪代替交叉熵,可以解决训练不稳定和模式崩溃的问题,并且训练的收敛速度比gan更快。
(2)为了使鉴别器更好地逼近最优性,解决鉴别器与发生器平衡的困难,我们增加了鉴别器的数量,为发生器提供更稳定的可靠反馈。因此,我们提出了双鉴别循环gan (DD-CycleGAN)来去除雾霾。传统的 CycleGAN 方法只有一个判别器,用于评估生成的图像与真实图像之间的差异。DD-CycleGAN 引入了两个判别器,一个用于评估去雾效果,另一个用于评估重建效果。这种双判别器结构使得模型能够更好地学习去雾和重建两个任务之间的关系。
(3)据我们所知,这是首次尝试使用DoubleDiscriminator CycleGAN (DD-CycleGAN)进行除雾,可以方便有效地适应交通场景,增强除雾算法应用场景的多样性。
背景:
从非配对数据中学习域间映射可以通过减少对配对数据的需求来提高结构化预测任务的性能,例如本文中的雾霾去除。它特别强大,因为它只需要来自两个图像域X和y的未配对示例。Cycle-Dehaze网络(Engin等人,2018)架构是使用CycleGAN提出的端到端图像去雾方案的早期尝试之一。循环-去雾网络有效地聚合了循环一致性和感知损失,因此可以更好地完成去雾任务。为了能够获得高分辨率的去雾图像,Cycle-Dehaze采用了一种基于拉普拉斯金字塔的简单上采样方法,并成功应用于单一图像去雾数据集(即I-HAZE (Ancuti et al ., 2018a)和O-HAZE (Ancuti et al ., 2018b)的NTIRE 2018挑战。
Cycle-Dehaze采用了一种基于拉普拉斯金字塔的简单上采样方法,并成功应用于单一图像去雾数据集(即I-HAZE (Ancuti et al ., 2018a)和O-HAZE (Ancuti et al ., 2018b)的NTIRE 2018挑战。
受这个想法的启发,我们进一步在我们的工作中引入了一个更有效的损失,以推动两个生成器彼此一致,沿着Yi等人(2017b)的研究思路,他们使用与我们类似的目标进行机器翻译中的双重学习(He等人,2016)。为了克服对抗性训练中常见的模型崩溃问题,并获得更稳定的结果,引入了权重裁剪技术的Wasserstein GAN (Arjovsky et al ., 2017)来解决GAN中的训练不稳定和模式崩溃问题。更具体地说,用预定义的阈值限制鉴别器中权重更新的绝对变化,以确保鉴别器对于两个稍有不同的输入样本不会给出非常不同的值。
由于cyclegan已经成功地用于图像的样式转换,由于它对数据的尺度和标签要求较低,我们认为它也适用于模糊图像数据集较少的情况。通过将图像恢复视为一种图像到图像的转换,我们可以确定,如果使用原始的雾霾图像和一些未配对的无雾霾图像进行训练,cyclegan可以恢复雾霾场景。更具体地说,将模糊图像作为输入,训练好的生成器将成功恢复无模糊图像(Chen et al, 2017)。
2.4. Durugkar等人(2016)扩展了具有多鉴别器的gan,这种gan在为生成器提供反馈时应该更稳定。对于一个生成器,使用多个具有相同结构且随机初始化的鉴别器作为生成器的教师。
具体来说,多个鉴别器可以逼近最优鉴别器。举个例子,当其中一个鉴别器达到远优于生成器的收敛状态时,另一个鉴别器仍然可以用来提供建设性梯度来更新生成器,而不是停止生成器的学习。
模型构建:
双鉴别器循环gan (DD-CycleGAN)本文提出的方法(DD-CycleGAN)采用两个具有相同结构的鉴别器来对抗一个发生器,解决了传统gan的模式崩溃问题。通过扩展到相同结构的多个鉴别器,DD-CycleGAN可以更好地近似最优鉴别器(Durugkar等人,2016),并且在为生成器提供可靠反馈方面更加稳定(Xu等人,2017)。在这两个生成器之间创建一个双射映射,以便X域中的图像可以对应于Y域中(Zhu et al, 2017)。
图1显示了所提出的双鉴别器周期一致对抗网络(DD-CycleGAN)的流程图。如图1(a)所示,我们的模型包括两个映射:G在Y域上用两个鉴别器DY1和DY2将X映射到Y, F在X域上用两个鉴别器DX1和DX2将Y映射到X。另外,将X域上的图像X通过生成器G映射到Y域,生成图像综,即G:X→Y,其中G(X) =综。同样地,将F映射回X域,并将其作为Generator F的输入,生成了F: Y→X,其中F (Y) = xs。注意DX1和DX2,鼓励F将Y转换为与域X不可区分的输出,并且我们希望当我们将一个图像转换为另一个图像并再次转换时,我们应该返回到我们开始的原始图像。
图1(b)显示了DD-CycleGAN的前向训练过程。将图像x作为输入,发送给生成器G生成图像s_1。鉴别器DY1和DY2用来判断图像的整数是生成的还是真实的图像。然后,由生成器F生成图像,这使得最终的输出与输入图像不可区分,即,(𝐺(xs))≈xs。图1(c)显示了所提出的DD-CycleGAN的反向训练过程。取一个图像y作为生成器F的输入,生成图像s1。这两个判别器DX1和DX2判断图像≥是生成图像还是真实图像。然后由生成器G生成图像,这也促使最终的输出与输入图像不可区分。
在传统GAN中,可能会发生源域X中的两幅不同图像都映射到目标域y中的同一幅图像的情况。Pathak等(2016)表明,在网络中加入传统的损失函数可以提高网络的有效性。
在本文中,我们效仿Zhu等人采用L1范数(Badrinarayanan et al, 2017)来测量周期一致性损失,并且映射到Y域的图像仍然可以通过另一个生成器映射回X域,从而使最终输出看起来更像真实图像,也更像输入图像。此外,我们的方法使用了不同的损失函数,可以更好地表示网络训练的状态,从图2中可以看出,在生成器的连续迭代过程中,L1范数不断减小。因此,图像的消雾效果也较好
本文还采用了权重裁剪技术来代替传统gan中的交叉熵。从图3中可以看出,权重裁剪的收敛速度比交叉熵更快,权值裁剪的训练过程更加稳定。
损失函数:
CNN网络结构:
本文使用的生成器模型和鉴别器模型的CNN网络结构如下:(1)生成器体系结构生成器网络包含编码器、转换器和解码器三部分,分别由2阶卷积层、6个残差块和3个分数阶卷积层组成。该网络如图4所示。
编码器对输入图像进行一系列的下采样,然后由转换器将源域图像的特征向量变换为目标域的特征向量,再由解码器进行一系列的上采样,由特征向量得到底层特征。
对于鉴别器网络,我们使用PatchGAN (Isola et al ., 2016),而不是整个图像,其目的是识别每个patch是否由生成器生成。如Isola等人所示(2016),发现使用ImageGAN使用256 × 256的感受域和使用PatchGAN使用70 × 70的感受域可以创建视觉上相似的结果。因此,本文主要在70 × 70的PatchGAN上进行实验。然后在整个图像上得到。
图5所示。编码器层的鉴别器,它对图像连续下采样,最终输出的是该图像的概率,判断该图像是真实采样还是来自生成器。
结果分析:
图7所示,我们针对不同的网络进行了不同的实验。在图7(c)中,我们使用权重裁剪而不是在vanilla CycleGAN中使用的交叉熵,效果很好。在图7(d)中,我们将双鉴别器添加到CycleGAN中,进一步提高了雾霾去除效果。在图7(e)中,我们将上述方法结合起来,从表1中可以看出,我们提出的DD-CycleGAN方法可以达到最高的性能,验证了我们方法的可行性。此外,还进行了消融实验,以证明不同模块在所提出的方法中所获得的改进。
表2不带ResBlock和带ResBlock的DD-CycleGAN去霾效果。
表3𝜆1和𝜆2的实验结果。
损失函数𝜆1 = 0.3,𝜆2 = 0.3𝜆1 = 0.5,𝜆2 = 0.5损失函数SSIM 0.7721 0.7957 PSNR 23.985 25.859 4.4。在我们的方法中,我们在网络中添加了6个resblock。为了证明残差块的有效性,我们在DDCycleGAN上分别进行了6 ResBlock和不带ResBlock的实验,并对实验结果进行了比较。
从图8可以看出,图8(c)是不带ResBlock的DD-CycleGAN。有些雾霾在处理结果中仍然没有去除。图8(d)为带有ResBlock的DD-CycleGAN,结果显示除霾效果良好,PSNR和SSIM更高。从表2可以看出,带Resblock的DD-CycleGAN性能最高。
由图9和表4可以看出,当我们与Adam一起使用DD-CycleGAN时,SSIM和PSNR最高,对雾霾的去除效果更好。
在本文中,我们在两个不同的数据集上进行了实验。从表5和表6中可以看出,无论我们选择哪个数据集,我们的方法的性能都是最好的,正如所实现的最高PSNR和SSIM所表明的那样。
图10为五种方法去雾效果对比图。从实验结果可以看出,MSCNN下的结果不如其他方法好,DCP、DehazeNet和AOD-Net下的结果也不够明亮。但我们提出的方法仍然具有良好的去雾能力,大大提高了图像的对比度。
本文还将DD-CycleGAN应用到真实场景中,定性效果也不错,证明了该方法的可行性。(见图11)
总结:
在本文中,我们利用CycleGAN并在此基础上对图像去雾进行改进,即双鉴别器周期一致对抗网络(DD-CycleGAN)。CycleGAN学习了一种一对一的映射,确保所有源模糊图像都映射到目标对应的无雾图像。该双判别器架构在不同雾霾浓度和场景深度的图像上,能更好地逼近最优判别器,取得更好的效果,并且对雾霾浓度较高区域的合理预测优于目前主流的去霾方法,证明了该方法的可行性。
注释:
一、Weight Clipping(权重裁剪)是一种用于限制神经网络中权重值范围的技术。它通过设置权重的上下界来限制权重的取值范围,以防止权重值过大或过小。
在神经网络的训练过程中,权重的更新通常通过梯度下降或其他优化算法来进行。然而,有时候权重可能会出现梯度爆炸或梯度消失的问题,导致模型的训练不稳定。权重裁剪可以用来缓解这些问题,使得权重的变化范围保持在一个合理的范围内。
具体来说,权重裁剪通过设定一个阈值,将权重限制在该阈值范围内。例如,可以将权重裁剪到 [-c, c] 的范围内,其中 c 是设定的裁剪阈值。当权重超过上界或下界时,它们会被截断为上界或下界的值,从而限制了权重的变化幅度。
权重裁剪的主要优点是它是一种简单且易于实现的技术,适用于各种神经网络模型和优化算法。它可以帮助稳定模型的训练过程,减少梯度的变化范围,并防止权重值过大或过小。然而,需要注意的是,裁剪的阈值选择要谨慎,过小的阈值可能会导致信息损失,而过大的阈值可能会降低模型的拟合能力。
值得一提的是,权重裁剪只是一种缓解梯度问题和提高训练稳定性的技术之一。在一些情况下,使用其他的技术如梯度剪裁(Gradient Clipping)、正则化、自适应学习率等也能起到类似的效果。最佳的方法选择应该根据具体的任务和模型来进行决策。
二、交叉熵(Cross-Entropy)是信息论中用于衡量两个概率分布之间差异性的度量方式。在机器学习和深度学习中,交叉熵经常用作损失函数,用于衡量模型的预测输出与真实标签之间的差异。
假设有两个概率分布 P 和 Q,其中 P 表示真实的标签分布,Q 表示模型的预测分布。交叉熵通过测量在真实标签的分布下,用 Q 的预测概率表示标签的平均比特数来衡量两个分布之间的差异。交叉熵的公式如下:
H(P, Q) = -Σ(P(x) * log(Q(x)))
其中,P(x) 和 Q(x) 分别表示真实标签和预测概率在位置 x 的概率。log 表示以 2 为底的对数,使得交叉熵的单位是比特(bits)。
在机器学习中,交叉熵常用于分类问题中的多类别分类任务。通常,真实标签是一个 One-Hot 编码的向量,表示样本属于哪个类别,而模型的输出是一个概率分布向量,表示每个类别的概率。通过计算真实标签和模型输出的交叉熵损失,可以衡量模型预测与真实标签之间的差异,并用于模型的优化和训练。
交叉熵损失在机器学习中有许多重要的应用,例如在分类任务中常用的 softmax 激活函数结合交叉熵损失函数,可以实现多类别分类模型的训练和优化。通过最小化交叉熵损失,模型可以更好地拟合真实标签的分布,提高分类准确性和模型性能。
使用权重裁剪代替交叉熵作为损失函数有以下几个潜在的好处:
1. 缓解梯度爆炸问题:交叉熵损失在训练过程中可能导致梯度爆炸,即梯度值变得非常大。通过使用权重裁剪,可以限制权重的取值范围,避免梯度的过度增长,从而缓解梯度爆炸问题。
2. 提高训练的稳定性:权重裁剪可以帮助稳定模型的训练过程。通过限制权重的取值范围,可以减少权重的波动,使得模型的训练更加平稳和可控。
3. 控制模型复杂度:权重裁剪可以限制模型中权重的大小,从而控制模型的复杂度。过大的权重可能会导致模型过拟合,而过小的权重可能会导致模型欠拟合。通过权重裁剪,可以使权重保持在一个合适的范围内,平衡模型的拟合能力和泛化能力。
4. 加速训练过程:由于权重裁剪可以减少权重的变化范围,相对于使用交叉熵损失,模型可能更容易收敛。这可以加速训练过程,减少训练时间和计算资源的消耗。
需要注意的是,使用权重裁剪代替交叉熵损失也存在一些潜在的限制和注意事项。权重裁剪可能会引入一些偏差,限制了模型的自由度。此外,权重裁剪的阈值选择要慎重,过小的阈值可能导致信息损失,而过大的阈值可能降低模型的拟合能力。在应用权重裁剪时,需要进行实验和调优,以找到适合具体任务和模型的最佳设置。
三、PatchGAN(Patch Generative Adversarial Network)是一种生成对抗网络(GAN)的变体,用于图像生成和图像处理任务。PatchGAN 主要用于对图像进行局部区域的分析和生成,以实现更细粒度的图像合成和处理。
传统的 GAN 模型通常使用全局的判别器来评估整个图像的真实性,但它们在生成细节和局部结构方面可能存在一些限制。PatchGAN 通过引入局部判别器,即判别器只对图像的局部区域(例如图像的小块或图像的 patch)进行评估,从而实现更细致的图像分析和生成。
PatchGAN 的局部判别器可以更好地捕捉图像的细节、纹理和结构特征,因为它对图像的局部区域进行评估,可以更好地适应局部变化。在训练过程中,生成器和局部判别器之间进行对抗训练,生成器的目标是生成合理的图像,并使局部判别器难以区分真实图像和生成图像的局部区域。
PatchGAN 在图像生成任务中广泛应用,如图像到图像的翻译、图像修复、图像去雾等。它可以生成逼真的图像细节,并允许对图像的不同局部区域进行独立的编辑和操作。
需要注意的是,具体的 PatchGAN 结构和参数设置可能因具体任务和研究工作而有所变化。因此,在使用 PatchGAN 时,建议参考相关的研究论文和文献以获取更详细和具体的信息。
四、ResBlock(Residual Block)是一种残差块,常用于深度残差网络(Residual Network)中,用于解决深层神经网络训练过程中的梯度消失和模型退化问题。
在深度神经网络中,随着网络层数的增加,信息在网络中的传递变得更加困难,梯度可能会逐渐消失或爆炸。这会导致模型的训练变得困难,且在一定深度之后,模型性能可能不再提升甚至下降。ResBlock的设计旨在通过跳跃连接(skip connection)和残差映射(residual mapping)来解决这个问题。
ResBlock的基本结构如下:
输入 -> 卷积层 -> 激活函数 -> 卷积层 -> 输出
↳ 跳跃连接 ↵
ResBlock中的跳跃连接将输入直接添加到卷积层输出中,形成了一个直接的捷径。这样,网络在学习残差映射时不仅可以使用卷积层的输出,还可以通过跳跃连接利用输入信息。如果两者的维度匹配,直接相加;如果维度不匹配,可以通过适当的变换(如卷积、1x1卷积、全连接等)将输入调整为与输出相同的维度。
ResBlock的跳跃连接和残差映射允许网络更容易地学习残差部分,即输入与期望输出之间的差异。这种设计可以使得梯度更容易地在网络中传播,有助于缓解梯度消失问题,并使得深层网络更容易训练。此外,ResBlock还能够有效地减少参数量,提高网络的计算效率。
ResBlock的设计在深度残差网络(如ResNet)中得到了广泛的应用,并在图像分类、目标检测、语义分割等任务中取得了显著的性能提升。
五、在生成对抗网络(GAN)中,生成器和判别器是通过对抗训练相互学习的。然而,GAN中的生成器和判别器之间的训练难以平衡,容易导致模式崩溃和训练不稳定的问题。
这种不平衡和模式崩溃的问题主要有两个原因:
1. 训练动态不平衡:在初始训练阶段,生成器的性能通常较差,而判别器很容易区分生成的样本和真实样本。由于判别器提供强烈的梯度信号,生成器可能会过度依赖判别器的反馈,导致生成器难以生成多样化和高质量的样本。这导致了训练动态不平衡,判别器容易压制生成器,从而导致模式崩溃。
2. 模式崩溃:模式崩溃指的是生成器陷入一种状态,只能生成有限的几种模式,而无法生成整个数据分布中的其他样本。这通常发生在训练过程中,当判别器对某些样本模式给予强烈反馈时,生成器会优先学习和生成这些样本模式,而忽视其他样本模式。结果是生成器的多样性和创造力受到限制,导致模式崩溃。
为了解决这些问题,可以采用以下方法:
1. 适当的初始训练:在开始训练之前,可以预训练生成器和判别器,以确保它们具有一定的性能,避免初始阶段的不平衡。例如,可以使用预训练的生成器生成一些样本,然后使用真实样本和生成样本来预训练判别器。
2. 判别器权重裁剪:通过限制判别器的权重范围,可以减小判别器对生成器的压制,从而平衡生成器和判别器的训练动态。
3. 多尺度训练:使用多个尺度的判别器来评估生成器的输出,以捕捉更丰富的图像特征。这可以提高生成器的多样性和生成样本的质量。
4. 损失函数设计:使用适当的损失函数,如改进的GAN损失函数、特征匹配损失函数等,可以帮助改善生成器和判别器之间的平衡,提高训练的稳定性。
综上所述,生成器和判别器之间的训练不平衡和模式崩溃问题是GAN中常见的挑战。通过合理的训练策略、权重裁剪和损失函数设计等技术手段,可以减轻这些问题,提高GAN的训练稳定性和生成样本的质量。
六、在科学研究中,Ablation Study(消融实验)是一种常见的实验设计方法,用于探究某个系统、模型或算法中不同组件或部分对整体性能的影响。该方法通过逐步去除系统中的某些组件,然后观察系统性能的变化,以评估这些组件对整体性能的贡献。
在深度学习和机器学习领域,Ablation Study通常用于评估模型的关键组件、超参数或网络结构的重要性。通过逐步去除或调整这些组件,研究人员可以观察到模型性能的变化,从而得出对模型性能影响的结论。
在进行Ablation Study时,通常会进行多个实验,每次实验去除一个组件或改变一个参数。然后,将实验结果进行对比分析,以确定哪些组件对模型性能至关重要,哪些组件对性能影响较小或无关紧要。
Ablation Study是一种有效的研究方法,可以帮助研究人员深入了解模型的工作原理,揭示模型的性能瓶颈,并为进一步优化和改进提供指导。这种实验设计方法对于深入理解模型的性能和有效性非常有帮助。