Text to image synthesis using thought vectors
当前访问频次受限,请登录后继续访问
以下内容由 AI 翻译,如有问题请 点此提交 issue 反馈
使用思维向量实现文本到图像合成
本项目是基于TensorFlow的实验性实现,用于从标题生成图像,使用的是SkipThought向量技术。图像由论文《生成对抗网络文本到图像合成》中提出的GAN-CLS算法合成。该实现基于优秀的TensorFlow中的DCGAN。模型架构如下图所示,蓝色条代表标题的SkipThought向量。

图片来源:《生成对抗网络文本到图像合成》论文
系统需求
- Python 2.7.6
- TensorFlow
- h5py
- Theano:用于SkipThought向量
- scikit-learn:用于SkipThought向量
- NLTK:用于SkipThought向量
数据集
- 执行
python download_datasets.py脚本可以自动下载和解压所需的数据集和模型,这需要数GB的存储空间。 - 目前模型在花卉数据集上训练。请从此链接下载图像并保存至
Data/flowers/jpg目录下。同时从此链接下载标题,解压缩后将text_c10文件夹复制到Data/flowers目录内。 - 按照此处说明下载预训练的SkipThought向量模型和词汇表,并将其保存在
Data/skipthoughts目录下。 - 在
Data目录下创建空文件夹samples、val_samples和Models,这些将用来存放生成的图像样例和训练好的模型。
使用方法
-
数据处理:提取花卉数据集的SkipThought向量:
python data_loader.py --data_set="flowers" -
训练
- 基础用法:
python train.py --data_set="flowers" - 可选项:
z_dim:噪声维度,默认为100。t_dim:文本特征维度,默认为256。batch_size:批次大小,默认为64。image_size:图像尺寸,默认为64。- 其余参数如
gf_dim、df_dim、gfc_dim、caption_vector_length、学习率等也都有默认值。
- 基础用法:
-
从标题生成图像
- 将标题写入文本文件并保存为
Data/sample_captions.txt,然后生成这些标题的思维向量:
python generate_thought_vectors.py --caption_file="Data/sample_captions.txt"- 接着使用以下命令根据思维向量生成图像:
python generate_images.py --model_path=<训练模型路径> --n_images=8参数
n_images指定每个标题生成的图像数量,生成的图像将保存于Data/val_samples目录下。通过python generate_images.py --help获取更多选项。 - 将标题写入文本文件并保存为
示例生成图像
以下是根据生成模型的标题所得到的图像示例。
| 标题 | 生成图像 |
|---|---|
| 花朵具有黄色花药、红色雌蕊及鲜红花瓣 | ![]() |
| 这种花的花瓣为黄、白、紫三色,带有深线条 | ![]() |
| 此花朵的花瓣白色,中心呈黄色 | ![]() |
| 这朵花有许多小而圆的粉红花瓣 | ![]() |
| 这朵橙色花朵的花瓣边缘皱褶、圆形 | ![]() |
| 这朵花的花瓣为黄色,中心为棕色 | ![]() |
实现细节
- 仅使用了SkipThought向量的单向部分,未尝试结合双向向量进行训练。
- 在GPU上进行了大约200个周期的训练,耗时约2-3天。
- 生成的图像尺寸为64x64。
- 训练前处理批次时,以50%的概率对图像进行水平翻转。
- 训练集与验证集的划分比例为0.75。
预训练模型
- 可从这里下载预训练模型,并存放在
Data/Models目录,用于生成图像。
待办事项
- 使用MS-COCO数据集训练模型,生成更通用的图像。
- 探索除了SkipThought向量之外的其他标题嵌入方案,尝试与GAN-CLS模型联合训练标题嵌入RNN。
参考资料
- 《生成对抗网络文本到图像合成》论文
- 《生成对抗网络文本到图像合成》代码
- 《SkipThought向量》论文
- 《SkipThought向量》代码
- TensorFlow中的DCGAN
- TensorLayer中的DCGAN
替代实现
- Scot Reed的Torch版本文本到图像
- Dong Hao的Tensorlayer版本文本到图像
许可证
MIT





