基于多任务生成对抗网络的无参考图像质量评价

基于多任务生成对抗网络的无参考图像质量评价

No-Reference Image Quality Assessment Based on Multi-Task Generative Adversarial Network

摘要

由于人类本身才是一个图像的最根本的接收者,因此绝大部分的图像质量评价(IQA)方法都是基于对人类视觉系统的特性和机制的分析。然而,由于缺乏未失真的图像作为参考,无参考图像质量评价(NR-IQA)的准确性无法与全参考图像质量评价(FR-IQA)相比。为了在FR-IQA和NR-IQA方法之间建立起性能的桥梁,我们提出了一种基于多任务生成对抗网络的NR-IQA方法。其作用是试图恢复(生成)可靠的虚拟(hallucinated幻觉)图像,以弥补相应的参考图像的缺失。两个任务,用生成器输出虚拟图像和高质量图像,以及结合具体的损失(函数)去提高虚拟图像的可靠性。另外,利用两个鉴别网络分别区分(未失真图像和虚拟图像)以及(质量图和结构相似度指标度量图)两组图像。最终,虚拟图像和失真图像输入到IQA网络中,质量评分是靠他们之间的差异评估的。通过对实时数据集、TID2008数据集和TID2013数据集的实验验证了该方法的优越性。
关键词:生成对抗网络,虚拟图像,质量图,图像质量评价网络

一、介绍

图像质量评价(IQA)是计算机视觉领域的一项基础性工作,在过程评价、图像编码和监控等方面起着重要的作用。因此,开发一种有效的图像质量评价方法至关重要。全参考IQA (FR-IQA)算法使用未失真参考图像上的所有信息来评估图像质量分数。相比之下,无参考IQA (NR-IQA)算法在不使用任何未失真图像信息的情况下评估图像质量。因此,FR-IQA的主要优点是,它可以根据失真图像和参考图像之间的差异来量化视觉敏感度,这使得它能够有效地采用人类视觉系统(HVS)的行为。相比之下,由于缺乏参考图像上的信息,现有的大部分NR-IQA方法主要是从统计特征和特征学习中提取能够表达HVS过程的特征。此外,由于HVS是一个非常复杂的过程,它导致NR-IQA方法比FR-IQA方法更难有效地预测视觉质量。因此,在主观和客观质量值的相关性方面,NR-IQA方法很难达到与FR-IQA方法相同的精度。
为了弥补FR-IQA和NR-IQA方法之间的性能差距,我们提出了一种基于多任务生成对抗网络(GAN)的NR-IQA方法,该方法试图修复可靠的虚拟图像,以弥补相应的未失真图像的缺失。可以看出,现有的GAN技术在捕获失真图像中丢失的细节纹理信息方面性能较差,这使得生成高质量的高清图像成为一个巨大的挑战,而且在使用IQA方法的时候,将变得更加困难,因为IQA的数据量很小,也非常复杂。
为了降低GAN的难度,提高虚拟图像的质量,我们充分结合先验知识,使网络按照预定的方向学习。受[4]的启发,我们将多任务引入到生成器中,以同时生成虚拟图像和质量地图。其中,虚拟图像的(真实值)ground truth是数据集中的未失真图像(在NR-IQA算法中,可以使用未失真图像进行训练),质量图的(真实值)ground truth是通过结构相似度度量(SSIM)算法[5]得到的。[在机器学习中,“ground truth”一词指的是训练集对监督学习技术的分类的准确性。这在统计模型中被用来证明或否定研究假设。“ground truth”这个术语指的是为这个测试收集适当的目标(可证明的)数据的过程。] SSIM是一种典型的成熟的基于图像亮度、对比度和结构的FR-IQA算法,能够很好地表征一定的失真特性。因此,我们使用质量图作为辅助电路,以确保这两个任务是正相关的,这样GAN方法可以更好地把握失真特性。
由于IQA的ground truth是人类所观察到的主观分数,我们需要充分考虑符合人类主体性的感知特征。SSIM算法不能从三个方面完全模拟人的感知。因此,除了从SSIM图中学习一些感知特征外,我们还将特定的IQA-loss整合到整个网络loss中。这个IQA-loss表示从IQA网络中提取特征的结果,可以反映从网络中提取的感知特征。此外,它可以使网络不局限于简单的三个方面,可以更好地满足人类感知的特点。最后,我们利用学习到的可靠的虚拟图像,将NR-IQA转化为FR-IQA问题,从而达到甚至超过FR-IQA的准确性。
该方法具有三方面的优点:
(1)利用GAN方法生成可靠的虚拟图像,可以根据失真图像与参考图像的差异,分析人的主观视觉敏感性的特点,从而解决NR-IQA不能从根本上模拟HSV过程的问题。
(2)结合先验知识,将生成器转换为多任务网络,生成虚拟图像和质量地图。将高质量的地图作为辅助电路,使未失真的高清图像得到更好的恢复,生成的虚拟图像更加可靠。
(3)增加特定的感知损失,可以克服SSIM的局限性,更好的解决IQA问题,使NR-IQA的性能可以与FR-IQA相竞争。

