APP下载

基于生成对抗网络的眼底图像生成方法

2022-07-07郭继峰庞志奇

计算机应用与软件 2022年5期
关键词:卷积尺度损失

郭继峰 庞志奇 李 星 杨 帆 岳 琪

(东北林业大学信息与计算机工程学院 黑龙江 哈尔滨 150040)

0 引 言

针对眼底图像数据样本分布不均(带病症图像数量远小于正常眼底图像数量)问题,传统的数据集扩充方法主要有翻转、旋转、裁剪、添加噪声等数据增强技术,以及对病症图像进行过采样,但只能对现有数据集进行扩充,扩充结果对现有数据集具有很强的依赖性。在Ian Goodfellow提出GAN后,大量学者把GAN[1]用于扩充数据集,且已有很多成功案例,但也存在细节丢失、生成样本单一等不足。GAN在扩充数据集应用中,可大致分为两方面,一种是基于无监督学习的GAN及其改进模型DCGAN[2]等,理论上可以生成丰富的图片数据,但实际训练过程却十分艰难,且Mode Collapse问题十分严重,生成效果也大多不尽如人意。之后Guibas等[3]提出的两步生成眼底血管图像的方法可以生成较高质量的图像,但仍然存在Mode Collapse问题,且训练过程不稳定。另一种是把无监督学习的GAN改进为有监督的CGAN[4]以及改进的pix2pix,其中具有代表性的就是Appan等[5]提出的生成带病组织的眼底血管图像方法,这种方法能够生成高质量的图像,但过于依赖成对的数据集,在成对数据集又十分有限的情况下,难以生成丰富的眼底图像。

为了改进以上方法的不足,本文提出基于改进的CycleGAN[6]的生成方法。实验表明,该模型能够在不配对的两个数据集X、Y下进行训练,生成图像的质量优于无监督GAN,相比有监督的pix2pix模型,该模型能够生成更加丰富的图片。把生成的图像添加到视网膜出血检测模型的训练集中,相比其他方法生成的图像,本方法生成的图像能够大幅度提升模型检测能力,有效缓解样本分布不均问题。该方法为解决眼底血管图像样本不足和样本分布不均提供了一条新思路。

1 相关理论

GAN是CGAN、WGAN[7]、CycleGAN的基础,本文改进的CycleGAN对比前几种结构,具有训练稳定、收敛速度快且生成图像质量高的优点。

1.1 GAN

GAN是由一个生成器G和一个判别器D组成,其中生成器以随机噪声作为输入,输出生成的图像,不断学习真实数据X的分布;判别器以生成器生成的图像和真实图像作为输入,输出样本属于真实图像的概率。二者交替训练,最后达到全局最优[8-10]。其目标函数:

Ez~pz(z)[log(1-D(G(z)))]

(1)

式中:pdata(x)是真实图像的数据分布;pz(z)是随机噪声的数据分布;E表示数学期望。

1.2 CGAN

由于原始GAN过于自由,难以控制,CGAN应运而生。在生成器和判别器的输入端都加入一个条件,使GAN变为监督学习,从而提高生成图像的质量。其目标函数:

Ez~pz(z)[log(1-D(G(z|y)))]

(2)

式中:y表示输入到生成器和判别器的条件。

1.3 CycleGAN

CycleGAN本质上是由两个GAN组成的环形网络,每个GAN共享两个生成器且各自拥有一个判别器,可以实现x和y之间的相互映射。设生成器G实现X→Y的映射,判别器DY判别y是生成样本还是真实样本。则生成器G与判别器DY的目标函数为:

LGAN(G,DY,X,Y)=Ey~pdata(y)[logDY(y)]+

Ex~pdata(x)[log(1-DY(G(x)))]

(3)

类似地,设生成器F实现Y→X的映射,判别器DX判别x是生成样本还是真实样本。则生成器F与判别器Dx的目标函数:

LGAN(F,DX,Y,X)=Ex~pdata(x)[logDX(x)]+

Ey~pdata(y)[log(1-DX(F(y)))]

(4)

CycleGAN中还包括一个cycle-loss,用来保证生成图像保留原图像的特征,且防止多个原始图像映射成一个生成图像。cycle-loss:

(5)

总的损失函数:

L(G,F,DX,DY)=LGAN(G,DY,X,Y)+

LGAN(F,DX,Y,X)+λLcyc(G,F)

(6)

式中:λ表示cycle-loss的调节权重。

2 基于生成对抗网络的眼底图像生成

2.1 整体框架

本文提出的基于生成对抗网络的眼底图像生成方法包括三个网络:CGAN、WGAN、本文改进的CycleGAN。本文算法的整体框架如图1所示,具体流程包括以下三个阶段。

