2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)

对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)

时间:2023-06-22 09:30:38

相关推荐

对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)

一、背景

最近工作逐渐步入正轨,自己要做一个文字和图像的交互,所以就考虑先做做类似的工作,恰好之前有看到过stackGAN,因此这次就做做stcakGAN++。

stackGAN其实发布的比较早,stackGAN++是它的改进版,后续还有一个attnGAN是对stackGAN++的后续工作的解决。stackGAN++是Han Zhang等人[1]于10月提出的一个模型,发表在ICCV《StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks》,该模型根据输入的文字来生成相应的图像,应该算是用GAN做文字和图像生成的经典模型之一了。

本实验的数据集后面会介绍(原实验中作者用了很多不同的数据集,本实验只用了鸟类数据集),本实验的目的是利用文字生成鸟类图片,参考代码[2](原作者使用的是pytorch,这里我参考的是tensorflow版本的)。

[1]文章链接:/pdf/1710.10916.pdf

[2]参考代码:/zacharynevin/StackGAN

二、stackGAN++原理

stackGAN++提出的比较早,网上也有一些解读,可以看下下面这些:

[3]【GANs学习笔记】(十七)STACKGAN、STACKGAN++

[4]text to image(五):《StackGAN++》

先来看一下文章的摘要部分:

Although Generative Adversarial Networks (GANs) have shown remarkable success in various tasks, they still face challenges in generating high quality images. In this paper, we propose Stacked Generative Adversarial Networks (StackGANs) aimed at generating high-resolution photo-realistic images. First, we propose a two-stage generative adversarial network architecture, StackGAN-v1, for text-to-image synthesis. The Stage-I GAN sketches the primitive shape and colors of a scene based on a given text description, yielding low-resolution images. The Stage-II GAN takes Stage-I results and the text description as inputs, and generates high-resolution images with photo-realistic details. Second, an advanced multi-stage generative adversarial network architecture, StackGAN-v2, is proposed for both conditional and unconditional generative tasks. OurStackGAN-v2 consists of multiple generators and multiple discriminators arranged in a tree-like structure;images at multiple scales corresponding to the same scene are generated from different branches of the tree. StackGAN-v2 shows more stable training behavior than StackGAN-v1 by jointly approximating multiple distributions. Extensive experiments demonstrate that the proposed stacked generative adversarial networks significantly outperform other state-of-the-art methods in generating photo-realistic images.

需要注意的就是stackGAN++的构成是由多个生成器和多个判别器排列成树状结构构成的。

一般来说,GAN的训练是不稳定的,会发生模式倒塌的现象(mode collapse),但是作者观察到,除了不同尺度下的多重分布之外,图像加上或去掉相关条件变量(比如标签或者文本信息)都可以看作一种条件或非条件分布。基于此,通过将复杂的生成任务分解为多个简单的小问题,能够一定程度上带来训练的稳定,实现生成高分辨率影像(正如摘要部分所提到的,stackGAN就是分了两步)。

首先,先介绍下stackGAN的两步走(two-stage)思路,第一步,通过GAN生成低分辨率的生成影像,第二步生成高分辨率影像。第二步为第一步的结果添加了条件约束,第二步的过程中学习捕捉文本的细节信息(这在第一步中是被忽略的)并绘制图像的细节。另外,在条件的多样性(latent conditioning manifold)方面,作者提出了条件增广(CA,Conditioning Augmentatio)技术来增加条件的平滑性。stackGAN的网络结构为:

其次,作者提出了多阶段的生成网络结构,stackGAN v2(也就是stackGAN++),stackGAN++的多个生成器共享参数,生成器中最深分支的目标为生成真实高分辨率影像,中间的分支都是为此服务的。另外,作者还提出了颜色连续正则项(color-consistency regularization term)来帮助生成器生成不同尺度下的更真实的图像。stackGAN++的网络结构为:

这篇文章的主要贡献包括:

(1)Our StackGANv1 for the first time generates images of 256×256 resolution with photo-realistic details from text descriptions. (stackGAN生成256*256的影像)

(2)A new Conditioning Augmentation technique is proposed to stabilize the conditional GANs’ training and also