二、相关研究

(1)FR-IQA 方法

由于FR-IQA方法使用的是未失真的参考信息,因此大部分的研究工作都是基于失真图像与对应的未失真图像之间的差异。例如,SSIM算法从亮度、对比度和结构三个方面计算结构相似度,来判断失真程度。近年来,许多学者在此基础上提出了许多改进措施,如平均结构相似度测量(MSSIM)[6]、特征相似度测量(FSIM)[7]、信息加权结构相似度(IW-SSIM)[8]等。在引入辅助任务时,我们不想使网络结构变得更加复杂,因此我们采用了基于自然统计特征的传统特征提取方法。SSIM作为最经典的方法,不仅计算简单快速,而且是后续许多方法的基准。可以认为,SSIM具有足够的能力来表示一定的失真特性。因此,引入SSIM作为辅助任务,既不会增加复杂性,又能起到足够的辅助作用。
近年来,特征学习逐渐取代了手工提取特征。许多基于深度学习的FR-IQA方法已经被提出,以提高准确性到一个更高的水平。例如,Bosse[9]使用卷积层来提取失真和未失真图像的特征,从而获得两者之间的差异。我们在本文中介绍的IQA网络使用了类似的方法。Bampis[10]计算了四种不同尺度下的DLM特征,并将其输入到SVR中。Xue等人利用基于局部质量图的全局梯度变化进行整体图像质量预测。

(2)NR-IQA方法

由于缺乏参考图像,NR-IQA方法只能使用失真图像来提取由失真引起的扭曲的统计特征。基于特征提取的方法,NR-IQA方法大致可以分为两类:基于自然统计特征的方法和基于特征学习的方法。然而,自然统计特征的变化可以通过多种方式表现出来,例如在[12]中,在空间域上,根据失真造成的信息损失,计算不同子集的区域性交互信息,预测质量分数。Oszust[13]将RGB图像转换为YCbCr颜色空间,从关键点提取局部特征。Liu等人从非监督学习的结构、自然性和感知三个具有代表性的方面提取了统计量。在小波域,Moorthy和Bovik[15]认为图像失真会影响小波变换的子带系数,因此采用Daubechies小波变换的广义高斯分布和系数作为失真特征。Saad等人[16]指出,图像失真的程度和类型与离散余弦变换(DCT)系数密切相关,因此他们提取DCT域中的特征来预测质量分数。
上述算法都是基于失真会改变自然图像的某些统计特征的假设,但这些特征很难通过人工方法全面、准确地确定。随着深度学习的发展,特征学习逐渐取代了手工提取特征。例如,Hou等人[17]提出了一种盲IQA模型,将失真分为五个层次进行定性分析,并使用回归分析预测数值得分。Kim和Lee[18]使用了四种经典的FR-IQA算法来获得图像块的质量分数,并将其作为监督学习中的groundtruth(真实值)。Talebi和Milanfar[19]利用卷积神经网络提取均值和得分偏差值来预测人类观点得分的分布。由于缺乏足够的训练数据,这些工作中使用了各种数据增强方法。然而,增强的数据集引入了大量的噪声,这对精度有负面影响。Jia等人[20]和Jia、Zhang等人的[21]计算了每幅图像的显著性图,并根据每幅图像的显著性patch对其进行了重要度赋值,可以应用于高动态范围(HDR)图像和标准动态范围(SDR)域。Maetal[22]收集了真实世界的失真图像,并使用无监督学习来实现NR-IQA。Liuetal[23]使用一系列已知序列的图像组来训练网络,使网络具有分辨图像质量的能力。由于缺乏参考图像,无监督学习难以将学习失真程度量化为分数,导致最终测量分数较低。
针对上述问题,在[24]的启发下,我们结合多任务GAN方法生成依赖虚拟图像,从根本上解决了NR-IQA无法模拟HSV过程的问题,使得NR-IQA的效果可以与FR-IQA相媲美。