(1) 利用图像分割技术[11]从原始图像中分割出血管树和出血块,利用分割出的血管树图像集训练WGAN,利用分割出的出血块图像集训练CGAN。

(2) 利用训练好的WGAN和CGAN分别生成大量血管树和出血块,其中出血块带有出血病症等级标签。

(3) 基于生成的血管树、出血块、真实病症图像,训练本文改进的CycleGAN。该网络包括两个生成器和两个判别器,交替训练生成器和判别器直至模型收敛,从而生成大量带出血病症的眼底图像。

图1 基于生成对抗网络的眼底生成方法整体框架

2.2 WGAN

本网络包括一个生成器G和一个判别器D,其中生成器由1个全连接层和4个反卷积层组成,以随机噪声z作为输入,输出生成血管树;判别器由5个卷积层组成,判断输入数据是来自生成图像还是真实图像。具体框架如图2所示。

图2 WGAN结构

2.3 CGAN

由于眼底出血病症严重程度与出血块的数量直接相关(其中患病等级按出血块数量分级:0级(无出血),1级(含1~3个出血块),2级(含4~5个出血块),3级(含大于5个出血块)),故本文采用CGAN生成出血块,把出血块对应的病变等级作为标签,其中CGAN模型的生成器以病变等级y和随机噪声z作为输入,输出生成的出血块,判别器以病变等级y和真实出血块图像或生成出血块图像作为输入,判断输入数据是来自生成图像还是真实图像。待模型稳定后,生成大量带有患病等级标签的出血块,具体框架如图3所示。

图3 CGAN结构

2.4 对CycleGAN损失函数的改进

2.4.1引入Wassertein距离代替原损失函数

GAN训练困难,其中重要原因是由于梯度消失,即在接近最优的判别器下,生成数据和真实数据没有不可忽略重合时,优化生成器损失函数相当于优化Pg与Pdata之间的JS散度,而此时此JS散度近似为常数log2,即生成器面临梯度消失,无法继续训练下去。引入Wassertein距离代替原始损失函数,解决了梯度消失问题。改进后的目标函数:

(7)

式中:f(x)是判别器函数,此函数需要满足Lipschitz约束,即用谱约束实现Lipschitz约束。本文在两组判别器和生成器分别引入Wassertein距离,改进后的生成器G与判别器DY的目标函数如式(8)所示,改进后的生成器F与判别器DX的目标函数如式(9)所示。

Ex~q(x)[f(G(x))]

(8)

Ey~p(y)[g(F(y))]

(9)

式中:f(y)表示判别器DX函数;g(x)表示判别器DY函数。改进后的损失函数如式(10)所示。

λLcyc(G,F)

(10)

2.4.2用谱约束实现全局Lipschitz约束

利用矩阵谱范数[12]的物理意义,即任何向量在经过矩阵变换后,长度都小于等于此向量与该矩阵谱范数乘积的长度。即:

(11)

式中:σ(W)表示权重矩阵的谱范数,x表示该层的输入向量,δ表示x的改变量。只要控制权重矩阵的谱范数就可以实现Lipschitz约束,所以把谱范数当作正则项加入到损失函数中,即:

(12)

式中:后半部分即为权重矩阵谱范数的正则项,通过对每层谱范数总和进行惩罚,使判别器满足Lipschitz约束。

2.4.3引入同一映射损失

同一映射损失[13]Liml衡量图像转变后与原图像的差异,使模型对原图做尽量小的改动。由x到y的映射损失和由y到x的同一映射损失分别定义为:

(13)

(14)

分别用数学期望计算生成图像与真实样本的差异,总体同一映射损失定义为:

Liml(FX→Y,GY→X)=Liml(FX→Y)+Liml(GY→X)

(15)

2.4.4引入感知损失

本文引入感知损失用于避免生成图像出现模糊和细节损失:

(16)

式中:D、W和H分别表示特征的深度、宽度和高度;φ是特征提取函数。

综上,由式(10)、式(12)、式(15)和式(16)得出本文提出的CycleGAN改进后的损失函数,如式(17)所示。

λimlLiml(FX→Y,GY→X)+λplLpl(FX→Y,GY→X)

(17)

式中:λiml、λpl分别表示同一映射损失和感知损失的调节权重。

2.5 对CycleGAN网络结构的改进

2.5.1对生成器的改进

在生成器的网络结构中加入U-Net的跳级结构[14],用以保留不同分辨率下图像中像素级的图像细节。跳级结构如图4所示。

图4 U-NeT网络结构

去掉BN层[15],在此之前已有实践证明,在超分辨率重建和图像去雾以及高倍数生成[16]方面,已取得良好效果,去掉BN层后,计算复杂度减小,生成器效果提升,且对于本文改进后的损失函数,BN层会影响网络训练的稳定性,因此去掉BN层。

