论文来自2019MICCAI
一些医学图像在某些情况下可能不容易获得,因此从能得到的图像出发生成不能得到的图像有较大的医学价值。普通的GAN不能使用一个生成器和判别器生成多种与之相对应的不同模态的图像,因此对于生成多个模态的图像需要多个模型。针对这个问题,本文提出了新的模型,使用Star-GAN来实现一到多的生成。本文引入了新的损失函数,它强制生成器生成高质量的图像,在视觉上更真实,并且有很好的结构相似性。在IXI数据集上学习所有可能的映射(T1,T2,PD,MRA),定性和定量都比较好。
因为深度学习的训练需要很多数据,但是标注代价昂贵因此为了提高深度学习的表现,通过生成一些图像的方法来实现数据增广是有研究价值的。传统方法通过cycle-gan 、c-gan 、wasserstein-gan或者pix2pix来实现一对一的生成。我们使用star-gan和U-NET来实现一对多的生成。模型能够以无监督的形式训练,这样能够使生成器学习不同种模态的通用的几何特征。无监督的方式也消除了成对数据的要求,因此对数据的限制较小。
在损失方面,使用结构相似性来约束小细节特征。除此之外还采用了‘学习感知图像块相似性’( Learned Perceptual Image Patch Similarity (LPIPS)不知道怎么翻译,目前第一次看到。)模型实现1输入4输出。
能够实现四种模态之间的转化,输入一个和一个目标域能够产生出相对的图像。
U-net用来实现两种生成,一种是输入一个域和另一个域的标签,通过深度级联(depth-wise concatenat)然后生成另一个域的假的图像。另一中是输入假的图像和原始的标签生成由假图重建的图像。第一步的生成用来计算对抗损失和分类损失。第二部分的生成中用来计算相似性的损失包括(L1范数,DSSIM,LPIPS)
过程和star-gan一样
本文使用正则化的带有梯度惩罚的Wassersteing GAN (WGAN-GP),能够稳定学习,和增强生成图像的质量。定义如下:
第一项损失是WGAN-GP损失,第二项是正则化项
x' and x''是与x相近的相距很近的数据。D_是从第二层到最后一层判别器的输出。
这部分看的不是太明白。具体可能因为WGAN没有看过把。应该原始论文中有,需要后面完善。
使生成器生成正确域的图像
第一个式子使真图的分类损失,第二个是假图的分类损失。
生成器是Unet结构。判别器是基于PatchGAN的判别器。
使用LXI数据集 IXI dataset
emmmm不应该和star-gan比较把。应该和介绍中提到的其他方法比较把。cycle,cgan之类的把。star-gan直接应用在这上面肯定效果不是很好啊。这个比较个人觉得无意义。
不管何种模型,其损失函数(Loss Function)选择,将影响到训练结果质量,是机器学习模型设计的重要部分。对于判别模型,损失函数是容易定义的,因为输出的目标相对简单。但对于生成模型,损失函数却是不容易定义的。GAN算法原理:
1)G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。
3)在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。
4)这样目的就达成了:得到了一个生成式的模型G,它可以用来生成图片。
在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而判别网络D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。
2.再以理论抽象进行说明:
GAN是一种通过对抗过程估计生成模型的新框架。框架中同时训练两个模型:捕获数据分布的生成模型G,和估计样本来自训练数据的概率的判别模型D。G的训练程序是将D错误的概率最大化。可以证明在任意函数G和D的空间中,存在唯一的解决方案,使得G重现训练数据分布,而D=0.5(D判断不出真假,50%概率,跟抛硬币决定一样)。在G和D由多层感知器定义的情况下,整个系统可以用反向传播进行训练。在训练或生成样本期间,不需要任何马尔科夫链或展开的近似推理网络。实验通过对生成的样品的定性和定量评估,证明了GAN框架的潜在优势。
Goodfellow从理论上证明了该算法的收敛性。在模型收敛时,生成数据和真实数据具有相同分布,从而保证了模型效果。
GAN公式形式如下:
1)公式中x表示真实图片,z表示输入G网络的噪声,G(z)表示G网络生成的图片;
2)D(x)表示D网络判断图片是否真实的概率,因为x就是真实的,所以对于D来说,这个值越接近1越好。
3)G的目的:D(G(z))是D网络判断G生成的图片的是否真实的概率。G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z))尽可能得大,这时V(D, G)会变小。因此公式的最前面记号是min_G。
4)D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大max_D。
GAN训练过程:
GAN通过随机梯度下降法来训练D和G。
1)首先训练D,D希望V(G, D)越大越好,所以是加上梯度(ascending)
2)然后训练G时,G希望V(G, D)越小越好,所以是减去梯度(descending);
GAN训练具体过程如下:
GAN算法优点:
1)使用了latent code,用以表达latent dimension、控制数据隐含关系等;
2)数据会逐渐统一;
3)不需要马尔可夫链;
4)被认为可以生成最好的样本(不过没法鉴定“好”与“不好”);
5)只有反向传播被用来获得梯度,学习期间不需要推理;
6)各种各样的功能可以被纳入到模型中;
7)可以表示非常尖锐,甚至退化的分布。
GAN算法缺点:
1)Pg(x)没有显式表示;
2)D在训练过程中必须与G同步良好;
3)G不能被训练太多;
4)波兹曼机必须在学习步骤之间保持最新。
GAN的应用范围较广,扩展性也强,可应用于图像生成、数据增强和图像处理等领域。
1)图像生成:
目前GAN最常使用的地方就是图像生成,如超分辨率任务,语义分割等。
2)数据增强:
用GAN生成的图像来做数据增强。主要解决的问题是a)对于小数据集,数据量不足,可以生成一些数据;b)用原始数据训练一个GAN,GAN生成的数据label不同类别。
GAN生成式对抗网络是一种深度学习模型,是近年来复杂分布上无监督学习最具有前景的方法之一,值得深入研究。GAN生成式对抗网络的模型至少包括两个模块:G模型-生成模型和D模型-判别模型。两者互相博弈学习产生相当好的输出结果。GAN算法应用范围较广,扩展性也强,可应用于图像生成、数据增强和图像处理等领域。
GAN本身是一种生成式模型,所以在数据生成上用的是最普遍的,最常见的是图片生成,常用的有DCGAN WGAN,BEGAN。目前比较有意思的应用就是GAN用在图像风格迁移,图像降噪修复,图像超分辨率了,都有比较好的结果。目前也有研究者将GAN用在对抗性攻击上,具体就是训练GAN生成对抗文本,有针对或者无针对的欺骗分类器或者检测系统等等,但是目前没有见到很典范的文章。好吧,笔者有一个项目和对抗性攻击有关,所以要学习一下GAN。
GANs组成:生成器和判别器。结构如图1所示
针对问题: 给定一批样本,训练一个系统能够生成类似的新样本
核心思想:博弈论中的纳什均衡,
判别器D 的目的是判断数据来自生成器还是训练集,
生成器G 的目的是学习真实数据的分布,使得生成的数据更接近真实数据,
两者不断学习优化最后得到纳什平衡点。
D( x) 表示真实数据的概率分布,
G( z) 表示输入噪声z 产生的生成数据的概率分布
训练目标:G( Z)在判别器上的分布D( G( Z) ) 更接近真实数据在判别器上的分布D( X)
接下来就来实现我们的例子把,目标是把标准正态分布的数据,通过训练的GAN网络之后,得到的数据x_fake能尽量拟合均值为3方差为1的高斯分布N(3,1)的数据。
可以看出生成器其实就是简单的全连接网络,当然CNN,RNN等网络都是适合GAN的,根据需要选择。
可以看出判别器其实也是简单的全连接网络,当然CNN,RNN等网络都是适合GAN的,根据需要选择。
在这里想说的是对于判别器和生成器的训练是分开的,训练判别器的时候固定生成器,训练生成器的时候固定判别器,如此循环。本例子中先训练三次判别器,接着训练一次生成器。
为了便于理解具体训练过程,图2 、图3展示了判别器和生成器训练时的数据流向,具体就不展开了,参考注释。
画图函数敬上
然后调用main()函数就好了
红色是目标分布,蓝色是生成分布,还是有一定效果的额。
感受到是在调参了,请教我如何学习生成(xie)对抗(lun)网络(wen)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)