三、提出方法

我们提出了一种基于多任务生成对抗网络的NR-IQA方法。分为两个步骤:首先,通过在多任务GAN网络中输入或训练失真和未失真的图像,得到虚拟图像和质量图。其次,将虚拟图像和失真图像输入到IQA网络中,并根据两者之间的差异对质量分数进行评估。我们提出的方法的总体框架如图1所示。


图1 我们所提出方法的整体架构。图中虚线部分仅用于训练
提出的多任务GAN网络结构如图2所示,其中可以看出网络由一个多任务发生器G和两个鉴别器Dr和Ds组成,分别对来自不同任务的生成图像进行评估。

图2 多任务GAN网络结构。生成网络采用U-Net[24]结构,Dr和Ds为六层卷积神经网络(CNN)

①.生成器,G

生成器G由三部分组成:虚拟图形、质量图和图像质量评价损失函数,我们将在本节详细介绍。
首先,如前所述,我们使用GAN方法生成可靠的虚拟图像,以弥补NR-IQA中没有可用参考图像的缺陷,因此这是一个图像到图像的工作。因此,我们采用Pix2Pix[25]作为多任务方法的基线。在生成器G中,网络采用U-Net[26]结构,输入扭曲的图像,输出虚幻的图像。给定一系列的失真图像Id,以及随机噪声向量z,学习它们对应的无失真参考Ir,就可以得到我们想要优化的损耗,即
在这里插入图片描述
其中,LGAN(.)表示GAN损失函数[25],这最大化学习在判别器D中对真实和合成组进行分类的能力,同时在生成器中,最小化学习欺骗判别器的能力。在实际应用中,我们采用了均方误差的计算方法。以前的方法已经发现将GAN目标与更传统的损失(如L2距离)混合是有益的。在实际应用中,我们采用了均方误差的计算方法。Dr表示用于区分虚拟图像和目标图像的特定判别器,如B节所述;LL1(.)表示重建损失,表示真与假之间的距离,以帮助G了解失真的特征。在这工作中,学习系数λ是基于Pix2Pix设置为100。
然而,为了恢复未失真的图像,仅仅通过学习虚拟图像来训练GAN结构是不够的,原因有二。首先,TID2013数据集中有24种不同类型的失真。显然,不同类型的失真具有不同的特征。因此,GAN结构不仅需要了解每种失真类型的特征,还需要根据不同的失真类型恢复虚拟图像。其次,虚拟图像试图恢复原始的高清无失真图像,但其中一些包装的纹理、结构和细节是不可逆的。即使已知图像的失真特性,也很难再现未失真的图像。
其次,我们将单任务网络扩展到两个任务,利用两个任务之间的相似性和差异性来互相促进。如图2所示,在辅助电路中,我们使用习得的虚拟图像和扭曲图像作为输入,学习它们之间的结构相似度(SSIM)图。这两项任务的相似之处在于都具有学习失真的特点。区别在于虚拟图像学习往往会还原一些细节、边缘、纹理等要求更细致的工作,而高质量的地图只需要学习亮度、对比度、结构三个方面,这样会缩小学习范围,使其粗糙。这两个任务是相辅相成的,因此生成器可以同时输出令人满意的虚拟图像和高质量的地图。
因此,与虚拟图像任务中的损失函数类似,我们在生成器中的质量地图任务中添加了损失函数。给定一系列的失真图像Id和虚拟图像i’r,学习它们对应的SSIM映射为,我们可以得到我们想要优化的损失,它是由:
在这里插入图片描述
其中Ds表示用于区分质量地图和目标地图的特定鉴别器,如B节所述。
最后,基于深度学习的IQA方法旨在通过对不同失真图像的特征学习,使网络能够判断出与人类主观评分相一致的质量分数。人类对失真图像的观察不仅来自于未失真图像像素之间的差异,还取决于图像的整体感知水平。更直观地,利用辅助电路的质量图计算感知项。但是由于辅助电路的真实值(ground truth)只涉及到三个方面,不能完全模拟人的感知特性,对各种失真特性有一定的限制。为了更好地解决这个问题和IQA问题,我们将特定的IQA-loss集成到G网络中。
在这里插入图片描述
在等式(7)中,φj(.)表示在IQA网络中第j层的特征图,W和H代表特征图的尺寸,以及N代表特征图的数量。
由于IQA网络是针对FR-IQA任务进行训练的,因此每一层的特征图都包含不同级别的失真感知特征。在经过预处理的FR-IQA回归网络中,各层的激活函数捕获了输入信号的失真信息,保证了输出信号与真实值(ground truth)信号之间的质量相似性度量。