由于BN层可以提高网络学习速度,本文为保证去掉BN层后的网络仍具有较快的学习速率,故引入新型激活函数——PReLU激活函数,如式(18)所示。

PReLU=max(αx,x)

(18)

式中:α为(0,1)之间的数,且接近于0。PReLU函数是ReLU函数的改进,能够有效避免负数信息被弱化的情况,且PReLU函数相对于ReLU函数实现简单,计算量小,更适用于本实验。其具体结构如图5所示。

图5 去除BN层的残差块结构

改进后的生成器结构如图6所示,其中网络编程结构包括4个卷积层、12个残差块结构、3个反卷积层,其中卷积层与对应的反卷积层之间有跳级结构连接。

图6 改进的生成器结构

2.5.2对判别器的改进

基于马尔可夫的判别器(PatchGAN)只注意图像的局部结构,忽略了对图像整体的认识,从而间接影响生成器的全局学习能力。本文在判别器网络中引入扩张卷积[14],与正常卷积层相比,扩张卷积拥有额外的参数——扩张率,用于表示扩张的大小,在相同参数数量的条件下,感受野随扩张率的增加呈指数增长,同时保持输出的特征映射大小不变,从而使判别器能够隐含地学习上下文。

具有高分辨率性质的眼底图像,需要一个具有很大感受野的判别器,若使用通常的处理方式,则需要增加网络容量,这样不仅容易导致过拟合,而且对内存要求过高。本文引入多尺度判别器[14],即对生成图像进行多次降低采样,用训练的多个不同尺度的判别器,判别这些图像的真假。在本文实验中,利用从精细到粗糙三种判别器尺度,其中:精细尺度的判别器感受野最小,对眼底血管以及出血等局部特征更加敏感,用以引导生成器生成更完善的细节;中等尺度的判别器负责感受野较大,负责区域判别;粗糙尺度的判别器具有最大感受野,负责眼底图像的全局判别。多尺度结构如图7所示。

图7 多尺度结构

图8中展示了三个不同尺度的判别器中采用的三个不同的扩张卷积组合。

(a) 精细尺度判别器对应的扩张卷积组合

(b) 中等尺度判别器对应的扩张卷积组合

(c) 粗糙尺度判别器对应的扩张卷积组合
图8 扩张卷积编程图

3 实验验证与结果分析

3.1 实验设置

实验环境:TensorFlow使用静态计算图机制,而Pytorch使用动态计算图机制,能够动态创建新的计算图,便于本实验调试过程,故本文实验使用Pytorch框架,并使用GPU加速模型训练。使用计算机配置为CPU E5 2670,RAM 128 GB,显卡NVIDIA Tesla V100 16 GB。

数据集:图像是由2015年kaggle视网膜比赛训练集挑选得出的分辨率为3 504×2 336像素的JPG眼底图像,共1 400幅,并由眼科专家为其标注出血等级标签。分为两组,其中一组共1 000幅图像,作为出血检测系统的训练集,同时作为生成对抗网络的训练集,用于扩充数据集,另一组共400幅,作为出血检测系统的测试集。

参数设置:本文在眼底图像生成实验中,设置20 000、40 000、60 000三个不同的迭代次数进行实验结果对比。考虑到PReLU函数中参数α的数量只与通道数有关,对整个模型参数总量影响不大,不会增加过拟合风险。故本文为区别于固定小参数的LReLU,设置α初始值为0.25,并在训练过程中动态更新。为适应本文大规模数据和参数的优化,本文采用自适应优化算法Adam。本文为避免网格效应,在设置扩张率时为精细尺度判别器选用{1,2,3}的循环扩张率,为中等尺度判别器选用{1,2,5}的循环扩张率,为粗糙尺度判别器选用{1,2,7}的循环扩张率。

3.2 出血块和血管树的生成

通过图像分割技术从真实带出血病症的眼底血管图像中获得血管树、出血块,作为原始数据集。用WGAN、CGAN分别生成大量血管树和出血块,并对生成血管树进行去噪处理。生成效果如图9所示。

(a) 真实图像

(b) 分割血管树

(c) 分割出血块

(d) 生成血管树

(e) 生成出血块图9 用分割图像分别生成血管树和出血块

3.3 生成眼底血管图像及质量对比

出血块和血管树预处理:把生成的出血块和血管树输入到两个并行的U-Net网络中,并把得到的输出合并,把得到的图像作为改进的CycleGAN模型的域X。

本文提出的基于改进的CycleGAN在网络训练过程中,用真实眼底图片作为域Y,结合域X,对模型进行训练。训练过程中,域X与域Y间没有指定对应的配对关系。

