pytorch版本的deepmind的biggan模型和预先训练的模型
pytorch-pretrained-biggan的Python项目详细描述
Pythorch预处理Biggan
Op Pythorch的一个操作重新实现了DeepMind的Biggan模型,它使用了来自DeepMind的预先训练的重量。
简介
这个存储库包含了一个Op Pythorch的操作,它重新实现了DeepMind的Biggan,这是与论文一起发布的用于高保真自然图像合成的大规模gan训练,作者:andrew brocky、jeff donahuey和karen simonyan。
Biggan的Pythorch实现由DeepMind提供的预训练128x128、256x256和512x512型号。我们还提供用于从Tensorflow集线器模型下载和转换这些模型的脚本。
此重新实现是从TensorFlow版本的原始计算图中完成的,其行为类似于TensorFlow版本(1e5阶的输出差的方差)。
安装
此repo在python 3.6和pytorch 1.0.1上进行了测试
Pythorch预处理Biggan可由PIP安装,如下所示:
pip install pytorch-pretrained-biggan
如果你只想玩gan,这就足够了。
如果要使用转换脚本和imagenet实用程序,则需要额外的要求,特别是tensorflow和nltk。要安装所有要求,请使用full_requirements.txt
文件:
git clone https://github.com/huggingface/pytorch-pretrained-BigGAN.git
cd pytorch-pretrained-BigGAN
pip install -r full_requirements.txt
型号
这个存储库提供了对biggan的预训练"深度"版本的直接和简单的访问,其分辨率分别为128、256和512像素,如相关出版物。 下面是有关这些型号的一些详细信息:
biggan-deep-128
:一个50.4M参数的模型,生成128x128像素的图像,模型转储重量为201 MB,biggan-deep-256
:一个55.9m参数的模型,生成256x256像素的图像,模型转储权重224 MB,biggan-deep-512
:一个56.2m参数的模型,生成512x512像素的图像,模型转储重量为225MB。
有关架构的详细信息,请参阅本文的附录B。
所有模型都包含51个截断值(0到1之间)的预先计算的批处理规范统计(详细信息请参见本文的附录C.1)。
用法
下面是一个快速入门的示例,使用biggan
和预先培训的模型。
有关这些类和方法的详细信息,请参见下面的文档部分。
importtorchfrompytorch_pretrained_bigganimport(BigGAN,one_hot_from_names,truncated_noise_sample,save_as_images,display_in_terminal)# OPTIONAL: if you want to have more information on what's happening, activate the logger as followsimportlogginglogging.basicConfig(level=logging.INFO)# Load pre-trained model tokenizer (vocabulary)model=BigGAN.from_pretrained('biggan-deep-256')# Prepare a inputtruncation=0.4class_vector=one_hot_from_names(['soap bubble','coffee','mushroom'],batch_size=3)noise_vector=truncated_noise_sample(truncation=truncation,batch_size=3)# All in tensorsnoise_vector=torch.from_numpy(noise_vector)class_vector=torch.from_numpy(class_vector)# Generate an imageoutput=model(noise_vector,class_vector,truncation)# If you have a sixtel compatible terminal you can display the images in the terminal# (see https://github.com/saitoha/libsixel for details)display_in_terminal(output)# Save results as png imagessave_as_images(output)
DOC
加载DeepMind预先训练的重量
要加载DeepMind的一个预先训练的模型,请将一个带有from_pre trained()
的Biggan
模型实例化为:
model=BigGAN.from_pretrained(PRE_TRAINED_MODEL_NAME_OR_PATH,cache_dir=None)
< < /P>
预先培训的型号或路径是:
列表中选择的google ai或openai的预先训练模型的快捷方式名称:
biggan-deep-128
:12层,768隐藏,12头,110m参数biggan-deep-256
:24层,1024个隐藏,16个磁头,340m参数biggan-deep-512
:12层,768隐藏,12头,110m参数
指向预训练模型存档的路径或url,其中包含:
config.json
:模型的配置文件,和pytorch_model.bin
biggan的预训练实例的pytorch转储(用通常的torch.save()
保存)。
如果
预先训练的_model_name_或_path
是快捷方式名称,则预先训练的权重将从AWS S3下载(请参见此处的链接)并存储在缓存文件夹中,以避免以后下载(缓存文件夹可在<代码>~/.pytorch_pretrained_biggan/)。缓存目录
可以是指向特定目录的可选路径,用于下载和缓存预先训练的模型权重。
配置
biggonfig
是存储和加载biggan配置的类。它的定义见config.py
以下是有关属性的一些详细信息:
输出尺寸
:预先训练模型的gan(128、256或512)的输出分辨率,z_dim
:噪声矢量的大小(预先训练的模型为128)。类嵌入dim
:类嵌入向量的大小(预训练模型为128)。频道宽度
:每个频道的大小(预训机型为128)。num_classes
:训练数据集中的类数,如imagenet(1000个用于预先训练的模型)。层
:层定义列表。每一层的定义都是一个三倍的[up sample in the layer?(bool)、输入通道数(int)、输出通道数(int)注意层位置
:自我注意层在层层次结构中的位置(对于预先训练的模型为8)。eps
:用于光谱和批量标准化层的epsilon值(对于预先训练的模型,为1e-4)。n_stats
:与介于0和1之间的各种截断值相关联的批处理规范化层的预计算统计数(对于预训练模型为51)。
型号
biggan
是biggan的py torch模型(torch.nn.module
),定义于该模型由类嵌入(线性层)和具有一系列卷积和条件批范数的生成器组成。鉴别器目前尚未实现,因为尚未为其释放经过预训练的权重。
输入和输出与tensorflow模型的输入和输出相同。
我们在此详述。
biggan
接受输入:
z
:具有截短正态分布采样噪声的形状为[batch_size,config.z_dim]的torch.floattensor,以及类标签
:可选的torch.longtensor形状[批量大小,序列长度],标记类型索引在[0,1]中选定。类型0对应于a句子a
而类型1对应于a句子b
标记(有关更多详细信息,请参阅bert论文)。截断
:介于0(不包含)和1之间的浮点。用于创建噪声向量的截断法向量的截断。此截断值用于在批处理规范层的一组预先计算的统计数据(均值和方差)之间进行选择。
biggan
输出形状数组[批量大小,3,分辨率,分辨率],其中分辨率为128、256或512,具体取决于型号:
实用程序:图像、噪波、ImageNet类
我们提供了一些实用的方法来使用该模型。它们的定义见utils.py
下面是这些方法的一些详细信息:
截断噪声样本(批量大小=1,尺寸Z=128,截断=1,种子=无)
:创建截断的噪声矢量。
-
PARAM:
- 批量大小:批量大小。
- dim_z:z的尺寸
- 截断:要使用的截断值
- 种子:随机生成器的种子
输出:
形状数组(批量大小,尺寸Z)
将图像转换为图像(obj)
:
转换图像列表中biggan的输出张量。
-
PARAM:
- 目标:张量或numpy形状数组(批量大小、通道、高度、宽度)
- 枕头图片列表(高度、宽度)
另存为图像(obj,文件名='output')
:
将biggan的输出张量转换并保存到保存的图像列表中。
-
PARAM:
- 目标:张量或numpy形状数组(批量大小、通道、高度、宽度)
- 文件名:要保存的文件名的路径和请求。
图像将另存为
文件名{图像号}.png
在终端中转换并显示biggan的输出张量。此函数使用在终端(obj)中显示
libsixel
并且仅在libsixel兼容终端中工作。有关详细信息,请参阅https://github.com/saitoha/libsixel。
PARAM:
文件名{图像号}.png
ONE U HOT U FROM U INT(int_或_list,batch_size=1)
:
从类索引或类索引列表中创建一个热向量。
-
PARAM:
- int_或_list:imagenet类的int或int列表(介于0和999之间)
- 批大小:批大小。
- 如果int或u list是int,则创建一批相同的类。
- 如果int_或_list是一个列表,我们应该有
len(int_或_list)==batch_size
- 形状数组(批量,1000)
一个来自名称的热名称(类名称,批大小=1)
:
从imagenet类的名称("网球"、"雏菊"和…)创建一个热向量。我们使用nltk的wordnet搜索来尝试找到imagenet的相关synset并获取第一个synset。如果我们找不到它,我们可以查看类名的下义和上义。
-
PARAM:
- 类名称:包含ImageNet对象名称的字符串。
- 形状数组(批量,1000)
下载和转换脚本
从TensorFlow集线器下载和转换TensorFlow模型的脚本在中提供。/脚本
脚本可以直接用作:
./scripts/download_tf_hub_models.sh ./scripts/convert_tf_hub_models.sh