1. 引言
图像生成属于计算机视觉领域其中一个研究方向,该方向主要利用各种方法寻找数据分布,并建立一个能生成属于该分布的数据模型。传统图像生成算法包括变分自动编码、玻尔兹曼向量机、近似推理马尔可夫链、自回归模型等。由于图像数据的高维特点,所建立的模型通常难以学习到数据的分布,导致模型不能生成近似样本分布的图像。再有,所建立的模型难以执行难解的推断和归一化的分布。面对这些计数上的困难,可以采用近似计算或者设计不用去做复杂计算的模型两种方法[1]。基于这两种方法,研究人员开展了一系列相关研究,但效果并不十分理想。直到2014年,Goodfellow等人引入的生成对抗网络(Generative Adversarial Networks, GAN)取得了突破性的进展[2]。之后研究人员在此方向开展了大量研究工作,产生了许多GAN的版本。主要分为无条件合成、条件合成和交叉合成[3]。
无条件合成,即在用GAN生成图像时没有加入任何信息,从输入的随机向量生成近似图像。包括DCGAN、WPGAN和PGGAN,其中[4] [5]利用DCGAN生成医疗图像达到了可以欺骗医疗专家的效果。而PGGAN采用渐进增长方法生成了高清晰的逼真图像。前两种方法可用于合成最大256 × 256分辨率的图像,后一种方法可生成1024 × 1024分辨率的高清图像。但大部分利用上述方法合成核磁共振图像,原因可能是这种图像开源数据较多并且采用核磁共振设备扫描时间长[3]。如果要利用这种方法进行数据增强,需要为每一个类别训练一个GAN,即单样本合成。Frid-Adar等人用三个DCGAN合成三种肝损伤图像,生成的样本被证明有助于提高肝损伤分类器的分类效果[5]。林志鹏等人将4类宫颈细胞图像分为有无病变2个类别,然后训练两个基于DCGAN的模型分别生成有病变图像和无病变图像,然后将训练好的图像用于二分类任务增强,通过使用GAN扩充后的图像集训练的分类器,准确率达到了97%,明显优于使用传统仿射变换扩充的数据集(准确率为93%) [6]。Bermudez等人利用DCGAN生成逼真的脑核磁共振图像,但与真实的图像存在一定差异[7]。
条件合成,通过在GAN中加入限制信息(可以是图像类别、文字描述、位置分割图等),使之生成与信息相关的图片或者其他内容。这种可以生成带标签的医疗图像很具有挑战性并且使用价值也更大。如Jin等人利用肺的CT数据集合成带病灶的肺部CT图片,提高了肺部CT图片的分割效果[8]。Mok等人用CGAN生成更多脑瘤图像,利用分割图作为条件输入模型中,由粗到细地生成脑部核磁图像,提高了脑瘤分割效果[9]。
交叉合成,为了诊断病情,医生需要给病人拍摄多种图像,比如核磁共振和CT,这增加了病人的医疗费用也耗费很多时间,而且多次拍摄CT图像对人体有伤害,为解决这个问题,很多研究[10]-[12]利用CycleGAN进行交叉合成,即通过核磁图像生成对应的CT图像。
除了GAN外,为了获得更多数据来让数据平衡,也有很多传统图像处理方法用于数据增强,比如水平翻转、垂直翻转、随机旋转、随机剪裁等等,但这些方法都不能生成不同的逼真的样本,这些方法被证明对数据增强有一定效果。但很多情况下,我们的数据太过不平衡,不同类别的样本不在一个数量级上,如目前已知公开的最大DR数据集为EyePACS [13],正常的眼底图像(0级)要比3、4级DR高出两个数量级,如此差异巨大的数据集采用传统方法就不足以彻底解决数据不平衡的问题[14]。生成对抗网络(Generative Adversarial Network, GAN)可以生成不存在的逼真图像[2],但是GAN相对不易训练,而且对算力要求高,因此小数据集难以训练GAN [15]。因此,如何在小数据集和相对低的算力条件下,用GAN生成医学图像(如糖尿病视网膜病变图像)还需进一步开展研究。
借鉴在小数据集分类任务中,很多工作利用迁移学习达到了很好的效果[16],那么如果能利用其他研究者在相似任务训练好的GAN模型用到目标任务上,则可能对GAN的训练有帮助,受此启发,考虑利用其他研究中训练好的GAN,再用我们的数据集重新训练。然而,还存在很多问题,因为要生成高清晰的图像,GAN的网络结构通常很大,而大的网络结构需要用大量数据才能充分训练,用小数据集训练这样的GAN容易过拟合[17],所以选择拿部分网络进行训练需要研究。由文献[18]可知,靠近图像一侧的层是通用层,这些层内的信息基本是直线、曲线、纹理、色彩等所有图像共有信息,而且这些层需要大量数据训练。受此启发,Zhao等人在预训练的GP-GAN基础上,采用迁移学习,把在大数据上训练好的GAN模型,固定靠近图像一侧层的网络参数,更改生成器输入侧和分类器输出侧的网络结构,这样需要训练的参数大大减少,并用目标数据集训练这一部分参数,为了更好地把预训练的通用层应用到其目标任务上,开发了AdaFM技术(对冻结的参数进行加权处理,增加的权重和偏差是可训练的,因此通过训练可以更好地将参数应用于目标任务),使得冻结的层数就变得更灵活了,并且他们的实验显示冻结相对多的层会得到更好的效果,但过多效果会变得很差。这也说明远离图像侧的层是用于具体任务的,通过迁移学习和AdaFM的运用取得很好的效果[17]。
然而,虽然预训练的分类器很多,预训练的GAN也越来越多,但利用预训练的GAN的工作并不多[19]。公开的预训练GAN有SNGAN (Miyato等人,2018)、GP-GAN (Mescheder等人,2018)和BigGAN (Brock等人,2019)等。
以上这些能生成图像的GAN都不能指定生成图像的类别,事实上,我们缺少的主要是带标签的数据,不带标签的数据在网上有很多。目前条件下生成对抗网络(Conditional Generative Adversarial Networks, CGAN) [20]可以生成带标签的数据,但目前很少有公开的在大数据上预训练的CGAN。另外,由于CGAN需要在图像中增加信息,通常的做法是生成一个和图像大小相同的标签嵌入层,但这样一来就需要改变网络结构,特别是靠近图像的那一层,这层的参数就无法迁移,导致很难迁移现有的GP-GAN、SNGAN等模型用于CGAN。因此,本文主要针对如何把迁移学习应用到条件生成对抗网络上进行研究。
研究思路:在迁移学习中(微调迁移学习),浅层网络用于图像通用特征(线条、色彩、纹理等)的提取[16],那么能否将标签信息加到浅层网络后面,即保留浅层网络的结构和参数不动,修改其后面的网络结构并训练其参数,这一点是本文研究重点。
2. 方法
2.1. 研究背景概述
能够生成高清图像(1024像素)的生成对抗网络[21] [22]通常网络很深、训练时间长而且所需设备要求较高。随着GAN技术的发展,Brock等人的工作[22]和Karras等人的PGAN生成了高清晰的图像,Karras等人在训练GAN时,由小到大逐渐在网络输出端增加更大网络层,使得输出的图像尺寸一点点变大,图像的清晰度也逐渐变好,达到了生成高清晰图像的效果[23]。2019年,Karras等人在PGAN基础上,在网络不同层引入噪声和风格信息,生成了不同风格的高清人脸图像,并且合成的图像可通过风格信息(将输入通过映射网络变为控制变量对AdaIN进行调整)进行控制[21]。在此基础上,2020年,Zhao等人在预训练的GAN的基础上,利用迁移学习技术和Karras等人所采用部分方法(加入噪声和类型信息的类型模块),并给固定参数的网络层中加入了可训练的权重和偏差(AdaFM),在小数据集(花的数据集)上训练,生成了清晰的花的图像。
然而,Tero Karras所采用的方法计算量非常大且所需设备要求高,由于Tero Karras等人属于英伟达公司,模型训练采用的设备一般研究者并不具备。并且生成的人脸图像,虽然非常清晰而且可以变换风格(肤色、发型、面孔、年龄等等),但生成的图片与眼底图像还是有很大不同,生成的脸部图片很少有斑点,而且人脸面部信息位置相对固定。而医学图像,如糖尿病视网膜病变的眼底图像不同,病灶基本为斑点且位置不固定,真实的DR图像拍摄环境、角度和设备等等都不同,所以DR图像相对复杂。而且,以上方法生成的图像类别不可控。
在以上研究基础上,本研究采用迁移学习思想,利用Zhao等人的预训练GAN网络(和分类任务不同,GAN的输出都是1和0,所以不需要更改网络结构),在小数据集(DR数据集)上重新训练GAN网络的部分参数(生成器的浅层参数和深层中的AdaFM中参数,以及分类器的深层参数),使之能生成清晰的DR眼底图像。然后,再研究条件生成对抗网络与迁移学习的结合,难点在于训练好的GAN很难加入标签信息,而标签信息通常是和输入叠加在一起输入网络中,导致输入的样本尺寸发生变化,网络结构也因此必须改变。即标签信息的加入会改变网络结构,网络结构改变后,原来网络训练好的参数就不能再利用了,使得迁移学习难以应用。本研究提出把标签信息加入到分类网络中间层,保留浅层网络结构(主要用于图像基本特征提取,需要大量数据训练)。实验结果显示,生成的图像具有更多的类别信息(病灶特征),但图像清晰度也略有降低。但要远远好于不加载预训练参数的网络。实验证明了在小数据集上,迁移学习在条件生成对抗网络中的应用显著提高了训练效果。
2.2. 基于迁移学习的糖尿病视网膜病变生成对抗网络
2.2.1. 模型结构
本研究所采用的模型是利用在公开Imagenet大数据集上训练好的GAN模型[22] (如图1),固定生成器G深层网络和分类器D浅层网络参数,并在本任务采用的数据集上训练,生成了DR眼底图像。
图1中G为生成器模型,z为输入随机向量,经过FC层后,变成某一尺寸的常数,这一点与传统GAN不同,常数的主要作用就是给网络一个起点,一个初始偏差。z主要作用是通过MLP (8层全连接层)后作为风格控制参数来调控style block,FC的作用是解除耦合,即消除各个w间的相互关联和影响,否则各个w间相互缠绕,就如同一个w,网络很难调整这一个w控制不同的风格。打个比方,用一个开关控制不同灯,按照想要的方式亮和灭,是很难达到的。所以,要接触各个w间的相互缠绕,而这是通过网络学习得到的,因为为了更好地生成图像,网络需要w间彼此独立。
Figure 1. Structure of GAN
图1. 生成对抗网络结构图
noise的作用是给网络加入噪声,通过风格调控与噪声相结合调控输出图片。
图1 G中的类型模块(style block)如图2所示:
其中AdaIN (Adaptive Instance Norm类)是一种标准化:
(1)
表示均值,
表示标准差,通过w控制AdaIN输出的均值和方差,公式中
先标准化输
入,目的是去除风格类型信息,然后通过
和
加入我们想要图像获得的风格。而之前加入的noise相当于一个定位器,告诉网络(比如人脸检测中的头发、皱纹等等)风格加入的位置。通常浅层网络从noise中学到的相对少,因为越往深层网络,越是细节信息,而要生成的细节信息需要通过AdaIN和noise结合起来加入到网络中,这是通过网络对比假图像和真图像之间的对比损失函数,然后通过反向传播算法来更新相关参数来达到的。也就是说,某一层的风格w控制图片中的某尺度下的某些特征有多少,网络所要学习的就是如何加入这些信息,使得假图和真图更接近,以便使得损失函数减少。
Figure 2. Structure of style module
图2. 类型模块结构图
图1 G中的AdaFM Block是利用论文[24]中的网络,该网络卷积层中加入可训练的权重和偏差,采用了其中的风格混合思想,使得网络更好地适应目标任务。训练时采用分阶段训练,先训练浅层网络,再训练深层网络,目的同SGAN相同,即由粗到细的训练网络生成更清晰的图像。
图1 D为分类器,浅层网络提取的是图像通用的信息(纹理、线条等),这些信息通常需要大数据来训练,通过迁移学习,利用大数据上训练好的网络,来缩短训练时间,同时解决小数据集过拟合的问题。网络的输出端不同于传统分类网络(需要调整输出类别),由于生成对抗网络标签只有1和0,所以无需调整。
2.2.2. 实验过程
生成器和分类器交替训练:
步骤一,训练生成器:
生成器输入为随机向量,长度为100。形状为:batch size, 100, 1, 1。输出为和真实图像尺寸相同的假图像,对应的标签为0。真实图像对应的标签为1。
先固定分类器,把生成器生成的图像输入分类器,得到输出pred (为真实图像的概率),然后计算损失,对简单的二分类问题采用损失函数选择二进制交叉熵,为了通过定时保存训练的参数和观察生成器输出的样本质量来判断学习停止时间。如果生成器生成的图像不再变得更好,那么停止训练,手动调整学习率,下载生成图像最好的模型参数,再继续训练。
网络训练时采用固定学习率0.001,刚开始训练网络的浅层style block部分,主要考虑网络浅层控制图像的粗糙部分,然后再训练深层网络中的可训练参数(即加入的AdaFM)。
步骤二,训练分类器:
采用与生成器相同的学习率,固定网络浅层(如图1 D所示),训练网络深层。然后重复步骤一和二,并不断观察生成图像的质量,直到生成的图像质量不再变好,就停止训练。并保持生成器和分类器参数,视情况调整超参数,下载刚刚训练好的模型,继续训练,直至生成的图像不能再变好为止。
2.3. 基于迁移学习的糖尿病视网膜病变条件生成对抗网络
2.3.1. 生成器模型结构
本研究所采用的模型是利用在公开大数据集上训练好的GAN模型,更改部分模型结构和参数,并加入分类标签信息,获得条件生成对抗网络(CGAN)。即把Zhao和Choe等人在论文[22] [24]中训练的GAN模型,该模型如图1 G所示(原本用于生成各种花的网络),保留卷积层参数,在生成器和分类器输入端分别插入嵌入层(注意分类器输出层不动),再用本研究采用的数据训练该网络。
由于条件生成对抗网络需要在GAN的生成器和分类器中分别增加标签信息,而分类器中增加标签信息面临的问题是需要更改网络结构,而更改网络结构就不能用迁移学习了。即使只更改分类器的输入层,也会影响很大,因为分类器的输入层是用于提取图像基本特征(纹理、线条、色彩等)的,而这样的网络参数需要很大的数据才能训练好,考虑到这一点,本研究采用把嵌入层叠加到分类器通用层(浅层)的后面,如图1 D中的yembeded block中。这样既避免了更改网络结构所导致的无法利用迁移学习,又将普通GAN转换为CGAN。
本研究所采用的生成器网络模型如图3(b)所示,图3(a)为原网络模型。
Figure 3. Structures of GAN and CGAN
图3. 生成对抗网络和条件生成对抗网络结构图
虽然仅仅在输入层中加入了类别标签和随机变量叠加在一起,但对整个网络影响非常大,简言之,会使得输出面目全非,因为这导致了输入样本分布发生了变化,因此需要重新训练部分网络参数。
在图3(b)中,即本研究所用的生成器输入端,类别标签先经过嵌入层,变为和标签尺寸相当的标签嵌入层Y,嵌入层与输入随机向量Z有Pytorch中的cat函数,叠加在一起输入网络MLP(多层全连接层,用于将标签信息和输入随机向量Z进行变换来控制网络模型输出)。图3(b)中MLP、FC、style block为可训练层,其中MLP是用于图像微调,而FC和style block是用于控制图像生成大的轮廓(如眼底图像的圆形)等低频特征,因此训练时先训练FC和style block,再训练MLP。如果同时训练这三个部分,则很难生成眼底图像,即生成的图像会出现各种形状(如图4所示),而不是由方形逐渐变成圆形,细节信息逐渐增加的过程。最后再训练AdaFM中的参数,AdaFM中卷积参数是固定不训练的,而通过AdaFM加的权重和偏差是可以训练的,通过这种方式,更好地使用原网络适应目标任务(训练过程生成的图片如图7所示)。
Figure 4. Training process of GAN without pre-trained
图4. 模型整体训练的训练过程图
2.3.2. 分类器模型架构
要利用迁移学习,网络结构不能变。但考虑到条件生成对抗网络必须要增加嵌入层,因此需要更改网络结构,这给迁移学习带来了障碍。且考虑到分类器中的浅层网络是提取图像通用特征的,因此设计保留浅层网络结构,而把标签嵌入到其后的网络中,如图5(b)中的黄色yembeded block层。即分类器的标签嵌入层是叠加到固定不训练层的后一层上,并相应更改了其后一层的网络结构。在相应卷积层的输入通道加一,并把标签生成和该层输入尺寸相匹配,然后叠在一起输入到接下来的网络中。网络的输出层不动,即输出通道数为1。
Figure 5. Structure of classifier of CGAN
图5. 条件生成对抗网络分类器结构图
2.4. 训练过程
数据来源于网上公开数据集Kaggle失明检测公开竞赛数据集,数据集是从多家医院收集的,其中的图像和标签都含有噪声,图像是很多成像设备拍摄的,有的图像包含伪影、曝光不够或曝光过度、不聚焦和尺寸不同等缺陷。这和真实数据集很像。数据集中包括35,126张眼底图像,各个类别数量为(严重程度递增):25,810,2443,5292,873,708。其中33,545张(前三类)是不影响视力的眼底图像,其它1581张(后两类)是对视力造成伤害的DR眼底图像,显然数据存在分布不均的情况。
由于数据不平衡,用DataLoader进行取样时,网络会得到更多无症状的DR图像,那么网络会更加倾向于生成无症状的眼底图像。因此,为了减少这一弊端采用过采样方法,即按照放回抽样的方式,从各个类别中均匀抽取样本,根据样本分布d设计取样器权重w。
首先,导入数据,由于数据各个类别是在不同文件夹下,用torchvision.datasets.ImageFolder方法导入数据。然后,建立模型,并根据模型参数名导入预训练的参数,设置优化器为Adam。接着,根据需要固定的参数,将预训练好的模型参数进行加载。然后固定分类器靠近输入端的两层神经网络。把生成器生成的图像和对应类别标签(输入一)和真实图像和类别标签(输入二),分别输入分类器。
3. 实验结果与分析
从头开始训练的GAN训练过程如图6所示:
Figure 6. Output images of GAN without pre-trained
图6. 无预训练的生成对抗网络训练过程输出图像
从图6可见,数据量小的网络得不到有效训练,图6(a)为网络开始训练GAN生成的图像,然后继续训练(从图6(a)到图6(f)),网络最后生成的是黑图(如图6(f)),然后网络生成的图片不再改变了。
基于迁移学习的GAN训练过程,生成器输出图像变化如图7所示:
Figure 7. Output images of pre-trained GAN
图7. 预训练的生成对抗网络训练过程输出图像
对比基于迁移学习的条件生成对抗网络和从零开始训练的条件生成对抗网络可见:迁移学习明显加快了网络训练进度。从刚开始训练基于迁移学习的GAN网络输出的图像可见,图7中开始是一些花的图案,随着训练的增加,生成器网络输出图像形状一点点变圆,图案由花的绿色和白色一点点变为眼底图像的黄红等颜色,而且眼底图像的视盘很快就出现了,网络的血管开始并没有出现,原因在于训练过程,即刚开始网络训练浅层参数,不包括AdaFM Block,设置训练1000个批次后再将其加入训练,而且随着训练轮次增加学习率也相应降低,这使得生成器网络生成的图像细节信息更为丰富。
如图8,从零开始训练的CGAN,从形状上难以达到圆形,而且基本的图像特征也难以生成,最后生成的图像在类似图8(e)和图8(f)间左右徘徊,这反映了数据小造成的模型无法变得更好了。
Figure 8. Output images of CGAN without pre-trained
图8. 无预训练的条件生成对抗网络训练过程输出图像
Figure 9. Comparison between real images and generative images
图9. 生成图像与真实图像对比
图9中,图9(a)为基于迁移学习的生成对抗网络生成的图片,图9(b)为真实图片,图9(c)为基于迁移学习的条件生成对抗网络生成的图片。
从图9(a)中可见,第三幅图像有两个视盘,这与真实图像显然不同,但图9(a)中血管生成的还是很明显,虽然与真实图像有一点点区别,但和真实眼底图像比较接近。图9(b)是真实眼底图像,有些图像血管和病灶也不是很明显,这也是医生判断不准确的原因,因为数据集来源于不同医疗机构,数据质量并不是很理想,反映成像设备不同,并且拍摄角度和环境也各不相同。这也给深度学习带来挑战,深度学习模型需要根据不同场景和设备拍摄的图像学习分类DR病情。
图9(c)是基于迁移学习的条件生成对抗网络生成的图像,和图9(a)相比有更明显的细节病灶,这反映了加入条件信息提高了对生成器的可控性。通过迁移学习和条件生成对抗网络的结合,不但生成了DR图像,也对生成图像中类别增加了一定的控制。
不论是使用迁移学习和生成对抗网络结合,还是迁移学习与条件生成对抗网络结合,都避免了图6和图8中模型没有学到如何生成眼底图像的问题;而通过采用预训练模型,正如图7和图9所示,生成模型能够成功生成逼真的眼底图像。从从头训练的GAN和CGAN生成图像的变化可见,小数据集难以训练GAN,这反映了大数据对深度学习的重要性,也反映小数据集需要迁移学习来充分利用数据,来训练那些专用于特定任务的网络层,即生成器的深层和分类器的浅层网络需要大数据来训练。
非预训练的生成对抗网络和条件生成对抗网络难以在小数据集上生成似真的眼底图像,从生成图像的过程可见,无迁移学习网络难以学习,训练经过相同轮次训练后生成的图像与真实图像相去甚远,而且难以继续提高图像质量。研究认为,由于数据集太小,难以训练过多的参数,所以,不论训练多少轮最后都难以生成逼真的图像。而在迁移学习基础上,大大减少了所需训练的参数,这样小数据集训练较少的参数可以达到较好的效果。
通过FID度量比较基于迁移学习和无迁移学习GAN生成图片质量和多样性如表1:
Table 1. Score of FID
表1. FID分数
方法 |
FID分数 |
无迁移学习GAN |
293.9 |
迁移学习GAN |
86.3 |
无迁移学习CGAN |
287.7 |
迁移学习CGAN |
124.5 |
由表1可见,无论是GAN还是CGAN,迁移学习大大提高了小数据集上生成对抗网络生成图片的质量和多样性,基于迁移学习的GAN生成的眼底图片质量要远远好于无迁移学习GAN生产的图片质量。
4. 结论
深度学习在糖尿病视网膜病变(DR)自动筛查领域的应用还面临一些困难:医学数据通常是小数据集,而且数据存在不平衡现象。因此,本研究利用生成对抗网络、迁移学习对这项任务进行研究:(1) 研究利用迁移学习搭建生成对抗网络(GAN)生成DR眼底图像,建立了基于迁移学习的生成对抗网络,实现了在小数据集上生成逼真的糖尿病视网膜病变眼底图像。这种方法避免了GAN需要大数据来训练的弊端;(2) 研究利用预训练的生成对抗网络构造条件生成对抗网络,增加对生成DR眼底图像的控制,提出了基于迁移学习的条件生成对抗网络,实现了条件生成对抗网络和迁移学习成功结合,这增加了对生成图像的控制,使得生成眼底图像有更多的病灶信息。