分别用WGAN、CycleGAN、本文改进的CycleGAN模型进行眼底血管图像生成训练,生成眼底图像如图10所示。

(a) 血管树

(b) 出血块

(c) 真实图像

(d) WGAN

(e) CycleGAN

(f) 本文方法图10 眼底图像生成实验结果对比

图10(a)-(c)分别为迭代20 000次、40 000次和60 000次的结果,通过对比发现,迭代次数越多,生成图像质量越高,40 000次后趋于稳定,与60 000次生成效果相似。对比图10(d)-(f)行,可以发现在迭代次数相同的情况下,本文方法能够生成更加逼真的图像。如图10(d)所示,用WGAN生成的图像质量并不理想,出现了大量模糊,且存在Mode Collapse,无法应用到实际中。图10(e)给出的CycleGAN生成的图像,血管细节出现丢失,且存在部分模糊。图10(f)给出的本文方法生成的眼底血管图像,很好地保留了域X中血管细节,并且没有出现Mode Collapse。

在相同的实验配置和设置下,本文比较了相同迭代次数后的生成结果。表1给出了对WGAN、CycleGAN、本文改进的CycleGAN生成的图像用SSIM和PSNR[17]图像质量评价指标进行比较的结果。

表1 实验结果质量评估

可以看出,在眼底血管图像生成实验中,在迭代次数相同的情况下,本文方法SSIM和PSNR均高于其他方法,其中在60 000次迭代后,本文生成图像的PSNR值比传统CycleGAN提高9.82%,SSIM值提高了4.17%。即本文方法比原始CycleGAN提高了最终生成图像质量。

收敛速度实验中,本文方法相比原始CycleGAN以及WGAN,提高了收敛速度。本实验采用Iception score评价生成图像的质量和多样性,即迭代次数相同情况下,评估分数越高,收敛速度越快,生成的图像质量越好,结果如图11所示。

图11 收敛速度比较

可以看出,在相同数据集上训练WGAN、CycleGAN、本文改进的CycleGAN、本文改进的CycleGAN能够更快收敛。

通过质量评价实验和收敛速度实验证明,本文改进的CycleGAN模型相比原模型以及WGAN,在生成图像质量和多样性方面都有提升,且模型收敛速度更快。

3.4 在出血检测系统中的应用

通过使用不同的训练集来训练6种不同的检测模型,测试生成图像在出血检测系统开发中的作用。首先设计多个训练集组合,将真实眼底图像集标记为R,数据增强后的图像集标记为A,把基于成对数据集的CGAN生成的眼底图像集标记为C,把WGAN、传统CycleGAN和本文方法生成的眼底图像集依次标记为W、L和S。设计的多个训练集组合为:(1) 仅R;(2) R+A;(3) R+A+C;(4) R+A+W;(5) R+A+L;(6) R+A+S。分别用以上六个组合训练出血检测系统,表2中列出了在这些图像集下出血检测系统的PPV和AUC值。

表2 出血检测系统性能评估

表2结果表明,与R和R+A相比,在训练集中添加由GAN生成的图像能够提高出血检测系统的性能。其中R+A+S产生了最佳性能,PPV值(比R+A+L值)提高了0.88%,AUC值提高了3.51%。本实验在证明GAN生成数据在出血检测系统开发中有效性的同时,验证了本文方法优于现有模型。

4 结 语

眼底出血检测系统训练需要大量标记图像,而现实中患病图像获取困难且样本数据分布不均。本文针对样本分布不均问题,提出改进的cycyleGAN模型,分三步生成了患病眼底图像:首先在真实眼底图像中分割出血管树和出血块,然后利用WGAN和CGAN分别生成血管树和出血块并合并,最后利用改进后的CycleGAN模型在不成对的图像集中生成带出血病症的眼底血管图像。由本文方法生成的眼底图像PSNR值和SSIM值均高于其他对比方法,且本文改进的CycleGAN相比WGAN和传统CycleGAN收敛更快。应用本文方法扩充的训练集,能够显著提高出血检测系统的性能,优于现有技术。由此可见,本文方法在缓解眼底图像匮乏以及样本分布不均问题上,比现有技术具有更优异的效果。本文方法包括与其结合的出血检测系统正在与黑龙江省内三所医院眼科接触洽谈试运行,目前能够初步辅助医生诊断病症,下一步还需继续压缩模型、完善细节并提升性能,进一步推进本文方法的临床应用。

猜你喜欢

卷积尺度损失
洪涝造成孟加拉损失25.4万吨大米
基于全卷积神经网络的猪背膘厚快速准确测定
基于图像处理与卷积神经网络的零件识别
基于深度卷积网络与空洞卷积融合的人群计数
两败俱伤
尺度
卷积神经网络概述
损失
以长时间尺度看世界
9