improve the diversity of the generated samples.(提出了CA技术,使得GAN的训练变得稳定)

(3)Our StackGAN-v2 further improves the quality of generated images and stabilizes the GANs’ training by jointly approximating multiple distributions. (stackGAN++改善了图像的生成质量和稳定性)

另外作者给出了stackGAN和stackGAN++的项目链接(作者的这两个模型都是拿pytorch写的,tensorflow版本的需要自己在网上找):

[3] stackGAN:/hanzhanggit/StackGAN

[4] stackGAN++: /hanzhanggit/StackGAN-v2

接下来就是GAN的一些基础知识了,这里就不多介绍了。

stackGAN的第一步中的数学推导:

设为输入的文字,采样自的高斯条件变量,用来获取的输入文字的意义,添加条件的和随机变量z作为输入,来训练判别器和生成器,依据可由下式确定:

上式中,z是从给定的中采样得到的随机噪声向量,t是来自真实数据的文字信息,I表示真实影像。在模型中,首先传入全连接层来生成用于高斯分布()的和。

stackGAN的第二步中的数学推导:

这里用到了由第一步G0生成的结果,记为s0,则生成器和判别器的损失函数可以表达为:

与一般的GAN不同,这里不再输入随机噪声z,因为第一步的随机噪声输入已经确保了第二步的随机性。

第二步的生成器用了encoder-decoder结构,层用的残差层resblock,判别器与第一步的判别器一样,只不过多了一个下采样层,同时为了对齐图像和文本,这里还使用了匹配感知(matching-aware)。另外文章中还给出了stackGAN的超参数设置。

下来才是关键部分——stackGAN++的介绍:

stackGAN++的网络结构类似于决策树,由多个判别器和多个生成器组成。模型输入的噪声向量z符合标准正态分布特征。每个判别器的loss函数都是用交叉熵来计算:

而生成器的loss函数则按照下面的方式进行计算:

至于为什么要提出stackGAN++,作者提到是为了进行多尺度数据分布的建模。一旦建立某个尺度下的真实数据分布,那么模型就能提供不同尺度下的梯度信息。

stackGAN++还需要考虑条件限制下的图像生成,其判别器的loss函数则可以由两部分构成:

生成器同理:

另外对于不同尺度下的图像生成,图像的结构和颜色基本不变,因此考虑引入颜色连续正则项(color-consistency regularization term),此项的loss函数可以表示为:

最终的第i个生成器的loss函数就可以表示为:

最后是stackGAN++的生成效果图了,比如根据描述生成鸟类图:

根据描述生成花卉和一些现实场景图:

还有一点就是stackGAN是一定程度上出现了模式倒塌的现象的,但是stackGAN++就基本解决了这个问题:

最后放一组stackGAN和stackGAN++生成效果图的质量对比吧,上面一行是stackGAN,下面一行是stackGAN++:

下面就是实验部分了,本实验以鸟类图片为数据集,用stackGAN++进行文字生成鸟类图片的实验,主要参考代码[2]:

[2]参考代码:/zacharynevin/StackGAN

三、stackGAN++实现

1. 文件结构

所有文件的结构为:

-- data

2. 数据准备

这里我们需要下载两个文件,分别是char-CNN-RNN文字封装好的bird文件和bird的图片文件。

(1)char-CNN-RNN文字封装好的bird文件

该文件需要翻墙下载,下面先给出下载地址:

/uc?id=0B3y_msrWZaXLT1BZdVdycDY5TEE&export=download

点击下面的下载就可以了:

能翻墙的话可以直接下载,我用的翻墙软件不太好用,经常掉线,后来项了个办法,用multcloud添加google drive之后再从multcloud里面下载,这样做的话,只用开始添加网盘的时候稍微翻墙下,后面就可以直接下载,而且下载速度也很快:

下载速度起码不是龟速了:

下载好之后,将其放到路径'./data/'下即可。

(2)bird数据集

这个数据集不用翻墙,可以直接下载,下载连接为:

http://www.vision.caltech.edu/visipedia/CUB-200-.html

打开之后找到下面的下载项直接下载就可以了:

下载好之后将数据集放在路径。。。。。。下

四、实验结果

五、小结

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。