②.生成器,D

根据GAN方法的对抗理论,多任务生成器同时生成虚拟图像和质量图,因此我们需要一个鉴别器来区分未失真图像和虚拟图像,以及质量图和SSIM图。如前所述,质量图和虚拟图像之间存在着许多差异,因此如果仅使用一个鉴别器来同时区分两组,鉴别器的性能将会下降。生成器捕获自然图像各个方面的能力与每个识别器识别图像的能力成正比。因此,我们决定使用两个鉴别器来捕捉失真图像的不同特征,分别记为Dr和Ds
Dr是一个六层卷积神经网络(CNN),用来区分虚拟图像和目标图像,以确保生成的图像是真实的。除了输入层的尺寸外,Ds的结构与Dr的结构是一致的,用来区分quality maps和SSIM maps。使用这个鉴别器进行对抗性训练可以确保质量图被判断为尽可能假,而SSIM图被判断为尽可能真。因此,我们的优化函数可以表示为:
在这里插入图片描述

③.IQA网络

在IQA网络中,我们使用了失真的图像和习得的虚拟图像作为数据集,失真图像的人的主观评分是基本事实,是典型的监督学习。因此,对于测试图像,首先通过训练后的GAN模型得到可靠的虚拟图像,然后将虚拟图像和失真图像输入到IQA网络中,对质量分数进行回归。IQA网络类似于[9]中提出的FR-IQA网络,它由三个部分组成:特征提取、融合和回归,如图3所示。此外,由于数据集中包含的图像数量不足以进行训练,我们将图像裁剪为32*32的大小,而不与增强数据集重叠。在该网络中,畸变图像和虚拟图像都被输入到特征提取部分,包括四层卷积,每两层卷积后放置一个maxpool层。融合层将畸变图像的特征(f1)、虚拟图像的特征(f2)以及两者之间的差异(f1-f2)作为最终特征进行连接。最后,由四个全连通层组成的回归网络得到预测的分数。
在这里插入图片描述
图3 IQA网络结构。它类似于[9]中提出的FR- IQA网络,由特征提取、特征融合和回归网络组成。

四、训练

