GAN生成对抗网络-text to image原理与基本实现-文字转图像-11

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实质上这是一个RNN的词语向量化模型 + 条件GAN
首先用一个RNN网络来将文字转换为向量,然后将生成的文
本向量加入到G和D网络中。

与普通GAN不同的是,这里多了一种错误情况,即看上去挺
真的,但是对应的描述与图不符合,也要给与惩罚。
如果不加的话,那么D所能获得的信息仅仅是G的生成图,失
去了判断图与描述是否符合的判断能力。

为什么还需要噪声输入?
这是因为一般情况下很多时候一句话就是描述内容(花的样
子)的,而不会描述style(style主要是包括背景和姿态)。
那么这种情况下我们就希望噪声能起到这种加入style的作用
,从而生成更加真实多样化的图片。

另外,通过特征可视化的方式,让z具有specific的style加入
功能,从而解决文本描述本身不对style进行任何阐述的问题,
随机化的z可以加入不同的style,从而增加生成样本的真实
性与多样性。

三个重点部分:
一、对于文本的处理,如何提取文本信息,作为我们生成器
的条件?
首先是如何文本的向量化
然后提取文本信息

二、对于图片的处理,需要添加负面的训练:
即:输入的文本和图片不对应的时候,要给出惩罚。
做出输入的队列:
正确的图片 + 正确的文本
错误的图片 + 错误的文本

三、创建输入队列
保证文本和图片对应

import tensorflow as tf
from gensim.models import word2vec
from gensim.models import Word2Vec
import pandas as pd
import glob
import numpy as np
import os
import matplotlib.pyplot as plt
%matplotlib inline
from IPython import display
os.listdir('../input/gan-text-to-image-102flowers-rieyuguanghua')

在这里插入图片描述

n_input = 100
n_hidden = 128
image_height = 64
image_width = 64
image_depth = 3
noise_dim = 100
maxlength = 250
NUM_EPOCHS = 100
batch_size = 64
if not os.path.exists('102flowers'):
    !mkdir 102flowers
    !tar zxvf ../input/102flowersdataset/102flowers.tgz -C ./102flowers/
display.clear_output()
all_text_filename = glob.glob('../input/cvpr2016/cvpr2016_flowers/text_c10/class_*/image_*.txt')

all_text_filename.sort(key=lambda x:x.split('/')[-1])
all_image_filename = glob.glob('./102flowers/jpg/*.jpg')

all_image_filename.sort()

在这里插入图片描述

all_text_filename = np.array(all_text_filename)
all_image_filename = np.array(all_image_filename)
wrong_image_filename = all_image_filename[np.random.permutation(len(all_image_filename))]
dataset_image = tf.data.Dataset.from_tensor_slices((all_image_filename, wrong_image_filename))

在这里插入图片描述

if not os.path.exists('../input/gan-text-to-image-102flowers-rieyuguanghua/all_text.txt'):
    with open('all_text.txt', 'at') as f:
        for a_text in all_text_filename:
            f.write(open(a_text).read().replace('\n', '') + '\n')
if not os.path.exists('../input/gan-text-to-image-102flowers-rieyuguanghua/word_model'):
    sentences = word2vec.Text8Corpus('all_text.txt')
    model = word2vec.Word2Vec(sentences, size=100)
    model.save('word_model')
else:
    model = Word2Vec.load('../input/gan-text-to-image-102flowers-rieyuguanghua/word_model')
    !cp ../input/gan-text-to-image-102flowers-rieyuguanghua/all_text.txt ./
    !cp ../input/gan-text-to-image-102flowers-rieyuguanghua/word_model ./
word_vectors = model.wv
maxlength = max([len(open(a_text).read().split()) for a_text in all_text_filename])
n_steps = maxlength
def pad(x, maxlength=200):
    x1 = np.zeros((maxlength,100))
    x1[:len(x)] = x
    return x1
def text_vec(text_filenames):
    vec = []
    for a_text in text_filenames:
        all_word = open(a_text).read().split()
        all_vec = [word_vectors[w] for w in all_word if w in word_vectors]
        vec.append(all_vec)
    data = pd.Series(vec)
    data = data.apply(pad, maxlength=maxlength)
    data_ = np.concatenate(data).reshape(len(data),maxlength,100)
    return data_
data_text_emb = text_vec(all_text_filename)

在这里插入图片描述

def read_image(image_filename):
    image =
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值