DeepMindのBigganモデルのPytorchの再輸出は、Deepmindからの事前に訓練された重みを再現しました。
このリポジトリには、Andrew Brock、Jeff Donahue、Karen SimonyanによるHigh Fidelity Natural Image Synthesisのための大規模GANトレーニングでリリースされたDeepmind's BigganのOp-op-op Pytorchの再実装が含まれています。
BigganのこのPytorchの実装には、DeepMindによる前提条件の128x128、256x256、および512x512モデルが提供されています。また、Tensorflow Hubモデルからこれらのモデルをダウンロードして変換するために使用されるスクリプトも提供します。
この再実装は、Tensorflowバージョンの生の計算グラフから行われ、Tensorflowバージョン(1E-5のオーダーの出力差の分散)と同様に動作します。
現在、この実装には、識別子の重みがリリースされていないため、ジェネレーターのみが含まれています(差別器の構造はジェネレーターと非常に似ているため、簡単に追加できます。
このレポはPython 3.6およびPytorch 1.0.1でテストされました
Pytorch Tretrained Bigganは、次のようにPIPからインストールできます。
pip install pytorch-pretrained-bigganGanで遊びたい場合は、これで十分です。
コンバージョンスクリプトと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このリポジトリは、関連する出版物で説明されているように、128、256、および512ピクセルの解像度のために、Bigganの前提条件の「ディープ」バージョンへの直接的かつ簡単なアクセスを提供します。モデルの詳細は次のとおりです。
BigGAN-deep-128 :128x128ピクセルの画像を生成する50.4mパラメーターモデル、モデルダンプウェイト201 MB、BigGAN-deep-256 :256x256ピクセルの画像を生成する55.9mパラメーターモデル、モデルダンプウェイト224 MB、BigGAN-deep-512 :512x512ピクセルの画像を生成する56.2Mパラメーターモデル、モデルダンプウェイト225 MB。アーキテクチャの詳細については、論文の付録Bを参照してください。
すべてのモデルは、0〜1の間の51の切り捨て値の事前に計算されたバッチNORM統計で構成されています(詳細については、論文の付録C.1を参照)。
以下は、事前に訓練されたモデルを備えたBigGANを使用したクイックスタートの例です。
これらのクラスと方法の詳細については、以下のドキュメントセクションを参照してください。
import torch
from pytorch_pretrained_biggan import ( 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 follows
import logging
logging . basicConfig ( level = logging . INFO )
# Load pre-trained model tokenizer (vocabulary)
model = BigGAN . from_pretrained ( 'biggan-deep-256' )
# Prepare a input
truncation = 0.4
class_vector = one_hot_from_names ([ 'soap bubble' , 'coffee' , 'mushroom' ], batch_size = 3 )
noise_vector = truncated_noise_sample ( truncation = truncation , batch_size = 3 )
# All in tensors
noise_vector = torch . from_numpy ( noise_vector )
class_vector = torch . from_numpy ( class_vector )
# If you have a GPU, put everything on cuda
noise_vector = noise_vector . to ( 'cuda' )
class_vector = class_vector . to ( 'cuda' )
model . to ( 'cuda' )
# Generate an image
with torch . no_grad ():
output = model ( noise_vector , class_vector , truncation )
# If you have a GPU put back on CPU
output = output . to ( 'cpu' )
# 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 images
save_as_images ( output )


DeepMindの事前に訓練されたモデルの1つをロードするには、 from_pretrained()を使用してBigGANモデルをインスタンス化します。
model = BigGAN . from_pretrained ( PRE_TRAINED_MODEL_NAME_OR_PATH , cache_dir = None )どこ
PRE_TRAINED_MODEL_NAME_OR_PATHは次のとおりです。
リストで選択された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()で保存)。 PRE_TRAINED_MODEL_NAME_OR_PATHがショートカット名である場合、事前に訓練されたウェイトはAWS S3からダウンロードされ(ここのリンクを参照)、将来のダウンロードを避けるためにキャッシュフォルダーに保存されます(キャッシュフォルダーは~/.pytorch_pretrained_biggan/にあります)。
cache_dir 、特定のディレクトリへのオプションのパスになり、事前に訓練されたモデルの重みをダウンロードしてキャッシュできます。
BigGANConfig 、Biggan構成を保存およびロードするクラスです。 config.pyで定義されています。
属性の詳細は次のとおりです。
output_dim :事前に訓練されたモデルのGAN(128、256、または512)の出力解像度、z_dim :ノイズベクトルのサイズ(事前に訓練されたモデルの場合は128)。class_embed_dim :クラスの埋め込みベクトルのサイズ(事前に訓練されたモデルの場合は128)。channel_width :各チャネルのサイズ(事前に訓練されたモデルの場合は128)。num_classes :Imagenetなどのトレーニングデータセットのクラスの数(事前に訓練されたモデルの場合は1000)。layers :レイヤー定義のリスト。レイヤーの各定義は、[レイヤー内のサンプルのアップサンプルのトリプルですか? (bool)、入力チャネルの数(int)、出力チャネルの数(int)]attention_layer_position :レイヤー階層の自己関節層の位置(事前に訓練されたモデルの場合は8)。eps :スペクトルおよびバッチ正規化レイヤーに使用するEpsilon値(事前に訓練されたモデルの1E-4)。n_stats :0〜1の間のさまざまな切り捨て値に関連付けられたバッチ正規化レイヤーの事前計算統計の数(事前に訓練されたモデルの場合は51)。BigGAN 、 model.pyで定義されたBigganのPytorchモデル( torch.nn.Module )です。このモデルは、クラスの埋め込み(線形層)と、一連の畳み込みと条件付きバッチ基準を備えたジェネレーターで構成されています。事前に訓練された重みがリリースされていないため、現在は実装されていません。
入力と出力は、Tensorflowモデルの入力と出力と同一です。
ここで詳しく説明します。
BigGAN入力として取得します:
z :トーチの形状[batch_size、config.z_dim]のfloattensor、切り捨てられた正規分布からサンプリングされたノイズ、およびclass_label :[0、1]で選択されたトークン型インデックスを使用した[batch_size、sequence_length]のオプションのtorch。タイプ0はsentence Aに対応し、タイプ1はsentence Bトークンに対応します(詳細についてはBert Paperを参照)。truncation :0(構成されていない)と1の間のフロート。ノイズベクトルの作成に使用される切り捨てられた垂直の切り捨て。この切り捨て値は、バッチノルム層の事前計算統計(平均値と分散)のセット間を選択するために使用されます。 BigGAN 、モデルに応じて解像度が128、256、または512の形状[batch_size、3、resolution、resolution]の配列を出力します。
モデルを使用するためのいくつかのユーティリティ方法を提供します。それらはutils.pyで定義されています。
これらの方法の詳細を次に示します。
truncated_noise_sample(batch_size=1, dim_z=128, truncation=1., seed=None) :
切り捨てられたノイズベクトルを作成します。
convert_to_images(obj) :
画像のリストにBigganから出力テンソルを変換します。
save_as_images(obj, file_name='output') :
保存された画像のリストに、Bigganから出力テンソルを変換して保存します。
file_name_{image_number}.pngとして保存されますdisplay_in_terminal(obj) :
ターミナルのBigganからの出力テンソルを変換して表示します。この関数はlibsixelを使用し、Libsixel互換端子でのみ機能します。詳細については、https://github.com/saitoha/libsixelを参照してください。
file_name_{image_number}.pngとして保存されますone_hot_from_int(int_or_list, batch_size=1) :
クラスインデックスまたはクラスインデックスのリストから1ホットのベクトルを作成します。
len(int_or_list) == batch_sizeが必要です one_hot_from_names(class_name, batch_size=1) :
Imagenetクラス(「テニスボール」、「デイジー」、...)の名前から1ホットのベクトルを作成します。 NLTKのWordNet検索を使用して、ImagENETの関連するシンプルを見つけて最初のシンセットを取得しようとします。 Direclyを見つけることができない場合は、クラス名のHyponymsとHypernymsを見ます。
Tensorflow HubからTensorflowモデルをダウンロードして変換するスクリプトは、./scriptsで提供されます。
スクリプトは、次のように直接使用できます。
./scripts/download_tf_hub_models.sh
./scripts/convert_tf_hub_models.sh