首先,我们将原始的失真图像和相应的未失真图像随机裁剪为256*256的大小,通过SSIM算法得到SSIM图作为多任务GAN方法的训练数据集。在生成网络中,我们使用了一个U-Net[26],它有7个向下采样层和7个向上采样层来生成虚拟图像。然后,利用输入的失真图像和生成的虚拟图像,通过双卷积层网络获得通道数为1的质量映射。在这两个鉴别器中,除了输入层的通道数不同外,还采用了一个六层下采样网络来区分真假。由于其任务的不同,两个网络中的内核表示也趋向于保留不同的信息。为优化、自适应矩估计优化器(ADAM)[27],采用α= 0.0002,β1 = 0.5,β2 = 0.999。所有的权值都是从以0为中心的正态分布初始化的,其标准偏差为0.02。GAN网络和IQA网络具有相同的训练数据集和测试数据集,训练集的比例为0.8,测试集的比例为0.2。算法1给出了基于多任务GAN模型的NR-IQA算法。
———————————————————————————————————————————————

算法 1
基于多任务生成对抗网络的无参考图像质量评价
过程
输入:失真的图像I d
输出:失真图像的预测质量分数s
训练
1)通过失真的图像I d和未失真的参考I r得到SSIM图;
2)将I d输入GAN结构,通过等式(6)得到虚拟图像I’ r和质量图I’ s;
3)将I d和I’ r输入IQA网络,对网络进行训练
测试
1)将I d输入训练好的生成器,以获取得到它
2)将I d和I’ r输入训练好的IQA网络,得到预测的分数s

———————————————————————————————————————————————

五、实验结果及分析

(一)数据集

实验中使用了以下三个数据集:LIVE dataset、TID2008 dataset和TID2013 dataset。
该实时数据集共包含779幅失真图像,其中包括29幅参考图像和5种失真类型。TID2008数据集由1700幅失真图像组成,包括25幅参考图像和17种失真类型;这17种失真类型中有4种是实时数据集常见的,即gblur、jp2k、jpeg和wn。TID2013数据集是TID2008数据集的扩展,其中与TID2008数据集相比,每种类型的失真都增加了7种类型和25幅失真图像。

(二) 评估标准

在前人研究的基础上,采用了皮尔逊线性相关系数(PLCC)、均方根误差(RMSE)和斯皮尔曼秩序系数(SROCC)三个评价指标。SROCC反映了预测的单调性,当接近1时,表明某一质量测度具有较高的性能。公式如下:
在这里插入图片描述
其中n为数据样本中数据对的数量,di为数据样本中的秩。PLCC考虑了两组数据之间的线性相关系数,假设X和Y有两组数据,分别是预测分数和图像质量评估中的地面标签。公式如下:
在这里插入图片描述
在COV()表示概率论的协方差,δ表示标准偏差。RMSE被用来量化准确性。接近0的RMSE值表明,预测得分与人的主观得分有很高的相似性。

(三)视窗大小

为了获得SSIM图的地面真实感,我们计算了失真图像和相应的未失真图像的结构相似度,这需要对图像进行局部高斯滤波。窗口大小很重要,因为它决定了周围受影响像素的范围。因此,我们在TID2013数据集中比较了#01失真类型的局部高斯滤波器的不同窗口大小。实验结果如表1所示。当size为5时,SROCC和PLCC的值最大,而RMSE的值最小,因此使用的固定窗口大小为5。
在这里插入图片描述
表1 不同窗口大小对#01失真类型的影响

(四)ABLATION STUDY 模型简化测试

为了研究我们方法的关键机构的有效性,我们在TID2008数据集上进行了消融实验。总体结果如表2所示。
在这里插入图片描述
不同的GANs使用相同的训练数据集和测试数据集以及相同的IQA网络,以确保可以比较不同损失的影响。这是。我们将不同条件下产生的畸变图像和虚拟图像输入同一IQA网络,以SROCC和PLCC为标准验证不同损失函数对NR-IQA性能的有效性;结果如表二所示。
表2中,Lr表示基线GAN, Lr +Ls表示质量图将放入网络形成多任务GAN;Lr+Ls+Liqa表示多任务GAN结合特定的IQA-loss。可见,Ls和Liqa可以明显提高网络精度。多任务GAN (Lr +Ls)方法可以更好地学习无失真图像;IQA-loss(Lr + Ls + Liqa)可以使虚拟图像更符合人类感知,更真实。此外,我们还研究了三种情况下IQA网络在质量评估中的学习能力,如图4所示,以更好地比较预测得分与人类主观得分之间的RMSE。可以看出,Ls和Liqa均使预测值与标签之间的差距减小,其中Lr + Ls + Liqa的RMSE最低,说明IQA网络对质量分数、SSIM图有效性以及IQA-loss的评价能力较高。
在这里插入图片描述

