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)

output_0output_1output_2

DOC

加载DeepMind预先训练的重量

要加载DeepMind的一个预先训练的模型,请将一个带有from_pre trained()Biggan模型实例化为:

model=BigGAN.from_pretrained(PRE_TRAINED_MODEL_NAME_OR_PATH,cache_dir=None)

< < /P>

配置

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
  • 在终端(obj)中显示

    在终端中转换并显示biggan的输出张量。此函数使用libsixel并且仅在libsixel兼容终端中工作。有关详细信息,请参阅https://github.com/saitoha/libsixel

      PARAM:
      • 目标:张量或numpy形状数组(批量大小、通道、高度、宽度)
      • 文件名:要保存的文件名的路径和请求。 图像将另存为文件名{图像号}.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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
mysql java语言非法参数异常?   java绘制控制流图   无法通过java eclipse中的ssh隧道远程连接到mysql数据库   直接在@SuppressWarnings之后出现java Eclipse错误(“未选中”)   java如何使用远程api google应用程序引擎api客户端?   工具栏中的java导航图标颜色未更改?   java返回带有映射子集的实体   java Spring重新加载属性Bean未更新   fileoutputstream正在获取java。木卫一。IOException:流关闭错误,但未显式关闭它   jsp标记显示java。时间使用jstl的LocalDateTime   java如何设置onFailure事件(Spring,Kafka)的超时?   将java元素添加到多个线程中的列表时,会跳过这些元素   JAVAutil。扫描程序Java读取空格后的整数值   java JMonkey过滤器着色器获取片段的世界位置   java从mongodb获取随机值   java如何使用Intent。标记\u活动\u清除\u顶部以清除活动堆栈?   多线程如何控制在多个端口上监听的java服务器应用程序   在具有复合键的相关实体之间插入数据时发生java Hibernate错误