张倩 王淑婷编译

T2F:利用StackGAN和ProGAN从文本生成人脸

在现实生活中,我们通常见过一个人后只会留下非常抽象的印象,也许只能用少量话语描述特定特征。而计算机视觉是不是也能仅使用少量的描述性语句就生成对应的人脸图像?本 GitHub 项目使用了最新发布的 Face2Text 数据集,并通过结合 StackGAN 与 ProGAN 从文本生成人脸图像。

项目地址:https://github.com/akanimax/T2F

本项目利用深度学习由文本生成人脸图像,除了结合 StackGAN 和 ProGAN,作者还参考了从文本到图像的研究,并修改为从文本合成人脸。

StackGAN++由树状结构的多个生成器和鉴别器组成;从树的不同分支生成对应于同一场景的多尺度图像。ProGAN 的关键思想是逐步增加生成器和鉴别器的表征能力:从低分辨率开始,我们添加了新的层,随着训练的进行,这些层的细节越来越精细。

  • 论文:StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks

  • 地址:https://arxiv.org/abs/1710.10916


  • 论文:Progressive Growing of GANs for Improved Quality, Stability, and Variation

  • 地址:https://arxiv.org/abs/1710.10196

数据

Face2Text v1.0 数据集包含来自 LFW(Labelled Faces in the Wild)数据集 400 个随机选择图像的自然语言描述。这些数据已经经过清洗,剔除了不适合、不相关的人像描述。有些文字不仅描述了面部特征,还提供了一些来自图片的隐含信息。例如,其中一张人像的描述这样写道:「图中人物可能为一名罪犯」。由于以上因素及数据集相对较小,我决定使用该数据集来证明架构的概念。最终,我们可以扩展模型,以灌输更大、更多样的数据集。

数据存储地址:data/LFW/Face2Text/face2text_v0.1 

样例:

架构:

视频 Demo:

使用 LSTM 网络将文本描述编码为一个汇总向量。使图中所示的汇总向量,即嵌入(psy_t),通过条件增强块(单一线性层)以获得 GAN 本征向量的文本部分(使用变分自动编码器,如重新参数化技术)作为输入。本征向量的第二部分为随机高斯噪声。由此产生的本征向量被馈送到 GAN 的发生器部分,而嵌入被馈送到鉴别器的最后一层用于条件分布匹配。GAN 的训练进展与 ProGAN 论文所述完全一致;即在增加的空间分辨率上逐层进行。使用淡入技术引入新层以避免破坏先前的学习。

运行代码

代码存在 implementation/子目录中。使用 PyTorch 框架实现。因此,若要运行此代码,请先安装 PyTorch version 0.4.0,然后再继续。

代码组织:

  • configs:包含用于训练网络的配置文件(你可以使用任意一个,也可以自己创建)。

  • data_processing:包含数据处理和加载模块的包

  • networks:包含网络实现的包

  • processed_annotations:目录存储运行 process_text_annotations.py 脚本的输出

  • process_text_annotations.py:处理标题并将输出存储在 processed _ annotations /目录中。(无需运行此脚本;pickle 文件包含在报告中。)

  • train_network.py:运行训练网络的脚本。

示例配置:

# All paths to different required data objects
images_dir: "../data/LFW/lfw"
processed_text_file: "processed_annotations/processed_text.pkl"
log_dir: "training_runs/11/losses/"
sample_dir: "training_runs/11/generated_samples/"
save_dir: "training_runs/11/saved_models/"

# Hyperparameters for the Model
captions_length: 100
img_dims:
 - 64
 - 64

# LSTM hyperparameters
embedding_size: 128
hidden_size: 256
num_layers: 3 # number of LSTM cells in the encoder network

# Conditioning Augmentation hyperparameters
ca_out_size: 178

# Pro GAN hyperparameters
depth: 5
latent_size: 256
learning_rate: 0.001
beta_1: 0
beta_2: 0
eps: 0.00000001
drift: 0.001
n_critic: 1

# Training hyperparameters:
epochs:
 - 160
 - 80
 - 40
 - 20
 - 10

# % of epochs for fading in the new layer
fade_in_percentage:
 - 85
 - 85
 - 85
 - 85
 - 85

batch_sizes:
 - 16
 - 16
 - 16
 - 16
 - 16

num_workers: 3
feedback_factor: 7 # number of logs generated per epoch
checkpoint_factor: 2 # save the models after these many epochs
use_matching_aware_discriminator: True # use the matching aware discriminator

使用 requirements.txt 安装项目的所有依赖项。

$ workon [your virtual environment]
$ pip install -r requirements.txt

样本运行:

$ mkdir training_runs
$ mkdir training_runs/generated_samples training_runs/losses training_runs/saved_models
$ train_network.py --config=configs/11.comf
工程图像生成图像转换
3
相关数据
生成对抗网络技术
Generative Adversarial Networks

生成对抗网络是一种无监督学习方法,是一种通过用对抗网络来训练生成模型的架构。它由两个网络组成:用来拟合数据分布的生成网络G,和用来判断输入是否“真实”的判别网络D。在训练过程中,生成网络-G通过接受一个随机的噪声来尽量模仿训练集中的真实图片去“欺骗”D,而D则尽可能的分辨真实数据和生成网络的输出,从而形成两个网络的博弈过程。理想的情况下,博弈的结果会得到一个可以“以假乱真”的生成模型。

超参数技术
Hyperparameter

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

噪声技术
Noise

噪音是一个随机误差或观测变量的方差。在拟合数据的过程中,我们常见的公式$y=f(x)+\epsilon$中$\epsilon$即为噪音。 数据通常包含噪音,错误,例外或不确定性,或者不完整。 错误和噪音可能会混淆数据挖掘过程,从而导致错误模式的衍生。去除噪音是数据挖掘(data mining)或知识发现(Knowledge Discovery in Database,KDD)的一个重要步骤。

参数技术
parameter

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

深度学习技术
Deep learning

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。 近年来监督式深度学习方法(以反馈算法训练CNN、LSTM等)获得了空前的成功,而基于半监督或非监督式的方法(如DBM、DBN、stacked autoencoder)虽然在深度学习兴起阶段起到了重要的启蒙作用,但仍处在研究阶段并已获得不错的进展。在未来,非监督式学习将是深度学习的重要研究方向,因为人和动物的学习大多是非监督式的,我们通过观察来发现世界的构造,而不是被提前告知所有物体的名字。 至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

张倩
张倩

机器之心编辑

推荐文章
从论文到测试:Facebook Detectron开源项目初探从论文到测试:Facebook Detectron开源项目初探
机器之心机器之心
14
基于注意力机制,机器之心带你理解与训练神经机器翻译系统基于注意力机制,机器之心带你理解与训练神经机器翻译系统
思源思源
1
腾讯Angel 1.0正式版发布:基于Java与Scala的机器学习高性能计算平台腾讯Angel 1.0正式版发布:基于Java与Scala的机器学习高性能计算平台
机器之心机器之心
返回顶部