图4 不同条件下的RMSE。

我们列举了L r + L s + L iqa情况下产生的虚拟图像和质量地图,结果如图5所示。在图5中,每一行代表一种不同的失真类型,在每一行中,从左到右分别是失真图像、虚拟图像、质量地图、未失真图像和SSIM地图。从图5中可以看出,在特定的损耗下,多任务GAN方法可以更好地把握失真特性,并且这两个任务之间是正相关、相辅相成的。然而,由于失真的种类繁多,并且每种失真类型都有其独特的特点,所以即使L s和L iqa结合使用,也很难恢复所有失真类型的高清无失真图像。对于一些严重模糊的失真图像,丢失了太多的纹理细节,使得网络变得无能为力。然而,所提出的方法仍然可以很好地评价这些失真图像的质量。虽然网络无法恢复高清图像,但可以很好地掌握虚拟地图的失真特性,特别是L iqa。例如,如图5最后一行所示,质量图在发生方形效果的地方被精确捕获,所以这种类型的SROCC值可以达到0.658,这已经足够有竞争力了。然而,与其他类型的容易学习的无失真图像相比,预测精度要低得多。
在这里插入图片描述

图5 我们提出的方法包括失真图像、虚拟图像、高质量图像、未失真图像和SSIM图像。

(五)单数据集实验

在TID2013数据集上验证了该方法的性能,得到的结果如表3所示。表3显示了所提出的方法与目前最先进的NR-IQA方法的比较结果。
在这里插入图片描述

表3 TID2013数据集上的SROCC

我们将提出的方法与五种代表性的NR-IQA方法进行了比较:HOSA[28]、Rank-IQA[23]、IL-NIQE[29]、SNP-NIQE[14]和H-IQA[24]。从表3可以看出,所提出的方法对于每种失真类型都有很好的效果。对于24种失真类型中的15种(超过60%的子集),我们的方法在所有方法中获得了最高的精度。除了少数几种失真类型外,其他方法的精度几乎达到了相同的水平,这说明了我们提出的方法相对于其他测试方法的优越性。对于单个的畸变,由于各种噪声的随机性和不确定性,在#15(舒适噪声)和#20(图像去噪和非偏心模式噪声)等少数几种畸变类型上的性能低于某些方法。具体来说,失真类型#10(JPEG压缩)和#21(噪声图像的有损压缩)的显著改进定量地证明了我们的IQA-loss的有效性;同时,改进类型#17(对比度变化)和#18(色彩饱和度的变化)验证我们的辅助电路增强我们生成器捕获对比度改变和颜色变化的能力,同时类型#4(隐藏噪声)和#23(色差)的提高证实了我们的多任务GAN方法在多重失真下有效生成虚拟地图的能力。
为了进一步验证我们提出的方法的有效性,我们在真实数据集上进行了实验,实验结果如表4所示。我们将提出的方法与SSIM和7种代表性的NR-IQA方法进行了比较: the SCORER [13], the PM [12], IL-NIQE [29], BIECON [18], BPSQM [9], SNP-NIQE [14], and the H-IQA [24].比较结果表明,我们提出的方法与现有的方法相比具有很强的竞争力。虽然我们的方法在实时数据集上的结果不是最高的,但差距只有两个百分点。TID2013数据集上的结果明显优于其他数据集。我们认为TID2013的数据量比LIVE数据量大很多,所以我们的网络可以充分了解失真特性。比较结果表明,当数据集足够多时,通过数据增强,我们的网络可以获得较好的准确率。
在这里插入图片描述

表4 实时数据集和TID2013数据集上的SROCC和PLCC。

(六)交叉数据集实验

为了验证我们提出的方法的泛化能力,我们进行了跨数据集的实验。我们在三个测试数据集中测试了LIVE、TID2008和TID2013上训练的多任务GAN模型。本实验只检验了LIVE、TID2008和TID2013共享的四种失真。
结果如表5所示,可以看出在相同的数据集上进行训练和测试时结果最好。在跨数据集测试时,特别是在实时数据集上,SROCC和PLCC的值明显下降,说明网络的泛化能力有待提高。然而,这是大多数NR-IQA算法的一个常见问题;特别是对现实世界中经常叠加多种失真类型的失真图像;因此,网络的适应性仍然是一个很大的挑战。

六、结论

本文提出了一种用于无参考图像质量评价的多任务GAN方法。首先,利用未失真图像与SSIM映射图的相似性和差异性构造一个多任务生成器,生成可靠的虚拟图像和质量映射图。然后,根据不同的任务构造了两个鉴别器,分别用来识别虚拟图像和undis受扰图像,以及质量图和SSIM图。同时,结合特定的IQA-loss,通过逆向学习增强生成图像的可靠性,弥补了NR-IQA算法在测试中没有可用的无失真参考的缺陷。解决了NR-IQA无法从根源上模拟HVS过程的问题。实验结果表明,该方法无论在与人主观评分的一致性方面,还是在生成能力方面都取得了很好的效果。但是在评价该方法效果的实验中,我们并没有按照图像内容来划分数据集,这可能会对实验结果产生一定的影响。而不同的失真类型有其独特的特点,我们的网络无法实现对所有失真类型的高精度。因此,需要进一步深入研究,提高所提方法的通用性,这将是我们未来工作的主题。

参考文献

原文

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 好的,我可以回答这个问题。以下是一个简单的生成对抗网络代码,用于修复图像: ```python import tensorflow as tf from tensorflow.keras import layers # 定义生成器 def make_generator_model(): model = tf.keras.Sequential() model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,))) model.add(layers.BatchNormalization()) model.add(layers.LeakyReLU()) model.add(layers.Reshape((7, 7, 256))) assert model.output_shape == (None, 7, 7, 256) # 注意:使用 assert 语句检查输出形状 model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False)) assert model.output_shape == (None, 7, 7, 128) model.add(layers.BatchNormalization()) model.add(layers.LeakyReLU()) model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False)) assert model.output_shape == (None, 14, 14, 64) model.add(layers.BatchNormalization()) model.add(layers.LeakyReLU()) model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh')) assert model.output_shape == (None, 28, 28, 1) return model # 定义判别器 def make_discriminator_model(): model = tf.keras.Sequential() model.add(layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same', input_shape=[28, 28, 1])) model.add(layers.LeakyReLU()) model.add(layers.Dropout(.3)) model.add(layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same')) model.add(layers.LeakyReLU()) model.add(layers.Dropout(.3)) model.add(layers.Flatten()) model.add(layers.Dense(1)) return model # 定义损失函数 cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True) # 定义生成器损失函数 def generator_loss(fake_output): return cross_entropy(tf.ones_like(fake_output), fake_output) # 定义判别器损失函数 def discriminator_loss(real_output, fake_output): real_loss = cross_entropy(tf.ones_like(real_output), real_output) fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output) total_loss = real_loss + fake_loss return total_loss # 定义优化器 generator_optimizer = tf.keras.optimizers.Adam(1e-4) discriminator_optimizer = tf.keras.optimizers.Adam(1e-4) # 定义训练函数 @tf.function def train_step(images): noise = tf.random.normal([BATCH_SIZE, 100]) with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape: generated_images = generator(noise, training=True) real_output = discriminator(images, training=True) fake_output = discriminator(generated_images, training=True) gen_loss = generator_loss(fake_output) disc_loss = discriminator_loss(real_output, fake_output) gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables) gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables) generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables)) discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables)) # 训练模型 generator = make_generator_model() discriminator = make_discriminator_model() EPOCHS = 50 BATCH_SIZE = 256 for epoch in range(EPOCHS): for image_batch in train_dataset: train_step(image_batch) # 每 10 个 epoch 保存一次生成的图像 if (epoch + 1) % 10 == : generate_and_save_images(generator, epoch + 1, seed) # 生成图像 def generate_and_save_images(model, epoch, test_input): predictions = model(test_input, training=False) fig = plt.figure(figsize=(4, 4)) for i in range(predictions.shape[]): plt.subplot(4, 4, i+1) plt.imshow(predictions[i, :, :, ] * 127.5 + 127.5, cmap='gray') plt.axis('off') plt.savefig('image_at_epoch_{:04d}.png'.format(epoch)) plt.show() ``` 这个代码使用了 TensorFlow 2.,定义了一个简单的生成对抗网络,用于修复图像。具体来说,它包括一个生成器和一个判别器,以及相应的损失函数和优化器。在训练过程中,我们使用了一个包含真实图像的数据集,并通过随机噪声生成假图像。最终,我们可以使用训练好的生成器生成新的图像。 ### 回答2: 生成对抗网络(GAN)可以用于修复图像,以下是一个简单的GAN代码示例: 首先,我们定义一个生成器和一个判别器。生成器负责从损坏的图像中恢复原始图像,判别器负责判断生成的图像是真实的还是生成的。 生成器由几个卷积层和反卷积层组成,它接收一个损坏的图像作为输入,通过反卷积操作逐渐恢复原始图像。 判别器由几个卷积层和全连接层组成,它接收一个图像作为输入,并输出一个标量值,代表图像的真实程度。 接下来,我们定义损失函数。生成器和判别器的损失函数是对抗的,即生成器试图最小化判别器的损失,而判别器试图最大化判别器的损失。生成器的损失函数包括两部分:图像恢复损失和对抗损失。 最后,我们定义训练过程。我们先训练判别器,然后固定判别器的参数训练生成器。在训练生成器时,我们将生成器的损失函数最小化,并通过反向传播更新生成器的参数。 整个训练过程是反复进行的,直到生成器能够生成具有高质量的修复图像。 这只是一个简单的GAN代码示例,实际上,修复图像是一个复杂的任务,可能需要更复杂的网络结构和更多的训练数据才能获得良好的效果。 ### 回答3: 生成对抗网络(GAN)是一种由生成器和判别器组成的机器学习模型,通过互相竞争的方式来生成逼真的数据。修复图像的GAN代码可以如下实现: 首先,导入必要的库,如TensorFlow和Keras。然后,定义生成器和判别器的架构。 生成器的作用是接收一个损坏的图像作为输入,并尝试修复该图像。它可以是一个由几个卷积层和上采样层(反卷积)组成的深度网络。生成器的输出应该是一个修复后的图像。 判别器的目标是判断输入的图像是真实的还是生成的。它可以是一个由几个卷积层和池化层组成的网络。判别器的输出应该是一个0到1之间的概率值,表示图像是真实的或生成的。 接下来,在生成器和判别器之间创建一个GAN模型。该模型将生成器的输出作为输入,并尝试使判别器将其预测为真实图像。这个训练过程将生成器逐渐改进,以生成更逼真的修复图像。 在训练GAN之前,我们需要定义损失函数和优化器。损失函数可以是生成器的输出和真实图像之间的均方差(MSE)误差,以及判别器对生成器输出的分类损失。优化器可以是随机梯度下降(SGD)或Adam。 然后,使用真实图像作为训练数据,通过迭代训练GAN模型。在每次迭代中,首先通过生成器生成一批修复图像,并将这些图像与真实图像混合。然后,利用这批图像训练判别器,并更新其权重。接下来,固定判别器的权重,训练生成器,并更新其权重。这样反复进行,直到生成器能够生成逼真的修复图像。 最后,保存训练好的生成器模型,并使用该模型来修复任意损坏的图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值